pyOpenGL GLUT窗口函数未正确关闭

2024-10-03 19:24:28 发布

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

这个使用PyOpenGl和GLUT的环境的最小工作示例与我在更大代码上遇到的问题相同。持续创建/关闭此类的实例会增加内存使用,直到我的所有计算机开始减速

发生的情况是,对glutDestroyWindow的调用没有生效,进程/usr/lib/xorg/Xorg很快就会填满整个GPU

from OpenGL.GLUT import *

DISPLAY_WIDTH, DISPLAY_HEIGHT = 2000, 2000

class TestEnv:
    def __init__(self):
        self.window = None
        glutInit(sys.argv)
        glutInitWindowSize(DISPLAY_WIDTH, DISPLAY_HEIGHT)
        self.window = glutCreateWindow(b"TestEnv")

    def close(self):
        if self.window:
            glutDestroyWindow(self.window)

if __name__ == "__main__":
    i = 0
    while True:
        env = TestEnv()
        env.close()
        print(i)
        i+=1

释放所有资源的正确方式是什么


Tags: selfenv示例closeif环境defdisplay
1条回答
网友
1楼 · 发布于 2024-10-03 19:24:28

PyOpenGL使用freeglut。你必须给freeglut关闭窗口的机会glutDestroyWindow不会立即销毁窗口,但会触发销毁窗口的事件。因此,您必须运行事件循环。在请求销毁窗口后调用^{}

from OpenGL.GLUT import *

DISPLAY_WIDTH, DISPLAY_HEIGHT = 2000, 2000

class TestEnv:
    def __init__(self):
        self.window = None
        glutInit(sys.argv)
        glutInitWindowSize(DISPLAY_WIDTH, DISPLAY_HEIGHT)
        self.window = glutCreateWindow(b"TestEnv")

    def close(self):
        if self.window:
            glutDestroyWindow(self.window)

if __name__ == "__main__":
    i = 0
    while True:
        env = TestEnv()
        env.close()
        glutMainLoopEvent() # < - handle events
        print(i)
        i += 1

另见Immediate mode and legacy OpenGL

相关问题 更多 >