diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-04-14 21:44:45 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-04-14 21:44:56 +0300 |
commit | 21c658b718b9bd0f79f435a6a8a8603c365264a5 (patch) | |
tree | bcaa239369d799368236d4303f33d674c3cb14f3 /source/blender/gpu/shaders/gpu_shader_colorspace_lib.glsl | |
parent | bf49bb354fca4ad96f8f3e6802ecf733b29ac3e3 (diff) |
GPUShader: Implement workaround for gizmo drawing on sRGB framebuffer
This solution involves adding a uniform to each fragment shader that is
used by gizmo drawing and use the framebuffer state to set this uniform
accordingly.
This solution can also be carried to external shaders (addons).
A single line of code would then be enough to fix the issue.
The only trickery here is the dummy define:
`#define srgb_to_framebuffer_space(a)`
This is in order to avoid breaking other DRW shaders that use the same
fragment shader code but do not need the tranformation.
Related to T74139
Reviewed By: brecht, campbellbarton
Differential Revision: https://developer.blender.org/D7261
Diffstat (limited to 'source/blender/gpu/shaders/gpu_shader_colorspace_lib.glsl')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_colorspace_lib.glsl | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_colorspace_lib.glsl b/source/blender/gpu/shaders/gpu_shader_colorspace_lib.glsl new file mode 100644 index 00000000000..aae659516bb --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_colorspace_lib.glsl @@ -0,0 +1,16 @@ + +/* Undefine the macro that avoids compilation errors. */ +#undef blender_srgb_to_framebuffer_space + +uniform bool srgbTarget = false; + +vec4 blender_srgb_to_framebuffer_space(vec4 color) +{ + if (srgbTarget) { + vec3 c = max(color.rgb, vec3(0.0)); + vec3 c1 = c * (1.0 / 12.92); + vec3 c2 = pow((c + 0.055) * (1.0 / 1.055), vec3(2.4)); + color.rgb = mix(c1, c2, step(vec3(0.04045), c)); + } + return color; +} |