【问题标题】:Crash on glDrawArrays with glVertexAttrib3f使用 glVertexAttrib3f 在 glDrawArrays 上崩溃
【发布时间】:2012-03-13 12:40:19
【问题描述】:

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

以下代码有效:

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的常量顶点属性调用?

【问题讨论】:

    标签: iphone c++ opengl-es-2.0


    【解决方案1】:

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

    glDisableVertexAttribArray(ARRAYINDEX) 
    

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

    【讨论】:

    • 啊,当然,它从我身边溜走了。感谢您的快速回答,我一直在盯着这个,却没有找到任何地方。
    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多