我试图理解如何mipmap texture arrays。根据我的理解,纹理数组是3维结构,其中每个纹理2D在glTexStorage3D中都有一个深度参数,它将给定的纹理设置到数组中的某个位置。但是如何指定每个纹理的mipmap数量?我可以为每个纹理指定不同数量的mipmap吗?
这是正确的方法吗?
glTexStorage3D(GL_TEXTURE_2D_ARRAY,10,GL_RGBA8,width,height,numTextures);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
for(int i =0 ; i <numTextures;++i){
glTexSubImage3D(GL_TEXTURE_2D_ARRAY,/*What goes here???*/, 0, 0, 0, width, height, /*What goes here?*/, GL_RGBA, GL_UNSIGNED_BYTE, data);
}
glGenerateMipmap(GL_TEXTURE_2D_ARRAY);
我不知道要传递给glTexSubImage3D的第二个和第8个参数的内容。第二个参数应该是多个mipmap还是当前纹理的第8个深度?
答案 0 :(得分:2)
第二个参数是要加载的纹理的mipmap级别。在您的情况下,由于您希望依赖GL来生成mipmap,因此它为0。
第八个参数是深度。对于数组,这意味着您传递的层数。对于你来说,它是1,因为你在循环的每次迭代中传递一个单层。
然而,第五个参数是您要存储传入数据的深度偏移量。在您的情况下,它是您正在加载的图层i
。