Files
LookingGlass/client/renderers/EGL/shader/cursor_rgb.frag

48 lines
1.0 KiB
GLSL

#version 300 es
precision highp float;
precision highp int;
#include "color_blind.h"
#include "hdr.h"
in vec2 uv;
out vec4 color;
uniform sampler2D sampler1;
uniform float scale;
uniform int cbMode;
uniform bool mapSDRtoPQ;
uniform float sdrWhiteLevel;
void main()
{
if (scale > 1.0)
{
vec2 ts = vec2(textureSize(sampler1, 0));
vec2 px = (uv - (0.5 / ts)) * ts;
if (px.x < 0.0 || px.y < 0.0)
discard;
color = texelFetch(sampler1, ivec2(px), 0);
}
else
color = texture(sampler1, uv);
if (cbMode > 0)
color = cbTransform(color, cbMode);
if (mapSDRtoPQ)
{
if (color.a > 0.0)
{
// Cursor pixels are premultiplied. Convert the straight color to PQ,
// then premultiply again so the blend operation remains valid.
vec3 srgb = clamp(color.rgb / color.a, 0.0, 1.0);
vec3 linear = bt709to2020(srgb2lin(srgb));
color.rgb = lin2pq(linear * (sdrWhiteLevel / 10000.0)) * color.a;
}
else
color.rgb = vec3(0.0);
}
}