我已经没有想法了,我需要一些帮助。请考虑以下代码段(已修改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调用时这是否重要。
答案 0 :(得分:1)
您应该使用WEB-INF/classes/a/b/C.class
。 QtOpenGL.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