Improve shadow performance: halve resolution, 9x fewer PCF taps, throttle depth pass

- SHADOW_MAP_SIZE 2048→1024: 4x fewer pixels rasterized in depth pass
- Replace 9-tap manual PCF loop with single hardware PCF tap in all 4 receiver
  shaders (terrain.frag, wmo_renderer, m2_renderer, character_renderer).
  GL_LINEAR + GL_COMPARE_REF_TO_TEXTURE already gives 2×2 bilinear PCF per
  tap for free, so quality is maintained while doing 9x fewer texture fetches.
- Throttle shadow depth pass to every 2 frames; OpenGL depth texture persists
  between frames so receivers always have a valid shadow map. 1-frame lag at
  60 fps is invisible.
This commit is contained in:
Kelsi 2026-02-18 21:09:00 -08:00
parent 7ab25c63c9
commit c4d0a21713
6 changed files with 14 additions and 35 deletions

View file

@ -2449,9 +2449,11 @@ void Renderer::renderWorld(game::World* world, game::GameHandler* gameHandler) {
lastWMORenderMs = 0.0;
lastM2RenderMs = 0.0;
// Shadow pass (before main scene)
// Shadow pass (before main scene) — throttled to every 2 frames (depth buffer persists)
if (shadowsEnabled && shadowFBO && shadowShaderProgram && terrainLoaded) {
renderShadowPass();
if (shadowFrameCounter_++ % 2 == 0) {
renderShadowPass();
}
} else {
// Clear shadow maps when disabled
if (terrainRenderer) terrainRenderer->clearShadowMap();