这样的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绘图调用。可以这样做吗?
答案 0 :(得分:1)
不,那是不可能的。您也许可以通过使用纹理数组并为顶点提供纹理索引来模拟它。然后在片段着色器中,您可以使用索引查找正确的纹理,但我怀疑ES是否支持纹理数组。即便如此,我也不知道这是否真的有效。或者如果纹理图集解决方案效率更高。
如果你想渲染相同几何体的多个版本(我怀疑),你会想要实例渲染,我认为这也不是ES设备所支持的。
所以目前的方法是纹理图集(多个纹理合二为一)或只是多次调用glDrawArrays
。