我将3个纹理加载到数组中
int width = 1024;
int height = 1024;
GLuint ID;
glGenTextures(1, &ID);
glBindTexture(GL_TEXTURE_2D_ARRAY, ID);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, width, height, 3)
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[0]);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 1, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[1]);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 2, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[2]);
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
如果我使用立即模式,如何在glBindTexture(GL_TEXTURE_2D_ARRAY,ID)之后通过glTexCoord2f(...)判断我想用哪个层从纹理中绘制?我必须使用一些特定的方法吗?
答案 0 :(得分:2)
立即模式不是问题,固定功能管道是 - 纹理数组只能使用着色器进行采样。如果使用着色器,则可以使用某种方式将所需的图层索引传递给着色器(作为属性 - 泛型或内置,统一,使用其他一些缓冲对象,从其他东西计算它,等等......)。
如果使用固定功能管道,根本就没有办法。您只能切换到3D纹理来模拟数组纹理,但会遇到更严格的大小限制,并且在使用过滤器进行采样时会产生更多的开销。
然而,2017年根本没有充分的理由使用立即模式和/或固定功能管道。这些东西在十年前已被弃用。