mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-24 08:00:28 +02:00
The back buffer and its multisampled renderbuffer become GL_RGBA16F (GL_HALF_FLOAT on Android) when display.hdr is on, so blended light past white is kept instead of clipped. A tone mapping pass over each window's 3D view, before the anti-aliasing and the HUD, brings it back into range: neutral (identity below 0.8, a hue-preserving shoulder above), ACES (Narkowicz) or extended Reinhard, after display.hdr_exposure. It writes colour only, leaving the game's destination alpha alone. The display blit becomes a draw that clamps to 1, or, with display.hdr_output on desktop, writes scRGB to a floating-point window up to the display's HDR headroom (SDL's window HDR properties); a driver without such a window falls back to 8 bits. Android turns HDR on only with ES 3.2 or GL_EXT_color_buffer_(half_)float and caps MSAA at the samples RGBA16F allows. Settings are read between frames; toggling display.hdr recreates the back buffer's storage. Checked: the Windows build (clang, no warnings); bloodgulch and a30 with MSAA, FXAA and SMAA, toggling each of the settings while playing with HALO_GL_DEBUG, without GL errors; the frame rate unchanged, the tone mapping pass 0.04 ms at 1080p; neutral leaves the picture as without HDR below 0.8; display.hdr_output on an HDR OLED display. The Android guest's sources pass clang -fsyntax-only for arm64_32; neither Android nor the web build was run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>