iOS ES 2从RAM OK渲染,VBO中的顶点OK,但BO中的索引失败

时间:2012-07-27 10:45:46

标签: ios opengl-es-2.0 vbo

我正在扩展Xcode opengles模板,摆脱了虚拟es1的东西。 现在我设法从RAM渲染我的模型vertexArray和indexArray, 然后我设法gen-,bind-,dataBuffer vertexArray VBO并将常规RAM指针更改为偏移指针。 这一切都很好,但是将indexAray置于BO和gen-,bind-,dataBuffer并将RAM指针更改为偏移指针的下一阶段失败:(

我有没有注意到任何常见的陷阱,对我来说任何能够制作VBO的人都应该能够制作一个indexArray缓冲区......

以下代码在setupGL中完成

    glGenBuffers(1, &geometryPtr->vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, geometryPtr->vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(geometryPtr->vertexNormalUV), geometryPtr->vertexNormalUV, GL_STATIC_DRAW);
    //
    glGenBuffers(1, &geometryPtr->vertexIndicesBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, geometryPtr->vertexIndicesBuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(geometryPtr->indices), geometryPtr->indices, GL_STATIC_DRAW);

然后是渲染例程中的基本思想

    glBindBuffer(GL_ARRAY_BUFFER, geometryPtr->vertexBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, geometryPtr->vertexIndicesBuffer);
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(0));
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(12));
    glEnableVertexAttribArray(GLKVertexAttribNormal);
    glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_TRUE, 32, BUFFER_OFFSET(24));
    glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
    //
    glDrawElements(GL_TRIANGLES, trianglesCount*3, GL_UNSIGNED_SHORT, (void *)offset);
    glDrawElements(GL_TRIANGLE_STRIP, triangleStripOffsets[m], GL_UNSIGNED_SHORT, (void *)offset);

请帮帮忙? :) 尼尔斯

1 个答案:

答案 0 :(得分:0)

我在评论中回答了这个问题,根据拉尔森先生的建议,我将提供一个(官方)答案来解决这个问题。

进一步说,我基本上假设sizeof()会让系统内存管理器询问大小,分配给指针发送...

尼尔斯

聚苯乙烯。 谢谢拉森先生。