У меня есть следующий класс, унаследованный от QOpenGLWidget
и QOpenGLFunctions
:Конфликт между шейдерами и QPainter в paintGL() для рендеринга 2D текст
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
.
Извините, как должен выглядеть «хороший» результат? – peppe
См. Обновленный пост. –
Что произойдет, если вы создадите QPainter после своего пользовательского кода рисования GL? – peppe