프레임 버퍼를 사용하여 오프 스크린 렌더링을 할 때 이상한 것으로 나타났습니다. 큐브를 텍스처에 그리고 나서 그 텍스처를 평면에 렌더링하고 있습니다. 그것은 모두 효과가 있었고 나는 깊이 버퍼를 건너 뛰기로 결정 했으므로 블록 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을 호출이 없습니다 사이.
렌더 버퍼와 텍스처를 얼마나 정확하게 연결하는지 알 수 있다면 도움이 될 것입니다. FBO를 바인딩 할 때뿐만 아니라 (나머지 코드와 비교하여). 또한 왜 텍스처를 바인딩 한 다음 텍스처를 프레임 버퍼에 첨부 한 다음 텍스처를 바인딩 해제합니까? 문맥에 텍스처를 바인딩하는 것은 FBO와는 아무런 관련이 없습니다. –
몇 가지 설명을 추가했지만 설치시 gl 호출의 전체 목록으로 돌아갈 것입니다 (모든 것은 추상화되었지만 gl 호출 로거를 구현할 예정입니다). 텍스처의 불필요한 바인딩을 지적 해 주셔서 감사합니다. 왜 블록 1의 렌더링 버퍼가 첨부되지 않으면 내 프레임 버퍼에 영향을 줄 수 있는지 알지 못합니다. 감사! – nyvaken