Opengl es OpenGL ES中缺少GLDrawerElementsBaseVertex的处理

Opengl es OpenGL ES中缺少GLDrawerElementsBaseVertex的处理,opengl-es,Opengl Es,我正在将Direct3D地形渲染器移植到Android上,刚刚了解到OpenGL没有与DrawIndexedPrimitive的BaseVertexIndex参数等效的参数,直到版本3.2引入了glDrawElementsBaseVertex方法。该方法在OpenGL ES中不可用 D3D地形渲染器使用单个大顶点缓冲区以LRU方式保存活动地形面片。使用相同的16位索引绘制每个面片 鉴于OpenGL ES中缺少基本顶点索引偏移,我不能使用相同的索引来绘制每个面片。此外,缓冲区对于16位绝对索引来说

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

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

鉴于OpenGL ES中缺少基本顶点索引偏移,我不能使用相同的索引来绘制每个面片。此外,缓冲区对于16位绝对索引来说太大。我确定的备选方案有:

  • 每个面片使用一个VBO或顶点数组
  • 使用32位索引并为VBO中的每个块生成新索引
  • 停止使用索引,并根据需要复制顶点。请注意,大多数顶点显示在六个三角形中。切换到三角形条带可能会有所帮助,但仍会使顶点数量增加一倍

  • 与D3D中可能出现的情况相比,这些方法似乎都不是很有效。还有其他选择吗

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

    也许可以看看实例?您可以通过一次调用绘制同一VBO的多个实例,并使用
    gl\u instanceID
    在着色器代码中对它们进行不同的处理。实例是ES3的核心,也是ES2中流行的扩展。