From f7442982a4a60290bedea3a3e1ad7020c10f37ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 20 Feb 2021 19:10:32 +0100 Subject: [PATCH] OpenGLRenderer: Implement debug region data --- .../Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp | 6 ++++-- src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp | 10 ++++++++-- src/Nazara/OpenGLRenderer/Wrapper/Context.cpp | 5 ++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp b/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp index ab3a25631..c684b52ce 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp @@ -154,10 +154,12 @@ typedef void (GL_APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const G cb(glVertexAttribIPointer, PFNGLVERTEXATTRIBIPOINTERPROC) \ cb(glViewport, PFNGLVIEWPORTPROC) \ \ - extCb(glObjectLabel, PFNGLOBJECTLABELPROC) \ - \ extCb(glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC) \ \ + extCb(glObjectLabel, PFNGLOBJECTLABELPROC) \ + extCb(glPopDebugGroup, PFNGLPOPDEBUGGROUPPROC) \ + extCb(glPushDebugGroup, PFNGLPUSHDEBUGGROUPPROC) \ + \ extCb(glSpecializeShaderARB, PFNGLSPECIALIZESHADERARBPROC) \ #endif diff --git a/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp b/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp index 86f205cde..b2bdb985b 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLCommandBuffer.cpp @@ -63,9 +63,10 @@ namespace Nz { using T = std::decay_t; - if constexpr (std::is_same_v || std::is_same_v) + if constexpr (std::is_same_v) { - // TODO + if (context->glPushDebugGroup) + context->glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, command.regionName.size(), command.regionName.data()); } else if constexpr (std::is_same_v) { @@ -88,6 +89,11 @@ namespace Nz ApplyStates(*context, command.states); context->glDrawElementsInstanced(ToOpenGL(command.states.pipeline->GetPipelineInfo().primitiveMode), command.indexCount, GL_UNSIGNED_SHORT, nullptr, command.instanceCount); } + else if constexpr (std::is_same_v) + { + if (context->glPopDebugGroup) + context->glPopDebugGroup(); + } else if constexpr (std::is_same_v) { command.framebuffer->Activate(); diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp index 4b50659da..90192071f 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp @@ -644,8 +644,11 @@ namespace Nz::GL void Context::HandleDebugMessage(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message) const { + if (id == 0) + return; + std::stringstream ss; - ss << "OpenGL debug message (ID: 0x" << std::to_string(id) << "):\n"; + ss << "OpenGL debug message (ID: 0x" << id << "):\n"; ss << "Sent by context: " << this; ss << "\n-Source: "; switch (source)