diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2021-02-10 14:46:43 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2021-02-10 15:25:31 +0300 |
commit | 97cc130f472fa2e5e12ae07312abae2de7d409aa (patch) | |
tree | db0380027e6daff7f300ce36facc88e3793c6ac3 /source/blender | |
parent | d76890bfb0bba78d7ad617c5ad8fb284cd9814d4 (diff) |
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
Diffstat (limited to 'source/blender')
6 files changed, 16 insertions, 1 deletions
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); } |