[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