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

2024-04-30 07:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

Profile of 20 frames for a "fast" running fractal

Profile of 20 frames for a slow running fractal


Tags: 代码httpsgithubcom信息错误绘制分辨率
1条回答
网友
1楼 · 发布于 2024-04-30 07:08:15

获取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 *

相关问题 更多 >