1

OpenGL ES 2.0 と自動参照カウント (arc) に問題があります。

シーン (背景、2 つのポーン、およびいくつかのケース) を起動すると、次のプロセスに従います。

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 グープを作成する

  • それをレンダー ツリーに押し込んで、保持させます。

  • あなたのローカル参照をゼロにする

その時点で、Render Tree には強力な (保持された) 参照がまだありますが、明示的に削除しない限り、この参照は消えません。

于 2012-08-28T22:15:41.670 に答える