OpenGL DrawElements / DrawArrays的纹理标识符数组?

时间:2011-06-02 13:02:54

标签: opengl-es

这样的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绘图调用。可以这样做吗?

1 个答案:

答案 0 :(得分:1)

不,那是不可能的。您也许可以通过使用纹理数组并为顶点提供纹理索引来模拟它。然后在片段着色器中,您可以使用索引查找正确的纹理,但我怀疑ES是否支持纹理数组。即便如此,我也不知道这是否真的有效。或者如果纹理图集解决方案效率更高。

如果你想渲染相同几何体的多个版本(我怀疑),你会想要实例渲染,我认为这也不是ES设备所支持的。

所以目前的方法是纹理图集(多个纹理合二为一)或只是多次调用glDrawArrays