2012-03-13 120 views
0

我在glDrawArrays上看到了很多与EXC_BAD_ACCESS信号相关的其他帖子,但没有一个完全适合我的问题,所以就这样了。glDrawArrays与glVertexAttrib3f崩溃

下面的代码工作:

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的恒定顶点属性调用吗?

回答

5

那么你告诉OpenGL使用VertexAttribArray,然后你不提供数组元素。因此,OpenGL将尝试读取既未分配也未正确填充的内存。一定要做一个

glDisableVertexAttribArray(ARRAYINDEX) 

当你不提供特定数组的数据。只需使用glVertexAttrib3f()即可。但它不是一个数组,所以你不需要启用数组来使用它。

+0

啊,当然,这是我的权利。感谢您的快速回答,我正在盯着这个,并没有得到任何地方。 – 2012-03-13 13:03:14

+0

Yuppi .... !!!我已经在OpenGL中深入工作了。 – Siten 2014-11-13 12:24:40