2010-05-03 159 views
6

我在使用iPhone上的OpenGLES渲染到紋理和離屏幀緩衝時出現問題。渲染到紋理或離屏幀緩衝

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

第一個圖像顯示呈現爲CAEAGLLayer直接麻將牌,這是正確的。第二個顯示渲染到屏幕外幀緩衝區的圖塊,使用glCopyTexImage2D複製到紋理,並將紋理渲染到CAEAGLLayer。兩者都使用白色不透明四邊形作爲背景。我也嘗試直接渲染紋理,但效果與屏幕外幀緩衝區相同。

我創建的framebuffer代碼:

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);

我畫從一個呼叫紋理圖集所有瓷磚glDrawElements採用VBO傳遞隔行頂點數據(座標,紋理座標,顏色)。我使用RGBA8888紋理格式,使用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)混合函數在兩個三角形(四邊形)上繪製每個圖像。我不使用深度緩衝區(在所有情況下)。

有人可以告訴我可能是什麼問題?

+1

關於圖像的渲染什麼是不正確的?你期望他們看起來像什麼? – Frogblast 2010-05-04 02:20:52

+0

@Frogblast第一個沒有渲染到屏幕外幀緩衝區或紋理的圖像是正確的。 – sfider 2010-05-04 06:09:14

+0

沒有足夠的代碼顯示。 FBO可能不是問題。 – karx11erx 2011-08-22 13:12:23

回答

0

看來您還沒有發佈足夠的代碼,但是從發佈的內容看來,您似乎將FBO中紋理和渲染緩衝區的角色融合在了一起。 (你的帖子標題說渲染紋理) 你忘了定義你的繪製緩衝區。

連接到FBO的渲染緩衝區通常用作深度緩衝區。 因此請嘗試以下操作:

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); 

希望幫助

相關問題