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

标签 c++ debugging opengl graphics renderdoc

我正在尝试使用 RenderDoc 调试一些 OpenGL 3.3+ 图形代码,我想为渲染过程定义一些可以被 RenderDoc 识别的调试标记。

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

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

最佳答案

EXT_debug_marker不是您要使用的扩展名。它很旧,是never really widely supported .它的功能被吸收到 KHR_debug ,即 more widely supported自 4.3 以来(又名:5 年多以前),它本身就是 OpenGL 的核心。

现在,两者之间的调试标记功能不同。 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 类型,因此您可以区分分组和标记。

关于c++ - 如何在 OpenGL 中创建调试标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54278607/

相关文章:

c++ - 无法更改指针矩阵的值

html - Firefox 不显示来自缓存的图像仅替代文本

c++ - OpenGL:旋转 90 度后圆柱体变形

c++ - 在缓冲区对象上运行并通过着色器更改它的数据?

c - 为什么这个小函数(在opengl中画一个圆圈)不能用c编译?

c++ - 检查哪个网格元素在原始多边形内

c++ - 与普通指针相比,按值传递 `unique_ptr` 是否会降低性能?

debugging - AWK 优化

javascript - javascript中递归编程中的变量问题

c++ - 接收右值并调用左值版本的函数的无限递归