diff options
author | Mike Erwin <significant.bit@gmail.com> | 2016-08-08 11:56:02 +0300 |
---|---|---|
committer | Mike Erwin <significant.bit@gmail.com> | 2016-08-08 11:56:02 +0300 |
commit | c73e4e99a5449b2ed1b90cbe484340c3a013deb7 (patch) | |
tree | a835b3d440aa9fb5543183bf313d70a6718e077f | |
parent | 4214b3c44a8de2df4a5db7be1db6f49e312df54a (diff) |
OpenGL: simple 2D shader with flat color
Flat color means each primitive will use color from the provoking
vertex.
-rw-r--r-- | source/blender/gpu/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/gpu/GPU_shader.h | 1 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_shader.c | 16 | ||||
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_2D_flat_color_frag.glsl | 13 | ||||
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl | 18 |
5 files changed, 50 insertions, 0 deletions
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 6bdac68831d..467b76a4ef4 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -102,6 +102,8 @@ set(SRC data_to_c_simple(shaders/gpu_shader_2D_uniform_color_vert.glsl SRC) data_to_c_simple(shaders/gpu_shader_2D_uniform_color_frag.glsl SRC) +data_to_c_simple(shaders/gpu_shader_2D_flat_color_vert.glsl SRC) +data_to_c_simple(shaders/gpu_shader_2D_flat_color_frag.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) diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 0e29780d516..ebc90df3a11 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -92,6 +92,7 @@ typedef enum GPUBuiltinShader { /* for simple drawing */ GPU_SHADER_2D_UNIFORM_COLOR, + GPU_SHADER_2D_FLAT_COLOR, GPU_SHADER_2D_SMOOTH_COLOR, } GPUBuiltinShader; diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c index 67f6545351e..1b3392e8692 100644 --- a/source/blender/gpu/intern/gpu_shader.c +++ b/source/blender/gpu/intern/gpu_shader.c @@ -48,6 +48,8 @@ /* Non-generated shaders */ extern char datatoc_gpu_shader_2D_uniform_color_vert_glsl[]; extern char datatoc_gpu_shader_2D_uniform_color_frag_glsl[]; +extern char datatoc_gpu_shader_2D_flat_color_vert_glsl[]; +extern char datatoc_gpu_shader_2D_flat_color_frag_glsl[]; extern char datatoc_gpu_shader_2D_smooth_color_vert_glsl[]; extern char datatoc_gpu_shader_2D_smooth_color_frag_glsl[]; @@ -77,6 +79,7 @@ static struct GPUShadersGlobal { GPUShader *fx_shaders[MAX_FX_SHADERS * 2]; /* for simple drawing */ GPUShader *uniform_color_2D; + GPUShader *flat_color_2D; GPUShader *smooth_color_2D; } shaders; } GG = {{NULL}}; @@ -638,6 +641,14 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader) NULL, NULL, NULL, 0, 0, 0); retval = GG.shaders.uniform_color_2D; break; + case GPU_SHADER_2D_FLAT_COLOR: + if (!GG.shaders.flat_color_2D) + GG.shaders.flat_color_2D = GPU_shader_create( + datatoc_gpu_shader_2D_flat_color_vert_glsl, + datatoc_gpu_shader_2D_flat_color_frag_glsl, + NULL, NULL, NULL, 0, 0, 0); + retval = GG.shaders.flat_color_2D; + break; case GPU_SHADER_2D_SMOOTH_COLOR: if (!GG.shaders.smooth_color_2D) GG.shaders.smooth_color_2D = GPU_shader_create( @@ -762,6 +773,11 @@ void GPU_shader_free_builtin_shaders(void) GG.shaders.uniform_color_2D = NULL; } + if (GG.shaders.flat_color_2D) { + GPU_shader_free(GG.shaders.flat_color_2D); + GG.shaders.flat_color_2D = NULL; + } + if (GG.shaders.smooth_color_2D) { GPU_shader_free(GG.shaders.smooth_color_2D); GG.shaders.smooth_color_2D = NULL; diff --git a/source/blender/gpu/shaders/gpu_shader_2D_flat_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_2D_flat_color_frag.glsl new file mode 100644 index 00000000000..91097d24cb2 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_2D_flat_color_frag.glsl @@ -0,0 +1,13 @@ + +#if __VERSION__ == 120 + flat varying vec4 finalColor; + #define fragColor gl_FragColor +#else + flat in vec4 finalColor; + out vec4 fragColor; +#endif + +void main() +{ + fragColor = finalColor; +} diff --git a/source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl new file mode 100644 index 00000000000..aa1eba470ab --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl @@ -0,0 +1,18 @@ + +#if __VERSION__ == 120 + attribute vec2 pos; + attribute vec4 color; + + flat varying vec4 finalColor; +#else + in vec2 pos; + in vec4 color; + + flat out vec4 finalColor; +#endif + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0); + finalColor = color; +} |