mirror of
https://github.com/MobileGL-Dev/MobileGlues.git
synced 2025-09-21 02:04:01 -04:00
[Feat] (Config): Add AngleDepthClearFixMode option.
This commit is contained in:
parent
d16d87fd26
commit
6f5bc9ee81
@ -20,6 +20,7 @@ void init_settings() {
|
||||
global_settings.ext_compute_shader = false;
|
||||
global_settings.max_glsl_cache_size = 30 * 1024 * 1024;
|
||||
global_settings.multidraw_mode = multidraw_mode_t::DrawElements;
|
||||
global_settings.angle_depth_clear_fix_mode = AngleDepthClearFixMode::Disabled;
|
||||
#else
|
||||
|
||||
int success = initialized;
|
||||
@ -36,7 +37,8 @@ void init_settings() {
|
||||
bool enableExtComputeShader = success ? (config_get_int("enableExtComputeShader") != 0) : false;
|
||||
int enableCompatibleMode = success ? config_get_int("enableCompatibleMode") : 0;
|
||||
multidraw_mode_t multidrawMode = success ? static_cast<multidraw_mode_t>(config_get_int("multidrawMode")) : multidraw_mode_t::Auto;
|
||||
|
||||
AngleDepthClearFixMode angleDepthClearFixMode = success ? static_cast<AngleDepthClearFixMode>(config_get_int("angleDepthClearFixMode")) : AngleDepthClearFixMode::Disabled;
|
||||
|
||||
size_t maxGlslCacheSize = 0;
|
||||
if (config_get_int("maxGlslCacheSize") > 0) {
|
||||
maxGlslCacheSize = success ? config_get_int("maxGlslCacheSize") * 1024 * 1024 : 0;
|
||||
@ -51,6 +53,9 @@ void init_settings() {
|
||||
if (static_cast<int>(multidrawMode) < 0 || static_cast<int>(multidrawMode) >= static_cast<int>(multidraw_mode_t::MaxValue)) {
|
||||
multidrawMode = multidraw_mode_t::Auto;
|
||||
}
|
||||
if (static_cast<int>(angleDepthClearFixMode) < 0 || static_cast<int>(angleDepthClearFixMode) >= static_cast<int>(AngleDepthClearFixMode::MaxValue)) {
|
||||
angleDepthClearFixMode = AngleDepthClearFixMode::Disabled;
|
||||
}
|
||||
if (enableCompatibleMode < 0 || enableCompatibleMode > 1) {
|
||||
enableCompatibleMode = 0;
|
||||
}
|
||||
@ -72,6 +77,7 @@ void init_settings() {
|
||||
enableExtComputeShader = false;
|
||||
maxGlslCacheSize = 0;
|
||||
enableCompatibleMode = 0;
|
||||
angleDepthClearFixMode = AngleDepthClearFixMode::Disabled;
|
||||
}
|
||||
|
||||
AngleMode finalAngleMode = AngleMode::Disabled;
|
||||
@ -146,6 +152,7 @@ void init_settings() {
|
||||
global_settings.ext_compute_shader = enableExtComputeShader;
|
||||
global_settings.max_glsl_cache_size = maxGlslCacheSize;
|
||||
global_settings.multidraw_mode = multidrawMode;
|
||||
global_settings.angle_depth_clear_fix_mode = angleDepthClearFixMode;
|
||||
#endif
|
||||
|
||||
std::string draw_mode_str;
|
||||
@ -173,6 +180,7 @@ void init_settings() {
|
||||
LOG_V("[MobileGlues] Setting: maxGlslCacheSize = %i",
|
||||
static_cast<int>(global_settings.max_glsl_cache_size / 1024 / 1024))
|
||||
LOG_V("[MobileGlues] Setting: multidrawMode = %s", draw_mode_str.c_str())
|
||||
LOG_V("[MobileGlues] Setting: angleDepthClearFixMode = %i", static_cast<int>(angleDepthClearFixMode))
|
||||
}
|
||||
|
||||
void init_settings_post() {
|
||||
|
@ -50,6 +50,12 @@ extern "C" {
|
||||
Level2 = 3
|
||||
};
|
||||
|
||||
enum class AngleDepthClearFixMode : int {
|
||||
Disabled = 0,
|
||||
Mode1 = 1,
|
||||
MaxValue
|
||||
};
|
||||
|
||||
struct global_settings_t {
|
||||
AngleMode angle;
|
||||
IgnoreErrorLevel ignore_error;
|
||||
@ -57,6 +63,7 @@ extern "C" {
|
||||
bool ext_compute_shader;
|
||||
size_t max_glsl_cache_size;
|
||||
multidraw_mode_t multidraw_mode;
|
||||
AngleDepthClearFixMode angle_depth_clear_fix_mode;
|
||||
};
|
||||
|
||||
extern struct global_settings_t global_settings;
|
||||
|
@ -111,7 +111,10 @@ void glClear(GLbitfield mask) {
|
||||
LOG();
|
||||
LOG_D("glClear, mask = 0x%x", mask);
|
||||
|
||||
if (global_settings.angle == AngleMode::Enabled && mask == GL_DEPTH_BUFFER_BIT && fabs(currentDepthValue - 1.0f) <= 0.001f) {
|
||||
if (global_settings.angle_depth_clear_fix_mode == AngleDepthClearFixMode::Mode1 &&
|
||||
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();
|
||||
// Clear again
|
||||
|
Loading…
x
Reference in New Issue
Block a user