2011-10-18 4 views
0

내가 실수 한 부분을 보여줄 수 있습니까?GPU; OpenGL ES 2.0; 데이터 읽기/쓰기; NDK; Tegra2;

작업이 매우 간단합니다. 나는 GPU 메모리에 버퍼를 만들고 데이터를 하나에 쓰고 읽으려고한다. 아래 코드를 참조하십시오.

코드가 실행될 때 glCheckFramebufferStatus 반환 값 0x8D40 (gl2.h의 상수 GL_FRAMEBUFFER) 및 out 버퍼의 값은 변경되지 않습니다.

내가하는 불법 사항과 작동하지 않는 이유를 이해할 수 있습니다. 컴파일/링크를 위해 특별한 플래그를 사용할 필요가 있습니까? 아이디어가 있으십니까?!?!?!

사용 : 전화 Motorola는 NVIDIA NDK의 프로세서 Tegra2, libGLES2.so를 기반으로합니다. 프로젝트는 NDK에 의해 컴파일됩니다.

감사합니다.

GLuint xTexID; 
GLuint fb; 
GLenum status; 
const int _wight = 8, _height = 4; 

glGenTextures (1, &xTexID); 
glBindTexture(GL_TEXTURE_2D,xTexID); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _wight, _height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 

glGenFramebuffers(1,&fb); 
glBindFramebuffer(GL_FRAMEBUFFER,fb); 
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,xTexID,0); 

status = GL_FRAMEBUFFER_COMPLETE; 
if((status = glCheckFramebufferStatus(GL_FRAMEBUFFER)) != GL_FRAMEBUFFER_COMPLETE) { 
    printf("\r\nmyGL: CheckFramebufferStatus isn't COMPLETE (0x%08X)", status); 
//  exit(1); 
} 

glTexSubImage2D(GL_TEXTURE_2D,0,0,0,_wight,_height,GL_RGBA,GL_UNSIGNED_BYTE,data); 
glReadPixels(0, 0, _wight, _height,GL_RGBA,GL_UNSIGNED_BYTE,result); 

답변

1

실제 드로잉 호출이 없습니다.

최대 glTexSubImage2D 호출은 텍스처를 렌더링하도록 설정하는 것처럼 보입니다. glTexSubImage2D 호출을 시도하면 수행하려는 작업이 불분명 해집니다. 프레임 버퍼를 채우려면 거기에 렌더 호출이 있어야합니다. 프레임 버퍼에 렌더링하지 않으면 바인딩 한 텍스처의 변경 사항을 볼 수 없습니다.