[Bf-blender-cvs] [6737def8840] uvimage-editor-drawing: Render background when image isn't available

Jeroen Bakker noreply at git.blender.org
Tue Sep 1 10:37:06 CEST 2020


Commit: 6737def8840e32702f9e791283bd442488bd251a
Author: Jeroen Bakker
Date:   Tue Sep 1 09:58:10 2020 +0200
Branches: uvimage-editor-drawing
https://developer.blender.org/rB6737def8840e32702f9e791283bd442488bd251a

Render background when image isn't available

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

M	release/datafiles/userdef/userdef_default_theme.c
M	source/blender/draw/engines/overlay/overlay_grid.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/engines/overlay/overlay_shader.c
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/tests/shaders_test.cc

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

diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c
index 28ef1298abb..cd6be1903ec 100644
--- a/release/datafiles/userdef/userdef_default_theme.c
+++ b/release/datafiles/userdef/userdef_default_theme.c
@@ -714,7 +714,7 @@ const bTheme U_theme_default = {
     .paint_curve_pivot = RGBA(0xff7f7f7f),
     .paint_curve_handle = RGBA(0x7fff7f7f),
     .metadatatext = RGBA(0xffffffff),
-    .grid = RGBA(0x060606ff),
+    .grid = RGBA(0x505050ff),
   },
   .space_text = {
     .back = RGBA(0x30303000),
diff --git a/source/blender/draw/engines/overlay/overlay_grid.c b/source/blender/draw/engines/overlay/overlay_grid.c
index b078d8fe240..7445dfc2e3d 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.c
+++ b/source/blender/draw/engines/overlay/overlay_grid.c
@@ -26,6 +26,7 @@
 
 #include "DEG_depsgraph_query.h"
 
+#include "ED_image.h"
 #include "ED_view3d.h"
 
 #include "overlay_private.h"
@@ -57,13 +58,12 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata)
   shd->grid_line_size = max_ff(0.0f, U.pixelsize - 1.0f) * 0.5f;
 
   if (pd->is_image_editor) {
-    const SpaceImage *sima = (SpaceImage *)draw_ctx->space_data;
-    const Image *image = sima->image;
-    shd->grid_flag = (image == NULL) ? PLANE_IMAGE | SHOW_GRID : 0;
+    SpaceImage *sima = (SpaceImage *)draw_ctx->space_data;
+    shd->grid_flag = ED_space_image_has_buffer(sima) ? 0 : PLANE_IMAGE | SHOW_GRID;
     shd->grid_distance = 1.0f;
     shd->grid_mesh_size = 1.0f;
     for (int step = 0; step < 8; step++) {
-      shd->grid_steps[step] = powf(10, step) * 0.01;
+      shd->grid_steps[step] = powf(4, step) * (1.0f / 16.0f);
     }
     return;
   }
@@ -198,12 +198,29 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
 
   DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA;
   DRW_PASS_CREATE(psl->grid_ps, state);
-
-  GPUShader *sh = OVERLAY_shader_grid();
+  DRWShadingGroup *grp;
+  GPUShader *sh;
   struct GPUBatch *geom = DRW_cache_grid_get();
 
+  if (pd->is_image_editor) {
+    /* add quad background */
+    sh = OVERLAY_shader_grid_image();
+    grp = DRW_shgroup_create(sh, psl->grid_ps);
+    DRW_shgroup_call(grp, DRW_cache_quad_get(), NULL);
+    float color_back[4];
+    interp_v4_v4v4(color_back, G_draw.block.colorBackground, G_draw.block.colorGrid, 0.5);
+    DRW_shgroup_uniform_vec4_copy(grp, "color", color_back);
+
+    /* add wire border */
+    grp = DRW_shgroup_create(sh, psl->grid_ps);
+    DRW_shgroup_call(grp, DRW_cache_quad_wires_get(), NULL);
+    DRW_shgroup_uniform_vec4_copy(grp, "color", G_draw.block.colorGrid);
+  }
+
+  sh = OVERLAY_shader_grid();
+
   /* Create 3 quads to render ordered transparency Z axis */
