如何在 OpenGL 中创建调试标记?
Posted
技术标签:
【中文标题】如何在 OpenGL 中创建调试标记?【英文标题】:How to create debugging markers in OpenGL? 【发布时间】:2019-01-20 16:39:24 【问题描述】:我正在尝试使用 RenderDoc 调试一些 OpenGL 3.3+ 图形代码,并且我想为 RenderDoc 可以识别的渲染通道定义一些调试标记。
我使用 GLEW 并尝试使用 glPushGroupMarkerEXT/glPopGroupMarkerEXT 来定义这些标记,但是当我调用 glPushGroupMarkerEXT 时遇到访问冲突,所以我猜想提供该功能的扩展未加载。 我还尝试使用 glewIsSupported 检查扩展 GL_EXT_debug_marker 是否可用,但返回错误。
是否不支持此功能或我没有正确使用它?或者还有其他方法可以实现吗?
【问题讨论】:
您应该查找各种扩展命名约定。 IIRCEXT
小于 ARB
但高于制造商扩展。虽然大多数卡都支持在卡生产之前声明的 ARB,但它们不太可能支持 EXT。很可能您的卡不支持扩展,如果有 ARB 支持,可能会有更好的支持。
有人列出了支持此扩展的卡和操作系统,唯一支持它的操作系统是 OSX(该扩展是由 Apple 提出的),对 android 有一些小的支持。如果您使用的是 Windows,则极不可能获得对此的支持。 feedback.wildfiregames.com/report/opengl/feature/…
你是对的。我在一篇关于 OSX 的帖子中发现了它。它适用于我的卡,但仅适用于 OSX(我使用的是 Windows)
@vandench glPushGroupMarkerEXT() 在 Linux 上也受支持。它不仅仅是 MacOS。
【参考方案1】:
EXT_debug_marker 不是您要使用的扩展名。它很旧并且是never really widely supported。它的功能被吸收到KHR_debug 中,即more widely supported 并且它本身就是自 4.3 以来的核心 OpenGL(又名:5 多年前)。
现在,调试标记功能在两者之间不同。 KHR_debug 使标记成为另一种用户定义的调试通知。所以,在你应该调用glInsertEventMarkerEXT
的地方,你改为调用more generic glDebugMessageInsert
, using the GL_DEBUG_TYPE_MARKER
as the message's type。你会在哪里使用glPush/PopGroupMarkerEXT
,你是instead use glPush/PopDebugGroup
,它用于任意范围。这样的分组不使用标记类型;他们使用GL_DEBUG_TYPE_PUSH/POP_GROUP
类型,以便您可以区分分组和标记。
【讨论】:
以上是关于如何在 OpenGL 中创建调试标记?的主要内容,如果未能解决你的问题,请参考以下文章