첫 번째 문제 : FBO에서 여러 버퍼로 렌더링하려고합니다. glDrawBuffers
을 사용하여 여러 버퍼를 설정하고 적절한 gl_FragData
을 사용하여 렌더링합니다. 모든 좋은 그리고 잘,하지만 내 상황에서 버퍼 중 하나가 정확히 (4 분의 2), downscampled되어야합니다 (w/2
, h/2
).렌더 타겟 당 뷰포트를 지정할 수 있습니까?
물론이 특정 버퍼를 블리 팅하여이 작업을 수행 할 수 있습니다. 또는 단순히 CPU (현재 솔루션)에서 다운 샘플링을 수행 할 수 있습니다. 그런 다음 뷰포트 배열에 대해 읽은 후 ARB specification에이 견적을 찾았습니다. 추가 인용 부호없이 정확히 원하는 것으로 보입니다.
또한 여러 프레임 버퍼 첨부와 결합하면 을 사용하여 각기 다른 뷰포트 사각형을 선택할 수 있습니다.
물론 사양서에는 나중에 실제로 수행하는 방법이나 실제로 의미하는 내용이 나와 있지 않으므로 multiple framebuffer attachments
은 매우 일반적입니다. 필자는 특정 뷰포트를 기하 구조 셰이더의 출력으로 설정할 수 있음을 알았습니다 (출력 gl_ViewportIndex
). 그래서 배열의 각 뷰포트에 대해 도형을 두 번 호출 할 수있었습니다. 그러나 이해할 수있는 한, 이것은 목표 버퍼 당 하나가 아닌 다른 뷰포트 변환이 적용된 프래그먼트 셰이더를 호출 할 것입니다. 이것은 물론 내 유스 케이스에는별로 의미가 없으며, 이것이 어떻게 프레임 버퍼 부착물 당 뷰포트를 선택하는 데 도움이되는지를 볼 수 없다. 내 상황으로는 지오메트리 셰이더를 추가하는 것이 의미가 없다. 그리고 뷰포트 변환은 프래그먼트 셰이더에만 적용되기 때문에 이전 견적이 확인한 것으로 보이는 렌더 타겟 당 뷰포트를 갖는 것이 이치에 맞습니다. 이것이 실제로 가능합니까? 그렇다면 어떻게해야합니까?
아, 그리고 이미 그 표적의 renderbuffer 크기를 조정했습니다. (내가 GL_COLOR_ATTACHMENT1
을 사용한다고 가정 해 봅시다) 다운 샘플링 된 버전에 맞게 뷰포트 배열의 인덱스 1을 크기에 맞게 설정하십시오. 뷰포트가 변경되지 않았다고 본질적으로 말하면서 이미지의 왼쪽 하단 사분면의 그림으로 끝 맺었습니다.
"뷰포트 변환은 조각 쉐이더 후에 만 적용됩니다."뷰 쉐도우 변환은 조각 쉐이더가 아니라 래스터 화 전에 적용됩니다. –