summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineOpenGL
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-05-11 04:06:57 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-05-11 04:06:57 +0000
commit0f48f9bf21ffb27fb74e6779c8f3702f8be300f6 (patch)
treebd149096c7fff66d7ef449d0849a1ed846e8ae1a /Graphics/GraphicsEngineOpenGL
parentOpenGL backend: added GL_SAMPLER_EXTERNAL_OES as recognizable sampler type (diff)
downloadDiligentCore-0f48f9bf21ffb27fb74e6779c8f3702f8be300f6.tar.gz
DiligentCore-0f48f9bf21ffb27fb74e6779c8f3702f8be300f6.zip
OpenGL backend: enabled debug output on Android
Diffstat (limited to 'Graphics/GraphicsEngineOpenGL')
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h98
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/GLContextAndroid.cpp64
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/GLContextLinux.cpp14
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/GLContextWindows.cpp14
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp7
5 files changed, 183 insertions, 14 deletions
diff --git a/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h b/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h
index ad74a146..7cd6f0e2 100644
--- a/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h
+++ b/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h
@@ -922,6 +922,94 @@ extern PFNGLMEMORYBARRIERPROC glMemoryBarrier;
#endif
+/* ------------------------------ GL_KHR_debug ----------------------------- */
+
+#ifndef GL_DEBUG_OUTPUT_SYNCHRONOUS
+# define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#endif
+
+#ifndef GL_DEBUG_SOURCE_API
+# define GL_DEBUG_SOURCE_API 0x8246
+#endif
+
+#ifndef GL_DEBUG_SOURCE_WINDOW_SYSTEM
+# define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#endif
+
+#ifndef GL_DEBUG_SOURCE_SHADER_COMPILER
+# define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#endif
+
+#ifndef GL_DEBUG_SOURCE_THIRD_PARTY
+# define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#endif
+
+#ifndef GL_DEBUG_SOURCE_APPLICATION
+# define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#endif
+
+#ifndef GL_DEBUG_SOURCE_OTHER
+# define GL_DEBUG_SOURCE_OTHER 0x824B
+#endif
+
+
+
+#ifndef GL_DEBUG_TYPE_ERROR
+# define GL_DEBUG_TYPE_ERROR 0x824C
+#endif
+
+#ifndef GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR
+# define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#endif
+
+#ifndef GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR
+# define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#endif
+
+#ifndef GL_DEBUG_TYPE_PORTABILITY
+# define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#endif
+
+#ifndef GL_DEBUG_TYPE_PERFORMANCE
+# define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#endif
+
+#ifndef GL_DEBUG_TYPE_MARKER
+# define GL_DEBUG_TYPE_MARKER 0x8268
+#endif
+
+#ifndef GL_DEBUG_TYPE_PUSH_GROUP
+# define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#endif
+
+#ifndef GL_DEBUG_TYPE_POP_GROUP
+# define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#endif
+
+#ifndef GL_DEBUG_TYPE_OTHER
+# define GL_DEBUG_TYPE_OTHER 0x8251
+#endif
+
+
+
+#ifndef GL_DEBUG_SEVERITY_HIGH
+# define GL_DEBUG_SEVERITY_HIGH 0x9146
+#endif
+
+#ifndef GL_DEBUG_SEVERITY_MEDIUM
+# define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#endif
+
+#ifndef GL_DEBUG_SEVERITY_LOW
+# define GL_DEBUG_SEVERITY_LOW 0x9148
+#endif
+
+#ifndef GL_DEBUG_SEVERITY_NOTIFICATION
+# define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#endif
+
+
+
// Define unsupported GL function stubs
template<typename T>
void UnsupportedGLFunctionStub( const T &Name )
@@ -1085,4 +1173,14 @@ extern PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstanc
typedef void (GL_APIENTRY* PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
extern PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
+#ifndef GL_ES_VERSION_3_2
+
+ typedef void (GL_APIENTRY* GLDEBUGPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
+
+ #define LOAD_DEBUG_MESSAGE_CALLBACK
+ typedef void (GL_APIENTRY* PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+ extern PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
+
+#endif
+
void LoadGLFunctions();
diff --git a/Graphics/GraphicsEngineOpenGL/src/GLContextAndroid.cpp b/Graphics/GraphicsEngineOpenGL/src/GLContextAndroid.cpp
index 3a7e9003..b7f2e0b2 100644
--- a/Graphics/GraphicsEngineOpenGL/src/GLContextAndroid.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/GLContextAndroid.cpp
@@ -37,6 +37,62 @@
namespace Diligent
{
+static void openglCallbackFunction(GLenum source,
+ GLenum type,
+ GLuint id,
+ GLenum severity,
+ GLsizei length,
+ const GLchar* message,
+ const void* userParam)
+{
+ std::stringstream MessageSS;
+
+ MessageSS << "OpenGL debug message " << id << " (";
+ switch (source)
+ {
+ // clang-format off
+ case GL_DEBUG_SOURCE_API: MessageSS << "Source: API."; break;
+ case GL_DEBUG_SOURCE_WINDOW_SYSTEM: MessageSS << "Source: Window System."; break;
+ case GL_DEBUG_SOURCE_SHADER_COMPILER: MessageSS << "Source: Shader Compiler."; break;
+ case GL_DEBUG_SOURCE_THIRD_PARTY: MessageSS << "Source: Third Party."; break;
+ case GL_DEBUG_SOURCE_APPLICATION: MessageSS << "Source: Application."; break;
+ case GL_DEBUG_SOURCE_OTHER: MessageSS << "Source: Other."; break;
+ default: MessageSS << "Source: Unknown (" << source << ").";
+ // clang-format on
+ }
+
+ switch (type)
+ {
+ // clang-format off
+ case GL_DEBUG_TYPE_ERROR: MessageSS << " Type: ERROR."; break;
+ case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: MessageSS << " Type: Deprecated Behaviour."; break;
+ case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: MessageSS << " Type: UNDEFINED BEHAVIOUR."; break;
+ case GL_DEBUG_TYPE_PORTABILITY: MessageSS << " Type: Portability."; break;
+ case GL_DEBUG_TYPE_PERFORMANCE: MessageSS << " Type: PERFORMANCE."; break;
+ case GL_DEBUG_TYPE_MARKER: MessageSS << " Type: Marker."; break;
+ case GL_DEBUG_TYPE_PUSH_GROUP: MessageSS << " Type: Push Group."; break;
+ case GL_DEBUG_TYPE_POP_GROUP: MessageSS << " Type: Pop Group."; break;
+ case GL_DEBUG_TYPE_OTHER: MessageSS << " Type: Other."; break;
+ default: MessageSS << " Type: Unknown (" << type << ").";
+ // clang-format on
+ }
+
+ switch (severity)
+ {
+ // clang-format off
+ case GL_DEBUG_SEVERITY_HIGH: MessageSS << " Severity: HIGH"; break;
+ case GL_DEBUG_SEVERITY_MEDIUM: MessageSS << " Severity: Medium"; break;
+ case GL_DEBUG_SEVERITY_LOW: MessageSS << " Severity: Low"; break;
+ case GL_DEBUG_SEVERITY_NOTIFICATION: MessageSS << " Severity: Notification"; break;
+ default: MessageSS << " Severity: Unknown (" << severity << ")"; break;
+ // clang-format on
+ }
+
+ MessageSS << "): " << message;
+
+ LOG_INFO_MESSAGE(MessageSS.str().c_str());
+}
+
bool GLContext::InitEGLSurface()
{
display_ = eglGetDisplay(EGL_DEFAULT_DISPLAY);
@@ -226,6 +282,14 @@ bool GLContext::Init(ANativeWindow* window)
}
InitGLES();
+ if (glDebugMessageCallback)
+ {
+ glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
+ glDebugMessageCallback(openglCallbackFunction, nullptr);
+ if (glGetError() != GL_NO_ERROR)
+ LOG_ERROR_MESSAGE("Failed to enable debug messages");
+ }
+
egl_context_initialized_ = true;
return true;
diff --git a/Graphics/GraphicsEngineOpenGL/src/GLContextLinux.cpp b/Graphics/GraphicsEngineOpenGL/src/GLContextLinux.cpp
index 5a9efc3a..cf77409e 100644
--- a/Graphics/GraphicsEngineOpenGL/src/GLContextLinux.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/GLContextLinux.cpp
@@ -30,13 +30,13 @@
namespace Diligent
{
-void openglCallbackFunction(GLenum source,
- GLenum type,
- GLuint id,
- GLenum severity,
- GLsizei length,
- const GLchar* message,
- const void* userParam)
+static void openglCallbackFunction(GLenum source,
+ GLenum type,
+ GLuint id,
+ GLenum severity,
+ GLsizei length,
+ const GLchar* message,
+ const void* userParam)
{
std::stringstream MessageSS;
diff --git a/Graphics/GraphicsEngineOpenGL/src/GLContextWindows.cpp b/Graphics/GraphicsEngineOpenGL/src/GLContextWindows.cpp
index 4d4eb383..a61df72e 100644
--- a/Graphics/GraphicsEngineOpenGL/src/GLContextWindows.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/GLContextWindows.cpp
@@ -35,13 +35,13 @@
namespace Diligent
{
-void APIENTRY openglCallbackFunction(GLenum source,
- GLenum type,
- GLuint id,
- GLenum severity,
- GLsizei length,
- const GLchar* message,
- const void* userParam)
+static void APIENTRY openglCallbackFunction(GLenum source,
+ GLenum type,
+ GLuint id,
+ GLenum severity,
+ GLsizei length,
+ const GLchar* message,
+ const void* userParam)
{
// Note: disabling flood of notifications through glDebugMessageControl() has no effect,
// so we have to filter them out here
diff --git a/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp b/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp
index ea598f4c..dd38c77f 100644
--- a/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp
@@ -195,6 +195,9 @@
DECLARE_GL_FUNCTION( glDrawElementsBaseVertex, PFNGLDRAWELEMENTSBASEVERTEXPROC, GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex)
#endif
+#ifdef LOAD_DEBUG_MESSAGE_CALLBACK
+ DECLARE_GL_FUNCTION( glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC, GLDEBUGPROC callback, const void *userParam)
+#endif
void LoadGLFunctions()
{
@@ -359,4 +362,8 @@ Func = (FuncType)eglGetProcAddress( #Func );\
#ifdef LOAD_GL_DRAW_ELEMENTS_BASE_VERTEX
LOAD_GL_FUNCTION( glDrawElementsBaseVertex, PFNGLDRAWELEMENTSBASEVERTEXPROC)
#endif
+
+#ifdef LOAD_DEBUG_MESSAGE_CALLBACK
+ LOAD_GL_FUNCTION( glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC)
+#endif
}