我正在使用具有多个级别的 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,它带有指向我第一次绑定纹理时获得的纹理的指针。
我究竟做错了什么?