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/draw/engines/compositor/compositor_shader.cc10
-rw-r--r--source/blender/draw/engines/compositor/compositor_shader.hh1
-rw-r--r--source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl10
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