我正在尝试对我发现的分形渲染代码进行一些性能优化:https://github.com/HackerPoet/PySpace
渲染某些分形时,我在中等分辨率下获得了不错的性能(720p 时约为 50fps)。然而,一旦几何体变得稍微复杂一点,它就会完全下降到大约 2 fps。从我使用 cProfile 收集到的信息来看,这是由于对 glCheckError 的大量长时间调用造成的(下图)。由于代码本身从未调用过它,所以我相信有关几何图形的某些内容导致了错误尝试绘制对象时没有正确处理。但我不确定情况是否如此。关于如何找到确切的罪魁祸首有什么想法吗?
以下是快速分形和较慢分形的分析器输出(记录了 20 多帧以避免打印垃圾邮件):
最佳答案
获取OpenGL错误的pyOpenGL函数是glGetError和gluErrorString 这是一个示例函数,它获取错误字符串并打印它
from OpenGL.GL import *
def opengl_error_check():
error = glGetError()
if error != GL_NO_ERROR:
print("OPENGL_ERROR: ", gluErrorString(error))
通过将调用移至错误检查函数,您可以 快速平分 OpenGL 调用以找到导致错误的行。 通常,导致错误的调用比错误本身更能说明问题,因为可能的 OpenGL 错误代码很少。
一旦你调试了你的程序,你可能想要禁用错误检查,因为它有点昂贵。默认情况下它是打开的,以使 pyOpenGL 对初学者更加友好。
要禁用 PyOpenGL 中的错误检查,您需要设置 OpenGL.ERROR_CHECKING
标记为False
import OpenGL
OpenGL.ERROR_CHECKING = False
from OpenGL.GL import *
关于python - python 中的 OpenGL 因 glCheckError 调用而变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54440078/