Pergunta

Atualizando para o iOS SDK 4.2 estou experimentando vários mauos -comportamentos em meu aplicativo (outro é perguntado aqui). Aquele que vou pedir a sua ajuda para preocupações uma visualização OpenGL (uma subclasse Eaglview) que não torna mais o modelo 3D que estou colocando.

A visão é alocada e parece reconhecer os gestos, mas seu conteúdo não é visível (Eu verifiquei se é sobre a visão e não o extração do modelo colorindo o fundo: ele não o colori glClearColor()).

Quando eu tocar duas vezes, ele será redimensionado (ele fica em tela cheia, antes disso, é um pouco UIView) chamando esse 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 magicamente o modelo aparece, e até o fundo é colorido.

Eu tenho um método que o redimensiona e volte para o quadro e a posição central anteriores e quando é chamado, a vista se torna 'vazio' novamente.

Antes de alguma sugestão? (Posso postar mais código, se necessário)

ATUALIZARIsso está acontecendo no simulador (não pode testar em um dispositivo no momento). Se este é um bug reconhecido, alguém tem uma referência da Apple Docs?

Atualização 2Estou usando o OpenGL ES 1.1 e não o 2.0.

Aqui está o que eu faço no Eaglview's layoutSubViews :

- (void)layoutSubviews 
{
    [EAGLContext setCurrentContext:_context];
    [self destroyFramebuffer];
    [self createFramebuffer];
    [self drawView];
}

E este é o meu createFramebuffer

- (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, dando -lhe o quadro de tela cheia (320x480), ele parece renderizado corretamente. De alguma forma, está relacionado às dimensões da visualização

Foi útil?

Solução

Levei uma eternidade para descobrir isso. Não está bem documentado, mas está no Apple Docs. No OS 4.2 e superior, você precisa que o tamanho do EAGLView seja um múltiplo de 32 pixels nas duas dimensões para que funcione.

Outras dicas

Isso está no simulador? Nesse caso, esse é um bug conhecido no simulador iOS 4.2. Este bug não afeta os próprios dispositivos.

Como você está configurando sua camada de hospedagem OpenGL e a visão de que ela apóia? Quando eu tento os aplicativos de amostra do OpenGL ES que eu tenho aqui e aqui, ambos funcionam bem no simulador 4.2, bem como no dispositivo.

Talvez você possa comparar a inicialização usada nesses exemplos com o seu próprio e ver se há algo que você pode estar faltando no processo de configuração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top