diff options
-rw-r--r-- | source/blender/draw/DRW_engine.h | 11 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 15 | ||||
-rw-r--r-- | source/blender/editors/render/render_update.c | 34 |
3 files changed, 36 insertions, 24 deletions
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 + })); + } } } } |