Jason McKesson avatar Jason McKesson committed bc45d8b

The framework now uses ARB_debug_output to help catch errors.

Comments (0)

Files changed (1)

framework/framework.cpp

 #include <fstream>
 #include <sstream>
 #include <string.h>
-#include <glload/gl_3_2_comp.h>
+#include <glload/gl_3_3.h>
 #include <glload/gll.h>
 #include <GL/freeglut.h>
 #include "framework.h"
 
 unsigned int defaults(unsigned int displayMode, int &width, int &height);
 
+void APIENTRY DebugFunc(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
+			   const GLchar* message, GLvoid* userParam)
+{
+	std::string srcName;
+	switch(source)
+	{
+	case GL_DEBUG_SOURCE_API_ARB: srcName = "API"; break;
+	case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB: srcName = "Window System"; break;
+	case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB: srcName = "Shader Compiler"; break;
+	case GL_DEBUG_SOURCE_THIRD_PARTY_ARB: srcName = "Third Party"; break;
+	case GL_DEBUG_SOURCE_APPLICATION_ARB: srcName = "Application"; break;
+	case GL_DEBUG_SOURCE_OTHER_ARB: srcName = "Other"; break;
+	}
+
+	std::string errorType;
+	switch(type)
+	{
+	case GL_DEBUG_TYPE_ERROR_ARB: errorType = "Error"; break;
+	case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: errorType = "Deprecated Functionality"; break;
+	case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: errorType = "Undefined Behavior"; break;
+	case GL_DEBUG_TYPE_PORTABILITY_ARB: errorType = "Portability"; break;
+	case GL_DEBUG_TYPE_PERFORMANCE_ARB: errorType = "Performance"; break;
+	case GL_DEBUG_TYPE_OTHER_ARB: errorType = "Other"; break;
+	}
+
+	std::string typeSeverity;
+	switch(severity)
+	{
+	case GL_DEBUG_SEVERITY_HIGH_ARB: typeSeverity = "High"; break;
+	case GL_DEBUG_SEVERITY_MEDIUM_ARB: typeSeverity = "Medium"; break;
+	case GL_DEBUG_SEVERITY_LOW_ARB: typeSeverity = "Low"; break;
+	}
+
+	printf("%s from %s,\t%s priority\nMessage: %s\n",
+		errorType.c_str(), srcName.c_str(), typeSeverity.c_str(), message);
+}
+
 int main(int argc, char** argv)
 {
 	glutInit(&argc, argv);
 	glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION);
 
 	glload::LoadFunctions();
+
+	if(glext_ARB_debug_output)
+	{
+//		printf("Debug output.");
+		glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
+		glDebugMessageCallbackARB(DebugFunc, (void*)15);
+	}
+
 	init();
 
-// 	glutMouseFunc(MouseButton);
-// 	glutMotionFunc(MouseMotion);
 	glutDisplayFunc(display); 
 	glutReshapeFunc(reshape);
 	glutKeyboardFunc(keyboard);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.