Пытаюсь осилить QOpenGLWidget (буду наглядно рисовать углы наклона ИНС). Унаследовал от этого класса свой виджет и переопределил необходимые методы:
class ImuStateWidget : public QOpenGLWidget
{
public:
ImuStateWidget(QWidget *parent);
~ImuStateWidget();
protected:
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
private:
GLuint vertex_buffer;
};
ImuStateWidget::ImuStateWidget(QWidget *parent = 0) : QOpenGLWidget(parent)
{
// Nothing to do
}
ImuStateWidget::~ImuStateWidget()
{
// Nothing to do
}
void ImuStateWidget::initializeGL() {
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glClearColor(0.0, 0.0, 0.0, 1.0);
static const GLfloat vertex_buffer_data[] = {
0.0, 0.8, 0.0,
-0.8, -0.8, 0.0,
0.8, -0.8, 0.0
};
f->glGenBuffers(1, &vertex_buffer);
f->glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
f->glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_buffer_data), vertex_buffer_data, GL_STATIC_DRAW);
}
void ImuStateWidget::resizeGL(int w, int h) {
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glViewport(0, 0, w, h);
}
void ImuStateWidget::paintGL() {
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
f->glEnableVertexAttribArray(0);
f->glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
f->glDrawArrays(GL_TRIANGLES, 0, 3);
f->glDisableVertexAttribArray(0);
}
Ожидаю увидеть треугольник - получаю чёрный виджет. Если, например, менять значения glClearColor, то цвет виджета меняется, так что мои методы вызываются, но что-то я делаю не так. Вполне возможно потому что я никогда раньше не работал с OpenGL 3.0, а рисовал все треугольники с помощью glVertex.