Qt OpenGL OSX 渲染慢,Windows 在同一台机器上快
Posted
技术标签:
【中文标题】Qt OpenGL OSX 渲染慢,Windows 在同一台机器上快【英文标题】:Qt OpenGL OSX rendering slow, Windows fast on same machine 【发布时间】:2015-06-24 15:13:38 【问题描述】:我正在通过 Qt 使用 OpenGL 渲染网格。 (Qt 5.4)。
在我的 OSX 计算机上,渲染速度相对较慢。当我旋转网格时,我可以看到渲染跟不上我的鼠标输入。
在同一台 OSX 计算机上运行 Windows 7 虚拟机和我的应用程序时,渲染非常流畅。看起来 Mac 版本几乎是在软件模式下渲染,而不是使用加速。
我使用 glGetString 来检查正在使用的供应商和渲染器,这看起来没问题:
"NVIDIA Corporation"
"NVIDIA GeForce GT 650M OpenGL Engine"
知道为什么原生 OSX 生成的代码会运行得这么慢。
顺便说一句:我正在使用GL_ARRAY_BUFFER
渲染一个由大约 150,000 个顶点组成的网格。
我对 OpenGL 很陌生,有什么想法吗?
【问题讨论】:
您需要展示一个重现此问题的最小案例。没有它,这个问题是没有用的。我们无法想象您的代码可能被破坏的所有方式。请记住,相当多的 Windows 代码和驱动程序都有针对损坏的应用程序的解决方法。您可能在不知不觉中触发了此类解决方法。 很公平,我把这个问题留了下来,看看是否有人遇到过这样的问题。我的直觉是它与 Qt 而不是 openGL 代码有关。我将在另一个问题中发布一个最小案例。 最小的情况属于这个问题!否则问题将被关闭,并且您可能会因发布无用的问题而面临暂停 - 它们会浪费每个人的时间。 Qt 对 OpenGL 没有什么作用。唯一可能的问题是QOpenGLWidget
中默认使用间接渲染。首先尝试使用QGLWidget
,如果那里仍然很慢,那么问题与Qt 的关系为零——QGLWidget
是平台GL 窗口上方的一个非常薄的垫片。它不会让你慢下来。实际上,QOpenGLWidget
的唯一影响是间接渲染——这通常在 PC 上无关紧要。
是的 - 请关闭这个问题。
你是对的,这是导致减速的 opengl 调用之一。它与我传递给着色器的纹理有关。我需要调查为什么这会导致 OSX 出现问题。无论如何,我不相信这个问题会再适用于这个话题了。
【参考方案1】:
我正在回答这个问题,以便可以关闭它。
正如Kuba Ober 在上面的 cmets 中指出的那样,问题是由 Windows 似乎隐藏的 opengl 错误引起的。就我而言,我忘记调用 QOpenGLShaderProgram::disableAttributeArray()
函数,例如:
program->enableAttributeArray(texcoorLocation);
glVertexAttribPointer(texcoorLocation, 2, GL_FLOAT, GL_FALSE, 0, uv);
glDrawElements(GL_TRIANGLES, elementCount, GL_UNSIGNED_SHORT, indices);
program->disableAttributeArray(texcoorLocation); //<-- this line was missing
Windows 似乎原谅了这个问题,而 OSX 没有。
【讨论】:
以上是关于Qt OpenGL OSX 渲染慢,Windows 在同一台机器上快的主要内容,如果未能解决你的问题,请参考以下文章