Browse Source

Only use opengl debug groups if the LOVE_GRAPHICS_DEBUG environment variable is set to 1.

--HG--
branch : minor
Alex Szpakowski 8 years ago
parent
commit
97789b18c0

+ 15 - 0
src/modules/graphics/Graphics.cpp

@@ -28,6 +28,7 @@
 
 
 // C++
 // C++
 #include <algorithm>
 #include <algorithm>
+#include <stdlib.h>
 
 
 namespace love
 namespace love
 {
 {
@@ -35,6 +36,8 @@ namespace graphics
 {
 {
 
 
 static bool gammaCorrect = false;
 static bool gammaCorrect = false;
+static bool debugMode = false;
+static bool debugModeQueried = false;
 
 
 void setGammaCorrect(bool gammacorrect)
 void setGammaCorrect(bool gammacorrect)
 {
 {
@@ -80,6 +83,18 @@ Colorf unGammaCorrectColor(const Colorf &c)
 	return r;
 	return r;
 }
 }
 
 
+bool isDebugEnabled()
+{
+	if (!debugModeQueried)
+	{
+		const char *debugenv = getenv("LOVE_GRAPHICS_DEBUG");
+		debugMode = debugenv != nullptr && debugenv[0] != '0';
+		debugModeQueried = true;
+	}
+
+	return debugMode;
+}
+
 love::Type Graphics::type("graphics", &Module::type);
 love::Type Graphics::type("graphics", &Module::type);
 
 
 Shader::ShaderSource Graphics::defaultShaderCode[Shader::LANGUAGE_MAX_ENUM][2];
 Shader::ShaderSource Graphics::defaultShaderCode[Shader::LANGUAGE_MAX_ENUM][2];

+ 2 - 0
src/modules/graphics/Graphics.h

@@ -88,6 +88,8 @@ void unGammaCorrectColor(Colorf &c);
 Colorf gammaCorrectColor(const Colorf &c);
 Colorf gammaCorrectColor(const Colorf &c);
 Colorf unGammaCorrectColor(const Colorf &c);
 Colorf unGammaCorrectColor(const Colorf &c);
 
 
+bool isDebugEnabled();
+
 class Graphics : public Module
 class Graphics : public Module
 {
 {
 public:
 public:

+ 1 - 11
src/modules/graphics/opengl/Graphics.cpp

@@ -272,17 +272,7 @@ bool Graphics::setMode(int width, int height, int pixelwidth, int pixelheight, b
 	else
 	else
 		setGammaCorrect(false);
 		setGammaCorrect(false);
 
 
-	bool enabledebug = false;
-
-	if (GLAD_VERSION_3_0)
-	{
-		// Enable OpenGL's debug output if a debug context has been created.
-		GLint flags = 0;
-		glGetIntegerv(GL_CONTEXT_FLAGS, &flags);
-		enabledebug = (flags & GL_CONTEXT_FLAG_DEBUG_BIT) != 0;
-	}
-
-	setDebug(enabledebug);
+	setDebug(isDebugEnabled());
 
 
 	if (streamBufferState.vb[0] == nullptr)
 	if (streamBufferState.vb[0] == nullptr)
 	{
 	{

+ 26 - 0
src/modules/graphics/opengl/OpenGL.cpp

@@ -64,6 +64,32 @@ static void *LOVEGetProcAddress(const char *name)
 	return SDL_GL_GetProcAddress(name);
 	return SDL_GL_GetProcAddress(name);
 }
 }
 
 
+OpenGL::TempDebugGroup::TempDebugGroup(const char *name)
+{
+	if (isDebugEnabled())
+	{
+		if (GLAD_VERSION_4_3 || (GLAD_KHR_debug && !GLAD_ES_VERSION_2_0))
+			glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, 0, (const GLchar *) name);
+		else if (GLAD_ES_VERSION_2_0 && GLAD_KHR_debug)
+			glPushDebugGroupKHR(GL_DEBUG_SOURCE_APPLICATION, 0, 0, (const GLchar *) name);
+		else if (GLAD_EXT_debug_marker)
+			glPushGroupMarkerEXT(0, (const GLchar *) name);
+	}
+}
+
+OpenGL::TempDebugGroup::~TempDebugGroup()
+{
+	if (isDebugEnabled())
+	{
+		if (GLAD_VERSION_4_3 || (GLAD_KHR_debug && !GLAD_ES_VERSION_2_0))
+			glPopDebugGroup();
+		else if (GLAD_ES_VERSION_2_0 && GLAD_KHR_debug)
+			glPopDebugGroupKHR();
+		else if (GLAD_EXT_debug_marker)
+			glPopGroupMarkerEXT();
+	}
+}
+
 OpenGL::OpenGL()
 OpenGL::OpenGL()
 	: stats()
 	: stats()
 	, contextInitialized(false)
 	, contextInitialized(false)

+ 2 - 19
src/modules/graphics/opengl/OpenGL.h

@@ -101,25 +101,8 @@ public:
 	{
 	{
 	public:
 	public:
 
 
-		TempDebugGroup(const char *name)
-		{
-			if (GLAD_VERSION_4_3 || (GLAD_KHR_debug && !GLAD_ES_VERSION_2_0))
-				glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, 0, (const GLchar *) name);
-			else if (GLAD_ES_VERSION_2_0 && GLAD_KHR_debug)
-				glPushDebugGroupKHR(GL_DEBUG_SOURCE_APPLICATION, 0, 0, (const GLchar *) name);
-			else if (GLAD_EXT_debug_marker)
-				glPushGroupMarkerEXT(0, (const GLchar *) name);
-		}
-
-		~TempDebugGroup()
-		{
-			if (GLAD_VERSION_4_3 || (GLAD_KHR_debug && !GLAD_ES_VERSION_2_0))
-				glPopDebugGroup();
-			else if (GLAD_ES_VERSION_2_0 && GLAD_KHR_debug)
-				glPopDebugGroupKHR();
-			else if (GLAD_EXT_debug_marker)
-				glPopGroupMarkerEXT();
-		}
+		TempDebugGroup(const char *name);
+		~TempDebugGroup();
 	};
 	};
 
 
 	struct Stats
 	struct Stats

+ 1 - 2
src/modules/window/sdl/Window.cpp

@@ -235,8 +235,7 @@ std::vector<Window::ContextAttribs> Window::getContextAttribsList() const
 	}
 	}
 
 
 	// Do we want a debug context?
 	// Do we want a debug context?
-	const char *debughint = SDL_GetHint("LOVE_GRAPHICS_DEBUG");
-	bool debug = (debughint != nullptr && debughint[0] != '0');
+	bool debug = love::graphics::isDebugEnabled();
 
 
 	const char *preferGL2hint = SDL_GetHint("LOVE_GRAPHICS_USE_GL2");
 	const char *preferGL2hint = SDL_GetHint("LOVE_GRAPHICS_USE_GL2");
 	bool preferGL2 = (preferGL2hint != nullptr && preferGL2hint[0] != '0');
 	bool preferGL2 = (preferGL2hint != nullptr && preferGL2hint[0] != '0');