mirror of
https://github.com/MobileGL-Dev/MobileGlues.git
synced 2025-09-22 10:42:11 -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.ext_compute_shader = false;
|
||||||
global_settings.max_glsl_cache_size = 30 * 1024 * 1024;
|
global_settings.max_glsl_cache_size = 30 * 1024 * 1024;
|
||||||
global_settings.multidraw_mode = multidraw_mode_t::DrawElements;
|
global_settings.multidraw_mode = multidraw_mode_t::DrawElements;
|
||||||
|
global_settings.angle_depth_clear_fix_mode = AngleDepthClearFixMode::Disabled;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
int success = initialized;
|
int success = initialized;
|
||||||
@ -36,6 +37,7 @@ void init_settings() {
|
|||||||
bool enableExtComputeShader = success ? (config_get_int("enableExtComputeShader") != 0) : false;
|
bool enableExtComputeShader = success ? (config_get_int("enableExtComputeShader") != 0) : false;
|
||||||
int enableCompatibleMode = success ? config_get_int("enableCompatibleMode") : 0;
|
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;
|
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;
|
size_t maxGlslCacheSize = 0;
|
||||||
if (config_get_int("maxGlslCacheSize") > 0) {
|
if (config_get_int("maxGlslCacheSize") > 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)) {
|
if (static_cast<int>(multidrawMode) < 0 || static_cast<int>(multidrawMode) >= static_cast<int>(multidraw_mode_t::MaxValue)) {
|
||||||
multidrawMode = multidraw_mode_t::Auto;
|
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) {
|
if (enableCompatibleMode < 0 || enableCompatibleMode > 1) {
|
||||||
enableCompatibleMode = 0;
|
enableCompatibleMode = 0;
|
||||||
}
|
}
|
||||||
@ -72,6 +77,7 @@ void init_settings() {
|
|||||||
enableExtComputeShader = false;
|
enableExtComputeShader = false;
|
||||||
maxGlslCacheSize = 0;
|
maxGlslCacheSize = 0;
|
||||||
enableCompatibleMode = 0;
|
enableCompatibleMode = 0;
|
||||||
|
angleDepthClearFixMode = AngleDepthClearFixMode::Disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
AngleMode finalAngleMode = AngleMode::Disabled;
|
AngleMode finalAngleMode = AngleMode::Disabled;
|
||||||
@ -146,6 +152,7 @@ void init_settings() {
|
|||||||
global_settings.ext_compute_shader = enableExtComputeShader;
|
global_settings.ext_compute_shader = enableExtComputeShader;
|
||||||
global_settings.max_glsl_cache_size = maxGlslCacheSize;
|
global_settings.max_glsl_cache_size = maxGlslCacheSize;
|
||||||
global_settings.multidraw_mode = multidrawMode;
|
global_settings.multidraw_mode = multidrawMode;
|
||||||
|
global_settings.angle_depth_clear_fix_mode = angleDepthClearFixMode;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::string draw_mode_str;
|
std::string draw_mode_str;
|
||||||
@ -173,6 +180,7 @@ void init_settings() {
|
|||||||
LOG_V("[MobileGlues] Setting: maxGlslCacheSize = %i",
|
LOG_V("[MobileGlues] Setting: maxGlslCacheSize = %i",
|
||||||
static_cast<int>(global_settings.max_glsl_cache_size / 1024 / 1024))
|
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: multidrawMode = %s", draw_mode_str.c_str())
|
||||||
|
LOG_V("[MobileGlues] Setting: angleDepthClearFixMode = %i", static_cast<int>(angleDepthClearFixMode))
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_settings_post() {
|
void init_settings_post() {
|
||||||
|
@ -50,6 +50,12 @@ extern "C" {
|
|||||||
Level2 = 3
|
Level2 = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class AngleDepthClearFixMode : int {
|
||||||
|
Disabled = 0,
|
||||||
|
Mode1 = 1,
|
||||||
|
MaxValue
|
||||||
|
};
|
||||||
|
|
||||||
struct global_settings_t {
|
struct global_settings_t {
|
||||||
AngleMode angle;
|
AngleMode angle;
|
||||||
IgnoreErrorLevel ignore_error;
|
IgnoreErrorLevel ignore_error;
|
||||||
@ -57,6 +63,7 @@ extern "C" {
|
|||||||
bool ext_compute_shader;
|
bool ext_compute_shader;
|
||||||
size_t max_glsl_cache_size;
|
size_t max_glsl_cache_size;
|
||||||
multidraw_mode_t multidraw_mode;
|
multidraw_mode_t multidraw_mode;
|
||||||
|
AngleDepthClearFixMode angle_depth_clear_fix_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct global_settings_t global_settings;
|
extern struct global_settings_t global_settings;
|
||||||
|
@ -111,7 +111,10 @@ void glClear(GLbitfield mask) {
|
|||||||
LOG();
|
LOG();
|
||||||
LOG_D("glClear, mask = 0x%x", mask);
|
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.
|
// 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();
|
DrawDepthClearTri();
|
||||||
// Clear again
|
// Clear again
|
||||||
|
Loading…
x
Reference in New Issue
Block a user