looking-glass/client/renderers/EGL/shader/desktop_rgb.frag

60 lines
1.1 KiB
GLSL

#version 300 es
#extension GL_OES_EGL_image_external_essl3 : enable
precision highp float;
#define EGL_SCALE_AUTO 0
#define EGL_SCALE_NEAREST 1
#define EGL_SCALE_LINEAR 2
#define EGL_SCALE_MAX 3
#include "color_blind.h"
#include "hdr.h"
in vec2 uv;
out vec4 color;
uniform sampler2D sampler1;
uniform int scaleAlgo;
uniform float nvGain;
uniform int cbMode;
uniform bool isHDR;
uniform bool mapHDRtoSDR;
uniform float mapHDRGain;
void main()
{
switch (scaleAlgo)
{
case EGL_SCALE_NEAREST:
{
vec2 ts = vec2(textureSize(sampler1, 0));
color = texelFetch(sampler1, ivec2(uv * ts), 0);
break;
}
case EGL_SCALE_LINEAR:
{
color = texture(sampler1, uv);
break;
}
}
if (isHDR && mapHDRtoSDR)
color.rgb = mapToSDR(color.rgb, mapHDRGain);
if (cbMode > 0)
color = cbTransform(color, cbMode);
if (nvGain > 0.0)
{
highp float lumi = (0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b);
if (lumi < 0.5)
color *= atanh((1.0 - lumi) * 2.0 - 1.0) + 1.0;
color *= nvGain;
}
color.a = 1.0;
}