[Bf-blender-cvs] [11dc7360332] master: DrawManager: Sanatize default_view reset

Jeroen Bakker noreply at git.blender.org
Wed Jun 26 15:14:36 CEST 2019


Commit: 11dc736033244ae9eeaa94daea3c8d5598d07e76
Author: Jeroen Bakker
Date:   Wed Jun 26 15:11:16 2019 +0200
Branches: master
https://developer.blender.org/rB11dc736033244ae9eeaa94daea3c8d5598d07e76

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

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

M	source/blender/draw/engines/gpencil/gpencil_engine.h
M	source/blender/draw/engines/gpencil/gpencil_render.c
M	source/blender/draw/intern/draw_manager.c

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

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;



More information about the Bf-blender-cvs mailing list