我如何理解OpenGL ES规范中的样本掩码?

问题描述:

我正在阅读有关samplemask的gles spec。我如何理解OpenGL ES规范中的样本掩码?

有一个关于samplemask我无法理解的段落。以下是该规范的片段。

当状态指定对于给定的片段的多个片段着色器 调用,对于任何单个片段 着色器调用样本掩码可以指定用于该片段覆盖采样的子集。在 这种情况下,与每个覆盖样本对应的位将被精确设置为一个 片段着色器调用。

有人可以帮给我一个例子,或者帮助我明白了吗?我与部分

感谢“碎片的覆盖样本的一个子集”相当混乱。

样品掩模(也被称为覆盖掩码)定义了在像素样本内的原语被光栅化,并且其已存活任何早ZS测试。如果每个像素只有一个样本(不论是否渲染碎片),这并没有多大意义,但是如果您使用多重采样,则每个像素会有多个样本点。在三角形的边缘,光栅化可能仅击中4个样本中的3个,并具有覆盖掩码b0111,其指示将哪些样本写入帧缓冲区。

对于多样本反锯齿,您只执行一个片段着色器每个像素的调用,而不考虑覆盖掩码,以便片段将具有(在我们的示例中)覆盖掩码b0111

如果您使用的采样率在阴影的OpenGL ES 3.x中,你将执行3个片段着色器调用,每个样品的打击,所以也要覆盖掩码b0001b0010b0100,每写一个子具有唯一片段颜色的像素中的像素样本。

+0

感谢您的答案,因为“当国家指定一个给定的片段多个片段着色器调用”,这是否意味着当sampleshading启用,并对于给定的片段,如果3 4的样品光栅化后击中的一部分,“多个片段着色器调用“意味着每个样本需要3次调用?如果我在片段着色器中有以下定义。 'fs_out_color = vec4(1.0,0.0,0.0,1.0);'。这将为每个样本写入1.0? – james

+0

每个样本最多只能有一次调用,但使用MSAA时,每个像素会有多个样本,因此如果您启用了采样率阴影和多采样帧缓冲,则每个像素可能会有多个调用。 – solidpixel