[Bf-blender-cvs] [97cc130f472] blender-v2.92-release: Fix T85395: Texture paint external edit wrong projection on reapply

Philipp Oeser noreply at git.blender.org
Wed Feb 10 13:28:50 CET 2021


Commit: 97cc130f472fa2e5e12ae07312abae2de7d409aa
Author: Philipp Oeser
Date:   Wed Feb 10 12:46:43 2021 +0100
Branches: blender-v2.92-release
https://developer.blender.org/rB97cc130f472fa2e5e12ae07312abae2de7d409aa

Fix T85395: Texture paint external edit wrong projection on reapply

Caused by rB5b34d11b55e0.

Above commit restored the view matrices in ED_view3d_draw_offscreen
_before_ they can be stored in the ImBuff (see ED_view3d_draw_offscreen
/ texture_paint_image_from_view_exec).

Now make restoring the view matrices optional and dont do this in case
of reprojection, so the used matrices can still be saved in the ImBuff
later.

Reviewed By: campbellbarton

Maniphest Tasks: T85395

Differential Revision: https://developer.blender.org/D10331

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

M	source/blender/editors/include/ED_view3d_offscreen.h
M	source/blender/editors/render/render_opengl.c
M	source/blender/editors/sculpt_paint/paint_image_proj.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/python/gpu/gpu_py_offscreen.c
M	source/blender/windowmanager/intern/wm_files.c

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

diff --git a/source/blender/editors/include/ED_view3d_offscreen.h b/source/blender/editors/include/ED_view3d_offscreen.h
index e854982c796..c490e96031f 100644
--- a/source/blender/editors/include/ED_view3d_offscreen.h
+++ b/source/blender/editors/include/ED_view3d_offscreen.h
@@ -54,6 +54,7 @@ void ED_view3d_draw_offscreen(struct Depsgraph *depsgraph,
                               bool draw_background,
                               const char *viewname,
                               const bool do_color_management,
+                              const bool restore_rv3d_mats,
                               struct GPUOffScreen *ofs,
                               struct GPUViewport *viewport);
 void ED_view3d_draw_offscreen_simple(struct Depsgraph *depsgraph,
@@ -84,6 +85,7 @@ struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Depsgraph *depsgraph,
                                              eImBufFlags imbuf_flag,
                                              int alpha_mode,
                                              const char *viewname,
+                                             const bool restore_rv3d_mats,
                                              struct GPUOffScreen *ofs,
                                              char err_out[256]);
 struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(struct Depsgraph *depsgraph,
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 1069f942a7a..4cb6994bc4b 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -381,6 +381,7 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R
                                                  imbuf_flags,
                                                  alpha_mode,
                                                  viewname,
+                                                 true,
                                                  oglrender->ofs,
                                                  err_out);
 
diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c
index 6e6386b24aa..5c15fd05116 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@ -6250,6 +6250,7 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
                                         IB_rect,
                                         R_ALPHAPREMUL,
                                         NULL,
+                                        false,
                                         NULL,
                                         err_out);
 
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 8ae0e3b94fe..9982d44b6be 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1667,6 +1667,7 @@ void ED_view3d_draw_offscreen(Depsgraph *depsgraph,
                               bool draw_background,
                               const char *viewname,
                               const bool do_color_management,
+                              const bool restore_rv3d_mats,
                               GPUOffScreen *ofs,
                               GPUViewport *viewport)
 {
@@ -1755,7 +1756,11 @@ void ED_view3d_draw_offscreen(Depsgraph *depsgraph,
   region->winy = orig.region_winy;
   region->winrct = orig.region_winrct;
 
-  ED_view3d_mats_rv3d_restore(region->regiondata, orig.rv3d_mats);
+  /* Optionally do _not_ restore rv3d matrices (e.g. they are used/stored in the ImBuff for
+   * reprojection, see texture_paint_image_from_view_exec(). */
+  if (restore_rv3d_mats) {
+    ED_view3d_mats_rv3d_restore(region->regiondata, orig.rv3d_mats);
+  }
   MEM_freeN(orig.rv3d_mats);
 
   UI_Theme_Restore(&orig.theme_state);
@@ -1847,6 +1852,7 @@ void ED_view3d_draw_offscreen_simple(Depsgraph *depsgraph,
                            draw_background,
                            viewname,
                            do_color_management,
+                           true,
                            ofs,
                            viewport);
 }
@@ -1867,6 +1873,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Depsgraph *depsgraph,
                                       eImBufFlags imbuf_flag,
                                       int alpha_mode,
                                       const char *viewname,
+                                      const bool restore_rv3d_mats,
                                       /* output vars */
                                       GPUOffScreen *ofs,
                                       char err_out[256])
@@ -1974,6 +1981,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Depsgraph *depsgraph,
                            draw_sky,
                            viewname,
                            do_color_management,
+                           restore_rv3d_mats,
                            ofs,
                            NULL);
 
@@ -2099,6 +2107,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Depsgraph *depsgraph,
                                         imbuf_flag,
                                         alpha_mode,
                                         viewname,
+                                        true,
                                         ofs,
                                         err_out);
 }
diff --git a/source/blender/python/gpu/gpu_py_offscreen.c b/source/blender/python/gpu/gpu_py_offscreen.c
index 51038aae598..8d2df826722 100644
--- a/source/blender/python/gpu/gpu_py_offscreen.c
+++ b/source/blender/python/gpu/gpu_py_offscreen.c
@@ -268,6 +268,7 @@ static PyObject *py_offscreen_draw_view3d(BPyGPUOffScreen *self, PyObject *args,
                            true,
                            "",
                            false,
+                           true,
                            self->ofs,
                            NULL);
 
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 7680a786634..42d17387d77 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -1363,6 +1363,7 @@ static ImBuf *blend_file_thumb(const bContext *C,
                                           IB_rect,
                                           R_ALPHAPREMUL,
                                           NULL,
+                                          true,
                                           NULL,
                                           err_out);
   }



More information about the Bf-blender-cvs mailing list