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:
authorMike Erwin <significant.bit@gmail.com>2016-10-15 09:30:59 +0300
committerMike Erwin <significant.bit@gmail.com>2016-10-15 09:30:59 +0300
commit2df27995f9226245c29007c3dd2eca61cb31fc69 (patch)
treec0be5b925eccae8dde85a8a72953f05c2a177bfb
parent48db35468f56cf9dc36870d39cfdf9e025495c5b (diff)
OpenGL: new built-in point shader, clean up other shader names
Smooth round point with outline (uniform color) and fill (varying color). Updated shader naming scheme: a shader that doesn't deal with color does not have to say "no color". Vertex shaders do not have to say "uniform color" since their frag counterpart actually has the uniform. Each name should describe what that shader *does*, not what it *doesn't do*.
-rw-r--r--source/blender/gpu/CMakeLists.txt12
-rw-r--r--source/blender/gpu/GPU_shader.h1
-rw-r--r--source/blender/gpu/intern/gpu_shader.c42
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_smooth_vert.glsl (renamed from source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_uniform_color_outline_smooth_vert.glsl)0
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_smooth_vert.glsl (renamed from source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_uniform_color_smooth_vert.glsl)0
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert.glsl34
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_vert.glsl (renamed from source/blender/gpu/shaders/gpu_shader_2D_no_color_vert.glsl)0
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl (renamed from source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_no_color_vert.glsl)0
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_vert.glsl (renamed from source/blender/gpu/shaders/gpu_shader_3D_no_color_vert.glsl)0
-rw-r--r--source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_smooth_frag.glsl37
10 files changed, 108 insertions, 18 deletions
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index d33e9456e44..904e682d902 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -129,14 +129,14 @@ set(SRC
data_to_c_simple(shaders/gpu_shader_depth_only_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_uniform_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_flat_color_frag.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_2D_no_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_flat_color_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_smooth_color_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_smooth_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_texture_2D_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_texture_rect_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_texture_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_3D_no_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_3D_flat_color_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_3D_smooth_color_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_3D_smooth_color_frag.glsl SRC)
@@ -144,13 +144,15 @@ data_to_c_simple(shaders/gpu_shader_3D_smooth_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_point_uniform_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_point_uniform_color_smooth_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_point_uniform_color_outline_smooth_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_point_varying_color_outline_smooth_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_point_varying_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_3D_point_varying_size_no_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_point_varying_size_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_uniform_color_smooth_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_uniform_color_outline_smooth_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_smooth_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_outline_smooth_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_text_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_text_frag.glsl SRC)
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index 8ccaa9d470e..2256838fb06 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -108,6 +108,7 @@ typedef enum GPUBuiltinShader {
GPU_SHADER_2D_POINT_FIXED_SIZE_UNIFORM_COLOR,
GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_SMOOTH,
GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_SMOOTH,
+ GPU_SHADER_2D_POINT_UNIFORM_SIZE_VARYING_COLOR_OUTLINE_SMOOTH,
GPU_SHADER_2D_POINT_VARYING_SIZE_VARYING_COLOR,
GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR,
GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR,
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 2ad3927d8c6..cfc1e638bd3 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -49,14 +49,14 @@
extern char datatoc_gpu_shader_depth_only_frag_glsl[];
extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
extern char datatoc_gpu_shader_flat_color_frag_glsl[];
-extern char datatoc_gpu_shader_2D_no_color_vert_glsl[];
+extern char datatoc_gpu_shader_2D_vert_glsl[];
extern char datatoc_gpu_shader_2D_flat_color_vert_glsl[];
extern char datatoc_gpu_shader_2D_smooth_color_vert_glsl[];
extern char datatoc_gpu_shader_2D_smooth_color_frag_glsl[];
extern char datatoc_gpu_shader_2D_texture_vert_glsl[];
extern char datatoc_gpu_shader_2D_texture_2D_frag_glsl[];
extern char datatoc_gpu_shader_2D_texture_rect_frag_glsl[];
-extern char datatoc_gpu_shader_3D_no_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_vert_glsl[];
extern char datatoc_gpu_shader_3D_flat_color_vert_glsl[];
extern char datatoc_gpu_shader_3D_smooth_color_vert_glsl[];
extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
@@ -64,13 +64,15 @@ extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[];
extern char datatoc_gpu_shader_point_uniform_color_smooth_frag_glsl[];
extern char datatoc_gpu_shader_point_uniform_color_outline_smooth_frag_glsl[];
+extern char datatoc_gpu_shader_point_varying_color_outline_smooth_frag_glsl[];
extern char datatoc_gpu_shader_point_varying_color_frag_glsl[];
extern char datatoc_gpu_shader_3D_point_fixed_size_varying_color_vert_glsl[];
-extern char datatoc_gpu_shader_3D_point_varying_size_no_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_point_varying_size_vert_glsl[];
extern char datatoc_gpu_shader_3D_point_varying_size_varying_color_vert_glsl[];
extern char datatoc_gpu_shader_2D_point_varying_size_varying_color_vert_glsl[];
-extern char datatoc_gpu_shader_2D_point_uniform_size_uniform_color_smooth_vert_glsl[];
-extern char datatoc_gpu_shader_2D_point_uniform_size_uniform_color_outline_smooth_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_uniform_size_smooth_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_uniform_size_outline_smooth_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert_glsl[];
extern char datatoc_gpu_shader_text_vert_glsl[];
extern char datatoc_gpu_shader_text_frag_glsl[];
@@ -119,6 +121,7 @@ static struct GPUShadersGlobal {
GPUShader *point_varying_size_varying_color_2D;
GPUShader *point_uniform_size_uniform_color_smooth_2D;
GPUShader *point_uniform_size_uniform_color_outline_smooth_2D;
+ GPUShader *point_uniform_size_varying_color_outline_smooth_2D;
GPUShader *point_fixed_size_uniform_color_3D;
GPUShader *point_fixed_size_varying_color_3D;
GPUShader *point_varying_size_uniform_color_3D;
@@ -676,7 +679,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_2D_UNIFORM_COLOR:
if (!GG.shaders.uniform_color_2D)
GG.shaders.uniform_color_2D = GPU_shader_create(
- datatoc_gpu_shader_2D_no_color_vert_glsl,
+ datatoc_gpu_shader_2D_vert_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.uniform_color_2D;
@@ -700,7 +703,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_3D_UNIFORM_COLOR:
if (!GG.shaders.uniform_color_3D)
GG.shaders.uniform_color_3D = GPU_shader_create(
- datatoc_gpu_shader_3D_no_color_vert_glsl,
+ datatoc_gpu_shader_3D_vert_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.uniform_color_3D;
@@ -724,7 +727,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_3D_DEPTH_ONLY:
if (!GG.shaders.depth_only_3D)
GG.shaders.depth_only_3D = GPU_shader_create(
- datatoc_gpu_shader_3D_no_color_vert_glsl,
+ datatoc_gpu_shader_3D_vert_glsl,
datatoc_gpu_shader_depth_only_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.depth_only_3D;
@@ -732,7 +735,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_2D_POINT_FIXED_SIZE_UNIFORM_COLOR:
if (!GG.shaders.point_fixed_size_uniform_color_2D)
GG.shaders.point_fixed_size_uniform_color_2D = GPU_shader_create(
- datatoc_gpu_shader_2D_no_color_vert_glsl,
+ datatoc_gpu_shader_2D_vert_glsl,
datatoc_gpu_shader_point_uniform_color_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.point_fixed_size_uniform_color_2D;
@@ -748,7 +751,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_SMOOTH:
if (!GG.shaders.point_uniform_size_uniform_color_smooth_2D)
GG.shaders.point_uniform_size_uniform_color_smooth_2D = GPU_shader_create(
- datatoc_gpu_shader_2D_point_uniform_size_uniform_color_smooth_vert_glsl,
+ datatoc_gpu_shader_2D_point_uniform_size_smooth_vert_glsl,
datatoc_gpu_shader_point_uniform_color_smooth_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.point_uniform_size_uniform_color_smooth_2D;
@@ -756,15 +759,23 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_SMOOTH:
if (!GG.shaders.point_uniform_size_uniform_color_outline_smooth_2D)
GG.shaders.point_uniform_size_uniform_color_outline_smooth_2D = GPU_shader_create(
- datatoc_gpu_shader_2D_point_uniform_size_uniform_color_outline_smooth_vert_glsl,
+ datatoc_gpu_shader_2D_point_uniform_size_outline_smooth_vert_glsl,
datatoc_gpu_shader_point_uniform_color_outline_smooth_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.point_uniform_size_uniform_color_outline_smooth_2D;
break;
+ case GPU_SHADER_2D_POINT_UNIFORM_SIZE_VARYING_COLOR_OUTLINE_SMOOTH:
+ if (!GG.shaders.point_uniform_size_varying_color_outline_smooth_2D)
+ GG.shaders.point_uniform_size_varying_color_outline_smooth_2D = GPU_shader_create(
+ datatoc_gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert_glsl,
+ datatoc_gpu_shader_point_varying_color_outline_smooth_frag_glsl,
+ NULL, NULL, NULL, 0, 0, 0);
+ retval = GG.shaders.point_uniform_size_varying_color_outline_smooth_2D;
+ break;
case GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR:
if (!GG.shaders.point_fixed_size_uniform_color_3D)
GG.shaders.point_fixed_size_uniform_color_3D = GPU_shader_create(
- datatoc_gpu_shader_3D_no_color_vert_glsl,
+ datatoc_gpu_shader_3D_vert_glsl,
datatoc_gpu_shader_point_uniform_color_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.point_fixed_size_uniform_color_3D;
@@ -780,7 +791,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
case GPU_SHADER_3D_POINT_VARYING_SIZE_UNIFORM_COLOR:
if (!GG.shaders.point_varying_size_uniform_color_3D)
GG.shaders.point_varying_size_uniform_color_3D = GPU_shader_create(
- datatoc_gpu_shader_3D_point_varying_size_no_color_vert_glsl,
+ datatoc_gpu_shader_3D_point_varying_size_vert_glsl,
datatoc_gpu_shader_point_uniform_color_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.point_varying_size_uniform_color_3D;
@@ -967,6 +978,11 @@ void GPU_shader_free_builtin_shaders(void)
GG.shaders.point_uniform_size_uniform_color_outline_smooth_2D = NULL;
}
+ if (GG.shaders.point_uniform_size_varying_color_outline_smooth_2D) {
+ GPU_shader_free(GG.shaders.point_uniform_size_varying_color_outline_smooth_2D);
+ GG.shaders.point_uniform_size_varying_color_outline_smooth_2D = NULL;
+ }
+
if (GG.shaders.point_fixed_size_uniform_color_3D) {
GPU_shader_free(GG.shaders.point_fixed_size_uniform_color_3D);
GG.shaders.point_fixed_size_uniform_color_3D = NULL;
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_uniform_color_outline_smooth_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_smooth_vert.glsl
index a37ae16f837..a37ae16f837 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_uniform_color_outline_smooth_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_smooth_vert.glsl
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_uniform_color_smooth_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_smooth_vert.glsl
index 201e5e90ecc..201e5e90ecc 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_uniform_color_smooth_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_smooth_vert.glsl
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert.glsl
new file mode 100644
index 00000000000..d3a142cc7bd
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert.glsl
@@ -0,0 +1,34 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform float size;
+uniform float outlineWidth;
+
+#if __VERSION__ == 120
+ attribute vec2 pos;
+ attribute vec4 color;
+ varying vec4 radii;
+ varying vec4 fillColor;
+#else
+ in vec2 pos;
+ in vec4 color;
+ out vec4 radii;
+ out vec4 fillColor;
+#endif
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ gl_PointSize = size;
+ fillColor = color;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * size;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+ radii[2] = radius - outlineWidth;
+ radii[3] = radius - outlineWidth - 1.0;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_no_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_vert.glsl
index 4049171f73d..4049171f73d 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_no_color_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_vert.glsl
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_no_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl
index 1fcda765b99..1fcda765b99 100644
--- a/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_no_color_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_no_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_vert.glsl
index 32da3a99c63..32da3a99c63 100644
--- a/source/blender/gpu/shaders/gpu_shader_3D_no_color_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_3D_vert.glsl
diff --git a/source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_smooth_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_smooth_frag.glsl
new file mode 100644
index 00000000000..d6cbe2d9a22
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_smooth_frag.glsl
@@ -0,0 +1,37 @@
+
+uniform vec4 outlineColor;
+
+#if __VERSION__ == 120
+ varying vec4 radii;
+ varying vec4 fillColor;
+ #define fragColor gl_FragColor
+#else
+ in vec4 radii;
+ in vec4 fillColor;
+ out vec4 fragColor;
+#endif
+
+void main() {
+ float dist = length(gl_PointCoord - vec2(0.5));
+
+// transparent outside of point
+// --- 0 ---
+// smooth transition
+// --- 1 ---
+// pure outline color
+// --- 2 ---
+// smooth transition
+// --- 3 ---
+// pure fill color
+// ...
+// dist = 0 at center of point
+
+ float midStroke = 0.5 * (radii[1] + radii[2]);
+
+ if (dist > midStroke) {
+ fragColor.rgb = outlineColor.rgb;
+ fragColor.a = mix(outlineColor.a, 0.0, smoothstep(radii[1], radii[0], dist));
+ }
+ else
+ fragColor = mix(fillColor, outlineColor, smoothstep(radii[3], radii[2], dist));
+}