ロードしている6つのテクスチャを含むGL_TEXTURE_2D_ARRAYがあるとします。
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());
================================================== ============================ しかし、テーブル内のすべてのテクスチャにサイズを割り当てると、[幅のパラメーターのペアは 1 つしかありません。 、高さ] テクスチャの。すべてのテクスチャ イメージに別の寸法を持たせたい場合はどうすればよいですか? グラフィック エディタですべてのテクスチャを 1 つのサイズにスケーリングせずに、この問題の解決策はありますか?
もう 1 つの問題は、glTexStorage3D() が 3 番目のコード スニッパーに表示され、プログラムがクラッシュするという事実です。そこで見つけた glTexStorage3D() に関する情報:
http://www.opengl.org/wiki/Array_Texture