Сбой на glDrawArrays с glVertexAttrib3f - PullRequest
0 голосов
/ 13 марта 2012

Я видел довольно много других постов, связанных с сигналами EXC_BAD_ACCESS, прямо на glDrawArrays, но ни один из них не совсем подходит для моей проблемы, так что вот так.

Следующий код работает:

glEnableVertexAttribArray(mAttributes.position);
glEnableVertexAttribArray(mAttributes.color);

GLsizei stride = sizeof(Vertex);
const GLvoid* pPos = &mVertices2[0].mPos.x;
const GLvoid* pColors = &mVertices2[0].mColor.r;

glVertexAttribPointer(mAttributes.position, 2, GL_FLOAT, GL_FALSE, stride, pPos);
glVertexAttribPointer(mAttributes.color, 3, GL_FLOAT, GL_FALSE, stride, pColors);

glDrawArrays(GL_LINE_STRIP, 0, mVertices2.size());

Но я не могу написать цвет с постоянным атрибутом.Это вылетает на glDrawArrays:

glEnableVertexAttribArray(mAttributes.position);
glEnableVertexAttribArray(mAttributes.color);

glVertexAttribPointer(mAttributes.position, 2, GL_FLOAT, GL_FALSE, stride, pPos);
glVertexAttrib3f(mAttributes.color, 1.0f, 0.0f, 0.0f);

glDrawArrays(GL_LINE_STRIP, 0, mVertices2.size()); // <-- EXC_BAD_ACCESS because of the line above

Кто-нибудь знает почему?Вы можете использовать только вызовы атрибутов константных вершин с glDrawElements?

1 Ответ

5 голосов
/ 13 марта 2012

Ну, вы говорите OpenGL использовать VertexAttribArray, а затем вы не предоставляете элементы массива.Следовательно, OpenGL будет пытаться читать память, которая не выделена и не заполнена должным образом.Обязательно сделайте

glDisableVertexAttribArray(ARRAYINDEX) 

, если вы не предоставите данные для определенного массива.Использование только glVertexAttrib3f() нормально.Но это не массив, поэтому вам не нужно разрешать использование массивов.

...