mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-03-12 05:34:35 -04:00
render/vulkan: prepare texture shader for new transforms
This commit is contained in:
parent
7a1161438c
commit
ec422ac389
1 changed files with 23 additions and 13 deletions
|
|
@ -21,27 +21,37 @@ float srgb_channel_to_linear(float x) {
|
||||||
x > 0.04045);
|
x > 0.04045);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 srgb_color_to_linear(vec4 color) {
|
vec3 srgb_color_to_linear(vec3 color) {
|
||||||
if (color.a == 0) {
|
return vec3(
|
||||||
return vec4(0);
|
|
||||||
}
|
|
||||||
color.rgb /= color.a;
|
|
||||||
color.rgb = vec3(
|
|
||||||
srgb_channel_to_linear(color.r),
|
srgb_channel_to_linear(color.r),
|
||||||
srgb_channel_to_linear(color.g),
|
srgb_channel_to_linear(color.g),
|
||||||
srgb_channel_to_linear(color.b)
|
srgb_channel_to_linear(color.b)
|
||||||
);
|
);
|
||||||
color.rgb *= color.a;
|
|
||||||
return color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec4 val = textureLod(tex, uv, 0);
|
vec4 in_color = textureLod(tex, uv, 0);
|
||||||
if (TEXTURE_TRANSFORM == TEXTURE_TRANSFORM_SRGB) {
|
|
||||||
out_color = srgb_color_to_linear(val);
|
if (TEXTURE_TRANSFORM == TEXTURE_TRANSFORM_IDENTITY) {
|
||||||
} else { // TEXTURE_TRANSFORM_IDENTITY
|
out_color = in_color * data.alpha;
|
||||||
out_color = val;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert from pre-multiplied alpha to straight alpha
|
||||||
|
float alpha = in_color.a;
|
||||||
|
vec3 rgb;
|
||||||
|
if (alpha == 0) {
|
||||||
|
rgb = vec3(0);
|
||||||
|
} else {
|
||||||
|
rgb = in_color.rgb / alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TEXTURE_TRANSFORM == TEXTURE_TRANSFORM_SRGB) {
|
||||||
|
rgb = srgb_color_to_linear(rgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Back to pre-multiplied alpha
|
||||||
|
out_color = vec4(rgb * alpha, alpha);
|
||||||
|
|
||||||
out_color *= data.alpha;
|
out_color *= data.alpha;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue