diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index ece89dbde62..5d5ea179376 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -128,7 +128,6 @@ data_to_c_simple(shaders/gpu_shader_uniform_color_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_checker_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_diag_stripes_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_simple_lighting_frag.glsl SRC) -data_to_c_simple(shaders/gpu_shader_simple_lighting_flat_color_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_simple_lighting_smooth_color_alpha_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_flat_color_frag.glsl SRC) @@ -158,7 +157,6 @@ data_to_c_simple(shaders/gpu_shader_3D_flat_color_vert.glsl SRC) data_to_c_simple(shaders/gpu_shader_3D_line_dashed_legacy_vert.glsl SRC) data_to_c_simple(shaders/gpu_shader_3D_line_dashed_vert.glsl SRC) data_to_c_simple(shaders/gpu_shader_3D_smooth_color_vert.glsl SRC) -data_to_c_simple(shaders/gpu_shader_3D_normal_flat_color_vert.glsl SRC) data_to_c_simple(shaders/gpu_shader_3D_normal_smooth_color_vert.glsl SRC) data_to_c_simple(shaders/gpu_shader_3D_smooth_color_frag.glsl SRC) data_to_c_simple(shaders/gpu_shader_3D_passthrough_vert.glsl SRC) diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c index de5bda3a0cb..d9228b42599 100644 --- a/source/blender/gpu/intern/gpu_shader.c +++ b/source/blender/gpu/intern/gpu_shader.c @@ -673,7 +673,8 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader) datatoc_gpu_shader_edges_overlay_frag_glsl, datatoc_gpu_shader_edges_overlay_geom_glsl }, [GPU_SHADER_SIMPLE_LIGHTING] = { datatoc_gpu_shader_3D_normal_vert_glsl, datatoc_gpu_shader_simple_lighting_frag_glsl }, - [GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR] = { datatoc_gpu_shader_3D_normal_flat_color_vert_glsl, datatoc_gpu_shader_simple_lighting_flat_color_frag_glsl }, + /* Use 'USE_FLAT_NORMAL' to make flat shader from smooth */ + [GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR] = { datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl, datatoc_gpu_shader_simple_lighting_smooth_color_frag_glsl }, [GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR] = { datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl, datatoc_gpu_shader_simple_lighting_smooth_color_frag_glsl }, [GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR_ALPHA] = { datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl, datatoc_gpu_shader_simple_lighting_smooth_color_alpha_frag_glsl }, @@ -806,6 +807,9 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader) case GPU_SHADER_3D_FLAT_COLOR_U32: defines = "#define USE_COLOR_U32;\n"; break; + case GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR: + defines = "#define USE_FLAT_NORMAL;\n"; + break; default: break; } diff --git a/source/blender/gpu/shaders/gpu_shader_3D_normal_flat_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_normal_flat_color_vert.glsl deleted file mode 100644 index 8665cb795bc..00000000000 --- a/source/blender/gpu/shaders/gpu_shader_3D_normal_flat_color_vert.glsl +++ /dev/null @@ -1,26 +0,0 @@ - -uniform mat4 ModelViewProjectionMatrix; -uniform mat3 NormalMatrix; - -#if __VERSION__ == 120 - attribute vec3 pos; - attribute vec3 nor; - attribute vec4 color; - - flat varying vec4 finalColor; - flat varying vec3 normal; -#else - in vec3 pos; - in vec3 nor; - in vec4 color; - - flat out vec3 normal; - flat out vec4 finalColor; -#endif - -void main() -{ - normal = normalize(NormalMatrix * nor); - gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); - finalColor = color; -} diff --git a/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl index 9eacd10d69e..e29cfd5ab1c 100644 --- a/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl @@ -7,15 +7,25 @@ uniform mat3 NormalMatrix; attribute vec3 nor; attribute vec4 color; +# ifdef USE_FLAT_NORMAL + flat varying vec4 finalColor; + flat varying vec3 normal; +# else varying vec4 finalColor; varying vec3 normal; +# endif #else in vec3 pos; in vec3 nor; in vec4 color; +# ifdef USE_FLAT_NORMAL + flat out vec3 normal; + flat out vec4 finalColor; +# else out vec3 normal; out vec4 finalColor; +# endif #endif void main() diff --git a/source/blender/gpu/shaders/gpu_shader_simple_lighting_flat_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_simple_lighting_flat_color_frag.glsl deleted file mode 100644 index d93d0532651..00000000000 --- a/source/blender/gpu/shaders/gpu_shader_simple_lighting_flat_color_frag.glsl +++ /dev/null @@ -1,17 +0,0 @@ - -uniform vec3 light; - -#if __VERSION__ == 120 - flat varying vec3 normal; - flat varying vec4 finalColor; - #define fragColor gl_FragColor -#else - flat in vec3 normal; - flat in vec4 finalColor; - out vec4 fragColor; -#endif - -void main() -{ - fragColor = finalColor * max(0.0, dot(normalize(normal), light)); -} diff --git a/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl index 260539f76d7..e0d122aa57a 100644 --- a/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl +++ b/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl @@ -2,12 +2,22 @@ uniform vec3 light; #if __VERSION__ == 120 +# ifdef USE_FLAT_NORMAL + flat varying vec3 normal; + flat varying vec4 finalColor; +# else varying vec3 normal; varying vec4 finalColor; +# endif #define fragColor gl_FragColor #else +# ifdef USE_FLAT_NORMAL + flat in vec3 normal; + flat in vec4 finalColor; +# else in vec3 normal; in vec4 finalColor; +# endif out vec4 fragColor; #endif