2011-10-20 52 views
1

我正在爲「渲染爲紋理」設置創建幀緩衝區對象。它在iPhone模擬器上工作得非常好,但在設備上,FBO創建結束時,glCheckFramebufferStatus(GL_FRAMEBUFFER)函數返回GL_FRAMEBUFFER_UNSUPPORTED。 我與iOS 5在設備上的OpenGL ES 2.0中獲取GL_FRAMEBUFFER_UNSUPPORTED

這裏測試它在iPhone 3GS是代碼:

GLenum errNo; 
GLsizei width = 320; 
GLsizei height = 480; 
GLuint textureHandle; 
GLuint fboHandle; 

glGetError(); 

glGenTextures(1, &textureHandle); 
glBindTexture(GL_TEXTURE_2D, textureHandle); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,GL_HALF_FLOAT_OES, NULL);    

glGenFramebuffers(1, &fboHandle); 
glBindFramebuffer(GL_FRAMEBUFFER,fboHandle);  
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0); 


errNo = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
if(GL_FRAMEBUFFER_COMPLETE != errNo){ 
    printf("Unable to create FBO. errNo: %x\n",errNo); 
} 

我無言以對。我應該如何調試這個問題?

+0

你檢查GL錯誤的地方? (通過使用glGetError())。 –

+0

如果您在我的代碼中引用了glGetError()語句,那麼它只是在那裏清除以前的錯誤號。 – kal21

+0

我根本沒有看到任何代碼問題,我仔細檢查了本書中的所有API。我還將紋理大小縮小到32x48,以查看是否存在內存問題,但它仍然會出現相同的錯誤。 – kal21

回答

2

找到解決方案。 iPhone不支持GL_HALF_FLOAT。我使用了GL_UNSIGNED_BYTE,現在它可以工作。

不起作用:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,GL_HALF_FLOAT_OES, NULL);    

作品:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,GL_UNSIGNED_BYTE, NULL);