当我调用QGLBuffer.allocate时,QGLWidget.renderText完全停止工作。事实上,如果你重载QGLwidget.paintEvent
,所有QPainter功能都会停止工作以下PySide代码演示了此问题。它将打开两个QGLwidget窗口:
代码:
from PySide.QtGui import *
from PySide.QtOpenGL import *
from OpenGL.GL import *
import sys
class GLWidget(QGLWidget):
def __init__(self, alloc=False):
QGLWidget.__init__(self)
self.alloc = alloc
def initializeGL(self):
self.buffer = buffer = QGLBuffer(QGLBuffer.VertexBuffer)
buffer.create()
buffer.bind()
buffer.setUsagePattern(QGLBuffer.StaticDraw)
if self.alloc: # If true text will not be drawn
buffer.allocate(80)
def resizeGL(self, h, w):
glViewport(0, 0, h, w)
def paintGL(self):
glClearColor(1, 1, 1, 1)
glClear(GL_COLOR_BUFFER_BIT)
glColor(0, 0, 0, 1)
self.renderText(50, 50, "Text to Render")
def main(argv):
app = QApplication(argv)
widget = GLWidget(alloc=True)
widget.show()
widget2 = GLWidget(alloc=False)
widget2.show()
app.exec_()
if __name__ == '__main__':
main(sys.argv)
有人能指出我正确的方向吗?
答案 0 :(得分:2)
我不确切知道Qt OpenGL类是如何工作的,但根据我混合Qt和原始OpenGL 3.3的经验,当你完成缓冲时你应该取消绑定,因为它与QPainter正在使用的任何机制混淆。
所以在initializeGL unbind结束之后,在paintGL中绑定/取消绑定。