2012-06-18 16 views
6

Za każdym razem, gdy zadzwonię pod numer glClear(GL_COLOR_BUFFER_BIT);, pojawia się błąd OpenGL "nieprawidłowa obsługa bufora ramki".Nieprawidłowe działanie bufora ramki OpenGL po glClear (GL_COLOR_BUFFER_BIT);

Połączenie wydaje się działać dobrze, a nic nie wydaje się złe. Nazywam glClear(GL_COLOR_BUFFER_BIT); pierwszą rzeczą w metodzie ::paintGL().

Huh? Czy powinienem po prostu zignorować ten błąd?

+0

Czy ustawiłeś czysty kolor? – cmannett85

+0

@ cbamber85: nie, ale właśnie wstawiłem 'glClearColor (0,0,0,0)', aby sprawdzić, czy to miało jakikolwiek wpływ, a drugie wciąż tam jest. – houbysoft

+0

Bardzo możliwe, że błąd został zgłoszony przez poprzednie wywołanie OpenGL, którego kod nie sprawdził. Sprawdź, czy wszystkie operacje OpenGL są chronione przez sprawdzanie błędów. –

Odpowiedz

4

Domyślam się, że Twój framebuffer nie jest kompletny, a wywołanie glClear na niekompletnym buforze ramki powoduje błąd.

Sprawdź stan bufora ramki używając glCheckFramebufferStatus i upewnij się, że zwraca GL_FRAMEBUFFER_COMPLETE.

+0

Wystąpił ten sam błąd co oryginalny plakat, a moje ramy buforów ramki ** zostały ** zakończone. Używam OpenGL-ES3 na iPhonie i tekstura, która jest czyszczona, jest teksturą sRGB - przy zmianie tego na normalną "rgb" -teksturę, błąd "nieprawidłowego działania bufora ramki" na przystankach glClear. Z informacji podanych przez OP nie mogę stwierdzić, czy jest to w tym przypadku takie samo, ale w obu przypadkach może to stanowić wskazówkę dla kogoś, kto wpada w ten problem. Aktualizacja – kalmiya

+0

: w moim przypadku srgb8 nie jest obsługiwany jako "ColorRenderable" (używanie GL_SRGB8_ALPHA8 jako alternatywy działa). Jak powiedział James, glCheckFrameBufferStatus ** powinien ** zwrócił błąd, ale tak nie jest, co oznacza, że ​​jest błąd w implementacji OpenGL, której używam (OpenGL-ES3 w xcode 7.3 na osxie). – kalmiya

2

Miałem ten problem na osx przy użyciu NSOpenGLView z CVDisplayLink, aby uruchomić wywołanie renderowania.

Należy poczekać na NSOpenGLView być pełni wyświetlona przed uruchomieniem renderowania, to znaczy:

-(void)viewDidAppear { 
    [super viewDidAppear]; 

    CVDisplayLinkStart(_displayLink); 
} 

Robi to w viewDidLoad jest zbyt wcześnie.

Powiązane problemy