OpenGL DrawElements / DrawArrays的纹理标识符数组?
像这样的OpenGL ES序列可以用于一次渲染多个对象:
glVertexPointer(...params..., vertex_Array );
glTexCoordPointer(...params..., texture_Coordinates_Array );
glBindTexture(...params..., one_single_texture_ID );
glDrawArrays( GL_TRIANGLES, number_Triangles );
这里,顶点数组和纹理坐标数组可以引用无数可以在OpenGL中一步描述的基元。
但是,所有这些基元的纹理坐标都必须引用glBindTexture命令中的单纹理吗?
传递一组纹理标识符会很好:
glBindTexture(...params..., texture_identifier_array[] );
这里,在前面的调用中描述的每个基本形状都会有一个纹理ID。 因此,每个形状的纹理坐标都与“texture_identifier_array []”中标识的纹理有关。
我可以看到一个选项是将所有感兴趣的纹理放置在绘图调用中可以作为单个实体引用的一个大纹理。 在我的平台上,这会创建一个可能导致内存问题的大型位图的中间步骤。
对我来说,最好能够将一组纹理标识符传递给OpenGL ES绘图调用。 这可以做到吗?
不,这是不可能的。 你也许可以通过使用一个纹理数组并给你的顶点一个纹理索引来模拟它。 然后在片段着色器中,您可以使用索引查找正确的纹理,但是我怀疑ES是否支持纹理数组。 即使如此,我不知道这是否真的有效。 或者,如果纹理地图集解决方案效率更高。
如果你想渲染同一个几何体的多个版本(我怀疑),你在寻找实例渲染,我认为ES设备也不支持这种渲染。
所以目前的走向将是一个纹理图集(多个纹理glDrawArrays
在一起),或者只是多次调用glDrawArrays
。
上一篇: Array of texture identifiers to OpenGL DrawElements/DrawArrays?