iOS ES 2 从 RAM 渲染 OK,VBO 中的顶点 OK,但 BO 中的索引失败
Posted
技术标签:
【中文标题】iOS ES 2 从 RAM 渲染 OK,VBO 中的顶点 OK,但 BO 中的索引失败【英文标题】:iOS ES 2 render from RAM OK, verts in VBO OK but with indices in BO fails 【发布时间】:2012-07-27 10:45:45 【问题描述】:我正在扩展 Xcode opengles 模板,摆脱了虚拟 es1 的东西。 现在我设法从 RAM 中渲染我的模型,vertexArray 和 indexArray, 然后我设法对 vertexArray VBO 进行 gen-,bind-,dataBuffer 并将常规 RAM 指针更改为偏移指针。 这一切都很好,但是将 indexAray 放入 BO 和 gen-、bind-、dataBuffer 并将 RAM 指针更改为偏移指针的下一阶段失败:(
有没有我没有注意到的常见陷阱,对我来说,任何能够制作 VBO 的人都应该能够制作 indexArray-buffer...
以下代码在 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);
然后是render routine中的基本思路
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);
请帮忙? :) 尼尔斯
【问题讨论】:
我解决了(“看妈妈,没有手”举手......) 为了记录,我解决了它,摆脱了 sizeof() 函数,我使用我自己的内存管理器,虽然小写的 sizeof 是一个运行时函数,但立即执行,例如geometryPtr->indicesCount*2 像魅力一样工作 :) 如果你愿意,你可以写一个关于这方面的答案并接受它,这样问题就会被标记为正在回答。 【参考方案1】:我已经在 cmets 中回答了这个问题,按照 Larson 先生的建议,我将提供一个(官方)答案来结束这个问题。
为了进一步逃避,我基本上假设 sizeof() 会让系统要求系统内存管理器询问大小,分配给指针发送...
尼尔斯
附言。 谢谢拉森先生。
【讨论】:
以上是关于iOS ES 2 从 RAM 渲染 OK,VBO 中的顶点 OK,但 BO 中的索引失败的主要内容,如果未能解决你的问题,请参考以下文章
iOS OpenGL ES 2.0 VBO 顶点数限制:一旦超过,CPU 受限