[Bf-blender-cvs] [2c295e25ea2] uvimage-editor-drawing: Unavailable Texture Grid

Jeroen Bakker noreply at git.blender.org
Wed Aug 19 14:03:40 CEST 2020


Commit: 2c295e25ea29a20900c854e4b497f3b6a6c45eca
Author: Jeroen Bakker
Date:   Wed Aug 19 13:05:45 2020 +0200
Branches: uvimage-editor-drawing
https://developer.blender.org/rB2c295e25ea29a20900c854e4b497f3b6a6c45eca

Unavailable Texture Grid

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

M	source/blender/draw/engines/image/image_engine.c
M	source/blender/draw/engines/image/shaders/engine_image_unavailable_frag.glsl
M	source/blender/draw/engines/image/shaders/engine_image_unavailable_vert.glsl

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

diff --git a/source/blender/draw/engines/image/image_engine.c b/source/blender/draw/engines/image/image_engine.c
index 9c63066cc75..b7f2b6d477f 100644
--- a/source/blender/draw/engines/image/image_engine.c
+++ b/source/blender/draw/engines/image/image_engine.c
@@ -180,6 +180,13 @@ static void image_cache_image(IMAGE_Data *id, Image *ima, ImageUser *iuser, ImBu
     GPUShader *shader = IMAGE_shaders_image_unavailable_get();
     DRWShadingGroup *grp = DRW_shgroup_create(shader, psl->image_pass);
     DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+
+    /* sima->zoom = 1 texel covers (sima->zoom * sima->zoom) screen pixels.
+     * Creates a curve function for better visual result. */
+    float zoom_level = powf(MAX2(sima->zoom - 1.0, 0.1), 0.33f);
+    zoom_level = clamp_f(zoom_level, 1.2, 5.0);
+    DRW_shgroup_uniform_float_copy(grp, "zoomScale", sima->zoom);
+    DRW_shgroup_uniform_float_copy(grp, "zoomLevel", zoom_level);
     DRW_shgroup_call(grp, pd->draw_batch, NULL);
   }
 }
diff --git a/source/blender/draw/engines/image/shaders/engine_image_unavailable_frag.glsl b/source/blender/draw/engines/image/shaders/engine_image_unavailable_frag.glsl
index 6455747b97f..076d675d503 100644
--- a/source/blender/draw/engines/image/shaders/engine_image_unavailable_frag.glsl
+++ b/source/blender/draw/engines/image/shaders/engine_image_unavailable_frag.glsl
@@ -1,23 +1,38 @@
 #pragma BLENDER_REQUIRE(common_colormanagement_lib.glsl)
 #pragma BLENDER_REQUIRE(common_globals_lib.glsl)
 
-flat in vec4 origin;
-in vec2 uvs;
+uniform float zoomLevel;
+uniform float zoomScale;
+
+#define UNAVAILABLE_TEXTURE_SIZE 256
 
+in vec2 uvs;
 out vec4 fragColor;
 
-/* XXX(jbakker): this is incomplete code. */
 void main()
 {
-  ivec2 view_coord = ivec2(gl_FragCoord.xy - origin.xy);
-  vec3 final_color = vec3(1.0, 0.0, 1.0);
+  float d = UNAVAILABLE_TEXTURE_SIZE * zoomScale;
+  ivec2 tex_coord = ivec2(uvs * d);
+  ivec2 tex_coord_prev = tex_coord - ivec2(1);
+
+  int zoom_level_1 = int(zoomLevel);
+  int zoom_level_2 = zoom_level_1 + 1;
+  float line_1_alpha = 1.0 - fract(zoomLevel);
+  float line_2_alpha = fract(zoomLevel);
+
+  int num_lines_in_level2 = (1 << zoom_level_2) * (1 << zoom_level_2);
+  float spacing_between_lines = d / num_lines_in_level2;
+
+  ivec2 line_index = ivec2(tex_coord * num_lines_in_level2 / d);
+  ivec2 line_index_prev = ivec2(tex_coord_prev * num_lines_in_level2 / d);
+  bvec2 is_line_2 = notEqual(line_index, line_index_prev);
+  bvec2 is_line_1 = notEqual(line_index / 4, line_index_prev / 4);
 
-  if (view_coord.x % 100 == 0) {
-    final_color = vec3(0.0);
-  }
-  else {
-    final_color = colorBackground.rgb;
-  }
+  float line_alpha = max(any(is_line_2) ? line_2_alpha : 0.0, any(is_line_1) ? line_1_alpha : 0.0);
 
+  float color_offset = 20.0 / 256.0;
+  vec3 line_color = clamp(colorBackground.rgb - color_offset, 0.0, 1.0);
+  vec3 bg_color = clamp(colorBackground.rgb + color_offset, 0.0, 1.0);
+  vec3 final_color = mix(bg_color, line_color, line_alpha);
   fragColor = vec4(final_color, 1.0);
 }
diff --git a/source/blender/draw/engines/image/shaders/engine_image_unavailable_vert.glsl b/source/blender/draw/engines/image/shaders/engine_image_unavailable_vert.glsl
index 4bec1a31e9c..e06ea05c271 100644
--- a/source/blender/draw/engines/image/shaders/engine_image_unavailable_vert.glsl
+++ b/source/blender/draw/engines/image/shaders/engine_image_unavailable_vert.glsl
@@ -3,14 +3,11 @@
 in vec3 pos;
 
 out vec2 uvs;
-flat out vec4 origin;
 
 void main()
 {
   vec3 world_pos = point_object_to_world(pos);
   vec4 position = point_world_to_ndc(world_pos);
-  origin = point_world_to_ndc(vec3(0.0));
-  origin.z = 0.0;
 
   /* Move drawn pixels to the front. In the overlay engine the depth is used
    * to detect if a transparency texture or the background color should be drawn. */



More information about the Bf-blender-cvs mailing list