VBO не будет рисовать, большой набор данных

Я пытаюсь сделать большой набор данных ~ 100 000 значений в OpenGL, прямо сейчас только как точки, позже используя спрайты.

Мои векторные "positions" упорядочены следующим образом: +------------------------------------------------- | x | y | z | w | x | y | z | w | x | y | z |... +------------------------------------------------- +------------------------------------------------- | x | y | z | w | x | y | z | w | x | y | z |... +------------------------------------------------- +------------------------------------------------- | x | y | z | w | x | y | z | w | x | y | z |... +------------------------------------------------- где четвертый компонент (w) является коэффициентом масштабирования, который используется в шейдерах вершин/фрагментов.

Создание VBO [EDIT]

...
v_size = positions.size();
GLint positionAttrib = _programObject->attributeLocation("in_position");

glGenVertexArrays(1, &_vaoID);
glGenBuffers(1, &_vboID);

glBindVertexArray(_vaoID);

glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glBufferData(GL_ARRAY_BUFFER, v_size*sizeof(GLfloat), &positions[0], GL_STATIC_DRAW);

glEnableVertexAttribArray(positionAttrib);
glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), 0 );
glBindVertexArray(0);

Рендеринг: [РЕДАКТИРОВАТЬ]

Это работает сейчас, но я не уверен, что на 100% правильно, не стесняйтесь критиковать:

GLint vertsToDraw = v_size / 4;
GLint positionAttrib = _programObject->attributeLocation("in_position");
// edit 1. added vao bind
glBindVertexArray(_vaoID); 
glEnableVertexAttribArray(positionAttrib); 
 glBindBuffer(GL_ARRAY_BUFFER, _vboID);
 //glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), (void*)0);
 // edit 2. no stride
 glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, 0, (void*)0); 
 glDrawArrays(GL_POINTS, 0, vertsToDraw);
glDisableVertexAttribArray(positionAttrib);
glBindVertexArray(0);

Пожалуйста, дайте мне знать, нужен ли еще код.

1 ответ

Исправлено все, что было предложено derhass и keltar, см. Комментарии к сообщению. Сейчас все работает.

licensed under cc by-sa 3.0 with attribution.