diff --git a/Globals.cpp b/Globals.cpp index a90b50fd..e689f3ed 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -883,6 +883,11 @@ global_settings::ConfigParse(cParser &Parser) { Parser.getTokens(1); Parser >> gfx_angleplatform; } + else if (token == "gfx.gldebug") + { + Parser.getTokens(1); + Parser >> gfx_gldebug; + } else if (token == "gfx.shadergamma") { Parser.getTokens(1); diff --git a/Globals.h b/Globals.h index 032d2f29..aba8f7f9 100644 --- a/Globals.h +++ b/Globals.h @@ -253,6 +253,7 @@ struct global_settings { bool gfx_shadergamma = false; bool gfx_usegles = false; std::string gfx_angleplatform; + bool gfx_gldebug = false; bool vr = false; std::string vr_backend; diff --git a/application.cpp b/application.cpp index e937fea2..d1b87e2b 100644 --- a/application.cpp +++ b/application.cpp @@ -772,8 +772,12 @@ eu07_application::init_glfw() { Global.bUseVBO = true; // activate core profile for opengl 3.3 renderer if( !Global.gfx_usegles ) { +#ifndef EU07_USEIMGUIIMPLOPENGL2 glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE ); - glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE ); + glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE ); +#else + glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE ); +#endif glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3 ); glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 3 ); } @@ -797,6 +801,9 @@ eu07_application::init_glfw() { #endif } + if (Global.gfx_gldebug) + glfwWindowHint( GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE ); + glfwWindowHint(GLFW_SRGB_CAPABLE, !Global.gfx_shadergamma); if( Global.fullscreen_windowed ) { diff --git a/opengl33renderer.cpp b/opengl33renderer.cpp index aabee814..fa0bd5fc 100644 --- a/opengl33renderer.cpp +++ b/opengl33renderer.cpp @@ -55,15 +55,14 @@ ErrorCallback( GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei l bool opengl33_renderer::Init(GLFWwindow *Window) { -#ifdef EU07_DEBUG_OPENGL - if( GLAD_GL_KHR_debug ) { + if (Global.gfx_gldebug && GLAD_GL_KHR_debug) { glEnable( GL_DEBUG_OUTPUT ); glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS ); glDebugMessageControl( GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION, 0, nullptr, GL_FALSE ); glDebugMessageControl( GL_DONT_CARE, GL_DEBUG_TYPE_PERFORMANCE, GL_DONT_CARE, 0, nullptr, GL_FALSE ); glDebugMessageCallback( ErrorCallback, 0 ); } -#endif + if (!Init_caps()) return false; @@ -4432,8 +4431,8 @@ void opengl33_renderer::Update(double const Deltatime) Pick_Node_Callback([](scene::basic_node *) {}); // dump last opengl error, if any - auto const glerror = ::glGetError(); - if (glerror != GL_NO_ERROR) + int glerror; + while ((glerror = glGetError()) != GL_NO_ERROR) { std::string glerrorstring; if (glerror == GL_INVALID_ENUM)