假设我们在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。
答案 0 :(得分:1)
没有。您只能一次绑定一定数量的纹理,并且无法在着色器中切换它们。
但是,您可以使用array textures,它们基本上是......一组纹理。这要求每个纹理具有相同的大小,并且您可以提前将每个纹理存储到数组中。
* NV_bindless_texture扩展程序可能允许它,但它尚未得到广泛支持。