diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp b/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp index 6966fc0a6..928a20b90 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp @@ -95,6 +95,7 @@ namespace Nz::GL { ContextType type = ContextType::OpenGL_ES; bool doubleBuffering = true; + bool wrapErrorHandling = false; unsigned int bitsPerPixel = 32; unsigned int depthBits = 24; unsigned int glMajorVersion = 0; diff --git a/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp b/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp index 2a43943ac..b99252d12 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp @@ -26,6 +26,9 @@ namespace Nz GL::ContextParams params; params.type = loader.GetPreferredContextType(); +#ifdef NAZARA_OPENGLRENDERER_DEBUG + params.wrapErrorHandling = true; +#endif m_referenceContext = loader.CreateContext(this, params); if (!m_referenceContext) diff --git a/src/Nazara/OpenGLRenderer/OpenGLRenderWindow.cpp b/src/Nazara/OpenGLRenderer/OpenGLRenderWindow.cpp index f45346024..8b2dd7c0d 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLRenderWindow.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLRenderWindow.cpp @@ -44,6 +44,9 @@ namespace Nz OpenGLDevice& device = static_cast(*m_owner.GetRenderDevice()); GL::ContextParams contextParams; +#ifdef NAZARA_OPENGLRENDERER_DEBUG + contextParams.wrapErrorHandling = true; +#endif //TODO: Pass render window parameters to context m_context = device.CreateContext(contextParams, dummySurface->GetWindowHandle()); diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp index 0b79f61d7..f1d90c1c6 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp @@ -26,7 +26,7 @@ namespace Nz::GL struct GLWrapper; template - struct GLWrapper + struct GLWrapper { static auto WrapErrorHandling() { @@ -37,8 +37,6 @@ namespace Nz::GL FuncType funcPtr = reinterpret_cast(context->GetFunctionByIndex(FuncIndex)); - context->ClearErrorStack(); - if constexpr (std::is_same_v) { funcPtr(std::forward(args)...); @@ -79,16 +77,14 @@ namespace Nz::GL func = reinterpret_cast(originalFuncPtr); -#if defined(NAZARA_OPENGLRENDERER_DEBUG) && (!defined(NAZARA_COMPILER_MSVC) || defined(NAZARA_PLATFORM_x64)) - if (func) + if (func && wrapErrorHandling) { if (std::strcmp(funcName, "glGetError") != 0) //< Prevent infinite recursion { - using Wrapper = GLWrapper>; + using Wrapper = GLWrapper; func = Wrapper::WrapErrorHandling(); } } -#endif if (!func) { @@ -105,6 +101,7 @@ namespace Nz::GL } Context& context; + bool wrapErrorHandling = false; }; @@ -326,6 +323,7 @@ namespace Nz::GL } SymbolLoader loader(*this); + loader.wrapErrorHandling = params.wrapErrorHandling; try {