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 帧缓冲区存储哪些状态?_Opengl_Framebuffer - Fatal编程技术网

Opengl 帧缓冲区存储哪些状态?

Opengl 帧缓冲区存储哪些状态?,opengl,framebuffer,Opengl,Framebuffer,我创建了一个屏幕外帧缓冲区,并在其中添加了两个渲染目标 每个渲染目标都有自己的混合模式。我用glblendfunce设置: 帧缓冲区是否存储此混合模式?因为它是特定于缓冲区的。我应该在每一帧中设置它还是在初始化代码中设置它 另外,屏幕外帧缓冲区不写入深度,因此我通过gldepthmaskglu FALSE禁用了它;但它似乎是全局状态,而不是帧缓冲区状态 我不知道帧缓冲区存储了多少或哪些状态。特别是我想知道关于帧缓冲区附件的这些状态: glblendbunch glBlendFunc glEnab

我创建了一个屏幕外帧缓冲区,并在其中添加了两个渲染目标

每个渲染目标都有自己的混合模式。我用glblendfunce设置:

帧缓冲区是否存储此混合模式?因为它是特定于缓冲区的。我应该在每一帧中设置它还是在初始化代码中设置它

另外,屏幕外帧缓冲区不写入深度,因此我通过gldepthmaskglu FALSE禁用了它;但它似乎是全局状态,而不是帧缓冲区状态

我不知道帧缓冲区存储了多少或哪些状态。特别是我想知道关于帧缓冲区附件的这些状态:

glblendbunch glBlendFunc glEnableGL_混合物 glEnableGL_深度试验 glDepthMask 帧缓冲区是否存储这些状态?我还想知道其他州,如果你愿意分享的话

我知道VAO对象存储了一些关于顶点属性的状态,所以我想也许帧缓冲区也存储了一些与其附件相关的状态

编辑:我更新了glblendbunc参数以使用draw索引,使用了bufferId/objectId

glBlendFunci(accum->drawIndex,     GL_ONE,  GL_ONE);
glBlendFunci(revealage->drawIndex, GL_ZERO, GL_ONE_MINUS_SRC_COLOR);

了解状态帧缓冲区对象处理的最好方法是查看基于OpenGL 4.5 DSA的API。glNamedFramebuffer*形式的任何函数都会影响帧缓冲区对象。如果没有该形式的函数,则其背后的状态不会影响帧缓冲区状态。因此,等效的非DSA表单也不会影响帧缓冲区的状态

值得注意的是,没有glNamedFramebufferBlendFunc调用。或者深度任务。实际上,您提到的所有状态都不是帧缓冲区的一部分

我知道VAO对象存储了一些关于顶点属性的状态,所以我想也许帧缓冲区也存储了一些与其附件相关的状态

但事实就是这样;这些内容与帧缓冲区的附件无关。这有点复杂

请参见,当调用glblendbunce时,传递一个索引。这将为特定索引设置混合模式。如果传递零,则修改。该索引与

但是索引0不是GL\u COLOR\u ATTACHMENT0。这是最重要的。根据调用glNamedFramebufferDrawBuffers时指定的内容,绘制缓冲区索引0可以引用GL_COLOR_ATTACHMENT2


由于这些索引不直接指定帧缓冲区附件,因此声称设置混合状态直接影响帧缓冲区附件是不正确的。

了解帧缓冲区对象处理的状态的最佳方法是查看基于OpenGL 4.5 DSA的API。glNamedFramebuffer*形式的任何函数都会影响帧缓冲区对象。如果没有该形式的函数,则其背后的状态不会影响帧缓冲区状态。因此,等效的非DSA表单也不会影响帧缓冲区的状态

值得注意的是,没有glNamedFramebufferBlendFunc调用。或者深度任务。实际上,您提到的所有状态都不是帧缓冲区的一部分

我知道VAO对象存储了一些关于顶点属性的状态,所以我想也许帧缓冲区也存储了一些与其附件相关的状态

但事实就是这样;这些内容与帧缓冲区的附件无关。这有点复杂

请参见,当调用glblendbunce时,传递一个索引。这将为特定索引设置混合模式。如果传递零,则修改。该索引与

但是索引0不是GL\u COLOR\u ATTACHMENT0。这是最重要的。根据调用glNamedFramebufferDrawBuffers时指定的内容,绘制缓冲区索引0可以引用GL_COLOR_ATTACHMENT2


由于这些索引没有直接指定帧缓冲区附件,因此声称设置混合状态直接影响帧缓冲区附件是不正确的。

感谢澄清,显然我误用了GLBLendBunch,在添加颜色附件后,我正在设置glDrawBuffers并使索引相同,但这并不意味着我用对了,谢谢。但我现在有点困惑,帧缓冲区是否保持glblendbunce状态?如果state没有用glNamed**设置,这意味着它在全局上下文中,对吗?@recp:正如我所说的,实际上,您提到的所有状态都不是帧缓冲区的一部分。另外,如果state没有用glNamed*设置,这意味着它在全局上下文中,对吗?*不,我不是这个意思。我的意思是,如果没有DSA函数在帧缓冲区上设置它,那么等效的非DSA函数就不会设置帧缓冲区状态。我被传递纹理objectId到GlblendBunch,这可能让我感到困惑,我想既然我传递objectId,我希望framebuff必须记住这个状态。通过索引,事情就清楚了。我编辑了问题谢谢澄清,显然我误用了GlblendBunch,在添加了颜色附件后,我设置了glDrawBuffers并使索引相同,但这并不意味着我正确使用了它,谢谢。但我现在有点困惑,帧缓冲区是否包含glblendbunce sta
特朗普?如果state没有用glNamed**设置,这意味着它在全局上下文中,对吗?@recp:正如我所说的,实际上,您提到的所有状态都不是帧缓冲区的一部分。另外,如果state没有用glNamed*设置,这意味着它在全局上下文中,对吗?*不,我不是这个意思。我的意思是,如果没有DSA函数在帧缓冲区上设置它,那么等效的非DSA函数就不会设置帧缓冲区状态。我被传递纹理objectId到GlblendBunch,这可能让我感到困惑,我想既然我传递objectId,我希望framebuff必须记住这个状态。通过索引,事情就清楚了。我编辑了这个问题
glBlendFunci(accum->drawIndex,     GL_ONE,  GL_ONE);
glBlendFunci(revealage->drawIndex, GL_ZERO, GL_ONE_MINUS_SRC_COLOR);