diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg index ffa8bf4b6f..341fdadca2 100644 --- a/binaries/data/config/default.cfg +++ b/binaries/data/config/default.cfg @@ -131,6 +131,8 @@ renderer.backend.debugmessages = "false" renderer.backend.debuglabels = "false" renderer.backend.debugscopedlabels = "false" +renderer.backend.gl.enableframebufferinvalidating = "false" + renderer.backend.vulkan.disabledescriptorindexing = "false" renderer.backend.vulkan.deviceindexoverride = -1 diff --git a/source/renderer/backend/gl/Device.cpp b/source/renderer/backend/gl/Device.cpp index 4a5a430576..615641e36e 100644 --- a/source/renderer/backend/gl/Device.cpp +++ b/source/renderer/backend/gl/Device.cpp @@ -365,11 +365,17 @@ std::unique_ptr CDevice::Create(SDL_Window* window, const bool arb) #endif } + // Some drivers might invalidate an incorrect surface which leads to artifacts. + bool enableFramebufferInvalidating = false; + CFG_GET_VAL("renderer.backend.gl.enableframebufferinvalidating", enableFramebufferInvalidating); + if (enableFramebufferInvalidating) + { #if CONFIG2_GLES - device->m_UseFramebufferInvalidating = ogl_HaveExtension("GL_EXT_discard_framebuffer"); + device->m_UseFramebufferInvalidating = ogl_HaveExtension("GL_EXT_discard_framebuffer"); #else - device->m_UseFramebufferInvalidating = !arb && ogl_HaveExtension("GL_ARB_invalidate_subdata"); + device->m_UseFramebufferInvalidating = !arb && ogl_HaveExtension("GL_ARB_invalidate_subdata"); #endif + } Capabilities& capabilities = device->m_Capabilities; capabilities.ARBShaders = !ogl_HaveExtensions(0, "GL_ARB_vertex_program", "GL_ARB_fragment_program", nullptr);