2011-12-01 5 views
3

편집 : 는 텍스처에 렌더링하는 동안프레임 버퍼 객체 생성 오류

나는 문제가 발생하여 해결했다. 나는이 같은 프레임 버퍼 객체를 생성 :

glGenTextures(1, &renderFBOtex); 
glBindTexture(GL_TEXTURE_2D, renderFBOtex); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 

glGenRenderbuffers(1, &renderFBOrender); 
glBindRenderbuffer(GL_RENDERBUFFER, renderFBOrender); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height); 
glBindRenderbuffer(GL_RENDERBUFFER, 0); 

glGenFramebuffers(1, &renderFBO); 
glBindFramebuffer(GL_FRAMEBUFFER, renderFBO); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderFBOrender); 

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

그러나 glCheckFrambufferStatus의 반환 값은 항상 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT입니다.

Renderbuffer 첨부 파일이 없어도 질감이 문제 인 것 같습니다. 프레임 버퍼 자체에 드로잉하는 것이 문제가되어서는 안됩니다.

누군가 내가 여기에없는 것을 지적 할 수 있습니까?

glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0); 
          ^^^^ 

기술적으로는 그들이 어떤 차이가 없어야하지만, 일부 드라이버는이 버그를 가지고 있습니다

답변

1

문제는 프로그램의 다른 부분에서 발생했습니다. 이것은 매우 어리석은 실수였습니다. 텍스처의 너비와 높이에 잘못 초기화 된 값을 사용하게되었습니다. 그들은 모두 0으로 설정되었으므로 불완전한 첨부 오류가 발생합니다.

0

이보십시오.

+0

나는 이미 그것을 시도했다. 문서에 따르면 GL_DRAW_FRAMEBUFFER와 GL_FRAMEBUFFER는 동일하며 아무 것도 변경하지 않는 것 같습니다. 어쨌든 고마워요 ... – lukashko

+0

@ user1076104 : 예, 동등한 의미는 "차이가 없다"는 의미였습니다. 그러나 일부 드라이버는 버그가있었습니다. – datenwolf

+0

미안하지만, 처음에는 당신이 그것을 썼다는 것을 간과했습니다. (충고를 구하면서 내 편이 꽤 어리 석다). – lukashko

1

색상 버퍼에 텍스처 밉맵을 부착하기 전에 텍스처 밉맵을 만듭니다.

이 작업에 사용되는 루틴은 glGenerateMipmap입니다.


또 다른 제안은 텍스처 내부 형식으로 재생하는 것입니다. 크기가 지정된 내부 형식을 지정하지 않았습니다. 오류의 원인 중 하나는 텍스처에 지원되는 색상 렌더링 가능 내부 형식이 없기 때문에 시도 할 수 있습니다.

+0

'GL_LINEAR' 필터 모드를 사용할 때 (마치 그가하는 것처럼) 이것은 완전히 불필요합니다. 그런데'gluBuild2DMipmaps'를 사용하지 마십시오 (OpenGL도 아닙니다). 'GL_GENERATE_MIPMAP' 이상을 사용하십시오. 이미 FBO가 있다면'glGenerateMipmaps'를 사용하십시오. 하드웨어에서해야합니다. –

+0

입력 해 주셔서 감사합니다. 나는 그것을 시도했지만 어떤 차이도없는 것처럼 보인다. 또한 glTexImage2d 매개 변수의 가능한 모든 조합을 시도했습니다. 매번 똑같습니다. 내 문제가 프로그램의 다른 곳에서 발생할 수 있습니까? 제 말은 OpenGL을 처음 접했을 때 여러 파이프 라인 단계 사이의 모든 상호 의존성에 대해 확신 할 수 없다는 것입니다 ... – lukashko

관련 문제