2012-06-18 12 views
6

glClear(GL_COLOR_BUFFER_BIT); numaralı telefonu aradığım her seferinde OpenGL hatası "geçersiz çerçeveleyici işlemi" alıyorum.OpenGL geçersiz framebuffer işlemi;

Arama gayet iyi çalışıyor ve hiçbir şey yanlış görünüyor. glClear(GL_COLOR_BUFFER_BIT);'u ::paintGL() yöntemindeki ilk şey olarak adlandırıyorum.

Huh? Bu hatayı sadece göz ardı etmeli miyim?

+0

Açık renk mi ayarladınız? – cmannett85

+0

@ cbamber85: Hayır, ancak herhangi bir fark yaratıp yaratmadığını görmek için bir 'glClearColor (0,0,0,0)' girdim. – houbysoft

+0

Muhtemelen hata, kodun kontrol etmediği bir önceki OpenGL çağrısı tarafından yükseltildi. Tüm OpenGL işlemlerinin hata denetimi tarafından korunduğunu doğrulayın. –

cevap

4

En iyi tahminim, framebuffer'ınızın tamamlanmadığı ve eksik bir framebuffer'da glClear numaralı telefonun aranması, hatayı atıyor olmasıdır.

glCheckFramebufferStatus kullanarak framebuffer'ın durumunu kontrol edin ve GL_FRAMEBUFFER_COMPLETE döndüğünden emin olun.

+0

Orijinal posterle aynı hatayı aldım ve çerçeveleyicilerimin ** tamamlandığını doğruladım. IPhone'da OpenGL-ES3 kullanıyorum ve temizlenen doku bir sRGB dokusudur - bunu normal bir "rgb" -texture olarak değiştirirken, glClear'daki "geçersiz framebuffer işlemi" hatası durur. OP tarafından verilen bilgilerden, bu durumun aynı olup olmadığını anlayamıyorum, ancak bu iki şekilde de bu konuya giren başka birine bir ipucu verebilir. – kalmiya

+0

Güncelleme: Benim durumumda srgb8 "ColorRenderable" (alternatif çalışmalar olarak GL_SRGB8_ALPHA8 kullanarak) olarak desteklenmiyor. James'in dediği gibi, glCheckFrameBufferStatus ** bir hata döndürmüş olmalıydı, ama bu, kullanıyorum openGL uygulamasında bir hata olduğu anlamına geliyor (osx üzerinde xcode 7.3 OpenGL-ES3). – kalmiya

2

Bu sorunu, geri arama geri çağrısını tetiklemek için bir CVDisplayLink ile NSOpenGLView kullanarak osx kullanıyordum. viewDidLoad de genişlemiş

-(void)viewDidAppear { 
    [super viewDidAppear]; 

    CVDisplayLinkStart(_displayLink); 
} 

çok erken:

tamamen yani başlangıç ​​render önce görüntülenen olmak NSOpenGLView beklemek emin olun.