diff options
3 files changed, 17 insertions, 4 deletions
diff --git a/source/blender/draw/engines/compositor/compositor_shader.cc b/source/blender/draw/engines/compositor/compositor_shader.cc index 3db6bdee6e8..d9e8e4b5f79 100644 --- a/source/blender/draw/engines/compositor/compositor_shader.cc +++ b/source/blender/draw/engines/compositor/compositor_shader.cc @@ -77,6 +77,14 @@ char *ShaderModule::pass_shader_code_frag_get(const GPUCodegenOutput *codegen, return DRW_shader_library_create_shader_string(shader_lib_, output.c_str()); } +char *ShaderModule::pass_shader_code_defs_get() +{ + std::string defines = ""; + defines += "#define COMPOSITOR_SHADER\n"; + + return BLI_strdup(defines.c_str()); +} + /* WATCH: This can be called from another thread! Needs to not touch the shader module in any * thread unsafe manner. */ GPUShaderSource ShaderModule::pass_shader_code_generate(const GPUCodegenOutput *codegen, @@ -86,7 +94,7 @@ GPUShaderSource ShaderModule::pass_shader_code_generate(const GPUCodegenOutput * source.vertex = pass_shader_code_vert_get(codegen, gpumat); source.fragment = pass_shader_code_frag_get(codegen, gpumat); source.geometry = nullptr; - source.defines = nullptr; + source.defines = pass_shader_code_defs_get(); return source; } diff --git a/source/blender/draw/engines/compositor/compositor_shader.hh b/source/blender/draw/engines/compositor/compositor_shader.hh index ae7cd70eda9..4ab92534c41 100644 --- a/source/blender/draw/engines/compositor/compositor_shader.hh +++ b/source/blender/draw/engines/compositor/compositor_shader.hh @@ -40,6 +40,7 @@ class ShaderModule { private: char *pass_shader_code_vert_get(const GPUCodegenOutput *codegen, GPUMaterial *gpumat); char *pass_shader_code_frag_get(const GPUCodegenOutput *codegen, GPUMaterial *gpumat); + char *pass_shader_code_defs_get(); }; } // namespace blender::compositor diff --git a/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl b/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl index 086ff5b0217..b0c28823a9c 100644 --- a/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl +++ b/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl @@ -1,6 +1,10 @@ - -/* Assumes GPU_VEC4 is color data. So converting to luminance like cycles. */ -#define float_from_vec4(v) dot(v.rgb, vec3(0.2126, 0.7152, 0.0722)) +/* Assumes GPU_VEC4 is color data. If this is a compositor shader, take the average of the + * components, otherwise, apply the luminance coefficients used by Cycles. */ +#ifdef COMPOSITOR_SHADER +# define float_from_vec4(v) ((v.r + v.g + v.b) / 3.0) +#else +# define float_from_vec4(v) dot(v.rgb, vec3(0.2126, 0.7152, 0.0722)) +#endif #define float_from_vec3(v) avg(v.rgb) #define float_from_vec2(v) v.r |