OpenRCT2/data/shaders/applytransparency.frag

45 lines
1.1 KiB
GLSL

#version 150
// clang-format off
uniform usampler2D uOpaqueTex;
uniform sampler2D uOpaqueDepth;
uniform usampler2D uTransparentTex;
uniform sampler2D uTransparentDepth;
uniform usampler2D uPaletteTex;
uniform usampler2D uBlendPaletteTex;
// clang-format off
in vec2 fTextureCoordinate;
out uint oColour;
void main()
{
uint opaque = texture(uOpaqueTex, fTextureCoordinate).r;
float opaqueDepth = texture(uOpaqueDepth, fTextureCoordinate).r;
uint transparent = texture(uTransparentTex, fTextureCoordinate).r;
float transparentDepth = texture(uTransparentDepth, fTextureCoordinate).r;
if (opaqueDepth <= transparentDepth)
{
transparent = 0u;
}
uint blendColour = (transparent & 0xff00u) >> 8;
if(blendColour > 0u)
{
if((transparent & 0x00ffu) != 0u)
{
oColour = blendColour;
}
else
{
oColour = texture(uBlendPaletteTex, vec2(opaque, blendColour) / 256.f).r;
}
}
else
{
oColour = texture(uPaletteTex, vec2(opaque, transparent) / 256.f).r;
}
}