手册刚刚指示你写:
glDeleteTextures(1, &GLtexture);
并声称纹理将被删除。 iPhone有很少的内存,我想确保这些纹理真正发布。
Leaks仪器无法检测到这一点,坦率地说,我有点担心。我确实想确保纹理真的消失了。
谢谢。
答案 0 :(得分:3)
Obj-c运行时不处理纹理,因此泄漏对它们一无所知。你必须使用其他工具。
在Xcode中使用OpenGL模板启动一个新项目。搜索更新/绘制场景的方法,并将此代码添加到其末尾:
static int tick = -1;
static GLuint tex[5];
if (tick++ < 0)
for (int f = 0; f < 5; f++)
tex[f] = 0;
tick = tick % 5;
if (tex[tick]) {
glDeleteTextures(1, &tex[tick]);
tex[tick] = 0;
} else {
glGenTextures(1, &tex[tick]);
glBindTexture(GL_TEXTURE_2D, tex[tick]);
char *mem = malloc(1024 * 1024 * 4);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem);
free(mem);
}
代码使用OpenGL命令生成并销毁五个纹理。构建它并在您的设备上运行一次以确保它已安装。不要担心这种情况。
现在打开乐器并从iPhone的空白模板开始。打开库并将Memory Monitor拖到窗口中。单击信息公开按钮并取消选中除“物理内存空闲”之外的所有内容。现在选择在iPhone上启动二进制文件以开始录制。您应该看到楼梯模式上升/下降取决于Instruments何时尝试对应用程序进行采样。程序运行时,您可以看到所有活动进程的“Real Memory”列,显示实际的内存使用情况。
在我的测试中,此示例消耗25MB到3MB,具体取决于内存采样的时刻。这是第二代iPhone和SDK 3.1。如果你有一个2.x SDK,你必须在普通的OpenGL监视器中搜索GART Resident Object Size。有关详细信息,请参阅http://blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/。
在任何情况下,内存上下跳动证明glDeleteTexture()按照宣传的方式完成其工作。
答案 1 :(得分:0)
在您自己的函数中将调用传递给glDeleteTextures(int, int*)
,以维护分配表。