首先我的问题:我试图渲染到FBO中的多个缓冲区。我使用glDrawBuffers
设置多个缓冲区,并使用适当的gl_FragData
对它们进行渲染。一切都很好,但在我的情况下,其中一个缓冲区应该采用下采样方式,精确到四分之一(w/2
,h/2
)。我可以为每个渲染目标指定一个视口吗?
当然,我可以通过事后处理那些特定的缓冲区来做到这一点,或者我可以简单地对CPU执行下采样(当前解决方案)。但后来我读到了有关视口数组的内容,并在ARB specification中找到了这个引用,这看起来正是我想要的,没有任何额外的转换。
另外,当具有多个帧缓冲区附件相结合,它 允许为每个要被选择的不同的视口矩形。
当然,规范从来没有提到如何做到这一点或他们实际上的含义,multiple framebuffer attachments
是相当通用的。我只注意到我可以将特定视口设置为几何着色器的输出(输出gl_ViewportIndex
)。所以我可以为数组中的每个视口调用两次几何。但据我所知,这只会调用片段着色器与另一个视口转换应用,而不是每个目标缓冲区一个。这当然对我的用例没有多大意义,我也看不出如何有助于为每个帧缓冲区选择一个视口。
对于我的情况,添加几何着色器没什么意义。由于视口变换仅适用于片段着色器之后,因此每个渲染目标都有一个视口是有意义的,而前面的引用似乎证实了这一点。这实际上是可能的,如果是这样,我将如何实现这一目标?
哦,我已经试过了明显已经:调整这一目标的渲染(比方说我用GL_COLOR_ATTACHMENT1
)下采样版本和设置视数组的索引1到根据大小。我最终拍摄了图像左下象限的图片,基本告诉我视口没有变化。
“而且视口转换仅适用于片段着色器之后”视口转换在光栅化之前应用,而不在片段着色器之后应用。 – 2012-08-01 20:13:51