QGLBuffer.allocate путает с QGLWidget.renderText - PullRequest
2 голосов
/ 20 ноября 2011

Когда я вызываю QGLBuffer.allocate, QGLWidget.renderText перестает работать полностью. Фактически все функции QPainter перестают работать, если вы перегружаете QGLwidget.paintEvent

Следующий код PySide демонстрирует проблему. Откроется два окна QGLwidget:

  • один вызывает QGLBuffer.allocate, и вы не можете видеть текст.
  • Другой отлично работает.

Код:

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)

Кто-нибудь может указать мне правильное направление?

1 Ответ

2 голосов
/ 21 ноября 2011

Я не знаю точно, как работают классы Qt OpenGL, но по моему опыту со смешиванием Qt и необработанного OpenGL 3.3 вы должны отсоединиться, когда вы закончите с буфером, потому что он портится с любым механизмом, который использует QPainter.

Так что после того, как в конце initializeGL отсоедините, и связывайте / отсоединяйте в paintGL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...