Fix colors in glium (srgb issue)
This commit is contained in:
parent
49cbd3fe07
commit
74eeaf27ce
1 changed files with 30 additions and 0 deletions
|
@ -41,8 +41,18 @@ impl Painter {
|
||||||
in vec4 v_color;
|
in vec4 v_color;
|
||||||
in vec2 v_tc;
|
in vec2 v_tc;
|
||||||
out vec4 f_color;
|
out vec4 f_color;
|
||||||
|
|
||||||
|
// glium expects linear output.
|
||||||
|
vec3 linear_from_srgb(vec3 srgb) {
|
||||||
|
bvec3 cutoff = lessThan(srgb, vec3(0.04045));
|
||||||
|
vec3 higher = pow((srgb + vec3(0.055)) / vec3(1.055), vec3(2.4));
|
||||||
|
vec3 lower = srgb / vec3(12.92);
|
||||||
|
return mix(higher, lower, cutoff);
|
||||||
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
f_color = v_color;
|
f_color = v_color;
|
||||||
|
f_color.rgb = linear_from_srgb(f_color.rgb);
|
||||||
f_color.a *= texture(u_sampler, v_tc).r;
|
f_color.a *= texture(u_sampler, v_tc).r;
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
|
@ -74,8 +84,18 @@ impl Painter {
|
||||||
uniform sampler2D u_sampler;
|
uniform sampler2D u_sampler;
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
varying vec2 v_tc;
|
varying vec2 v_tc;
|
||||||
|
|
||||||
|
// glium expects linear output.
|
||||||
|
vec3 linear_from_srgb(vec3 srgb) {
|
||||||
|
bvec3 cutoff = lessThan(srgb, vec3(0.04045));
|
||||||
|
vec3 higher = pow((srgb + vec3(0.055)) / vec3(1.055), vec3(2.4));
|
||||||
|
vec3 lower = srgb / vec3(12.92);
|
||||||
|
return mix(higher, lower, cutoff);
|
||||||
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_FragColor = v_color;
|
gl_FragColor = v_color;
|
||||||
|
gl_FragColor.rgb = linear_from_srgb(gl_FragColor.rgb);
|
||||||
gl_FragColor.a *= texture2D(u_sampler, v_tc).r;
|
gl_FragColor.a *= texture2D(u_sampler, v_tc).r;
|
||||||
}
|
}
|
||||||
",
|
",
|
||||||
|
@ -107,8 +127,18 @@ impl Painter {
|
||||||
uniform sampler2D u_sampler;
|
uniform sampler2D u_sampler;
|
||||||
varying mediump vec4 v_color;
|
varying mediump vec4 v_color;
|
||||||
varying mediump vec2 v_tc;
|
varying mediump vec2 v_tc;
|
||||||
|
|
||||||
|
// glium expects linear output.
|
||||||
|
vec3 linear_from_srgb(vec3 srgb) {
|
||||||
|
bvec3 cutoff = lessThan(srgb, vec3(0.04045));
|
||||||
|
vec3 higher = pow((srgb + vec3(0.055)) / vec3(1.055), vec3(2.4));
|
||||||
|
vec3 lower = srgb / vec3(12.92);
|
||||||
|
return mix(higher, lower, cutoff);
|
||||||
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_FragColor = v_color;
|
gl_FragColor = v_color;
|
||||||
|
gl_FragColor.rgb = linear_from_srgb(gl_FragColor.rgb);
|
||||||
gl_FragColor.a *= texture2D(u_sampler, v_tc).r;
|
gl_FragColor.a *= texture2D(u_sampler, v_tc).r;
|
||||||
}
|
}
|
||||||
",
|
",
|
||||||
|
|
Loading…
Reference in a new issue