我正在阅读ARB_shadow
的文档,他们暗示OpenGL可以自由地在纹理采样器中实现PCF(Percentage Closer Filtering),但他们无法在规范中谈论它。
首先他们说:
- 如何实施双线性或三线性过滤?
解决方案:我们建议实施行为,但留下 细节直到实施。这里的差异相当于 阴影边缘的质量和柔软度。具体的过滤算法 可以通过分层扩展来表达。我们故意模糊不清 这里是为了避免知识产权和专利问题。
然后是:
如果TEXTURE_MAG_FILTER不是NEAREST或者TEXTURE_MIN_FILTER不是 然后可以通过比较来计算NEAREST或NEAREST_MIPMAP_NEAREST 纹理R坐标的多个深度纹理值。该 这个细节是依赖于实现的,但r应该是一个值 在[0,1]的范围内,其与比较的数量成比例 传球或失败。
而且...... 那个PCF !
第一个问题是:它有效吗?当您使用LINEAR过滤器对深度纹理进行采样时,有多少供应商真正使用PCF?
第二个(也是最重要的)问题是:如何通过ARB_shadow检测硬件PCF过滤是否有效?如果它不存在,我想回到着色器中的软件PCF。
我注意到ARB_shadow与ARB_fragment_program_shadow
齐头并进(至少在我可以访问的显卡上)。 ARB_fragment_program_shadow是着色器中PCF的低级硬件支持。这是答案的线索,即。如果两个扩展都存在,那么当我说出神奇的词时,硬件PCF会出现吗?
使用简单的二进制结果实现ARB_shadow将是愚蠢的。我假设在驱动程序中实现ARB_shadow的重点是做PCF,即使文档不允许这样说。仅存在ARB_shadow是否意味着硬件PCF?