mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 12:32:34 +00:00
Make sure we never pass a negative value to pow, and optimize gamma uniform
This commit is contained in:
parent
a03b2ff48b
commit
a8d1197ea7
4 changed files with 7 additions and 7 deletions
|
@ -306,13 +306,13 @@ void FGLRenderer::CopyToBackbuffer(const GL_IRECT *bounds, bool applyGamma)
|
||||||
mPresentShader->InputTexture.Set(0);
|
mPresentShader->InputTexture.Set(0);
|
||||||
if (!applyGamma || framebuffer->IsHWGammaActive())
|
if (!applyGamma || framebuffer->IsHWGammaActive())
|
||||||
{
|
{
|
||||||
mPresentShader->Gamma.Set(1.0f);
|
mPresentShader->InvGamma.Set(1.0f);
|
||||||
mPresentShader->Contrast.Set(1.0f);
|
mPresentShader->Contrast.Set(1.0f);
|
||||||
mPresentShader->Brightness.Set(0.0f);
|
mPresentShader->Brightness.Set(0.0f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mPresentShader->Gamma.Set(clamp<float>(Gamma, 0.1f, 4.f));
|
mPresentShader->InvGamma.Set(1.0f / clamp<float>(Gamma, 0.1f, 4.f));
|
||||||
mPresentShader->Contrast.Set(clamp<float>(vid_contrast, 0.1f, 3.f));
|
mPresentShader->Contrast.Set(clamp<float>(vid_contrast, 0.1f, 3.f));
|
||||||
mPresentShader->Brightness.Set(clamp<float>(vid_brightness, -0.8f, 0.8f));
|
mPresentShader->Brightness.Set(clamp<float>(vid_brightness, -0.8f, 0.8f));
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ void FPresentShader::Bind()
|
||||||
mShader.SetAttribLocation(0, "PositionInProjection");
|
mShader.SetAttribLocation(0, "PositionInProjection");
|
||||||
mShader.SetAttribLocation(1, "UV");
|
mShader.SetAttribLocation(1, "UV");
|
||||||
InputTexture.Init(mShader, "InputTexture");
|
InputTexture.Init(mShader, "InputTexture");
|
||||||
Gamma.Init(mShader, "Gamma");
|
InvGamma.Init(mShader, "InvGamma");
|
||||||
Contrast.Init(mShader, "Contrast");
|
Contrast.Init(mShader, "Contrast");
|
||||||
Brightness.Init(mShader, "Brightness");
|
Brightness.Init(mShader, "Brightness");
|
||||||
Scale.Init(mShader, "UVScale");
|
Scale.Init(mShader, "UVScale");
|
||||||
|
|
|
@ -9,7 +9,7 @@ public:
|
||||||
void Bind();
|
void Bind();
|
||||||
|
|
||||||
FBufferedUniform1i InputTexture;
|
FBufferedUniform1i InputTexture;
|
||||||
FBufferedUniform1f Gamma;
|
FBufferedUniform1f InvGamma;
|
||||||
FBufferedUniform1f Contrast;
|
FBufferedUniform1f Contrast;
|
||||||
FBufferedUniform1f Brightness;
|
FBufferedUniform1f Brightness;
|
||||||
FBufferedUniform2f Scale;
|
FBufferedUniform2f Scale;
|
||||||
|
|
|
@ -3,14 +3,14 @@ in vec2 TexCoord;
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
uniform sampler2D InputTexture;
|
uniform sampler2D InputTexture;
|
||||||
uniform float Gamma;
|
uniform float InvGamma;
|
||||||
uniform float Contrast;
|
uniform float Contrast;
|
||||||
uniform float Brightness;
|
uniform float Brightness;
|
||||||
|
|
||||||
vec4 ApplyGamma(vec4 c)
|
vec4 ApplyGamma(vec4 c)
|
||||||
{
|
{
|
||||||
vec3 val = c.rgb * Contrast - (Contrast - 1.0) * 0.5;
|
vec3 val = max(c.rgb * Contrast - (Contrast - 1.0) * 0.5, vec3(0.0));
|
||||||
val = pow(val, vec3(1.0 / Gamma));
|
val = pow(val, vec3(InvGamma));
|
||||||
val += Brightness * 0.5;
|
val += Brightness * 0.5;
|
||||||
return vec4(val, c.a);
|
return vec4(val, c.a);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue