Pas réussi à faire remplir objet framebuffer 8cd6 (iOS, créé par programmation OpenGL vue)

J'ai eu un problème pour faire mes créé par programmation OpenGL vue de travailler sur certaines versions iOS dispositifs. Il semble être plus courante sur les appareils Jailbreaké, mais ne se produire aussi à la normale des appareils. Il semble seulement être v4.1 ou 4.2.1 qu'il ne parvient pas à.

L'appareil que j'ai est jailbreaké (c'est pas le mien, et certainement pas mon choix pour le jailbreak!) et a v4.1 (8B117) de l'iOS.

L'erreur est 8cd6, ce qui signifie qu'il n'a pu joindre le framebuffer (ou quelque chose le long de ces lignes).

J'ai cherché et cherché, mais aucune des autres solutions que j'ai trouvé ont aidé. La plupart d'entre eux sont à l'aide d'un tampon de profondeur aussi, mais le mien est purement 2D et n'a pas de tampon de profondeur.

Voici comment j'ai créer les tampons:

glGenFramebuffersOES(1, &defaultFramebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);

glGenRenderbuffersOES(1, &colorRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);

D'autres valeurs de réglage:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1);
glMatrixMode(GL_MODELVIEW);
glViewport(0, 0, rect.size.width, rect.size.height);

glDisable(GL_DEPTH_TEST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND_SRC);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

int* mts = calloc(1, sizeof(int));
glGetIntegerv(GL_MAX_TEXTURE_SIZE, mts);

resizeFromLayer:

-(BOOL) resizeFromLayer: (CAEAGLLayer*) _layer
{
    //Allocate color buffer backing based on the current layer size
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);

    NSLog(@"Layer Bounds: %f x %f", _layer.bounds.size.width, _layer.bounds.size.height);
    NSLog(@"Layer Position: %f x %f", _layer.bounds.origin.x, _layer.bounds.origin.y);
    if(![context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable: _layer])
    {
        NSLog(@"renderBufferStorage failed!");
    }

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
    NSLog(@"Backing: %d x %d", backingWidth, backingHeight);

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

C'est la ligne "a Échoué à faire remplir objet framebuffer" qui est appelée avec le code d'erreur 8cd6.

Vous pourriez essayer d'ajouter quelques appels à glGetError() pour voir si tout avant que l'appel réussit.
8CD6 (GL_FRAMEBUFFER_INCLOMPLETE_ATTACHMENT) ne veut pas dire "impossible de joindre le framebuffer" (ce que vous entendez par là), mais que l'une de ses pièces jointes (texture ou renderbuffer lié à une couleur ou la profondeur de l'attachement) est incomplète. Il semble donc que c'est le renderbuffer de stockage qui est cassé en quelque sorte.
Êtes-vous sûr que le bon FBO est lié lors de l'appel de glCheckFramebufferStatus?
Ahah! J'ai eu (à tort) suppose que parce backingWidth et backingHeight, etc. ont été configuré correctement que tout le reste avant c'était OK. Après la mise dans certains glGetError() appels que je reçois 1280, GL_INVALID_ENUM après la glBindRenderbufferOES() dans resizeFromLayer.
J'ai de très de base de l'expérience avec l'OpenGL, sur n'importe quel niveau, donc il n'était pas entièrement sûr de ce que l'erreur signifiait. Mais maintenant j'ai un nouveau code d'erreur pour étudier, grâce à user1118321

OriginalL'auteur AnonymousReality | 2012-01-24