具有纹理ID的OpenGL ES交错顶点数组

时间:2014-10-27 19:21:24

标签: c++ opengl-es

假设我们在OpenGL ES中绑定一个简单的数组缓冲区:

glBindBuffer(GL_ARRAY_BUFFER, m_dataVboID);

然后我们告诉数组缓冲区我们的交错数据是如何构造的:

glVertexPointer(2, GL_FLOAT, VBO_SIZE_MULTIPLIER, BUFFER_OFFSET(0));
glColorPointer(4, GL_UNSIGNED_BYTE, VBO_SIZE_MULTIPLIER, BUFFER_OFFSET(sizeof(GLfloat) * 2));
glTexCoordPointer(2, GL_FLOAT, VBO_SIZE_MULTIPLIER, BUFFER_OFFSET(sizeof(GLfloat) * 2 + sizeof(GLubyte) * 4));

所以我们有: float x,float y ubyte r,ubyte g,ubyte b,ubyte a float tx,float ty

是否可以在纹理ID的末尾添加一个变量?我正在考虑使用glVertexAttribPointer并在片段着色器中使用texture2D并传递值。

那会有用吗?

这里的想法是我可以使用单个glDrawArrays而不是绑定每个纹理id。

1 个答案:

答案 0 :(得分:1)

没有。您只能一次绑定一定数量的纹理,并且无法在着色器中切换它们。

但是,您可以使用array textures,它们基本上是......一组纹理。这要求每个纹理具有相同的大小,并且您可以提前将每个纹理存储到数组中。

* NV_bindless_texture扩展程序可能允许它,但它尚未得到广泛支持。