[Bf-blender-cvs] [701ebb0a64c] blender2.8: Draw manager: Pass explicit context to DEG scene update callback

Sergey Sharybin noreply at git.blender.org
Tue Nov 28 16:49:41 CET 2017


Commit: 701ebb0a64c67ab6190b8c02040e8de25e47ed8c
Author: Sergey Sharybin
Date:   Tue Nov 28 16:42:58 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB701ebb0a64c67ab6190b8c02040e8de25e47ed8c

Draw manager: Pass explicit context to DEG scene update callback

This way it is more clear what is needed to be passed and what is available
in the callback itself.

Thanks Dalai for review and tips about engine type!

===================================================================

M	source/blender/draw/DRW_engine.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/editors/render/render_update.c

===================================================================

diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index ec0c7a6682e..f3e1bf5ceac 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -30,6 +30,7 @@ struct ARegion;
 struct CollectionEngineSettings;
 struct Depsgraph;
 struct DRWPass;
+struct Main;
 struct Material;
 struct Scene;
 struct DrawEngineType;
@@ -68,7 +69,15 @@ void DRW_engine_viewport_data_size_get(
         const void *engine_type,
         int *r_fbl_len, int *r_txl_len, int *r_psl_len, int *r_stl_len);
 
-void DRW_notify_view_update(const struct bContext *C);
+typedef struct DRWUpdateContext {
+	struct Main *bmain;
+	struct Scene *scene;
+	struct ViewLayer *view_layer;
+	struct ARegion *ar;
+	struct View3D *v3d;
+	struct RenderEngineType *engine_type;
+} DRWUpdateContext;
+void DRW_notify_view_update(const DRWUpdateContext *update_ctx);
 
 void DRW_draw_view(const struct bContext *C);
 
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 42782e685d5..5eb88123208 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -3219,15 +3219,14 @@ static void DRW_debug_gpu_stats(void)
 /** \name View Update
  * \{ */
 
-void DRW_notify_view_update(const bContext *C)
+void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
 {
-	struct Depsgraph *graph = CTX_data_depsgraph(C);
-	ARegion *ar = CTX_wm_region(C);
-	View3D *v3d = CTX_wm_view3d(C);
+	RenderEngineType *engine_type = update_ctx->engine_type;
+	ARegion *ar = update_ctx->ar;
+	View3D *v3d = update_ctx->v3d;
 	RegionView3D *rv3d = ar->regiondata;
-	Scene *scene = DEG_get_evaluated_scene(graph);
-	RenderEngineType *engine_type = CTX_data_engine_type(C);
-	ViewLayer *view_layer = CTX_data_view_layer(C);
+	Scene *scene = update_ctx->scene;
+	ViewLayer *view_layer = update_ctx->view_layer;
 
 	if (rv3d->viewport == NULL) {
 		return;
@@ -3239,7 +3238,7 @@ void DRW_notify_view_update(const bContext *C)
 
 	DST.viewport = rv3d->viewport;
 	DST.draw_ctx = (DRWContextState){
-		ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, C,
+		ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, NULL,
 	};
 
 	DRW_engines_enable(scene, view_layer, engine_type);
diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c
index 311e1dbe589..bd2acb1c8bd 100644
--- a/source/blender/editors/render/render_update.c
+++ b/source/blender/editors/render/render_update.c
@@ -86,6 +86,7 @@ void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, int update
 	 * updates if there was any change. context is set to the 3d view */
 	Main *bmain = update_ctx->bmain;
 	Scene *scene = update_ctx->scene;
+	ViewLayer *view_layer = update_ctx->view_layer;
 	bContext *C;
 	wmWindowManager *wm;
 	wmWindow *win;
@@ -127,15 +128,11 @@ void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, int update
 				continue;
 
 			for (ar = sa->regionbase.first; ar; ar = ar->next) {
-				RegionView3D *rv3d;
-				RenderEngine *engine;
-
-				if (ar->regiontype != RGN_TYPE_WINDOW)
+				if (ar->regiontype != RGN_TYPE_WINDOW) {
 					continue;
-
-				rv3d = ar->regiondata;
-				engine = rv3d->render_engine;
-
+				}
+				RegionView3D *rv3d = ar->regiondata;
+				RenderEngine *engine = rv3d->render_engine;
 				/* call update if the scene changed, or if the render engine
 				 * tagged itself for update (e.g. because it was busy at the
 				 * time of the last update) */
@@ -149,13 +146,20 @@ void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, int update
 					engine->type->view_update(engine, C);
 
 				}
-				else if ((RE_engines_find(view_render->engine_id)->flag & RE_USE_LEGACY_PIPELINE) == 0) {
-					if (updated) {
-						CTX_wm_screen_set(C, sc);
-						CTX_wm_area_set(C, sa);
-						CTX_wm_region_set(C, ar);
-
-						DRW_notify_view_update(C);
+				else {
+					RenderEngineType *engine_type = RE_engines_find(view_render->engine_id);
+					if ((engine_type->flag & RE_USE_LEGACY_PIPELINE) == 0) {
+						if (updated) {
+							DRW_notify_view_update(
+							        (&(DRWUpdateContext){
+							            .bmain = bmain,
+							            .scene = scene,
+							            .view_layer = view_layer,
+							            .ar = ar,
+							            .v3d = (View3D *)sa->spacedata.first,
+							            .engine_type = engine_type
+							        }));
+						}
 					}
 				}
 			}



More information about the Bf-blender-cvs mailing list