Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的OpenGL由于glCheckError调用而变慢_Python_Performance_Opengl_Optimization_Glsl - Fatal编程技术网

python中的OpenGL由于glCheckError调用而变慢

python中的OpenGL由于glCheckError调用而变慢,python,performance,opengl,optimization,glsl,Python,Performance,Opengl,Optimization,Glsl,我正在尝试对我发现的分形渲染代码进行一些性能优化: 在渲染某些分形时,我可以在中等分辨率(720p时约50fps)下获得不错的性能。然而,一旦几何体变得稍微复杂,它就会完全下降到2 fps左右。从使用cProfile中可以看出,这是由于对glCheckError进行了大量长时间调用(下图)。由于代码本身从未调用过这一点,因此我认为几何体的某些方面导致了错误,而在尝试绘制对象时,这些错误没有得到正确处理。不过,我不确定情况是否如此。有没有办法让我找到真正的罪犯 以下是快速分形和慢速分形的探查器输出

我正在尝试对我发现的分形渲染代码进行一些性能优化:

在渲染某些分形时,我可以在中等分辨率(720p时约50fps)下获得不错的性能。然而,一旦几何体变得稍微复杂,它就会完全下降到2 fps左右。从使用cProfile中可以看出,这是由于对glCheckError进行了大量长时间调用(下图)。由于代码本身从未调用过这一点,因此我认为几何体的某些方面导致了错误,而在尝试绘制对象时,这些错误没有得到正确处理。不过,我不确定情况是否如此。有没有办法让我找到真正的罪犯

以下是快速分形和慢速分形的探查器输出(记录超过20帧以避免打印垃圾):


获取OpenGL错误的pyOpenGL函数是glGetErrorGlueErrorString 下面是一个示例函数,它获取并打印错误字符串

从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调用会增加频率,事实上所有调用都是因为几何体更复杂。但是,这些似乎不会对帧渲染时间产生太大的影响。您认为用我自己的函数替换错误检查函数(如文档中所述)会有什么好处吗?似乎我不太可能写出比现在更有效的东西。。。