0

首先是我的问题:我正在尝试渲染到 FBO 中的多个缓冲区。我使用 设置多个缓冲区glDrawBuffers,并使用适当的gl_FragData. 一切都很好,但在我的情况下,应该对其中一个缓冲区进行下采样,准确地说是四分之一(w/2,,h/2)。

当然,我可以通过事后对那些特定的缓冲区进行 blitting 来做到这一点,或者我可以简单地在 CPU 上进行下采样(当前解决方案)。但后来我阅读了视口数组,并在ARB 规范中找到了这句话,这似乎正是我想要的,没有任何额外的转换。

此外,当与多个帧缓冲区附件结合使用时,它允许为每个选择不同的视口矩形。

当然,规范之后从未提及如何执行此操作或它们的实际含义,这multiple framebuffer attachments是非常通用的。我只注意到我可以将特定视口设置为几何着色器的输出(输出gl_ViewportIndex)。所以我可以为数组中的每个视口调用几何两次。但据我了解,这将简单地调用片段着色器并应用另一个视口转换,而不是每个目标缓冲区一个。这当然对我的用例没有多大意义,我也看不出这如何有助于为每个帧缓冲区附件选择一个视口

对于我的情况,添加几何着色器没有多大意义。而且由于视口变换仅在片段着色器之后应用,因此每个渲染目标都有一个视口确实有意义,前面的引用似乎证实了这一点。这实际上是否可能,如果是这样,我将如何做到这一点?

哦,我已经尝试了显而易见的方法:将该目标的渲染缓冲区(假设我使用GL_COLOR_ATTACHMENT1)调整为下采样版本,并将视口数组的索引 1 设置为相应的大小。我最终得到了图像左下象限的图片,基本上告诉我视口没有改变。

4

1 回答 1

4

视口数组只能与几何着色器一起使用;没有它们,数组索引 0 将用于所有渲染。

请记住:视口变换发生在光栅化之前。因此,如果您想通过多个视口变换三角形,您实际上是在要求系统多次渲染该三角形。做到这一点的唯一方法是使用多次输出图元的几何着色器。

于 2012-08-01T20:58:56.190 回答