mirror of https://github.com/OpenRCT2/OpenRCT2.git
62 lines
1.3 KiB
GLSL
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;
|
|
}
|
|
}
|