处理OpenGL ES中缺少glDrawElementsBaseVertex

时间:2014-10-12 22:48:50

标签: opengl-es

我正在努力将Direct3D地形渲染器移植到Android,并且刚刚了解到OpenGL没有与DrawIndexedPrimitive的BaseVertexIndex参数等效,直到版本3.2引入了glDrawElementsBaseVertex方法。该方法在OpenGL ES中不可用。

D3D地形渲染器使用单个大型顶点缓冲区以LRU方式保存活动地形补丁。相同的16位索引用于绘制每个补丁。

鉴于OpenGL ES中缺少基本顶点索引偏移,我不能使用相同的索引来绘制每个补丁。此外,缓冲区对于16位绝对索引而言太大。我发现的替代方案是:

  1. 每个补丁使用一个VBO或顶点数组。
  2. 使用32位索引并为VBO中的每个块生成新索引。
  3. 根据需要停止使用索引并复制顶点。请注意,大多数顶点显示为六个三角形。切换到三角形条带可能有所帮助,但仍然会使顶点数量加倍。
  4. 与D3D相比,这些似乎都不是很有效。还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

您没有指定VBO的确切数据布局,但如果您的基本顶点偏移不是负数,则可以在将VBO绑定到顶点属性(glVertexAttribPointer)时应用偏移。