diff options
author | Habib Gahbiche <zazizizou> | 2022-03-17 01:27:52 +0300 |
---|---|---|
committer | Habib Gahbiche <habibgahbiche@gmail.com> | 2022-03-17 01:28:36 +0300 |
commit | 33409f9f1cd42e899f2706fe7878e5e89b50d617 (patch) | |
tree | 1b33eac06e04867add023aa5e88c8cf577e5dc01 /source/blender/draw/engines/image/image_space_image.hh | |
parent | 22de21bef1a31718d45e89aedc574055a5983b7d (diff) |
Compositor: Support backdrop offset for the Viewer node
This is only part of the experimental "Full Frame" mode (disabled
by default). See T88150.
Currently the viewer node uses buffer paddings to display image offset
in the backdrop as a temporal solution implemented for {D12466}.
This solution is inefficient memory and performance-wise. Another
issue is that the paddings are part the image when saved.
This patch instead sets the offset in the Viewer node image
as variables and makes the backdrop take it into account
when drawing the image or any related gizmo.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D12750
Diffstat (limited to 'source/blender/draw/engines/image/image_space_image.hh')
-rw-r--r-- | source/blender/draw/engines/image/image_space_image.hh | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/source/blender/draw/engines/image/image_space_image.hh b/source/blender/draw/engines/image/image_space_image.hh index 40aa117514c..7c15d780d07 100644 --- a/source/blender/draw/engines/image/image_space_image.hh +++ b/source/blender/draw/engines/image/image_space_image.hh @@ -148,20 +148,29 @@ class SpaceImageAccessor : public AbstractSpaceAccessor { } void init_ss_to_texture_matrix(const ARegion *region, - const float UNUSED(image_resolution[2]), + const float image_display_offset[2], + const float image_resolution[2], float r_uv_to_texture[4][4]) const override { - unit_m4(r_uv_to_texture); - float scale_x = 1.0 / BLI_rctf_size_x(®ion->v2d.cur); - float scale_y = 1.0 / BLI_rctf_size_y(®ion->v2d.cur); - float translate_x = scale_x * -region->v2d.cur.xmin; - float translate_y = scale_y * -region->v2d.cur.ymin; - - r_uv_to_texture[0][0] = scale_x; - r_uv_to_texture[1][1] = scale_y; - r_uv_to_texture[3][0] = translate_x; - r_uv_to_texture[3][1] = translate_y; - } + float zoom_x = image_resolution[0] * sima->zoom; + float zoom_y = image_resolution[1] * sima ->zoom; + float image_offset_x = (region->winx - zoom_x) / 2 + sima->xof + image_display_offset[0]; + float image_offset_y = (region->winy - zoom_y) / 2 + sima->yof + image_display_offset[1]; + + unit_m4(r_uv_to_texture); + float scale_x = 1.0 / BLI_rctf_size_x(®ion->v2d.cur); + float scale_y = 1.0 / BLI_rctf_size_y(®ion->v2d.cur); + float offset_x = 1.0 / image_resolution[0] * image_offset_x; + float offset_y = 1.0 / image_resolution[1] * image_offset_y; + + float translate_x = scale_x * (-region->v2d.cur.xmin + offset_x); + float translate_y = scale_y * (-region->v2d.cur.ymin + offset_y); + + r_uv_to_texture[0][0] = scale_x; + r_uv_to_texture[1][1] = scale_y; + r_uv_to_texture[3][0] = translate_x; + r_uv_to_texture[3][1] = translate_y; + } }; } // namespace blender::draw::image_engine |