【发布时间】:2023-03-14 17:20:01
【问题描述】:
我一直在寻找我的游戏中的一个错误,我想我终于找到了问题。
我有一个内存管理例程,它在内存警告时被调用,它基本上检查加载和不需要的内容,然后释放它。 我的大部分内存都用在了 opengl 的纹理中,因此除了纹理之外,即使在内存有限的 3G 上,我也只需要转储一些对象即可使系统保持正常运行。
现在我的问题是,在某些情况下我会丢失 openGL 上下文,例如在使用 MPMoviePlayerController 播放电影时,或者在调用 GC 系统视图时。
GC 或 MPMovie 的加载会与调用我的内存管理例程同时发生几次,这就是我认为导致游戏崩溃的原因,因为我没有 opengl 上下文,我得到:
malloc: *** error for object 0x471c9080: pointer being freed was not allocated
尝试 glDeleteTextures 时。
现在我正在更改我的代码,因此我不会尝试在无效上下文中删除纹理(仍在检查如何执行此操作),但我仍然遇到了当我获得记忆时该怎么做的问题在 opengl 上下文中断期间发出警告。
我只看到一个选项
- 在调用会使我失去上下文的内容之前,请尝试释放内存
我不是特别喜欢这个选项,因为它会在某些操作中引入延迟。
- 有人看到更好的方法吗?
- 我对问题的分析是否正确? (使用 MPlayer 和 GC 时我真的会丢失 opengl 上下文吗?)
- 还有其他释放纹理的方法吗?
谢谢
【问题讨论】:
标签: iphone memory-management opengl-es ios4