49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
// This header contains some useful functions for debugging OpenGL.
|
|
// Remember to disable them when building your final releases.
|
|
|
|
#include <windows.h>
|
|
#include <GL/gl.h>
|
|
#include "glext.h"
|
|
|
|
#define STRINGIFY2(x) #x // Thanks sooda!
|
|
#define STRINGIFY(x) STRINGIFY2(x)
|
|
#define CHECK_ERRORS() assertGlError(STRINGIFY(__LINE__))
|
|
|
|
static GLchar* getErrorString(GLenum errorCode)
|
|
{
|
|
if (errorCode == GL_NO_ERROR) {
|
|
return (GLchar*) "No error";
|
|
}
|
|
else if (errorCode == GL_INVALID_VALUE) {
|
|
return (GLchar*) "Invalid value";
|
|
}
|
|
else if (errorCode == GL_INVALID_ENUM) {
|
|
return (GLchar*) "Invalid enum";
|
|
}
|
|
else if (errorCode == GL_INVALID_OPERATION) {
|
|
return (GLchar*) "Invalid operation";
|
|
}
|
|
else if (errorCode == GL_STACK_OVERFLOW) {
|
|
return (GLchar*) "Stack overflow";
|
|
}
|
|
else if (errorCode == GL_STACK_UNDERFLOW) {
|
|
return (GLchar*) "Stack underflow";
|
|
}
|
|
else if (errorCode == GL_OUT_OF_MEMORY) {
|
|
return (GLchar*) "Out of memory";
|
|
}
|
|
return (GLchar*) "Unknown";
|
|
}
|
|
|
|
static void assertGlError(const char* error_message)
|
|
{
|
|
const GLenum ErrorValue = glGetError();
|
|
if (ErrorValue == GL_NO_ERROR) return;
|
|
|
|
const char* APPEND_DETAIL_STRING = ": %s\n";
|
|
const size_t APPEND_LENGTH = strlen(APPEND_DETAIL_STRING) + 1;
|
|
const size_t message_length = strlen(error_message);
|
|
MessageBox(NULL, error_message, getErrorString(ErrorValue), 0x00000000L);
|
|
ExitProcess(0);
|
|
}
|