• 1:什么是模板测试?

      • 模版测试是一个像素遮罩,用来检测是否把当前像素存储到缓冲区或者是遗弃掉。 模板缓冲通常是每个像素占用一个8位整数。这个值可以被写入代替,增加或者减少。之后drawcall会对比测试这个值,来确定在运行这个shader前这个值是否被dis掉。、
    • 2:模板测试的Syntax语法

      • 标签;语法举例image.png

        • Ref referenceValue

          • 这个值是为了跟缓冲区里面的值(如果comp是除always状态以外的其他状态)进行比较写入(如果pass,fail或者zfail那么就替换掉)。从0到255的整数。
        • ReadMask readMask

          • 一个8位遮罩是一个从0到255的整数,当与缓冲区的数值对比时用得到(参考值&读取遮罩)对比函数(缓冲区值&读取遮罩)。默认255.
        • WriteMask writeMask

          • 一个8位遮罩作为一个从0到255的整数,用来当写入缓冲区的时候用。请注意,跟其他写遮罩一样,它规定任何位缓冲区都会受到写入的影响(也就是写遮罩0意思就是没受到影响然后0不会被写入)。默认值255.
        • Comp comparisonFunction

          • 这个function函数用于将参考值reference value与当前模板缓存的值比较时用的。默认是:always。(always的话,就是不同再比,直接pass过了的意思)
        • Pass stencilOperation

          • 当参考值与模板值得比较测试通过后(且深度测试也通过后)应该怎么操作模板缓存中的值。默认:keep。(keep就是保持缓存的值不变,意思不会缓存值有任何操作)
        • Fail stencilOperation

          • 当参考值与模板值的比较测试失败后,应该怎么操作模板缓存中的值。默认:keep。(keep就是保持缓存的值不变,意思不会缓存值有任何操作)
        • ZFail stencilOperation

          • 当参考值与模板值的比较通过后,但深度测试没有通过,应该怎么操作模板缓存中的值。默认:keep。(keep就是保持缓存的值不变,意思不会缓存值有任何操作)
        • Comp,Pass,Fail 和 ZFail 都将应用于几何体的正面测试,除非正面给剔除了,这种情况将用于背面测试。你也可以直接指定两种面向的模板测试的应用,使用这些来定义正面的:CompFront,PassFront,FailFont,ZFailFont(对几何体正面的),和CompBack,PassBack,FailBack,ZFailBack(对于几何体背面的)。

    • 3:参考值与缓存值的比较功能

      • image.png

        • image.png
      • image.png