如何修复在Mac上使用PyOpenGL时的“分割故障”

0g0grzrc  于 8个月前  发布在  Mac
关注(0)|答案(1)|浏览(68)

我的脚本最初工作正常,显示了一个窗口。但是,后续运行会导致分段错误(zsh: segmentation fault /usr/local/bin/python3),而不会出现任何Python错误。我测试了另一个Python程序(Fibonacci),它工作得很好。有人能帮忙吗?
以下是我的剧本:

import pygame as pg
from OpenGL.GL import *

class App():
    def __init__(self):
        # init python 
        pg.init()
        self.clock = pg.time.Clock()
        # init opengl
        glClearColor(0.1, 0.2, 0.2, 1)
        self.mainLoop()
    
    def mainLoop(self):
        running = True
        while running:
            # check events
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    running = False
            
            # refresh
            glClear(GL_COLOR_BUFFER_BIT)
            pg.display

            # timing
            self.clock.tick(60)
        self.quit()
    
    def quit(self):
        pg.quit()

if __name__ == "__main__":
    myApp = App()
8hhllhi2

8hhllhi21#

您必须使用pygame.OPENGL标志创建pygame.display.set_mode的OpenGL显示:

import pygame as pg
from OpenGL.GL import *

class App():
    def __init__(self):
        pg.init()
        pg.display.set_mode((800, 600), pg.OPENGL) # create OpenGL display
        self.clock = pg.time.Clock()
        
        glClearColor(0.1, 0.2, 0.2, 1)
        self.mainLoop()
    
    def mainLoop(self):
        running = True
        while running:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    running = False

            # draw 
            glClear(GL_COLOR_BUFFER_BIT)
            # [...]

            # update display
            pg.display.flip()
            self.clock.tick(60)
        self.quit()
    
    def quit(self):
        pg.quit()

if __name__ == "__main__":
    myApp = App()

相关问题