多个视口与多个帧缓冲区之间的使用差异是啥?

Posted

技术标签:

【中文标题】多个视口与多个帧缓冲区之间的使用差异是啥?【英文标题】:What are the usage differences between multiple viewports vs multiple framebuffers?多个视口与多个帧缓冲区之间的使用差异是什么? 【发布时间】:2021-11-05 18:15:45 【问题描述】:

我是刚学 OpenGL 的新手,帧缓冲区的话题让我很困惑。我读到它的一些用途是生成第二个要渲染的目标,允许我们制作镜像等。但是,使用 glViewport() 还不够,您可以在其中为不同部分指定不同的渲染操作相同的帧缓冲区?两者在使用上有什么区别,我应该在什么时候使用它们?

【问题讨论】:

【参考方案1】:

这两个概念是完全正交的;它们根本没有相互映射。

理论上,您可以通过渲染到帧缓冲区图像的不可见部分来执行某些形式的屏幕外渲染。假设帧缓冲区的图像有 个不可见部分。假设我们谈论的是默认帧缓冲区,这完全不受您的控制。您无法确定背景图像数据有多大;这由操作系统控制,通常通过您要渲染到的窗口的大小来控制。

使用适当的帧缓冲区对象,您不必试图让操作系统为您提供比窗口中可见的空间更多的空间。你可以做任何事情。

视口的存在是为了让您可以在帧缓冲区的可渲染区域内选择渲染到的位置。 framebuffer object 的存在允许您分配和管理渲染到的图像,从而使您可以完全控制帧缓冲区的所有方面。这包括使用non-visible color formats(例如整数格式、浮点格式)、一次使用多个渲染目标、直接控制多重采样的使用以及能够从渲染目标中读取为纹理无需从帧缓冲区进行慢速复制操作。

这两个人真的没有任何关系。

【讨论】:

以上是关于多个视口与多个帧缓冲区之间的使用差异是啥?的主要内容,如果未能解决你的问题,请参考以下文章

帧缓冲区和交换链到底是啥?

OpenGL阴影映射,具有多个glDrawElements的帧缓冲区

多个帧缓冲对象,帧率急剧下降

帧缓存的详细介绍

COLOR_ATTACHMENT's - 如何将多个纹理渲染为帧缓冲区对象内的颜色附件?

使用 Pandas 数据帧查找多个索引上所有列之间的差异(增量)