Array of texture identifiers to OpenGL DrawElements/DrawArrays?

An OpenGL ES sequence like this can be used to render multiple objects in one pass:

glVertexPointer(...params..., vertex_Array );
glTexCoordPointer(...params..., texture_Coordinates_Array );
glBindTexture(...params..., one_single_texture_ID );
glDrawArrays( GL_TRIANGLES, number_Triangles );

Here, the vertex array and texture coordinates array can refer to innumerable primitives that can be described in one step to OpenGL.

But do all these primitives' texture coordinates have to reference the one, single texture in the glBindTexture command?

It would be nice to pass in an array of texture identifiers:

glBindTexture(...params..., texture_identifier_array[] );

Here, there would be a texture ID in the array for every primitive shape described in the preceding calls. So, each shape's texture coordinates would pertain to the texture identified in "texture_identifier_array[]".

I can see one option is to place all textures of interest one one large texture that can be referenced as a single entity in the drawing calls. On my platform, this creates an intermediate step with a large bitmap that might cause memory issues.

It would be best for me to be able to pass an array of texture identifiers to the OpenGL ES drawing calls. Can this be done?


No, that's not possible. You could perhaps emulate it by using a texture array and giving your vertices a texture index. Then in the fragment shader you could look up the right texture with the index, but I doubt that ES supports texture arrays. And even then I don't know if this really works. Or if a texture atlas solution would be much more efficient.

If you want to render multiple versions of the same geometry (what I doubt), you're looking for instanced rendering, which also isn't supported by on ES devices, I think.

So the way to go at the moment will be a texture atlas (multiple textures in one) or just calling glDrawArrays multiple times.

链接地址: http://www.djcxy.com/p/33876.html

上一篇: 在iOS上渲染纹理OpenGL ES-在模拟器上工作,但不在设备上

下一篇: OpenGL DrawElements / DrawArrays的纹理标识符数组?