glDrawBuffer(GL_NONE)vs glColorMask设置为所有GL_FALSE

时间:2014-05-20 20:40:32

标签: opengl glsl

glDrawBuffer(GL_NONE)和glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE)之间有什么区别

这两种方法只是丢弃任何绘制到彩色缓冲区的另一种方法吗?或者有一些差异?

2 个答案:

答案 0 :(得分:4)

首先,glDrawBuffer (...)仅适用于 当前 帧缓冲,它是每个FBO状态。

另一方面,

glColorMask (...)是一个全局状态,它将每个片段操作的写入屏蔽到所有逻辑帧缓冲区。

glColorMask (...)的另一个问题是它不加区分地适用于 所有 绘制缓冲区,此函数的新变体可以屏蔽调用的各个绘制缓冲区glColorMaski (...)

glColorMask (...)也不适用于glBlitFramebuffer (...),如下所示。

  

OpenGL 4.4 Core Profile Specification - 18.3。复制像素 - 第485页

     
    

当值写入绘制缓冲区时,blit操作会绕过大部分片段管道。影响blit的唯一片段操作是像素所有权测试,剪刀测试和sRGB转换(参见第17.3.9节)。 将忽略颜色,深度和模板蒙版(请参阅第17.4.2节)。

  

<小时/> 如果给出一些上下文来缩小整个差异范围,那将会非常有帮助。但最重要的是,这些状态会影响不同的操作集,并且也会存储在不同的位置。

答案 1 :(得分:0)

我认为结果是一样的,但从概念上讲,它们在实施方面有所不同。我担心使用glColorMask不会阻止子系统处理所有传入的颜色,只是实际上没有绘制任何颜色。