Копипаст это плохо(если не знаешь, что копипастиш)!
-glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
+glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
Вы рисуете линии, следовательно, нужно только 2значения из буфера, а не 4. Подозреваю, что в примере рисовали квадраты:)
З.Ы. Тестировал в OpenTK, все заработало.
UPD. Извиняюсь за задержку как-то долго я не заходил в linux. Возможно я опоздал, но все равно код будет полезет тем кто прийдет сюда из гугла. Тестировал я ваш код таким образом:
#include "widget.h"
Widget::Widget(QWidget *parent)
: QOpenGLWidget(parent)
{
}
GLuint VBO;
GLfloat arr[4];
void Widget::initializeGL()
{
glewExperimental = true;
glewInit();
glClearColor(0,0,0,1);
glColor3f(1,1,1);
arr[0] = -1;
arr[1] = -1;
arr[2] = 1;
arr[3] = 1;
glGenBuffers( 1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(arr), arr, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
}
void Widget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glColor4f(1.0f, 0.0, 0.0, 1.0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, sizeof(arr));
}
void Widget::resizeGL(int w, int h)
{
glViewport(0,0,w,h);
}