-  DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->grid_ps);
+  grp = DRW_shgroup_create(sh, psl->grid_ps);
   DRW_shgroup_uniform_int(grp, "gridFlag", &shd->zneg_flag, 1);
   DRW_shgroup_uniform_vec3(grp, "planeAxes", shd->zplane_axes, 1);
   DRW_shgroup_uniform_float(grp, "gridDistance", &shd->grid_distance, 1);
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 19d8e347c7a..c8b29c6bbbb 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -666,6 +666,7 @@ GPUShader *OVERLAY_shader_extra_point(void);
 GPUShader *OVERLAY_shader_facing(void);
 GPUShader *OVERLAY_shader_gpencil_canvas(void);
 GPUShader *OVERLAY_shader_grid(void);
+GPUShader *OVERLAY_shader_grid_image(void);
 GPUShader *OVERLAY_shader_image(void);
 GPUShader *OVERLAY_shader_motion_path_line(void);
 GPUShader *OVERLAY_shader_motion_path_vert(void);
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index d3d2e35bfe3..88526d1e9e4 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -193,6 +193,7 @@ typedef struct OVERLAY_Shaders {
   GPUShader *facing;
   GPUShader *gpencil_canvas;
   GPUShader *grid;
+  GPUShader *grid_image;
   GPUShader *image;
   GPUShader *motion_path_line;
   GPUShader *motion_path_vert;
@@ -1043,6 +1044,20 @@ GPUShader *OVERLAY_shader_grid(void)
   return sh_data->grid;
 }
 
+GPUShader *OVERLAY_shader_grid_image(void)
+{
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
+  if (!sh_data->grid_image) {
+    sh_data->grid_image = DRW_shader_create_with_shaderlib(
+        datatoc_edit_uv_tiled_image_borders_vert_glsl,
+        NULL,
+        datatoc_gpu_shader_uniform_color_frag_glsl,
+        e_data.lib,
+        "#define blender_srgb_to_framebuffer_space(a) a\n");
+  }
+  return sh_data->grid_image;
+}
+
 GPUShader *OVERLAY_shader_image(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index e04a751c470..df4998cd6da 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2037,7 +2037,7 @@ void DRW_draw_render_loop_2d_ex(struct Depsgraph *depsgraph,
   drw_debug_init();
 
   /* No framebuffer allowed before drawing. */
-  BLI_assert(GPU_framebuffer_active_get() == NULL);
+  // BLI_assert(GPU_framebuffer_active_get() == NULL);
   GPU_framebuffer_bind(DST.default_framebuffer);
   GPU_framebuffer_clear_depth_stencil(DST.default_framebuffer, 1.0f, 0xFF);
 
diff --git a/source/blender/draw/tests/shaders_test.cc b/source/blender/draw/tests/shaders_test.cc
index c5526366532..68808e19dc0 100644
--- a/source/blender/draw/tests/shaders_test.cc
+++ b/source/blender/draw/tests/shaders_test.cc
@@ -236,6 +236,7 @@ TEST_F(DrawTest, overlay_glsl_shaders)
     EXPECT_NE(OVERLAY_shader_facing(), nullptr);
     EXPECT_NE(OVERLAY_shader_gpencil_canvas(), nullptr);
     EXPECT_NE(OVERLAY_shader_grid(), nullptr);
+    EXPECT_NE(OVERLAY_shader_grid_image(), nullptr);
     EXPECT_NE(OVERLAY_shader_image(), nullptr);
     EXPECT_NE(OVERLAY_shader_motion_path_line(), nullptr);
     EXPECT_NE(OVERLAY_shader_motion_path_vert(), nullptr);



More information about the Bf-blender-cvs mailing list