aboutsummaryrefslogtreecommitdiff
path: root/render/gles3/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'render/gles3/util.c')
-rw-r--r--render/gles3/util.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/render/gles3/util.c b/render/gles3/util.c
new file mode 100644
index 00000000..1f216182
--- /dev/null
+++ b/render/gles3/util.c
@@ -0,0 +1,38 @@
+#include <stdlib.h>
+#include <stdbool.h>
+#include <GLES3/gl3.h>
+#include "common/log.h"
+#include "render/gles3.h"
+
+const char *gles3_strerror(GLenum err) {
+ switch (err) {
+ case GL_INVALID_ENUM:
+ return "Invalid enum";
+ case GL_INVALID_VALUE:
+ return "Invalid value";
+ case GL_INVALID_OPERATION:
+ return "Invalid operation";
+ case GL_OUT_OF_MEMORY:
+ return "Out of memory";
+ case GL_INVALID_FRAMEBUFFER_OPERATION:
+ return "Invalid framebuffer operation";
+ default:
+ return "Unknown error";
+ }
+}
+
+bool _gles3_flush_errors(const char *file, int line) {
+ GLenum err;
+ bool failure = false;
+ while ((err = glGetError()) != GL_NO_ERROR) {
+ failure = true;
+ if (err == GL_OUT_OF_MEMORY) {
+ // The OpenGL context is now undefined
+ _wlr_log(L_ERROR, "[%s:%d] Fatal GL error: out of memory", file, line);
+ exit(1);
+ } else {
+ _wlr_log(L_ERROR, "[%s:%d] GL error %d %s", file, line, err, gles3_strerror(err));
+ }
+ }
+ return failure;
+}