Domanda

Aggiornando all'SDK di iOS 4.2 riscontro diversi comportamenti anomali nella mia applicazione (ne viene chiesto un altro Qui).Quello per cui chiederò il tuo aiuto riguarda una vista OpenGL (una sottoclasse di EAGLView) che non rende più il modello 3d che sto inserendo.

La vista è allocata e sembra riconoscere i gesti ma il suo contenuto no visibile (Ho verificato che si tratti della vista e non del smarrimento del modello colorando lo sfondo:non lo colora glClearColor()).

Quando lo tocco due volte si ridimensionerà (va a schermo intero, prima è un piccolo UIVIew) chiamando questo metodo:

- (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 appare il modello, e anche lo sfondo si colora.

Ho un metodo che lo ridimensiona e lo riporta al fotogramma precedente e alla posizione centrale e quando viene chiamato la vista diventa 'vuoto' Ancora.

Prima di qualche suggerimento?(Posso pubblicare più codice se necessario)

AGGIORNAMENTOQuesto sta accadendo sul simulatore (al momento non è possibile eseguire il test su un dispositivo).Se si tratta di un bug riconosciuto, qualcuno ha un riferimento dai documenti Apple?

AGGIORNAMENTO 2Sto usando OpenGL ES 1.1 e non 2.0.

Ecco cosa faccio in EAGLView layoutSubViews :

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

E questo è il mio 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;
}

AGGIORNAMENTO 3

Se creo la vista assegnandole il frame a schermo intero (320x480) appare renderizzata correttamente.In qualche modo è legato alle dimensioni della vista

È stato utile?

Soluzione

Mi ci è voluta un'eternità per scoprirlo.Non è affatto ben documentato, ma è nei documenti Apple.Sul sistema operativo 4.2 e versioni successive, affinché funzioni, è necessario che la dimensione di EAGLview sia un multiplo di 32 pixel in entrambe le dimensioni.

Altri suggerimenti

È questo nel simulatore?Se è così, allora si tratta di un bug noto nel simulatore iOS 4.2.Questo bug non influisce sui dispositivi stessi.

Come stai configurando il tuo livello di hosting OpenGL e la vista che supporta?Quando provo le applicazioni di esempio OpenGL ES che ho Qui E Qui, entrambi funzionano perfettamente sul simulatore 4.2, così come sul dispositivo.

Forse potresti confrontare l'inizializzazione utilizzata in quegli esempi con la tua e vedere se c'è qualcosa che potrebbe mancarti nel processo di installazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top