Frage

Ich habe ein 3D-Projekt auf der Basis der EAGLView exemple von Apple.

Ich habe einen sehr seltsam Fehler mit dem Kontext (glaube ich), ist mein Kontext unter Verwendung erstellen:

  

[Kontext renderbufferStorage: GL_RENDERBUFFER_OES fromDrawable: (CAEAGLLayer *) self.layer];

Auf init die 3D es Arbeit zu sehen, und auf dem Layout subview, mein Framebuffer ist ein wieder schaffen zerstören. Aber in einigen Fällen wird der Framebuffer nicht erstellen. Ich habe mit dem Debugger suche ich das Problem aus dem Kontext „Schöpfung“ werden finden müssen:

- (BOOL)createFramebuffer
{
    NSLog(@"[EAGLVIEW] create framebuffer");

    glGenFramebuffersOES(1, &viewFramebuffer);
    glGenRenderbuffersOES(1, &viewRenderbuffer);

    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);


    //////// HERE, some time the context is 0 /////////
    [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);


    // On génère le tampon de profondeur -- bah oui, on fait de la 3D
    glGenRenderbuffersOES(1, &depthRenderbuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
    // On paramètre le tampon :
    // - avec les dimensions que l'on veut
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
    //glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight);
    // - avec la profondeur que l'on veut
    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;
}

Ich verstehe nicht, warum Arbeit oder nicht. Wenn ich diesen Fehler haben, schalte ich mein iphone für Kraft layoutSubview auszuführen, und es ist Arbeit. es ist sehr seltsam.

, was der Grund für den Kontext nicht auf dem zweiten erstellen und es ist in Ordnung, nur nach.

War es hilfreich?

Lösung

Sie haben geschrieben nicht den Code zeigt, wie Sie tatsächlich den Kontext erstellt, indem es einfach. Ihr Kontext Schöpfung sollte so etwas wie dieses

aussehen
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

if (!context || ![EAGLContext setCurrentContext:context])
    return false;

Und wenn der Kontext 0 (was bedeutet, nil), dann haben Sie es vor der Hand erkannt wird.

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