1

我在使用 OpenGL ES 2.0 和自动参考计算 (arc) 时遇到问题。

当我启动一个场景(一个背景、两个棋子和某些情况)时,它遵循以下过程:

1/ 创建上下文

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:context];

2/ 编译着色器

3/ 设置帧缓冲

GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);   
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _colorRenderBuffer);

4/ 每次渲染前清除颜色

glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);
glClear(GL_COLOR_BUFFER_BIT);

5/ 渲染所有形状

第一次启动,一切正常并正确渲染。然后我导航到菜单,启动另一个关卡,所有 1/ 2/ 3/ 4/ 5/ 再次处理以生成新关卡。问题是我的旧棋子和箱子是可见的,闪烁/剪切/透明。

编辑:我正在使用弧,如果我将它设置为 nil,控制器不会释放我的旧场景,因此我将我的标签重定向到弧问题。

4

1 回答 1

2

听起来不像是ARC问题。听起来您没有正确拆除/删除旧场景。

虽然 ARC 会自动处理内存管理,但它不会仅仅因为您的本地强引用消失(除非该对象图具有弱引用)而自动断开对象图的内容。

因此,可能发生的是您:

  • 创建 OpenGL goop

  • 将其推入渲染树,使其被保留

  • 消除您的本地参考

在那个时候,渲染树仍然有一个强的——一个保留的——引用,除非你明确地删除它,否则它不会消失。

于 2012-08-28T22:15:41.670 回答