私の OpenGL タイプの iPhone アプリでは、以下の GLView 実装にこのメソッドがあります。
開発中にアプリを起動するたびに、前回アプリをシャットダウンしたときに存在していた最後のフレームが、アプリがアニメーションを開始する前に最初に描画されることに気付きました...
しかし、このメソッドをコメントアウトすると、アプリは前回の古い終了フレームがなくても問題なく起動します。
だから私はここに何か問題があります。おそらくこの方法で直接...アイデアはありますか?
(今、アニメーションの直前に(最初のフレームとして)空白の白い画面が表示されるので、ここで何かがおかしいです)
//------------------------------------------------------------------------------------
- (void)destroyFramebuffer
{
NSLog(@"destroyFramebuffer");
glDeleteFramebuffersOES(1, &viewFramebuffer);
viewFramebuffer = 0;
glDeleteRenderbuffersOES(1, &viewRenderbuffer);
viewRenderbuffer = 0;
if(depthRenderbuffer)
{
glDeleteRenderbuffersOES(1, &depthRenderbuffer);
depthRenderbuffer = 0;
}
}
以下は、「createFrameBuffer」メソッドの外観です (GLView 実装の起動方法は、これらの 3 行でした)。
[EAGLContext setCurrentContext:context];
// [self destroyFramebuffer];
[self createFramebuffer];
//------------------------------------------------------------------------------------
- (BOOL)createFramebuffer
{
NSLog(@"createFramebuffer");
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
if (USE_DEPTH_BUFFER)
{
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
{
NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
return YES;
}