[Bf-blender-cvs] [b43f4fda19b] master: GL: Add error checking function
Clément Foucault
noreply at git.blender.org
Tue Aug 25 15:03:19 CEST 2020
Commit: b43f4fda19b935ebeb144e14bba2fc7c590d2ffb
Author: Clément Foucault
Date: Tue Aug 25 14:47:23 2020 +0200
Branches: master
https://developer.blender.org/rBb43f4fda19b935ebeb144e14bba2fc7c590d2ffb
GL: Add error checking function
This is to ease the debugging process on Apple GL implementation.
===================================================================
M source/blender/gpu/opengl/gl_batch.cc
M source/blender/gpu/opengl/gl_context.cc
M source/blender/gpu/opengl/gl_context.hh
===================================================================
diff --git a/source/blender/gpu/opengl/gl_batch.cc b/source/blender/gpu/opengl/gl_batch.cc
index 04e8985902d..953536de460 100644
--- a/source/blender/gpu/opengl/gl_batch.cc
+++ b/source/blender/gpu/opengl/gl_batch.cc
@@ -327,6 +327,8 @@ void GLBatch::bind(int i_first)
void GLBatch::draw(int v_first, int v_count, int i_first, int i_count)
{
+ GL_CHECK_ERROR("Batch Pre drawing");
+
this->bind(i_first);
BLI_assert(v_count > 0 && i_count > 0);
@@ -353,6 +355,7 @@ void GLBatch::draw(int v_first, int v_count, int i_first, int i_count)
glDrawElementsInstancedBaseVertex(
gl_type, v_count, index_type, v_first_ofs, i_count, base_index);
}
+ GL_CHECK_ERROR("Batch Post-drawing Indexed");
}
else {
#ifdef __APPLE__
@@ -367,6 +370,7 @@ void GLBatch::draw(int v_first, int v_count, int i_first, int i_count)
#ifdef __APPLE__
glEnable(GL_PRIMITIVE_RESTART);
#endif
+ GL_CHECK_ERROR("Batch Post-drawing Non-indexed");
}
}
diff --git a/source/blender/gpu/opengl/gl_context.cc b/source/blender/gpu/opengl/gl_context.cc
index 11f313f639b..2ac361d28e1 100644
--- a/source/blender/gpu/opengl/gl_context.cc
+++ b/source/blender/gpu/opengl/gl_context.cc
@@ -22,6 +22,7 @@
*/
#include "BLI_assert.h"
+#include "BLI_system.h"
#include "BLI_utildefines.h"
#include "GPU_framebuffer.h"
@@ -238,3 +239,37 @@ void GLContext::framebuffer_unregister(struct GPUFrameBuffer *fb)
}
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Error Checking
+ *
+ * This is only useful for implementation that does not support the KHR_debug extension.
+ * \{ */
+
+void GLContext::check_error(const char *info)
+{
+ GLenum error = glGetError();
+
+#define ERROR_CASE(err) \
+ case err: \
+ fprintf(stderr, "GL error: %s : %s\n", #err, info); \
+ BLI_system_backtrace(stderr); \
+ break;
+
+ switch (error) {
+ ERROR_CASE(GL_INVALID_ENUM)
+ ERROR_CASE(GL_INVALID_VALUE)
+ ERROR_CASE(GL_INVALID_OPERATION)
+ ERROR_CASE(GL_INVALID_FRAMEBUFFER_OPERATION)
+ ERROR_CASE(GL_OUT_OF_MEMORY)
+ ERROR_CASE(GL_STACK_UNDERFLOW)
+ ERROR_CASE(GL_STACK_OVERFLOW)
+ case GL_NO_ERROR:
+ break;
+ default:
+ fprintf(stderr, "Unknown GL error: %x : %s", error, info);
+ break;
+ }
+}
+
+/** \} */
diff --git a/source/blender/gpu/opengl/gl_context.hh b/source/blender/gpu/opengl/gl_context.hh
index ee8189255ca..e16f4bbf076 100644
--- a/source/blender/gpu/opengl/gl_context.hh
+++ b/source/blender/gpu/opengl/gl_context.hh
@@ -34,6 +34,15 @@
#include <mutex>
+#ifdef DEBUG
+/* Enabled on MacOS by default since there is no support for debug callbacks. */
+# ifdef __APPLE__
+# define GL_CHECK_ERROR(info) GLContext::check_error(info)
+# else
+# define GL_CHECK_ERROR(info)
+# endif
+#endif
+
namespace blender {
namespace gpu {
@@ -78,6 +87,8 @@ class GLContext : public GPUContext {
GLContext(void *ghost_window, GLSharedOrphanLists &shared_orphan_list);
~GLContext();
+ static void check_error(const char *info);
+
void activate(void) override;
void deactivate(void) override;
More information about the Bf-blender-cvs
mailing list