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:
-rw-r--r--source/blender/gpu/CMakeLists.txt3
-rw-r--r--source/blender/gpu/GPU_shader.h3
-rw-r--r--source/blender/gpu/intern/gpu_shader.c13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_selection_id_vert.glsl24
-rw-r--r--source/blender/gpu/shaders/gpu_shader_selection_id_frag.glsl21
5 files changed, 64 insertions, 0 deletions
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 02e5d4ac479..4fc57617d30 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -218,6 +218,9 @@ data_to_c_simple(shaders/gpu_shader_2D_edituvs_edges_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_edituvs_faces_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_edituvs_stretch_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_selection_id_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_selection_id_frag.glsl SRC)
+
data_to_c_simple(shaders/gpu_shader_edges_front_back_persp_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_edges_front_back_persp_geom.glsl SRC)
data_to_c_simple(shaders/gpu_shader_edges_front_back_persp_legacy_vert.glsl SRC)
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index 8a603f3caf2..eea8f78fe48 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -352,6 +352,9 @@ typedef enum GPUBuiltinShader {
GPU_SHADER_2D_UV_EDGES_SMOOTH,
GPU_SHADER_2D_UV_FACES,
GPU_SHADER_2D_UV_FACES_STRETCH,
+ /* Selection */
+ GPU_SHADER_3D_FLAT_SELECT_ID,
+ GPU_SHADER_3D_UNIFORM_SELECT_ID,
GPU_NUM_BUILTIN_SHADERS /* (not an actual shader) */
} GPUBuiltinShader;
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 00646223793..6ad6faf86e1 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -146,6 +146,9 @@ extern char datatoc_gpu_shader_2D_edituvs_edges_vert_glsl[];
extern char datatoc_gpu_shader_2D_edituvs_faces_vert_glsl[];
extern char datatoc_gpu_shader_2D_edituvs_stretch_vert_glsl[];
+extern char datatoc_gpu_shader_3D_selection_id_vert_glsl[];
+extern char datatoc_gpu_shader_selection_id_frag_glsl[];
+
extern char datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl[];
extern char datatoc_gpu_shader_2D_line_dashed_frag_glsl[];
extern char datatoc_gpu_shader_2D_line_dashed_geom_glsl[];
@@ -940,6 +943,13 @@ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
{ datatoc_gpu_shader_2D_edituvs_stretch_vert_glsl,
datatoc_gpu_shader_2D_smooth_color_frag_glsl },
+ [GPU_SHADER_3D_FLAT_SELECT_ID] =
+ { datatoc_gpu_shader_3D_selection_id_vert_glsl,
+ datatoc_gpu_shader_selection_id_frag_glsl },
+ [GPU_SHADER_3D_UNIFORM_SELECT_ID] =
+ { datatoc_gpu_shader_3D_selection_id_vert_glsl,
+ datatoc_gpu_shader_selection_id_frag_glsl },
+
[GPU_SHADER_GPENCIL_STROKE] =
{ datatoc_gpu_shader_gpencil_stroke_vert_glsl,
datatoc_gpu_shader_gpencil_stroke_frag_glsl,
@@ -1007,6 +1017,9 @@ static const char *gpu_shader_get_builtin_shader_defines(
case GPU_SHADER_2D_UV_EDGES_SMOOTH:
return "#define SMOOTH_COLOR\n";
+ case GPU_SHADER_3D_UNIFORM_SELECT_ID:
+ return "#define UNIFORM_ID\n";
+
default:
return NULL;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_selection_id_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_selection_id_vert.glsl
new file mode 100644
index 00000000000..9c6be69efce
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_selection_id_vert.glsl
@@ -0,0 +1,24 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+
+#ifndef UNIFORM_ID
+uniform uint offset;
+in uint color;
+
+flat out vec4 id;
+#endif
+
+void main()
+{
+#ifndef UNIFORM_ID
+ id = vec4(
+ (((color + offset) ) & uint(0xFF)) * (1.0f / 255.0f),
+ (((color + offset) >> 8) & uint(0xFF)) * (1.0f / 255.0f),
+ (((color + offset) >> 16) & uint(0xFF)) * (1.0f / 255.0f),
+ (((color + offset) >> 24) ) * (1.0f / 255.0f));
+#endif
+
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_selection_id_frag.glsl b/source/blender/gpu/shaders/gpu_shader_selection_id_frag.glsl
new file mode 100644
index 00000000000..29fe9e9d8c7
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_selection_id_frag.glsl
@@ -0,0 +1,21 @@
+
+#ifdef UNIFORM_ID
+uniform uint id;
+#else
+flat in vec4 id;
+#endif
+
+out vec4 fragColor;
+
+void main()
+{
+#ifdef UNIFORM_ID
+ fragColor = vec4(
+ ((id ) & uint(0xFF)) * (1.0f / 255.0f),
+ ((id >> 8) & uint(0xFF)) * (1.0f / 255.0f),
+ ((id >> 16) & uint(0xFF)) * (1.0f / 255.0f),
+ ((id >> 24) ) * (1.0f / 255.0f));
+#else
+ fragColor = id;
+#endif
+}