glDrawBuffer(GL_NONE)和glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE)之间有什么区别
这两种方法只是丢弃任何绘制到彩色缓冲区的另一种方法吗?或者有一些差异?
答案 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不会阻止子系统处理所有传入的颜色,只是实际上没有绘制任何颜色。