Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 我是否可以避免将模板缓冲区从FBO快速切换到后台缓冲区?_Opengl - Fatal编程技术网

Opengl 我是否可以避免将模板缓冲区从FBO快速切换到后台缓冲区?

Opengl 我是否可以避免将模板缓冲区从FBO快速切换到后台缓冲区?,opengl,Opengl,我正在使用一个带有颜色、深度和模板的FBO来实现延迟着色 以下是我正在做的: 我创建了一个附加了颜色、深度和模具的FBO,然后对其进行渲染 我将模具快速放入后缓冲区的模具缓冲区 我渲染最终过程(使用模具测试) 有没有办法避免第二步 也就是说,我可以直接“重用”步骤3中步骤1中的相同模具吗?我尝试创建第二个FBO,但只附加了一个模具,但没有效果——我假设b/c附加FBO会禁用对回色缓冲区的所有写入。不幸的是,GL API实现FBO的方式强制执行了这个exrta blit步骤,尽管大多数现实世界的硬

我正在使用一个带有颜色、深度和模板的FBO来实现延迟着色

以下是我正在做的:

  • 我创建了一个附加了颜色、深度和模具的FBO,然后对其进行渲染
  • 我将模具快速放入后缓冲区的模具缓冲区
  • 我渲染最终过程(使用模具测试)
  • 有没有办法避免第二步


    也就是说,我可以直接“重用”步骤3中步骤1中的相同模具吗?我尝试创建第二个FBO,但只附加了一个模具,但没有效果——我假设b/c附加FBO会禁用对回色缓冲区的所有写入。

    不幸的是,GL API实现FBO的方式强制执行了这个exrta blit步骤,尽管大多数现实世界的硬件可能没有它。如果他们没有为默认缓冲区制作这个特殊的FBO 0,而是为默认颜色、深度和模具缓冲区制作特殊的renderbuffers,那么IMHO会更好,这样once就可以在FBO中混合它们(我认为D3D允许这样做,但我不确定)。但目前,我还不知道GL的任何功能/扩展会允许这样做。

    在iOS上可能会有捷径。不是因为OpenGL功能,而是因为框架设置渲染的方式。如果使用
    GLKView
    ,则渲染始终是到框架为您创建的FBO。使用该设置,可以创建没有模具的视图,然后将模具缓冲区附加到“默认FBO”。文档中说“永远不要尝试[…]修改[…]帧缓冲区对象”,因此绝对不建议这样做。使用自定义FBO。使用现代OpenGL,您也可以完全不使用FBO进行渲染。@MichaelIV您的意思是不使用正常的后缓冲区进行渲染吗?我找不到这样做的方法。