2013-01-19 3 views
2

내 넥서스 7의 OpenGL ES 1.0 렌더링 엔진에 문제가있어 다음과 같이 I 프레임 버퍼를 만들려고 해요하지만 항상 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES를 반환 코드는 다음과 같습니다GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES - - 넥서스 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(); 
} 
} 

아시다시피 안드로이드와 일반 OpenGL 모두에 대한 코드가 있습니다. 코드는 Windows에서 잘 작동하지만 Android에서는 불완전한 첨부 파일을 반환합니다.

+0

내가 EGL을 잘못 초기화했다는 생각이 들었습니다. (Android NDK의 기본 활동에서 코드를 가져 왔습니다). – user1397107

답변

0

OpenGL ES (확장자 없음)는 텍스처의 너비와 높이가 2의 2가되어야합니다. glTexImage2D() 호출 후 GL_INVALID_VALUE 오류가 발생하는지 확인하십시오. 오류가 발생하면 텍스처의 크기를 조정하는 것이 좋습니다.