【发布时间】:2016-12-11 05:17:57
【问题描述】:
短版:崩溃(坏内存访问异常/nullptr异常)内部glDrawElements/glDrawElementsInstanced如何调试?
加长版:
您有一条使用VAOs 的OpenGL 渲染代码路径,并通过调用glDrawElements 或glDrawElementsInstanced 提交渲染。该代码路径在大多数情况下都能正常工作。我们说的是“编辑器代码”,这意味着:数据可能是任何几何图形,并且很可能会频繁更改。
但有时在提交可重现的数据更改后,它只会在 glDrawElements* 驱动程序代码内崩溃(即调用 glDrawElements,函数参数正常,崩溃发生在 glDrawElements 内)。
如何继续调试这个问题?
附注:
- 自我回答的问题:所有的研究努力都在寻找答案!
- 这是针对编辑器代码。对于简单的演示,此类崩溃主要是由于编码人员没有正确理解 glDrawElements 的要求造成的,因此代码路径要么工作要么不工作 - 在这些情况下,请参阅:
【问题讨论】:
-
我不明白为什么这个问题一直被否决。也许它旁边应该有一个通知,它是自我回答的?我知道这个问题没有显示出研究工作——因为所有的研究工作都投入到了答案中!不过应该还是很清楚的,确实对大家创建OpenGL编辑器很有用。
-
自我回答问题以分享知识很好。但这个问题必须仍然是一个好问题。这不是。 不是你的任何人都无法回答。
-
那么,有多少人创建了集成的 OpenGL 图形开发环境?我知道这个问题和答案对很多人没有用。但是少数人在谷歌上搜索可能会发现它很有帮助。是的,这是一个黑匣子魔术“它是否会在驱动程序内部崩溃”问题,这很难描述。我只是想让它更清楚一点,但我认为它并没有变得更好。
-
P.S.:关于它大部分时间都可以正常工作,但在特定数据修改时崩溃的事实,应该清楚不能有一个“最小、完整和可验证的例子”。
标签: c++ opengl vertex-array-object