如何在 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 是否可用,但返回错误。

是否不支持此功能或我没有正确使用它?或者还有其他方法可以实现吗?

【问题讨论】:

您应该查找各种扩展命名约定。 IIRC EXT 小于 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 中创建调试标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL 中创建 3D 太阳系中的星空背景?

如何在OpenGL中创建一个带三角形的偶数球?

c++ 和 OpenGl:如何从类中创建网格对象实例

如何在伪造查看器中创建虚线标记?

在 OpenGL 4 中创建第二个 VAO 并绘制两个形状

如何在 Google Maps V3 中创建编号的地图标记?