2010-12-31 10 views
0

Ich versuche, eine Textur in einen Offscreen-Framebuffer zu zeichnen, und sein Renderbuffer endet immer komplett leer (schwarz). Das Seltsame ist, ich weiß, dass der Kontext eingerichtet ist, und ich überprüfe mit glCheckFramebufferStatusOES (GL_FRAMEBUFFER_OES) und glGetError() auf Fehler, aber keine der beiden Funktionen sagt etwas falsch. Gibt es noch weitere Fehlerprüfungsfunktionen, die Aufschluss darüber geben könnten, was passiert?Fehlerbehebung OpenGL ES 1.1 Texturen auf dem iPhone

Antwort

1

Schwierig, Ihnen eine genaue Antwort ohne weitere Informationen zu geben. Könnten Sie vielleicht etwas Code über Ihre Einrichtung und Verwendung des Renderpuffers posten?

In der Zwischenzeit, hier einige Informationen darüber, wie ein Off-Screen-Framebuffer korrekt eingerichtet:

// Remember the FBO being used for the display framebuffer 
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint *)&SystemFBO); 

// Create the texture and the FBO for offscreen frame buffer 
glGenTextures(1, &ResultTexture); 
glBindTexture(GL_TEXTURE_2D, ResultTexture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
glGenFramebuffersOES(1, &ResultFBO); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO); 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, ResultTexture, 0); 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO); 

// do your rendering to offscreen framebuffer 
... 

// restore original frame buffer object 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO); 

// use ResultTexture as usual 
glBindTexture(GL_TEXTURE_2D, ResultTexture); 

Hope this helps ...

+0

Danke. Ich dachte zu der Zeit, dass das Problem ein interner OpenGL-Fehler war, der weder von glGetError() noch von glCheckFrambufferStatusOES (GL_FRAMEBUFFER_OES) gemeldet wurde, sondern dass ich nur OpenGL missbrauchte. Ich hatte glColor4f (0, 0, 0, 0) an einem früheren Punkt im Programm aufgerufen, also wenn ich die Texturen zeichnete, zeichnete es mit Alpha = 0. Ich denke, das ist ein Beispiel dafür, wo das Lesen des Handbuchs zuerst etwas Zeit gespart hätte ... – emchristiansen

Verwandte Themen