From 90d7d3c1706f908aeddc5c0b24f14a53517b4c2f Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Wed, 16 Jul 2025 22:55:37 +0800 Subject: [PATCH] [Fix] (GL): ANGLE depth clear workaround no.2 --- src/main/cpp/config/settings.h | 1 + src/main/cpp/gl/gl.cpp | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/cpp/config/settings.h b/src/main/cpp/config/settings.h index 07bed91..f2cf3ba 100644 --- a/src/main/cpp/config/settings.h +++ b/src/main/cpp/config/settings.h @@ -53,6 +53,7 @@ extern "C" { enum class AngleDepthClearFixMode : int { Disabled = 0, Mode1 = 1, + Mode2 = 2, MaxValue }; diff --git a/src/main/cpp/gl/gl.cpp b/src/main/cpp/gl/gl.cpp index 406407f..1d50f82 100644 --- a/src/main/cpp/gl/gl.cpp +++ b/src/main/cpp/gl/gl.cpp @@ -111,12 +111,17 @@ void glClear(GLbitfield mask) { LOG(); LOG_D("glClear, mask = 0x%x", mask); - if (global_settings.angle_depth_clear_fix_mode == AngleDepthClearFixMode::Mode1 && - global_settings.angle == AngleMode::Enabled && + if (global_settings.angle == AngleMode::Enabled && mask == GL_DEPTH_BUFFER_BIT && fabs(currentDepthValue - 1.0f) <= 0.001f) { - // Workaround for ANGLE depth-clear bug: if depth≈1.0, draw a fullscreen triangle at z=1.0 to force actual depth buffer write. - DrawDepthClearTri(); + if (global_settings.angle_depth_clear_fix_mode == AngleDepthClearFixMode::Mode1) + // Workaround for ANGLE depth-clear bug: if depth≈1.0, draw a fullscreen triangle at z=1.0 to force actual depth buffer write. + DrawDepthClearTri(); + else if (global_settings.angle_depth_clear_fix_mode == AngleDepthClearFixMode::Mode2) { + // Or just explicitly clear depth buffer and see what's happened + const GLfloat clear_depth_value = 1.0f; + GLES.glClearBufferfv(GL_DEPTH, 0, &clear_depth_value); + } // Clear again GLES.glClear(mask); } else {