Frage

Das Upgrade auf das iOS SDK 4.2 ich erlebe mehrere misbehaviors in meiner Anwendung (ein anderes gefragt wird, hier ). Der, den ich werde fragen Ihre Hilfe für Bedenken eine OpenGL-Ansicht (eine EAGLView Unterklasse), die nicht mehr das 3D-Modell macht in Ich setze.

Die Ansicht wird zugewiesen und es scheint, die Gesten zu erkennen, aber ihr Inhalt ist nicht sichtbar (ich überprüft habe, dass es über die Aussicht ist und nicht den Untersteck von der Modell durch die Hintergrundfärbung. es nicht die Farbe es durch glClearColor())

Wenn ich doppelt tippen sie die Größe ändern soll (es geht Vollbild, bevor dieser es ist ein wenig uiview) Beim Aufruf dieser Methode:

- (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];
}

und magisch das Modell erscheint , und auch der Hintergrund gefärbt wird.

Ich habe eine Methode, die es ändert die Größe und es auf seine früheren Rahmen und Mittelstellung machen zurück, und wenn es die Sicht wird aufgerufen wird ‚leer‘ wieder.

Vor Irgendein Vorschlag? (Ich kann mehr Code schreiben, wenn erforderlich)

UPDATE Dies geschieht auf dem Simulator (kann zur Zeit nicht auf einem Gerät testen). Wenn dies ein anerkannter Fehler ist, hat jemand einen Verweis von Apple docs?

UPDATE 2 Ich bin mit OpenGL ES 1.1 und nicht 2.0.

Hier ist, was ich tun, in EAGLView der layoutSubViews:

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

Und das ist mein 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;
}

UPDATE 3

Wenn ich die Ansicht, die er den Vollbild-Rahmen erstellen (320x480) Es scheint korrekt wiedergegeben. In gewisser Weise er ist auf die Ansicht Dimensionen bezogen

War es hilfreich?

Lösung

Es hat mich für immer, dies herauszufinden. Nicht gut auf alle dokumentiert, aber es ist in dem Apfel docs. Auf OS 4.2 und höher, müssen Sie die EAGLView Größe ein Vielfaches von 32 Pixeln für sie arbeiten in beiden Dimensionen sein.

Andere Tipps

Ist das im Simulator? Wenn ja, dann ist das ein bekannter Fehler in den iOS 4.2 Simulator. Dieser Fehler ist nicht die Geräte beeinflussen sich.

Wie setzen Sie Ihre OpenGL-Hosting-Schicht und den Blick nach oben, dass es sichert? Wenn ich die OpenGL ES Beispielanwendungen versuchen, dass ich und hier , beide laufen ganz gut auf dem 4.2-Simulator sowie das Gerät.

Vielleicht könnten Sie die Initialisierung in diesen Beispielen mit Ihrem eigenen verwendet vergleichen und sehen, ob es etwas ist, dass Sie in dem Setup-Prozess fehlen könnten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top