我有以下类继承自QOpenGLWidget
和QOpenGLFunctions
:
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轴应该在屏幕的中央和右上角:
对我来说,似乎我正在使用的顶点和片段着色器是问题的根源。否则,考虑到代码的简单性和我发现的例子,它应该可以工作。
好的输出是:
中心有“Hello World”。这是我在评论QPainter
电话时收到的内容。
答案 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();