首先是我的问题:我正在尝试渲染到 FBO 中的多个缓冲区。我使用 设置多个缓冲区glDrawBuffers
,并使用适当的gl_FragData
. 一切都很好,但在我的情况下,应该对其中一个缓冲区进行下采样,准确地说是四分之一(w/2
,,h/2
)。
当然,我可以通过事后对那些特定的缓冲区进行 blitting 来做到这一点,或者我可以简单地在 CPU 上进行下采样(当前解决方案)。但后来我阅读了视口数组,并在ARB 规范中找到了这句话,这似乎正是我想要的,没有任何额外的转换。
此外,当与多个帧缓冲区附件结合使用时,它允许为每个选择不同的视口矩形。
当然,规范之后从未提及如何执行此操作或它们的实际含义,这multiple framebuffer attachments
是非常通用的。我只注意到我可以将特定视口设置为几何着色器的输出(输出gl_ViewportIndex
)。所以我可以为数组中的每个视口调用几何两次。但据我了解,这将简单地调用片段着色器并应用另一个视口转换,而不是每个目标缓冲区一个。这当然对我的用例没有多大意义,我也看不出这如何有助于为每个帧缓冲区附件选择一个视口
对于我的情况,添加几何着色器没有多大意义。而且由于视口变换仅在片段着色器之后应用,因此每个渲染目标都有一个视口确实有意义,前面的引用似乎证实了这一点。这实际上是否可能,如果是这样,我将如何做到这一点?
哦,我已经尝试了显而易见的方法:将该目标的渲染缓冲区(假设我使用GL_COLOR_ATTACHMENT1
)调整为下采样版本,并将视口数组的索引 1 设置为相应的大小。我最终得到了图像左下象限的图片,基本上告诉我视口没有改变。