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