如何在OpenGL中创建调试标记?

7

我正在使用RenderDoc调试一些OpenGL 3.3+图形代码,并希望定义一些可以被RenderDoc识别的渲染通道的调试标记。

我使用GLEW并尝试使用glPushGroupMarkerEXT/glPopGroupMarkerEXT来定义这些标记,但是当我调用glPushGroupMarkerEXT时,我会遇到访问冲突错误,因此我猜测提供该功能的扩展未加载。 我还尝试使用glewIsSupported检查GL_EXT_debug_marker扩展是否可用,但返回false。

这个功能不受支持吗?还是我没有正确使用它?或者有其他方法可以实现这一目标?


你应该查阅各种扩展命名约定。如果我没记错,EXTARB低,但高于制造商扩展。虽然大多数显卡支持在生产之前声明的ARB,但它们不太可能支持EXT。如果有一个ARB,那么很可能你的显卡不支持这个扩展,而ARB可能会有更好的支持。 - van dench
有人列出了支持此扩展的卡和操作系统的清单,唯一支持它的操作系统是OSX(该扩展由苹果提出),Android 也有一些轻微的支持。如果您使用的是Windows,则极不可能获得对此的支持。https://feedback.wildfiregames.com/report/opengl/feature/GL_EXT_debug_marker - van dench
你说得对。我在一篇关于OSX的帖子中看到了提到它。它适用于我的显卡,但只能在OSX上使用(我正在使用Windows)。 - bishopp
@vandench glPushGroupMarkerEXT() 在 Linux 上也被支持。它不仅限于 MacOS。 - Bram
1个回答

8

EXT_debug_marker不是您想要使用的扩展。它已经过时,从未得到广泛支持。其功能已被吸收到KHR_debug中,后者得到了更广泛的支持,并且自4.3版OpenGL(也就是5年前)以来一直是核心OpenGL。

现在,这两种调试标记的功能是不同的。KHR_debug将标记变成了另一种用户定义的调试通知。因此,您原本会调用glInsertEventMarkerEXT的地方,现在需要使用更通用的glDebugMessageInsert,并将GL_DEBUG_TYPE_MARKER作为消息类型。您原本会使用glPush/PopGroupMarkerEXT,现在需要使用glPush/PopDebugGroup,用于任意作用域。这些分组不使用标记类型;它们使用GL_DEBUG_TYPE_PUSH/POP_GROUP类型,以便您可以区分分组和标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接