mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-07-21 23:02:05 +00:00
Render ImGui to an intermediate SDR framebuffer and map it into the native PQ or scRGB output using the Wayland surface reference white. Preserve premultiplied alpha during conversion and limit composition to damaged overlay regions.
36 lines
790 B
GLSL
36 lines
790 B
GLSL
#version 300 es
|
|
precision highp float;
|
|
|
|
#include "hdr.h"
|
|
|
|
in vec2 fragCoord;
|
|
out vec4 color;
|
|
|
|
uniform sampler2D sampler1;
|
|
uniform bool pq;
|
|
uniform float referenceWhiteLevel;
|
|
|
|
void main()
|
|
{
|
|
color = texture(sampler1, fragCoord);
|
|
if (color.a <= 0.0)
|
|
{
|
|
color.rgb = vec3(0.0);
|
|
return;
|
|
}
|
|
|
|
// ImGui's framebuffer contains premultiplied sRGB. Convert the straight
|
|
// color, then premultiply again for composition onto the HDR framebuffer.
|
|
vec3 linear = srgb2lin(clamp(color.rgb / color.a, 0.0, 1.0));
|
|
if (pq)
|
|
{
|
|
linear = bt709to2020(linear);
|
|
color.rgb = lin2pq(linear * (referenceWhiteLevel / 10000.0)) * color.a;
|
|
}
|
|
else
|
|
{
|
|
// scRGB is linear sRGB and defines 1.0 as 80 nits.
|
|
color.rgb = linear * (referenceWhiteLevel / 80.0) * color.a;
|
|
}
|
|
}
|