diff options
-rw-r--r-- | source/blender/draw/DRW_engine.h | 4 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 45 |
2 files changed, 38 insertions, 11 deletions
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h index 0aca41a970d..b780e86b9ec 100644 --- a/source/blender/draw/DRW_engine.h +++ b/source/blender/draw/DRW_engine.h @@ -65,6 +65,10 @@ void DRW_engine_viewport_data_size_get( void DRW_draw_view(const struct bContext *C); +void DRW_draw_render_loop_ex( + struct Depsgraph *graph, + struct ARegion *ar, struct View3D *v3d, + const struct bContext *evil_C); void DRW_draw_render_loop( struct Depsgraph *graph, struct ARegion *ar, struct View3D *v3d); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 9d3110d9091..de89f22649f 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2825,22 +2825,26 @@ void DRW_draw_view(const bContext *C) ARegion *ar = CTX_wm_region(C); View3D *v3d = CTX_wm_view3d(C); - DST.draw_ctx.evil_C = C; - - DRW_draw_render_loop(graph, ar, v3d); + DRW_draw_render_loop_ex(graph, ar, v3d, C); } /** * Used for both regular and off-screen drawing. */ -void DRW_draw_render_loop( +void DRW_draw_render_loop_ex( struct Depsgraph *graph, - ARegion *ar, View3D *v3d) + ARegion *ar, View3D *v3d, + const bContext *evil_C) { Scene *scene = DEG_get_scene(graph); SceneLayer *sl = DEG_get_scene_layer(graph); RegionView3D *rv3d = ar->regiondata; + /* Reset before using it. */ + memset(&DST, 0x0, sizeof(DST)); + + DST.draw_ctx.evil_C = evil_C; + bool cache_is_dirty; DST.viewport = rv3d->viewport; v3d->zbuf = true; @@ -2919,8 +2923,17 @@ void DRW_draw_render_loop( DRW_state_reset(); DRW_engines_disable(); - /* avoid accidental reuse */ - memset(&DST, 0x0, sizeof(DST)); +#ifdef DEBUG + /* Avoid accidental reuse. */ + memset(&DST, 0xFF, sizeof(DST)); +#endif +} + +void DRW_draw_render_loop( + struct Depsgraph *graph, + ARegion *ar, View3D *v3d) +{ + DRW_draw_render_loop_ex(graph, ar, v3d, NULL); } void DRW_draw_render_loop_offscreen( @@ -2969,6 +2982,9 @@ void DRW_draw_select_loop( #else RegionView3D *rv3d = ar->regiondata; + /* Reset before using it. */ + memset(&DST, 0x0, sizeof(DST)); + /* backup (_never_ use rv3d->viewport) */ void *backup_viewport = rv3d->viewport; rv3d->viewport = NULL; @@ -3056,8 +3072,10 @@ void DRW_draw_select_loop( DRW_state_reset(); DRW_engines_disable(); - /* avoid accidental reuse */ - memset(&DST, 0x0, sizeof(DST)); +#ifdef DEBUG + /* Avoid accidental reuse. */ + memset(&DST, 0xFF, sizeof(DST)); +#endif /* Cleanup for selection state */ GPU_viewport_free(viewport); @@ -3083,6 +3101,9 @@ void DRW_draw_depth_loop( void *backup_viewport = rv3d->viewport; rv3d->viewport = NULL; + /* Reset before using it. */ + memset(&DST, 0x0, sizeof(DST)); + struct GPUViewport *viewport = GPU_viewport_create(); GPU_viewport_size_set(viewport, (const int[2]){ar->winx, ar->winy}); @@ -3139,8 +3160,10 @@ void DRW_draw_depth_loop( DRW_state_reset(); DRW_engines_disable(); - /* avoid accidental reuse */ - memset(&DST, 0x0, sizeof(DST)); +#ifdef DEBUG + /* Avoid accidental reuse. */ + memset(&DST, 0xFF, sizeof(DST)); +#endif /* Cleanup for selection state */ GPU_viewport_free(viewport); |