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:
authorClément Foucault <foucault.clem@gmail.com>2018-12-14 21:16:35 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-12-17 19:05:57 +0300
commit29877fb1a443e1daebf1466fa3a048ef5cefd807 (patch)
tree5ac180d6963df592bfeebd638b0a7386c2bc5a97 /source/blender/draw/engines/workbench/shaders
parent0d511e05d38e47a610c304a7625f5f0da9c9a9d2 (diff)
Workbench: Fix srgb texture not being color managed in texture color mode
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl18
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl9
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl4
3 files changed, 28 insertions, 3 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
index 76b00469f15..25942b162ee 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
@@ -141,3 +141,21 @@ vec2 matcap_uv_compute(vec3 I, vec3 N, bool flipped)
}
return matcap_uv * 0.496 + 0.5;
}
+
+float srgb_to_linearrgb(float c)
+{
+ if (c < 0.04045)
+ return (c < 0.0) ? 0.0 : c * (1.0 / 12.92);
+ else
+ return pow((c + 0.055) * (1.0 / 1.055), 2.4);
+}
+
+vec4 srgb_to_linearrgb(vec4 col_from)
+{
+ vec4 col_to;
+ col_to.r = srgb_to_linearrgb(col_from.r);
+ col_to.g = srgb_to_linearrgb(col_from.g);
+ col_to.b = srgb_to_linearrgb(col_from.b);
+ col_to.a = col_from.a;
+ return col_to;
+}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
index d42b6bde791..aed86937e0d 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
@@ -1,8 +1,8 @@
-#ifdef V3D_SHADING_TEXTURE_COLOR
-uniform sampler2D image;
+
uniform float ImageTransparencyCutoff = 0.1;
+uniform sampler2D image;
+uniform bool imageSrgb;
-#endif
uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrixInverse;
uniform float alpha = 0.5;
@@ -39,6 +39,9 @@ void main()
if (diffuse_color.a < ImageTransparencyCutoff) {
discard;
}
+ if (imageSrgb) {
+ diffuse_color = srgb_to_linearrgb(diffuse_color);
+ }
#else
diffuse_color = vec4(materialDiffuseColor, 1.0);
#endif /* V3D_SHADING_TEXTURE_COLOR */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
index 722add22a89..2ce816c6484 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
@@ -6,6 +6,7 @@ uniform float materialRoughness;
uniform sampler2D image;
uniform float ImageTransparencyCutoff = 0.1;
+uniform bool imageSrgb;
#ifdef NORMAL_VIEWPORT_PASS_ENABLED
in vec3 normal_viewport;
@@ -40,6 +41,9 @@ void main()
if (color.a < ImageTransparencyCutoff) {
discard;
}
+ if (imageSrgb) {
+ color = srgb_to_linearrgb(color);
+ }
# else
color.rgb = materialDiffuseColor;
# endif