ロードおよびアンロードできる複数のレベルを持つ 2D ゲームを使用しています。
テクスチャの処理を簡単にするために、すべてのテクスチャのリストを持つ TextureLoader クラスを作成しました。ゲーム内のオブジェクトがテクスチャを使用したい場合、使用したいテクスチャへのパスのみがあり、TextureLoader に同じパスでテクスチャへのポインタを取得できます。次に、テクスチャがリストに存在しない場合、TextureLoader はポインタを返す前にそれをロードしようとします。
これはゲーム全体で問題なく機能し、レベルをリロードしてもメモリ使用量は変わりません。
しかし、新しいレベルをロードするとき、明らかに前のレベルをアンロードしたいのですが、うまくいかないようです。
そこでglDeleteTexturesの出番です。
だから私がやろうとしていることは次のとおりです。
int arraySize = textures.size();
GLuint* arr = new GLuint[arraySize];
int x = 0;
for (std::list<Texture2D*>::iterator it = textures.begin(); it != textures.end(); ++it)
{
arr[x] = (*it)->getImage();
x++;
}
glDeleteTextures(arraySize, arr);
textures.clear();
メモリへのポインターは別の Texture2D クラスに格納されているため、glDeleteTextures を呼び出す前にそれらすべてを収集しようとします。
ただし、スタックオーバーフローに達するまで、メモリ使用量はレベルごとに増加し続けます。
getImage()
最初にテクスチャをバインドしたときに取得したテクスチャへのポインターを含む Gluint を返します。
私は何を間違っていますか?