1

除了使用多个帧缓冲区对象之外,我还可以只创建一个对象并通过在需要时切换它的目标纹理来获得相同的结果吗?

  • 在所有情况下这都是一个坏主意吗?如果是,为什么?

我一直render.SetTargetTexture()在我的程序的 API 中实现一个函数,如果在幕后使用更多的帧缓冲区,从逻辑上讲它是行不通的。然后我必须完全公开帧缓冲区。

4

2 回答 2

6

FBO 本身只是一些逻辑结构,由实现维护,它只会消耗其参数所需的少量内存。FBO 的主要目的是拥有一个保持一致状态的对象。

每当您对 FBO 的结构进行更改时,实施必须检查有效性和完整性。OpenGL 规范没有说明此操作的复杂性,但可以肯定的是,更改 FBO 的结构是最耗时的操作(可能占很大比例)。

由于 FBO 本身不消耗显着的内存,所以只有附件占用内存,它们是独立的对象,分配多个 FBO 并交换这些是我的建议。

于 2011-06-22T06:49:16.610 回答
-1

由于人们给出的原因,切换帧缓冲区通常更快。根据我的经验,将不同的纹理类型附加到 fbo 时也存在问题(2D 纹理到 fbo,以前附加了 1D 纹理,因此附加到 fbo 的第一个纹理设置了某种目标状态,以后无法更改)。我使用的一个解决方案是为每种目标类型设置一个 fbo。此错误发生在 NVidia Quadro 设备上,不确定是否是驱动程序问题。

于 2015-07-23T10:08:54.077 回答