[Bf-blender-cvs] [63108cbeff1] uvimage-editor-drawing: Initial commit for image unavailable texture
Jeroen Bakker
noreply at git.blender.org
Mon Aug 17 15:05:15 CEST 2020
Commit: 63108cbeff19de2c8936dc4ca0fb9a7afcc4f8a4
Author: Jeroen Bakker
Date: Mon Aug 17 15:04:49 2020 +0200
Branches: uvimage-editor-drawing
https://developer.blender.org/rB63108cbeff19de2c8936dc4ca0fb9a7afcc4f8a4
Initial commit for image unavailable texture
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/editors/editors_image.c
M source/blender/draw/engines/editors/editors_private.h
M source/blender/draw/engines/editors/editors_shaders.c
A source/blender/draw/engines/editors/shaders/editors_image_unavailable_frag.glsl
A source/blender/draw/engines/editors/shaders/editors_image_unavailable_vert.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index d1bf4533d08..081d7a2ee25 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -424,8 +424,10 @@ data_to_c_simple(engines/overlay2d/shaders/uv_face_dots_vert.glsl SRC)
data_to_c_simple(engines/overlay2d/shaders/uv_verts_vert.glsl SRC)
data_to_c_simple(engines/overlay2d/shaders/uv_verts_frag.glsl SRC)
-data_to_c_simple(engines/editors/shaders/editors_image_vert.glsl SRC)
data_to_c_simple(engines/editors/shaders/editors_image_frag.glsl SRC)
+data_to_c_simple(engines/editors/shaders/editors_image_unavailable_frag.glsl SRC)
+data_to_c_simple(engines/editors/shaders/editors_image_unavailable_vert.glsl SRC)
+data_to_c_simple(engines/editors/shaders/editors_image_vert.glsl SRC)
list(APPEND INC
)
diff --git a/source/blender/draw/engines/editors/editors_image.c b/source/blender/draw/engines/editors/editors_image.c
index d1ae4566f5f..b983f3c4623 100644
--- a/source/blender/draw/engines/editors/editors_image.c
+++ b/source/blender/draw/engines/editors/editors_image.c
@@ -162,6 +162,13 @@ static void editors_image_cache_image(EDITORS_PassList *psl,
DRW_shgroup_call_instances_with_attrs(
shgrp, NULL, e_data.gpu_batch_image, e_data.gpu_batch_instances);
}
+ else {
+ /* No image available. use the image unavailable shader. */
+ GPUShader *shader = EDITORS_shaders_image_unavailable_get();
+ DRWShadingGroup *grp = DRW_shgroup_create(shader, psl->image_pass);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_call(grp, e_data.gpu_batch_image, NULL);
+ }
}
/* \} */
diff --git a/source/blender/draw/engines/editors/editors_private.h b/source/blender/draw/engines/editors/editors_private.h
index 1bcb70c1af3..f6dfa8f0c1f 100644
--- a/source/blender/draw/engines/editors/editors_private.h
+++ b/source/blender/draw/engines/editors/editors_private.h
@@ -47,6 +47,7 @@ void EDITORS_image_draw_scene(EDITORS_Data *vedata);
/* editors_shaders.c */
GPUShader *EDITORS_shaders_image_get(void);
+GPUShader *EDITORS_shaders_image_unavailable_get(void);
void EDITORS_shader_library_ensure(void);
void EDITORS_shaders_free(void);
diff --git a/source/blender/draw/engines/editors/editors_shaders.c b/source/blender/draw/engines/editors/editors_shaders.c
index e4a3d9baeda..3db45eec9e5 100644
--- a/source/blender/draw/engines/editors/editors_shaders.c
+++ b/source/blender/draw/engines/editors/editors_shaders.c
@@ -29,15 +29,18 @@
#include "editors_engine.h"
#include "editors_private.h"
-extern char datatoc_gpu_shader_2D_image_vert_glsl[];
-extern char datatoc_common_view_lib_glsl[];
extern char datatoc_common_colormanagement_lib_glsl[];
+extern char datatoc_common_globals_lib_glsl[];
+extern char datatoc_common_view_lib_glsl[];
-extern char datatoc_editors_image_vert_glsl[];
extern char datatoc_editors_image_frag_glsl[];
+extern char datatoc_editors_image_unavailable_frag_glsl[];
+extern char datatoc_editors_image_unavailable_vert_glsl[];
+extern char datatoc_editors_image_vert_glsl[];
typedef struct EDITORS_Shaders {
GPUShader *image_sh;
+ GPUShader *image_unavailable_sh;
} EDITORS_Shaders;
static struct {
@@ -50,8 +53,9 @@ void EDITORS_shader_library_ensure(void)
if (e_data.lib == NULL) {
e_data.lib = DRW_shader_library_create();
/* NOTE: Theses needs to be ordered by dependencies. */
- DRW_SHADER_LIB_ADD(e_data.lib, common_view_lib);
DRW_SHADER_LIB_ADD(e_data.lib, common_colormanagement_lib);
+ DRW_SHADER_LIB_ADD(e_data.lib, common_globals_lib);
+ DRW_SHADER_LIB_ADD(e_data.lib, common_view_lib);
}
}
@@ -71,6 +75,20 @@ GPUShader *EDITORS_shaders_image_get(void)
return sh_data->image_sh;
}
+GPUShader *EDITORS_shaders_image_unavailable_get(void)
+{
+ EDITORS_Shaders *sh_data = &e_data.shaders;
+ if (!sh_data->image_unavailable_sh) {
+ sh_data->image_unavailable_sh = DRW_shader_create_with_shaderlib(
+ datatoc_editors_image_unavailable_vert_glsl,
+ NULL,
+ datatoc_editors_image_unavailable_frag_glsl,
+ e_data.lib,
+ NULL);
+ }
+ return sh_data->image_unavailable_sh;
+}
+/* \} */
void EDITORS_shaders_free(void)
{
GPUShader **sh_data_as_array = (GPUShader **)&e_data.shaders;
diff --git a/source/blender/draw/engines/editors/shaders/editors_image_unavailable_frag.glsl b/source/blender/draw/engines/editors/shaders/editors_image_unavailable_frag.glsl
new file mode 100644
index 00000000000..6455747b97f
--- /dev/null
+++ b/source/blender/draw/engines/editors/shaders/editors_image_unavailable_frag.glsl
@@ -0,0 +1,23 @@
+#pragma BLENDER_REQUIRE(common_colormanagement_lib.glsl)
+#pragma BLENDER_REQUIRE(common_globals_lib.glsl)
+
+flat in vec4 origin;
+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);
+
+ if (view_coord.x % 100 == 0) {
+ final_color = vec3(0.0);
+ }
+ else {
+ final_color = colorBackground.rgb;
+ }
+
+ fragColor = vec4(final_color, 1.0);
+}
diff --git a/source/blender/draw/engines/editors/shaders/editors_image_unavailable_vert.glsl b/source/blender/draw/engines/editors/shaders/editors_image_unavailable_vert.glsl
new file mode 100644
index 00000000000..4bec1a31e9c
--- /dev/null
+++ b/source/blender/draw/engines/editors/shaders/editors_image_unavailable_vert.glsl
@@ -0,0 +1,21 @@
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
+
+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. */
+ position.z = 0.0;
+ gl_Position = position;
+
+ uvs = pos.xy;
+}
More information about the Bf-blender-cvs
mailing list