2017-03-13 28 views
-1

프레임 버퍼를 사용하여 오프 스크린 렌더링을 할 때 이상한 것으로 나타났습니다. 큐브를 텍스처에 그리고 나서 그 텍스처를 평면에 렌더링하고 있습니다. 그것은 모두 효과가 있었고 나는 깊이 버퍼를 건너 뛰기로 결정 했으므로 블록 1 & 블록 2 (아래 코드 참조)를 주석 처리하고 블록 1을 그대로두고 블록 2에서 비행기가 검게되면 작업도 수행했습니다.프레임 버퍼가없는 Opengl 렌더 버퍼 만들기

나는 block2를 주석 처리함으로써 renderbuffer가 framebuffer와 관련이없는 renderbuffer 일 것이라고 가정합니다.

모든 예에서 렌더 버퍼를 만들기 전에 항상 프레임 버퍼가 바인딩되어 있지만 필요한 문서에서 찾을 수있는 것이 없습니다. 그냥 block2를 주석 처리하고 block1을 떠나는 것으로 작동해야합니까? 내가 할 경우

// create render buffer to store depth, at this point the default framebuffer is bound 
{ //BLOCK 1 
    glGenRenderbuffers(1, &handle); 
    glBindRenderbuffer(...); 
    glRenderbufferStorage(...); 
    glBindRenderbuffer(GL_RENDERBUFFER, 0); 
} 

는 BLOCK 2는 오프 스크린 텍스처를 주석으로 실행 위의 코드는 블랙 가져옵니다.

// create texture as a color attachment 
glGenTextures(1, &handle); 
glBindTexture(GL_TEXTURE_2D, handle); 
glTexImage2D(...); 
// filter, wrap omitted 
glBindTexture(GL_TEXTURE_2D, 0); 

위의 텍스처 바인딩을 테스트하고 샘플링 할 때 잘 작동합니다.

// creating framebuffer 
glGenFramebuffers(1, &handle); 
glBindFramebuffer(GL_FRAMEBUFFER, handle); 

// attach my render buffer as a depth attachment 
{ // BLOCK 2 
    glFramebufferRenderbuffer(...) 
} 

내가 언급하는 경우 BLOCK 2 & BLOCK 1 그것은 (단지 컬러 첨부 파일이있는 프레임 버퍼와 같은) 모든 작품

// binding texture as an attachment to frame buffer 
glFramebufferTexture2D(...); 
glDrawBuffers(1, drawBuffers); 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

모든 코드는 위의 순서로 실행되고 다른 OpenGL을 호출이 없습니다 사이.

+0

렌더 버퍼와 텍스처를 얼마나 정확하게 연결하는지 알 수 있다면 도움이 될 것입니다. FBO를 바인딩 할 때뿐만 아니라 (나머지 코드와 비교하여). 또한 왜 텍스처를 바인딩 한 다음 텍스처를 프레임 버퍼에 첨부 한 다음 텍스처를 바인딩 해제합니까? 문맥에 텍스처를 바인딩하는 것은 FBO와는 아무런 관련이 없습니다. –

+0

몇 가지 설명을 추가했지만 설치시 gl 호출의 전체 목록으로 돌아갈 것입니다 (모든 것은 추상화되었지만 gl 호출 로거를 구현할 예정입니다). 텍스처의 불필요한 바인딩을 지적 해 주셔서 감사합니다. 왜 블록 1의 렌더링 버퍼가 첨부되지 않으면 내 프레임 버퍼에 영향을 줄 수 있는지 알지 못합니다. 감사! – nyvaken

답변

-1

오류를 발견했습니다. 클래스의 추상화 때문에 텍스처 클래스가 범위를 벗어 났을 때 텍스처가 삭제되었습니다. 이 텍스처 핸들은 기본적으로 0으로 설정되었으며이 핸들 ID를 사용하는 다른 텍스처는 삭제되었습니다.