PyQt5 QWindow + PyOpenGL错误1282'无效操作'与每个OpenGL功能

时间:2014-12-10 17:57:15

标签: python-3.x pyopengl pyqt5

我已经没有想法了,我需要一些帮助。请考虑以下代码段(已修改http://www.riverbankcomputing.com/pipermail/pyqt/2014-July/034542.html):

from OpenGL import GL
from PyQt5 import Qt

class GLWindow(Qt.QWindow):
    def __init__(self):
        super().__init__()

        self.setSurfaceType(Qt.QWindow.OpenGLSurface)

        self.context = Qt.QOpenGLContext()
        self.context.setFormat(self.requestedFormat())
        if not self.context.create():
            raise Exception('self.context.create() failed')
        self.create()

    def exposeEvent(self, ev):
        ev.accept()
        if self.isExposed() and self.isVisible():
            self.update()

    def update(self):
        self.context.makeCurrent(self)
        GL.glClearColor(1.0, 0.0, 0.0, 0.0)
        GL.glClearDepth(1)
        GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
        GL.glFlush()
        self.context.swapBuffers(self)

app = Qt.QApplication([])
win = GLWindow()
widget = Qt.QWidget.createWindowContainer(win, None, Qt.Qt.Widget)
widget.show()
app.exec_()

无论我在makeCurrent()之后调用什么OpenGL函数,都会引发以下异常:

  File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src\errorchecker.c:1218)
OpenGL.error.GLError: GLError(
        err = 1282,
        description = b'nieprawid\xb3owa operacja',
        baseOperation = glClearColor,
        cArguments = (1.0, 0.0, 0.0, 0.0)
)

此外,除了openglwindow.py之外,PyQt5 OpenGL示例都不起作用。

我使用的是Python 3.4.2 win32,PyQt5 5.3.2和PyOpenGL 3.1.0。有任何想法吗?我发现PyQt5二进制文件可能是针对OpenGL ES构建的,但我不知道在使用PyOpenGL调用时这是否重要。

2 个答案:

答案 0 :(得分:1)

您应该使用WEB-INF/classes/a/b/C.classQtOpenGL.QGLWidget未使用OpenGL。

这是一个有效的例子:

Qt.QWindow

答案 1 :(得分:0)

我只能提供解决方法。

我也可以在Windows上重现这个问题。 glClearColor电话不是问题。错误发生在context.create()self.create()中,但pyOpenGL仅在第一次调用后检查错误时才会注意到它。

我不知道究竟是什么导致了这个问题,但如果我只是忽略错误就行了。在__init__结束时,我添加:

    self.context.makeCurrent(self)
    GL.glGetError()  # Ignore openGL error if one occured