LibSoftGPU: Use destination alpha for texture decal function

According to the OpenGL spec, the decal function uses the destination
(or texture) alpha instead of the source alpha. This fixes the sky in
GLQuake.
This commit is contained in:
Jelle Raaijmakers 2022-03-06 00:21:58 +01:00 committed by Andreas Kling
parent fd628cdfec
commit 9fc419395e
Notes: sideshowbarker 2024-07-17 17:53:36 +09:00

View File

@ -1016,10 +1016,10 @@ ALWAYS_INLINE void Device::shade_fragments(PixelQuad& quad)
quad.out_color = texel;
break;
case TextureEnvMode::Decal: {
auto src_alpha = quad.out_color.w();
quad.out_color.set_x(mix(quad.out_color.x(), texel.x(), src_alpha));
quad.out_color.set_y(mix(quad.out_color.y(), texel.y(), src_alpha));
quad.out_color.set_z(mix(quad.out_color.z(), texel.z(), src_alpha));
auto dst_alpha = texel.w();
quad.out_color.set_x(mix(quad.out_color.x(), texel.x(), dst_alpha));
quad.out_color.set_y(mix(quad.out_color.y(), texel.y(), dst_alpha));
quad.out_color.set_z(mix(quad.out_color.z(), texel.z(), dst_alpha));
break;
}
default: