【发布时间】:2012-05-11 04:31:32
【问题描述】:
我有一个错误,我花了很长时间才修复。 我不断收到 EXC_BAD_ACCESS 和对 memmove 错误的引用,没有任何进一步的描述,直到我评论了以下行:
[自加载着色器];
glGenVertexArraysOES(1, &_vao);
glBindVertexArrayOES(_vao);
// Vertex Buffer
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
glEnableVertexAttribArray(ATTRIB_TEXTURE);
glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 7));
// Index Buffer
glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,0);
////////// COMMENTED THIS ONE //////////////
//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);//
////////////////////////////////////////////
glBindVertexArrayOES(0);
我认为将缓冲区绑定到 0 意味着解除绑定,所以我真的无法理解这会如何导致我的应用崩溃。
感谢您的信息!我只是不关心这个问题......
我的结构:
const Vertex Vertices[4] = {
{{0.75, -1, 0}, {1, 0, 0, 1}, {0.125, 0.833496}},
{{0.75, 1, 0}, {0, 1, 0, 1}, {0.125, 1}},
{{-0.75, 1, 0}, {0, 0, 1, 1}, {0, 1}},
{{-0.75, -1, 0}, {0, 0, 0, 1}, {0, 0.833496}},
};
const GLushort Indices[6] =
{
0, 1, 2,
2, 3, 0
};
【问题讨论】:
-
最有可能的问题出在代码的其他地方。评论这个呼吁只会使问题以不同的方式表现出来。但是查看您发布的代码 - 您确定 Vertices 结构至少有 9 个浮动成员吗?因为我看到你只使用了其中的 5 个,但给 ATTRIB_TEXURE 提供了偏移量 7(其数据为 +2)。
-
是的,我也认为它在其他地方,但仅这一行就解决了问题,我真的不明白为什么,我已经用我的结构发布了更新。谢谢
-
我知道这是一个旧的 Q,但正如 Christian Rau 的示例所解释的,对
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...)的调用直接影响当前绑定的 VAO。 即使glBindBuffer(GL_ARRAY_BUFFER, ...)也是如此。 不是。这个 WebGL 演示确实帮助消除了我对 OpenGL 状态绑定的大量困惑:webgl2fundamentals.org/webgl/lessons/resources/…
标签: ios opengl-es-2.0