python中的OpenGL由于glCheckError调用而变慢
我正在尝试对我发现的分形渲染代码进行一些性能优化: 在渲染某些分形时,我可以在中等分辨率(720p时约50fps)下获得不错的性能。然而,一旦几何体变得稍微复杂,它就会完全下降到2 fps左右。从使用cProfile中可以看出,这是由于对glCheckError进行了大量长时间调用(下图)。由于代码本身从未调用过这一点,因此我认为几何体的某些方面导致了错误,而在尝试绘制对象时,这些错误没有得到正确处理。不过,我不确定情况是否如此。有没有办法让我找到真正的罪犯 以下是快速分形和慢速分形的探查器输出(记录超过20帧以避免打印垃圾):python中的OpenGL由于glCheckError调用而变慢,python,performance,opengl,optimization,glsl,Python,Performance,Opengl,Optimization,Glsl,我正在尝试对我发现的分形渲染代码进行一些性能优化: 在渲染某些分形时,我可以在中等分辨率(720p时约50fps)下获得不错的性能。然而,一旦几何体变得稍微复杂,它就会完全下降到2 fps左右。从使用cProfile中可以看出,这是由于对glCheckError进行了大量长时间调用(下图)。由于代码本身从未调用过这一点,因此我认为几何体的某些方面导致了错误,而在尝试绘制对象时,这些错误没有得到正确处理。不过,我不确定情况是否如此。有没有办法让我找到真正的罪犯 以下是快速分形和慢速分形的探查器输出
获取OpenGL错误的pyOpenGL函数是glGetError和GlueErrorString 下面是一个示例函数,它获取并打印错误字符串
从OpenGL.GL导入*
def opengl_错误_检查():
error=glGetError()
如果出现错误!=总帐无错误:
打印(“OPENGL_错误:,GlueErrorString(错误))
通过将调用移动到错误检查函数,您可以
快速平分OpenGL调用以查找导致错误的行。
通常,导致错误的调用比错误本身更能说明问题,因为只有少数可能的OpenGL错误代码
一旦你调试了你的程序,你可能想禁用错误检查,因为它有点贵。默认情况下,该选项处于启用状态,以使pyOpenGL更易于初学者使用。要在PyOpenGL中禁用错误检查,您需要设置
OpenGL.error\u checking
标记为False
导入OpenGL
OpenGL.ERROR\u CHECKING=False
从OpenGL.GL导入*
PyOpenGL的函数表示它总是调用glCheckError
,因此它并不表示有错误。检查错误的时间似乎一致于0.010
。只是发生了更多的GL调用,大约是原来的13倍。感谢您的链接,不知怎的,文档中遗漏了这一点。10毫秒似乎是一个相当长的时间来检查错误,虽然,特别是因为没有一个AFAIK。还有其他GL调用会增加频率,事实上所有调用都是因为几何体更复杂。但是,这些似乎不会对帧渲染时间产生太大的影响。您认为用我自己的函数替换错误检查函数(如文档中所述)会有什么好处吗?似乎我不太可能写出比现在更有效的东西。。。