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:
authorJeroen Bakker <j.bakker@atmind.nl>2019-06-26 16:11:16 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2019-06-26 16:13:56 +0300
commit11dc736033244ae9eeaa94daea3c8d5598d07e76 (patch)
treed9cf63186a4a67b232d89464fc78456f31f7f9c0
parent6d22633a96a4ef18051ba6a937ed9c1d1e5d967c (diff)
DrawManager: Sanatize default_view reset
Grease Pencil already reset the default view so the draw_manager wouldn't assert. During multi view rendering the same assert still happened. This patch will reset the default view when starting to render a new view. Reviewers: fclem Differential Revision: https://developer.blender.org/D5137
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.h1
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_render.c15
-rw-r--r--source/blender/draw/intern/draw_manager.c9
3 files changed, 12 insertions, 13 deletions
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 957acb8c780..98eaee343bb 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -186,7 +186,6 @@ typedef struct GPENCIL_Storage {
float mix_stroke_factor;
/* Render Matrices and data */
- DRWView *view;
float view_vecs[2][4]; /* vec4[2] */
int shade_render[2];
diff --git a/source/blender/draw/engines/gpencil/gpencil_render.c b/source/blender/draw/engines/gpencil/gpencil_render.c
index 301c29af335..d189ccd322d 100644
--- a/source/blender/draw/engines/gpencil/gpencil_render.c
+++ b/source/blender/draw/engines/gpencil/gpencil_render.c
@@ -103,17 +103,18 @@ void GPENCIL_render_init(GPENCIL_Data *ved, RenderEngine *engine, struct Depsgra
invert_m4_m4(viewmat, viewinv);
- DRWView *view = DRW_view_create(viewmat, winmat, NULL, NULL, NULL);
- DRW_view_default_set(view);
- DRW_view_set_active(view);
+ /* Reuse the view created by EEVEE or Workbench */
+ if (DRW_view_default_get() == NULL) {
+ DRWView *view = DRW_view_create(viewmat, winmat, NULL, NULL, NULL);
+ DRW_view_default_set(view);
+ DRW_view_set_active(view);
+ }
- DRW_view_persmat_get(view, persmat, false);
+ DRW_view_persmat_get(NULL, persmat, false);
/* calculate pixel size for render */
stl->storage->render_pixsize = get_render_pixelsize(persmat, viewport_size[0], viewport_size[1]);
- stl->storage->view = view;
-
/* INIT CACHE */
GPENCIL_cache_init(vedata);
}
@@ -212,7 +213,7 @@ static void GPENCIL_render_result_z(struct RenderLayer *rl,
GPENCIL_render_update_vecs(vedata);
float winmat[4][4];
- DRW_view_winmat_get(stl->storage->view, winmat, false);
+ DRW_view_winmat_get(NULL, winmat, false);
/* Convert ogl depth [0..1] to view Z [near..far] */
for (int i = 0; i < BLI_rcti_size_x(rect) * BLI_rcti_size_y(rect); i++) {
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 7606fa914d1..c4e3bd5cf91 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1998,15 +1998,14 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
for (RenderView *render_view = render_result->views.first; render_view != NULL;
render_view = render_view->next) {
RE_SetActiveRenderView(render, render_view->name);
+ /* Reset the view. */
+ DST.view_default = NULL;
+ DST.view_active = NULL;
+ DST.view_previous = NULL;
engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect);
/* grease pencil: render result is merged in the previous render result. */
if (DRW_render_check_grease_pencil(depsgraph)) {
DRW_state_reset();
- /* HACK: this is just for sanity and not trigger asserts. */
- DST.view_default = NULL;
- DST.view_active = NULL;
- DST.view_previous = NULL;
-
DRW_render_gpencil_to_image(engine, render_layer, &render_rect);
}
DST.buffer_finish_called = false;