gpt4 book ai didi

debugging - 更具体的 OpenGL 错误信息

转载 作者:行者123 更新时间:2023-12-02 22:35:46 25 4
gpt4 key购买 nike

当 OpenGL 标记错误时,有没有办法检索更详细的错误信息?我知道核心 OpenGL 中没有,但是可能有一些常见的扩展或平台或驱动程序相关的方式或任何东西吗?

我的基本问题是我有一个游戏(用 JOGL 用 Ja​​va 编写),当人们在某些硬件/软件配置上遇到问题时,很难追踪到游戏的根源在哪里。问题就出在。出于性能原因,我无法继续调用 glGetError对于每个命令,但只在程序中的几个点上这样做,所以很难找到哪个命令甚至开始标记错误。然而,即使我可以,OpenGL 具有的极其普遍的错误代码并不能真正告诉我发生了什么(看看命令上的联机帮助页甚至描述了如何将各种错误代码重用于有时相当多不同的情况)实际错误情况)。

如果有一种方法可以找出哪个 OpenGL 命令实际标记了错误,以及有关标记的错误的更多详细信息(例如,如果我得到 GL_INVALID_VALUE ,什么参数的值是什么),那将非常有帮助无效,为什么?)。

驱动程序不会提供此信息似乎有点奇怪,即使以完全自定义的方式也是如此,但看起来我已经提供了,我肯定还没有找到任何方法来找到它。如果他们确实不这样做,是否有任何充分的理由来解释为什么会这样?

最佳答案

实际上,核心 OpenGL 中有一个功能可以为您提供详细的调试信息。但您必须将最低版本要求设置得相当高才能将此作为核心功能。

尽管如此,请参阅this article ——尽管它只在 OpenGL 4.3 中成为核心,但它以扩展形式存在了相当长的一段时间,并且不需要任何特殊的硬件功能。因此,在大多数情况下,您真正​​需要的是来自 NV 或 AMD 的最新驱动程序。

我有一个如何在 answer I wrote a while back 中使用此扩展的示例,配有一些实用函数,使输出更易于阅读。它是用 C 编写的,所以我不知道它会有多大帮助,但你可能会发现一些有用的东西。

<小时/>

以下是您可以从此扩展(AMD Catalyst)中获得的输出:

OpenGL Error:
=============
Object ID: 102
Severity: Medium
Type: Performance
Source: API
Message: glDrawElements uses element index type 'GL_UNSIGNED_BYTE' that is not
optimal for the current hardware configuration; consider using
'GL_UNSIGNED_SHORT' instead.

它不仅会为您提供错误信息,甚至还会为您提供诸如性能警告之类的信息,以便您执行一些愚蠢的操作,例如使用 8 位顶点索引(桌面 GPU 不喜欢这种操作)。

<小时/>

为了回答您的另一个问题,如果您将调试输出设置为同步并在调试回调中安装断点,您可以轻松地使任何调试器在出现 OpenGL 错误时中断。如果您检查调用堆栈,您应该能够快速准确地识别哪个 API 调用生成了最多的错误。

关于debugging - 更具体的 OpenGL 错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com