2012-08-01 3 views
0

첫 번째 문제 : FBO에서 여러 버퍼로 렌더링하려고합니다. glDrawBuffers을 사용하여 여러 버퍼를 설정하고 적절한 gl_FragData을 사용하여 렌더링합니다. 모든 좋은 그리고 잘,하지만 내 상황에서 버퍼 중 하나가 정확히 (4 분의 2), downscampled되어야합니다 (w/2, h/2).렌더 타겟 당 뷰포트를 지정할 수 있습니까?

물론이 특정 버퍼를 블리 팅하여이 작업을 수행 할 수 있습니다. 또는 단순히 CPU (현재 솔루션)에서 다운 샘플링을 수행 할 수 있습니다. 그런 다음 뷰포트 배열에 대해 읽은 후 ARB specification에이 견적을 찾았습니다. 추가 인용 부호없이 정확히 원하는 것으로 보입니다.

또한 여러 프레임 버퍼 첨부와 결합하면 을 사용하여 각기 다른 뷰포트 사각형을 선택할 수 있습니다.

물론 사양서에는 나중에 실제로 수행하는 방법이나 실제로 의미하는 내용이 나와 있지 않으므로 multiple framebuffer attachments은 매우 일반적입니다. 필자는 특정 뷰포트를 기하 구조 셰이더의 출력으로 설정할 수 있음을 알았습니다 (출력 gl_ViewportIndex). 그래서 배열의 각 뷰포트에 대해 도형을 두 번 호출 할 수있었습니다. 그러나 이해할 수있는 한, 이것은 목표 버퍼 당 하나가 아닌 다른 뷰포트 변환이 적용된 프래그먼트 셰이더를 호출 할 것입니다. 이것은 물론 내 유스 케이스에는별로 의미가 없으며, 이것이 어떻게 프레임 버퍼 부착물 당 뷰포트를 선택하는 데 도움이되는지를 볼 수 없다. 내 상황으로는 지오메트리 셰이더를 추가하는 것이 의미가 없다. 그리고 뷰포트 변환은 프래그먼트 셰이더에만 적용되기 때문에 이전 견적이 확인한 것으로 보이는 렌더 타겟 당 뷰포트를 갖는 것이 이치에 맞습니다. 이것이 실제로 가능합니까? 그렇다면 어떻게해야합니까?

아, 그리고 이미 그 표적의 renderbuffer 크기를 조정했습니다. (내가 GL_COLOR_ATTACHMENT1을 사용한다고 가정 해 봅시다) 다운 샘플링 된 버전에 맞게 뷰포트 배열의 인덱스 1을 크기에 맞게 설정하십시오. 뷰포트가 변경되지 않았다고 본질적으로 말하면서 이미지의 왼쪽 하단 사분면의 그림으로 끝 맺었습니다.

+0

"뷰포트 변환은 조각 쉐이더 후에 만 ​​적용됩니다."뷰 쉐도우 변환은 조각 쉐이더가 아니라 래스터 화 전에 적용됩니다. –

답변

3

뷰포트 배열은 기하 구조 셰이더에서만 사용할 수 있습니다. 그것들이 없으면 배열 인덱스 0이 모든 렌더링에 사용됩니다.

기억 : 뷰포트 변환은 래스터 화 전에 수행됩니다. 따라서 여러 개의 뷰포트로 삼각형을 변형하려면 시스템에 해당 삼각형을 번으로 렌더링하도록 요청해야합니다.. 그리고이를 수행 할 수있는 유일한 방법은 기하학 쉐이더를 사용하는 것입니다.이 셰이더는 프리미티브를 여러 번 출력합니다.

+0

물론 래스터 화시 적용됩니다. 즉, 저의 어리석은 짓이었습니다. 'gl_FragCoord'가 정규화 된 좌표에 있다는 사실에 혼란 스러웠습니다. 그 따옴표로 무엇을 의미했는지 알았습니까? 첨부 파일 당 뷰포트를 가질 수있는 방법을 아직 볼 수 없기 때문입니다. – KillianDS

+0

@KillianDS : 정확하게 말하면 : 기하학 쉐이더는 [개별 부착 된 레이어 이미지] (http://www.opengl.org/wiki/Framebuffer_Object#Layered_Images)에 개별 삼각형을 보내고 각 삼각형에 다른 뷰포트를 제공 할 수 있습니다. 뷰포트와 이미지 레이어 간의 연결은 자동이 아닙니다. 그것은 모두 GS에서 이루어집니다. –

+0

아하,'gl_Layer'를 사용하여 고맙습니다 (기하학 셰이더 사용 경험이 거의 없습니다). 나는 CPU 나 blit-solution을 고수 할 것이고 조각 계산을 복제하는 것은 즉각적인 선택은 아니라고 생각합니다. 고맙습니다. – KillianDS

관련 문제