+#ifndef GL_INVALID_FRAMEBUFFER_OPERATION
+#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT
+#define GL_INVALID_FRAMEBUFFER_OPERATION GL_INVALID_FRAMEBUFFER_OPERATION_EXT
+#else
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#endif
+#endif
+
+#ifndef GL_TEXTURE_TOO_LARGE
+#ifdef GL_TEXTURE_TOO_LARGE_EXT
+#define GL_TEXTURE_TOO_LARGE GL_TEXTURE_TOO_LARGE_EXT
+#else
+#define GL_TEXTURE_TOO_LARGE 0x8065
+#endif
+#endif
+
+/*
+ * A cut-down local version of gluErrorString to avoid depending on GLU.
+ */
+static const char* fghErrorString( GLenum error )
+{
+ switch ( error ) {
+ case GL_INVALID_ENUM: return "invalid enumerant";
+ case GL_INVALID_VALUE: return "invalid value";
+ case GL_INVALID_OPERATION: return "invalid operation";
+ case GL_STACK_OVERFLOW: return "stack overflow";
+ case GL_STACK_UNDERFLOW: return "stack underflow";
+ case GL_OUT_OF_MEMORY: return "out of memory";
+ case GL_TABLE_TOO_LARGE: return "table too large";
+ case GL_INVALID_FRAMEBUFFER_OPERATION: return "invalid framebuffer operation";
+ case GL_TEXTURE_TOO_LARGE: return "texture too large";
+ default: return "unknown GL error";
+ }
+}
+