Por que meu EAGLVIew não está mais renderizando no iOS 4.2?
Atualizando para o iOS SDK 4.2 Estou tendo vários comportamentos inadequados no meu aplicativo (outro é solicitadoaqui) O que eu vou pedir sua ajuda diz respeito a uma visualização OpenGL (uma subclasse EAGLView) que não renderiza mais o modelo 3d que estou inserindo.
A visualização é alocada e parece reconhecer os gestos, mas seu conteúdo não évisível (Eu verifiquei que é sobre a visualização e não aextraviado do modelo, colorindo o plano de fundo: não o pinta através deglClearColor()
)
Quando eu tocar duas vezes, ele deve ser redimensionado (fica em tela cheia, antes disso é um pouco UIVIew) chamando este método:
- (void)animateToGrow{
DNSLog(@"grow");
grow = YES;
oldFrame = self.frame;
oldCenter = self.center;
[UIView beginAnimations:@"MoveAndStrech" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationBeginsFromCurrentState:YES];
self.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
self.center = CGPointMake(CENTER_X, CENTER_Y);
[UIView commitAnimations];
[self setupGLPerspectiveNear:0.1 far:1000];
}
e magicamenteo modelo aparecee até o fundo fica colorido.
Eu tenho um método que redimensiona e volta ao quadro anterior e posição central e, quando é chamado, a exibição se torna'esvaziar' novamente.
Antes de qualquer sugestão? (Posso postar mais código, se necessário)
ATUALIZAR Isso está acontecendo no simulador (não é possível testar em um dispositivo no momento). Se este for um erro reconhecido, alguém tem uma referência nos documentos da Apple?
ATUALIZAÇÃO 2 Estou usando o OpenGL ES 1.1 e não o 2.0.
Aqui está o que eu faço no EAGLViewlayoutSubViews
:
- (void)layoutSubviews
{
[EAGLContext setCurrentContext:_context];
[self destroyFramebuffer];
[self createFramebuffer];
[self drawView];
}
E este é o meucreateFramebuffer
- (BOOL)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 (_useDepthBuffer)
{
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;
}
ATUALIZAÇÃO 3
Se eu criar a visualização, fornecendo o quadro de tela cheia (320x480), ela aparecerá renderizada corretamente. De alguma forma, está relacionado às dimensões da vista