From f95336befec12441b7859f06ee4900079dd1b11b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 30 Mar 2025 15:13:39 -0500 Subject: [PATCH] renderGL: setting to set settings to set stencil a nd buffer size it appears this may be the cause of visual glitches --- src/gui/gui.h | 2 ++ src/gui/render/renderGL.cpp | 6 ++++-- src/gui/render/renderGL1.cpp | 6 ++++-- src/gui/settings.cpp | 29 ++++++++++++++++++++++------- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/gui/gui.h b/src/gui/gui.h index 522a03804..7ca2aabcf 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1996,6 +1996,7 @@ class FurnaceGUI { int glBlueSize; int glAlphaSize; int glDepthSize; + int glSetBS; int glStencilSize; int glBufferSize; int glDoubleBuffer; @@ -2248,6 +2249,7 @@ class FurnaceGUI { glBlueSize(8), glAlphaSize(0), glDepthSize(24), + glSetBS(0), glStencilSize(0), glBufferSize(32), glDoubleBuffer(1), diff --git a/src/gui/render/renderGL.cpp b/src/gui/render/renderGL.cpp index 9a5e29b91..8a10ad030 100644 --- a/src/gui/render/renderGL.cpp +++ b/src/gui/render/renderGL.cpp @@ -625,8 +625,10 @@ void FurnaceGUIRenderGL::preInit(const DivConfig& conf) { SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,conf.getInt("glAlphaSize",0)); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,conf.getInt("glDoubleBuffer",1)); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,conf.getInt("glDepthSize",24)); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,conf.getInt("glStencilSize",0)); - SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,conf.getInt("glBufferSize",32)); + if (conf.getInt("glSetBS",0)) { + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,conf.getInt("glStencilSize",0)); + SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,conf.getInt("glBufferSize",32)); + } } #define LOAD_PROC_MANDATORY(_v,_t,_s) \ diff --git a/src/gui/render/renderGL1.cpp b/src/gui/render/renderGL1.cpp index 8468a21c9..e689c379d 100644 --- a/src/gui/render/renderGL1.cpp +++ b/src/gui/render/renderGL1.cpp @@ -279,8 +279,10 @@ void FurnaceGUIRenderGL1::preInit(const DivConfig& conf) { SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,conf.getInt("glAlphaSize",0)); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,conf.getInt("glDoubleBuffer",1)); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,conf.getInt("glDepthSize",24)); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,conf.getInt("glStencilSize",0)); - SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,conf.getInt("glBufferSize",32)); + if (conf.getInt("glSetBS",0)) { + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,conf.getInt("glStencilSize",0)); + SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,conf.getInt("glBufferSize",32)); + } } #define LOAD_PROC_MANDATORY(_v,_t,_s) \ diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 8d92374b9..bdbba3584 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -705,16 +705,26 @@ void FurnaceGUI::drawSettings() { if (settings.glDepthSize>128) settings.glDepthSize=128; settingsChanged=true; } - if (ImGui::InputInt(_("Stencil buffer size"),&settings.glStencilSize)) { - if (settings.glStencilSize<0) settings.glStencilSize=0; - if (settings.glStencilSize>32) settings.glStencilSize=32; + + bool glSetBSB=settings.glSetBS; + if (ImGui::Checkbox(_("Set stencil and buffer sizes"),&glSetBSB)) { + settings.glSetBS=glSetBSB; settingsChanged=true; } - if (ImGui::InputInt(_("Buffer size"),&settings.glBufferSize)) { - if (settings.glBufferSize<0) settings.glBufferSize=0; - if (settings.glBufferSize>128) settings.glBufferSize=128; - settingsChanged=true; + + if (settings.glSetBS) { + if (ImGui::InputInt(_("Stencil buffer size"),&settings.glStencilSize)) { + if (settings.glStencilSize<0) settings.glStencilSize=0; + if (settings.glStencilSize>32) settings.glStencilSize=32; + settingsChanged=true; + } + if (ImGui::InputInt(_("Buffer size"),&settings.glBufferSize)) { + if (settings.glBufferSize<0) settings.glBufferSize=0; + if (settings.glBufferSize>128) settings.glBufferSize=128; + settingsChanged=true; + } } + bool glDoubleBufferB=settings.glDoubleBuffer; if (ImGui::Checkbox(_("Double buffer"),&glDoubleBufferB)) { settings.glDoubleBuffer=glDoubleBufferB; @@ -4841,6 +4851,7 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { settings.glBlueSize=conf.getInt("glBlueSize",8); settings.glAlphaSize=conf.getInt("glAlphaSize",0); settings.glDepthSize=conf.getInt("glDepthSize",24); + settings.glSetBS=conf.getInt("glSetBS",0); settings.glStencilSize=conf.getInt("glStencilSize",0); settings.glBufferSize=conf.getInt("glBufferSize",32); settings.glDoubleBuffer=conf.getInt("glDoubleBuffer",1); @@ -5395,7 +5406,9 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { clampSetting(settings.glBlueSize,0,32); clampSetting(settings.glAlphaSize,0,32); clampSetting(settings.glDepthSize,0,128); + clampSetting(settings.glSetBS,0,1); clampSetting(settings.glStencilSize,0,32); + clampSetting(settings.glBufferSize,0,128); clampSetting(settings.glDoubleBuffer,0,1); clampSetting(settings.backupEnable,0,1); clampSetting(settings.backupInterval,10,86400); @@ -5432,7 +5445,9 @@ void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { conf.set("glBlueSize",settings.glBlueSize); conf.set("glAlphaSize",settings.glAlphaSize); conf.set("glDepthSize",settings.glDepthSize); + conf.set("glSetBS",settings.glSetBS); conf.set("glStencilSize",settings.glStencilSize); + conf.set("glBufferSize",settings.glBufferSize); conf.set("glDoubleBuffer",settings.glDoubleBuffer); conf.set("vsync",settings.vsync);