2010-05-03 8 views
6

Ich habe ein Problem mit dem Rendering auf Textur und Offscreen Framebuffer mit OpenGLES auf dem iPhone.Rendern Textur oder Offscreen Framebuffer

alt text http://j.imagehost.org/0923/IMG_0020.pngalt text http://j.imagehost.org/0725/IMG_0019.png

Erstes Bild zeigt Mahjong Fliesen zu erbringenden CAEAGLLayer direkt, und das ist richtig. Der zweite zeigt Kacheln, die zum Offscreen-Framebuffer gerendert wurden, und wurde mit glCopyTexImage2D und der Textur, die auf CAEAGLLayer gerendert wurde, in die Textur kopiert. Beide verwenden weiße undurchsichtige Quadrate für den Hintergrund. Ich habe auch versucht, direkt auf Textur zu rendern, aber der Effekt war der selbe wie bei Offscreen Framebuffer.

My Code für die Erstellung von Bildpuffer:

GLuint framebuffer; 
    glGenFramebuffersOES(1, &framebuffer); 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

    GLuint renderbuffer; 
    glGenRenderbuffersOES(1, &renderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, 
      512, 512); 

    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, 
      GL_RENDERBUFFER_OES, renderbuffer);

zeichne ich alle Fliesen aus einer Textur Atlas mit einem Aufruf an glDrawElements VBO Verwendung für interlaced Vertexdaten Passing (Koordinaten, Strukturkoordinate, Farbe). Ich verwende RGBA8888 Textur-Format, Zeichnen jedes Bild auf zwei Dreiecke (Quad) mit glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) Blending-Funktion. Ich verwende keinen Tiefenpuffer (in allen Fällen).

Kann mir jemand sagen, was könnte das Problem sein?

+1

hilft Was ist falsch über die gerenderten Bilder? Wie erwarten Sie, dass sie aussehen? – Frogblast

+0

@Frogblast Die erste, die nicht auf Framebuffer oder Textur des Offscreen gerendert wird, ist korrekt. – sfider

+0

Nicht genug Code angezeigt. Die FBOs sind wahrscheinlich nicht das Problem. – karx11erx

Antwort

0

Es scheint, dass Sie nicht genug des Codes gepostet haben, aber von dem, was gepostet wird, scheint es, dass Sie die Rollen der Textur und renderbuffer in Ihrem FBO zusammengeführt haben. (Ihr Beitrag Titel sagte Render zu Textur) Auch vergessen Sie, Ihre Zeichenpuffer zu definieren.

Der an einen FBO angehängte Render-Puffer wird normalerweise als Tiefenpuffer verwendet. versuchen daher folgendes:

GLuint framebuffer; 
glGenFramebuffersOES(1, &framebuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

//set up the Depth Buffer 
GLuint renderbuffer; 
glGenRenderbuffersOES(1, &renderbuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); 
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24, 
     512, 512); 

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT, 
     GL_RENDERBUFFER_OES, renderbuffer); 
//set up the texture that you will be rendering to 
glActiveTexture(GL_TEXTURE0); 
GLuint textureID; 
glGenTextures(1, &textureID); 
glBindTexture(GL_TEXTURE_2D, textureID); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
//add various other texture parameters here 
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8_OES, 512,512); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0); 
// define your draw buffers 
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENT0}; 
glDrawBuffers(1, drawBuffers); 

Hoffnung, die