Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/draw/DRW_engine.h4
-rw-r--r--source/blender/draw/intern/draw_manager.c45
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);