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 <jeroen@blender.org>2021-01-05 15:43:32 +0300
committerJeroen Bakker <jeroen@blender.org>2021-01-05 15:53:33 +0300
commit7cd6f667e33e60f3d53e465023bb75f90f499b07 (patch)
treef799d32f50aa4c84e0c446f7d95edf3f6e83b1ae /source/blender/draw/engines/overlay/overlay_shader.c
parentf41de6dc46ad0849d93b72580fefffdde4546cba (diff)
Fix T84053: Mask overlay in image editor not working
The mask overlay wasn't part of the overlay engine. The reasoning nehind this was that more editors used the mask overlay and most of them used old drawing code. This patch adds the mask overlay drawing to the draw overlay engine. This code path will only be used by the image editor VSE, Compositor and Movie Clip editor will still use the previous method. During this patch some alternatives have been researched: 1. `ED_mask_draw_region`: this would lead to different code paths when drawing in the image editor, and some hacks to retrieve the correct framebuffer. 2. Add mask drawing to image engine: Would lead to incorrect color management when viewing the mask. 3. Add mask drawing to image engine and overlay engine: Would lead to duplicated code. 4. Add mask drawing to overlay engine and for combined overlay select the correct framebuffer. Option 4 was chosen as the exception (switching framebuffers) can be done without hacks. The code stays clean.
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_shader.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_shader.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index f3840679d80..88f4e28c039 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -78,7 +78,7 @@ extern char datatoc_edit_uv_edges_frag_glsl[];
extern char datatoc_edit_uv_faces_vert_glsl[];
extern char datatoc_edit_uv_face_dots_vert_glsl[];
extern char datatoc_edit_uv_stretching_vert_glsl[];
-extern char datatoc_edit_uv_stencil_image_vert_glsl[];
+extern char datatoc_edit_uv_image_vert_glsl[];
extern char datatoc_edit_uv_tiled_image_borders_vert_glsl[];
extern char datatoc_extra_frag_glsl[];
extern char datatoc_extra_vert_glsl[];
@@ -94,6 +94,7 @@ extern char datatoc_facing_vert_glsl[];
extern char datatoc_grid_frag_glsl[];
extern char datatoc_grid_vert_glsl[];
extern char datatoc_image_frag_glsl[];
+extern char datatoc_edit_uv_image_mask_frag_glsl[];
extern char datatoc_image_vert_glsl[];
extern char datatoc_motion_path_line_vert_glsl[];
extern char datatoc_motion_path_line_geom_glsl[];
@@ -185,6 +186,7 @@ typedef struct OVERLAY_Shaders {
GPUShader *edit_uv_stretching_area;
GPUShader *edit_uv_tiled_image_borders;
GPUShader *edit_uv_stencil_image;
+ GPUShader *edit_uv_mask_image;
GPUShader *extra;
GPUShader *extra_select;
GPUShader *extra_groundline;
@@ -1070,11 +1072,25 @@ GPUShader *OVERLAY_shader_edit_uv_stencil_image(void)
OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
if (!sh_data->edit_uv_stencil_image) {
sh_data->edit_uv_stencil_image = DRW_shader_create_with_shaderlib(
- datatoc_edit_uv_stencil_image_vert_glsl, NULL, datatoc_image_frag_glsl, e_data.lib, NULL);
+ datatoc_edit_uv_image_vert_glsl, NULL, datatoc_image_frag_glsl, e_data.lib, NULL);
}
return sh_data->edit_uv_stencil_image;
}
+GPUShader *OVERLAY_shader_edit_uv_mask_image(void)
+{
+ OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+ if (!sh_data->edit_uv_mask_image) {
+ sh_data->edit_uv_mask_image = DRW_shader_create_with_shaderlib(
+ datatoc_edit_uv_image_vert_glsl,
+ NULL,
+ datatoc_edit_uv_image_mask_frag_glsl,
+ e_data.lib,
+ NULL);
+ }
+ return sh_data->edit_uv_mask_image;
+}
+
GPUShader *OVERLAY_shader_image(void)
{
const DRWContextState *draw_ctx = DRW_context_state_get();