gpt4 book ai didi

opengl - 如何在片段着色器中进行自定义模板测试

转载 作者:行者123 更新时间:2023-12-04 04:56:41 26 4
gpt4 key购买 nike

在我的项目中,我使用“丢弃”调用来执行自定义模板测试,它尝试仅在由模板纹理定义的指定区域上绘制内容。这是片段着色器的代码:

//get the stencil value from a texture
float value=texture2D( stencilTexture, gl_FragCoord.xy/1024.0).x;
//check if value equals the desired value, if not draw nothing
if(abs(value-desiredValue)>0.1)
{
discard;
}

此代码有效,但由于“丢弃”调用而遇到性能问题。是否有通过 GPU 着色器执行此操作的替代方法?告诉我怎么做。

最佳答案

如果访问纹理,则必须承受与访问纹理相关的性能损失。同样,如果您想停止渲染片段,则必须承受与停止渲染片段相关的性能损失。

无论您如何停止该片段,这都是正确的。无论是真正的模板测试、基于着色器的 discard 还是 alpha 测试,所有这些都会遇到相同的一般性能问题(对于 discard 导致任何重大问题的硬件)性能问题,主要是移动硬件)。唯一的异常(exception)是深度测试,那是因为 why certain hardware has problems with discard .

对于 discard 对性能有重大影响的平台,如果硬件可以假定深度是片段是否被渲染的最终仲裁者(因此,具有最高/最低深度的片段总是获胜)。因此,除深度测试之外的任何剔除片段的方法都会干扰此优化。

关于opengl - 如何在片段着色器中进行自定义模板测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16666807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com