diff options
| author | ModMaker101 <119018978+ModMaker101@users.noreply.github.com> | 2026-03-07 04:00:38 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-07 03:00:38 -0600 |
| commit | e754bad17e5770ccbcceb45c39f31d7e8bf6ff58 (patch) | |
| tree | 924e0f3b153c62f9416d05c6a1e8c3155c33ffad /Minecraft.Client/GameRenderer.cpp | |
| parent | cc85ecf05af6dcc35afc1ab905ce306b04055fc9 (diff) | |
Improve gamma shader parity - fixes #611 (#790)
* Call gamma post process after `ui.render` #611
* Fixed "washed out" look.
* Improve gamma pass and cache viewport size
Diffstat (limited to 'Minecraft.Client/GameRenderer.cpp')
| -rw-r--r-- | Minecraft.Client/GameRenderer.cpp | 82 |
1 files changed, 48 insertions, 34 deletions
diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp index 20a0f1e3..5790bea2 100644 --- a/Minecraft.Client/GameRenderer.cpp +++ b/Minecraft.Client/GameRenderer.cpp @@ -945,9 +945,9 @@ float GameRenderer::ComputeGammaFromSlider(float slider0to100) slider = min(slider, 100.0f); if (slider > 50.0f) - return 1.0f + (slider - 50.0f) / 50.0f * 3.0f; // 1.0 -> 4.0 + return 1.0f + (slider - 50.0f) / 50.0f * 0.5f; // 1.0 -> 1.5 else - return 1.0f - (50.0f - slider) / 50.0f * 0.85f; // 1.0 -> 0.15 + return 1.0f - (50.0f - slider) / 50.0f * 0.5f; // 1.0 -> 0.5 } void GameRenderer::CachePlayerGammas() @@ -1057,20 +1057,36 @@ void GameRenderer::ApplyGammaPostProcess() const D3D11_VIEWPORT vps[NUM_LIGHT_TEXTURES]; float gammas[NUM_LIGHT_TEXTURES]; const UINT n = BuildPlayerViewports(vps, gammas, NUM_LIGHT_TEXTURES); - if (n == 0) - return; - bool anyEffect = false; - for (UINT i = 0; i < n; ++i) + float gamma = 1.0f; + bool hasPlayers = n > 0; + + if (hasPlayers) { - if (gammas[i] < 0.99f || gammas[i] > 1.01f) + bool anyEffect = false; + for (UINT i = 0; i < n; ++i) { - anyEffect = true; - break; + if (gammas[i] < 0.99f || gammas[i] > 1.01f) + { + anyEffect = true; + break; + } } + if (!anyEffect) + return; } - if (!anyEffect) + else + { + const float slider = app.GetGameSettings(0, eGameSetting_Gamma); + gamma = ComputeGammaFromSlider(slider); + if (gamma < 0.99f || gamma > 1.01f) + { + PostProcesser::GetInstance().SetGamma(gamma); + PostProcesser::GetInstance().Apply(); + return; + } return; + } if (n == 1) { @@ -1175,35 +1191,33 @@ void GameRenderer::render(float a, bool bFirst) renderLevel(a, lastNsTime + 1000000000 / maxFps); } - lastNsTime = System::nanoTime(); + lastNsTime = System::nanoTime(); - if (!mc->options->hideGui || mc->screen != NULL) + if (!mc->options->hideGui || mc->screen != NULL) + { + mc->gui->render(a, mc->screen != NULL, xMouse, yMouse); + } + } + else { - mc->gui->render(a, mc->screen != NULL, xMouse, yMouse); + glViewport(0, 0, mc->width, mc->height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + setupGuiScreen(); + + lastNsTime = System::nanoTime(); } - } - else - { - glViewport(0, 0, mc->width, mc->height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - setupGuiScreen(); - - lastNsTime = System::nanoTime(); - } - if (mc->screen != NULL) - { - glClear(GL_DEPTH_BUFFER_BIT); - mc->screen->render(xMouse, yMouse, a); - if (mc->screen != NULL && mc->screen->particles != NULL) mc->screen->particles->render(a); - } - - ApplyGammaPostProcess(); -} + if (mc->screen != NULL) + { + glClear(GL_DEPTH_BUFFER_BIT); + mc->screen->render(xMouse, yMouse, a); + if (mc->screen != NULL && mc->screen->particles != NULL) mc->screen->particles->render(a); + } + } void GameRenderer::renderLevel(float a) { |
