OpenRCT2/data/shaders/fillrect.frag

62 lines
1.3 KiB
GLSL

#version 150
uniform ivec2 uScreenSize;
uniform ivec4 uClip;
uniform int uFlags;
uniform vec4 uColour[2];
uniform sampler2D uSourceFramebuffer;
uniform ivec4 uBounds;
in vec2 fPosition;
out vec4 oColour;
float getluma(vec3 colour)
{
return (colour.r * 0.2126) +
(colour.g * 0.7152) +
(colour.b * 0.0722);
}
void main()
{
if (fPosition.x < uClip.x || fPosition.x > uClip.z ||
fPosition.y < uClip.y || fPosition.y > uClip.w)
{
discard;
}
vec4 targetColour;
int posSum = int(fPosition.x) + int(fPosition.y);
if ((posSum % 2) == 0)
{
targetColour = uColour[0];
}
else
{
targetColour = uColour[1];
}
if ((uFlags & 1) != 0)
{
vec2 textureCoordinates = (fPosition / vec2(uScreenSize)) * vec2(1, -1);
vec4 sourceColour = texture(uSourceFramebuffer, textureCoordinates);
float luma = getluma(sourceColour.rgb);
sourceColour = vec4(vec3(luma), 1);
if (luma < 0.5)
{
oColour = 2.0 * sourceColour * targetColour;
}
else
{
oColour = 1.0 - 2.0 * (1.0 - sourceColour) * (1.0 - targetColour);
}
}
else
{
oColour = targetColour;
}
}