python - python 中的 OpenGL 因 glCheckError 调用而变慢

标签 python performance opengl optimization glsl

我正在尝试对我发现的分形渲染代码进行一些性能优化:https://github.com/HackerPoet/PySpace

渲染某些分形时,我在中等分辨率下获得了不错的性能(720p 时约为 50fps)。然而,一旦几何体变得稍微复杂一点,它就会完全下降到大约 2 fps。从我使用 cProfile 收集到的信息来看,这是由于对 glCheckError 的大量长时间调用造成的(下图)。由于代码本身从未调用过它,所以我相信有关几何图形的某些内容导致了错误尝试绘制对象时没有正确处理。但我不确定情况是否如此。关于如何找到确切的罪魁祸首有什么想法吗?

以下是快速分形和较慢分形的分析器输出(记录了 20 多帧以避免打印垃圾邮件):

Profile of 20 frames for a "fast" running fractal

Profile of 20 frames for a slow running fractal

最佳答案

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

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/

相关文章:

python - python中的数字操作

python - 列表中的一个值,python

.net - 使用在旧版本 .NET 框架中编译的程序集会影响整体性能吗?

jquery - 优化 jQuery 悬停代码以实现更好的性能(更流畅的动画)

java - 我可以设置GLSL版本吗?

python - 无法部署 webpy 应用程序

python - 如何在 python 中将两个变量与一个字符串进行比较?

performance - Matlab中的快速矩阵乘法

c++ - 静态链接 GLU?

c++ - 带 Eclipse CDT + MinGW + GLEW + GLFW 的 OpenGL : Undefined References