OpenGL wiki,用于glSampleMask()设置样本掩码的子字的值.(这对我没有任何意义.)
那么样本掩蔽是什么意思呢?(我知道glColorMask,但不能将它与glSampleMask联系起来).我假设它与计算最终颜色时最终选择的样品有什么关系?但是假设每个像素有4个样本,我设置了glSampleMask(0,0xFF),究竟发生了什么?
掩码号(本例中为0)表示什么?
gl_SamplerMask是shader等效于glSampleMask吗?
有人可以解释这里的条款吗?
由于答案晦涩难懂,现在几乎完全重写了.
规格说:
if SAMPLE_MASK is enabled, the fragment coverage is ANDed with the
coverage value SAMPLE_MASK_VALUE
Run Code Online (Sandbox Code Playgroud)
请访问http://msdn.microsoft.com/en-us/library/windows/desktop/cc627092%28v=vs.85%29.aspx#Multisample查看图片
此图像上的点显示样本位置.样本掩码允许您指定将写入样本的位域.如果指定了例如0x1,则只写入第一个样本,0x2 - 秒,0x3 - 第一个和第二个,依此类推.Shader仅被评估一次并且样本值是内/外的,因此对于每个着色器执行,您将具有4,8,16等样本(取决于您启用的MSAA强度).
如何在实践中使用它?例如,你可以将一个绘图写入一个样本,一个绘制到另一个样本等,然后在着色器中读取它们并以您喜欢的方式组合.例如
// ... attach FBO
glEnable(GL_SAMPLE_MASK);
glSampleMaski(0, 0x1);
// ... draw scene0
glSampleMaski(0, 0x2);
// ... draw scene1
glDisable(GL_SAMPLE_MASK);
// ... bind FBO to texture
// ... bind tricky shader
// ... draw it, reading both results from different samples and combining them
Run Code Online (Sandbox Code Playgroud)
您可以从FBO读取不同的样本texelFetch(texture, texcoords, i),其中i样本数从零开始.
OpenGL超级圣经,第5版,包含使用此技术实现与顺序无关(尽管非常有限)透明度的示例.
gl_SampleMask 着色器中的数组允许您执行相同的操作,但是基于每个片段,因此相同对象的不同片段可以使用不同的样本掩码 - 并作为结果写入不同的样本.
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |