假设我有 GL_TEXTURE_2D_ARRAY 包括 6 个纹理,我正在加载它:
vector<string>::iterator vsit;
for(vsit=filenameTable.begin();vsit!=filenameTable.end();++vsit)
{
string filename = *vsit;
BMPData* bmpData = LoadTextureBMPData_custom(filename);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY,0,0,0,i++,bmpData->width,bmpData->height,1,GL_BGR,GL_UNSIGNED_BYTE,(GLvoid*)&(bmpData->data[0]));
}
在此代码之前,我必须为每个纹理分配存储空间,如果我很好理解,我可以使用 glTexImage3D() 或 glTexStorage3D() 来执行此操作,例如:
glTexImage3D(GL_TEXTURE_2D_ARRAY,0,GL_RGB,1024,1024,filenameTable.size(),0,GL_BGR,GL_UNSIGNED_BYTE,NULL);
或者
glTexStorage3D(GL_TEXTURE_2D_ARRAY,0,GL_RGB,1024,1024,filenameTable.size());
==================================================== ============================== 但是当我为表中的每个纹理分配大小时,我只有一对 [width ,height] 纹理。如果我希望每个纹理图像都有另一个维度怎么办?如果不在图形编辑器中将每个纹理缩放到一个尺寸,是否有任何解决方案?
另一个问题是我在第三个代码截断器上展示的 glTexStorage3D() 导致我的程序崩溃的事实。我在那里找到了有关 glTexStorage3D() 的信息:
http ://www.opengl.org/wiki/Array_Texture