Mam problem z pobieraniem mojego utworzonego programowo widoku OpenGL do pracy na niektórych wersjach/urządzeniach iOS. Wydaje się być najczęściej na urządzeniach Jailbroken, ale zdarza się również na zwykłych urządzeniach. Wygląda na to, że jest tylko v4.1 lub 4.2.1, że zawiedzie.Nie można utworzyć pełnego bufora ramki 8cd6 (iOS, programowo utworzony widok OpenGL)
Posiadane przeze mnie urządzenie jest jailbreak (nie jest moje i na pewno nie jest moim wyborem do jailbreak it!) I ma na nim v4.1 (8B117) iOS.
Błąd wynosi 8cd6, co oznacza, że nie udało się dołączyć framebuffera (lub czegoś podobnego do tych linii).
Szukałem i przeszukano, ale żadne z innych rozwiązań, które znalazłem, nie pomogło. Większość z nich używa również bufora głębi, ale moje ma charakter czysto 2D i nie ma bufora głębi.
Oto jak utworzyć buforów:
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);
Inne wartości Setup:
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;
}
To linia "Nie udało się dokonać kompletnego obiektu bufora ramki", które zostaje wywołany z kodem błędu 8cd6.
Możesz spróbować dodać kilka wywołań do 'glGetError()', aby sprawdzić, czy wszystko przed tym połączeniem się powiedzie. – user1118321
8CD6 ('GL_FRAMEBUFFER_INCLOMPLETE_ATTACHMENT') nie oznacza, że" nie udało się dołączyć bufora ramki "(cokolwiek masz na myśli przez to), ale ten jeden z jego załączników (tekstura lub renderbuffer powiązany z załącznikiem koloru lub głębi) jest niekompletny. Wygląda więc na to, że pamięć podręczna do renderowania jest w jakiś sposób zepsuta. –
Czy jesteś pewien, że prawidłowe wywołanie FBO jest powiązane podczas wywoływania 'glCheckFramebufferStatus'? –