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.
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
Vous devez vous connecter pour publier un commentaire.
Je l'ai triés grâce aux deux utilisateurs ci-dessus, qui m'a permis de réaliser quelque chose.
J'ai déplacé la création des tampons de la fonction init de la classe et créé deux nouvelles fonctions:
J'ai ensuite ajouté les appels vers ces au début de la resizeFromLayer fonction:
"Je l'ai triés grâce aux deux utilisateurs ci-dessus, qui m'a permis de réaliser quelque chose." - comment est-ce moi ne le dit pas résolu le problème? Cette méthode semble être un assez standard de traitement sur iOS.
Christian dans iOS vous faire détruire et recréer la mémoire d'image lors de la diviser est ré-orientée - ce qui nécessite de redimensionnement. C'est la façon standard de le faire dans iOS.
OriginalL'auteur AnonymousReality
J'ai juste eu le même problème sur un projet, je travaille sur
L'erreur imprimés:
Pour corriger cela, je devais m'assurer que je seulement la marque de la vue de redessiner tout son auto.la fenêtre n'est pas nul,.
Je suis à l'aide d'un
GLKView
avec mon propreCADisplayLink
c'était ma question aussi. Merci!
OriginalL'auteur SomeGuy
Je suis à l'aide de Cocos2d v2.x
J'ai utilisé la solution ci-dessus pour créer ma solution, qui a résolu mon) des nouvelles question:
OriginalL'auteur Yossi
Après avoir passé beaucoup de temps j'ai trouvé la solution pour ce "pas réussi à faire remplir objet framebuffer" je suis en utilisant aide de ruban de masquage sur CCSprite, mais avant d'initialiser opengl méthodes de masquage possible, je suis en ajoutant sprite dans une vue, avant d'ajouter que vous avez à ajouter un planificateur de 1 seconde et que le planificateur ajouter votre ccsprite dans une vue.
Cheers!
OriginalL'auteur Shauket Sheikh