Предположим, у меня есть 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);
or
glTexStorage3D(GL_TEXTURE_2D_ARRAY,0,GL_RGB,1024,1024,filenameTable.size());
================================================== ============================== Но когда я выделяю размер для каждой текстуры в таблице, у меня есть только одна пара параметров для [width ,высота] текстуры. Что, если я хочу, чтобы каждое изображение текстуры имело другие размеры? Есть ли решение этой проблемы без масштабирования каждой текстуры до одного размера в графическом редакторе?
Другая проблема заключается в том, что glTexStorage3D(), которую я представляю на третьем фрагменте кода, вызывает сбой моей программы. Информацию о glTexStorage3D() я нашел здесь:
http://www.opengl.org/wiki/Array_Texture