]> git.lizzy.rs Git - dragonblocks_alpha.git/blobdiff - src/client/opengl.c
Make texture batching optional (for OpenGL 3.3 compat)
[dragonblocks_alpha.git] / src / client / opengl.c
diff --git a/src/client/opengl.c b/src/client/opengl.c
new file mode 100644 (file)
index 0000000..c0c128f
--- /dev/null
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include "client/client_config.h"
+#include "client/opengl.h"
+
+// put this into seperate function to make it easy to trace stack using external debugger
+static void opengl_error(GLenum err, const char *file, int line)
+{
+       switch (err) {
+               case GL_INVALID_ENUM:                  fprintf(stderr, "[warning] OpenGL error: INVALID_ENUM %s:%d\n", file, line); break;
+               case GL_INVALID_VALUE:                 fprintf(stderr, "[warning] OpenGL error: INVALID_VALUE %s:%d\n", file, line); break;
+               case GL_INVALID_OPERATION:             fprintf(stderr, "[warning] OpenGL error: INVALID_OPERATION %s:%d\n", file, line); break;
+               case GL_STACK_OVERFLOW:                fprintf(stderr, "[warning] OpenGL error: STACK_OVERFLOW %s:%d\n", file, line); break;
+               case GL_STACK_UNDERFLOW:               fprintf(stderr, "[warning] OpenGL error: STACK_UNDERFLOW %s:%d\n", file, line); break;
+               case GL_OUT_OF_MEMORY:                 fprintf(stderr, "[warning] OpenGL error: OUT_OF_MEMORY %s:%d\n", file, line); break;
+               case GL_INVALID_FRAMEBUFFER_OPERATION: fprintf(stderr, "[warning] OpenGL error: INVALID_FRAMEBUFFER_OPERATION %s:%d\n", file, line); break;
+               default: break;
+       }
+}
+void opengl_debug(const char *file, int line)
+{
+       GLenum err = glGetError();
+
+       if (err != GL_NO_ERROR)
+               opengl_error(err, file, line);
+}
+
+GLint opengl_texture_batch_units()
+{
+       if (!client_config.texture_batching)
+               return 1;
+
+       GLint units;
+       glGetIntegerv(GL_MAX_TEXTURE_UNITS, &units); GL_DEBUG
+
+       return units;
+}