着色器与paintGL()中QPainter之间的冲突,用于渲染2D文本

时间:2016-12-06 10:39:56

标签: qt opengl text qpainter

我有以下类继承自QOpenGLWidgetQOpenGLFunctions

class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT
public:
    OpenGLWidget();
    virtual ~OpenGLWidget();

    void initializeGL();
    void paintGL()
    {
       QPainter painter(this);

       painter.beginNativePainting();
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
       // Calls OpenGL draw functions with VBOs
       m_viewport.render(m_shader, m_entities);
       painter.endNativePainting();

       painter.drawText(0, 0, width(), height(), Qt::AlignCenter, "Hello World!");

    }
    void resizeGL(int width, int height);

    [...]
}

“Hello World”按预期绘制,但3D场景被破坏。我的3D轴应该在屏幕的中央和右上角:

enter image description here

对我来说,似乎我正在使用的顶点和片段着色器是问题的根源。否则,考虑到代码的简单性和我发现的例子,它应该可以工作。

好的输出是:

enter image description here

中心有“Hello World”。这是我在评论QPainter电话时收到的内容。

1 个答案:

答案 0 :(得分:3)

使用QPainter时,似乎会发布着色器程序。在OpenGL调用之前绑定着色器程序,然后将其释放。它应该解决它。

painter.beginNativePainting();
// Bind shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Calls OpenGL draw functions with VBOs
m_viewport.render(m_shader, m_entities);
// Release shader program
painter.endNativePainting();