2013-01-19 65 views
2

我有關於我的Nexus 7的OpenGL ES 1.0渲染引擎的問題 - 我試圖創建幀緩衝,但它總是返回GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES,代碼如下所示:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES - 的Nexus 7

#ifdef __ANDROID__ 
glGenFramebuffersOES(1, &gameSurfaceFrameBuffer); 
#else 
glGenFramebuffers(1, &gameSurfaceFrameBuffer); 
#endif 

#ifdef __ANDROID__ 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, gameSurfaceFrameBuffer); 
#else 
glBindFramebuffer(GL_FRAMEBUFFER, gameSurfaceFrameBuffer); 
#endif 

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glTexImage2D(GL_TEXTURE_2D, 0, 4, 48 * 14, 48 * 12, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 

#ifdef __ANDROID__ 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, gameSurfaceTexture, 0); 
#else 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gameSurfaceTexture, 0); 
#endif 

#ifdef __ANDROID__ 
GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES); 
#else 
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
#endif 

#ifdef __ANDROID__ 
if(status != GL_FRAMEBUFFER_COMPLETE_OES){ 
#else 
if(status != GL_FRAMEBUFFER_COMPLETE){ 
#endif 
std::stringstream ss; 
ss << "gameSurfaceFrameBuffer, status != GL_FRAMEBUFFER_COMPLETE "; 
ss << "status = " << status; 
throw ss.str(); 
} 
} 

正如你所看到的,我擁有Android和普通OpenGL的代碼 - 代碼在Windows上工作得很好,但在Android上它返回不完整的附件。

+0

我想到我可能會初始化EGL錯誤(我從Android NDK中的本地活動中獲取代碼)。 – user1397107

回答

0

OpenGL ES(無擴展名)要求紋理的寬度和高度都是2的冪。檢查glTexImage2D()調用後是否得到GL_INVALID_VALUE錯誤。如果您遇到錯誤,那麼您可以考慮調整紋理大小。