2014-10-27 58 views
-1

比方说,我们结合在OpenGL ES一个简单的数组缓冲区:的OpenGL ES交错顶点数组纹理ID

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)); 

因此,我们有: 浮法X,浮法Ÿ UBYTE R,UBYTE克,UBYTE b,UBYTE一个 浮动TX,浮动TY

是否possib le在纹理id结尾处添加一个变量?我正在考虑在片段着色器中使用glVertexAttribPointer并使用texture2D来传递值。

会这样吗?

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

回答

1

不可以。您只能同时绑定一定数量的纹理,并且无法在着色器*中将其切换。

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

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

+0

非常好,这正是我正在循环。 – Grapes 2014-10-27 19:46:30