gpt4 book ai didi

android - fwidth() tegra 3 glsl

转载 作者:行者123 更新时间:2023-11-29 00:33:25 27 4
gpt4 key购买 nike

enter image description here

这是该程序在 Tegra 3 设备上渲染几个四边形的结果:

#extension GL_OES_standard_derivatives : enable
precision mediump float;


uniform sampler2D sampler2d;
varying vec2 textureCoord;

void main()
{

vec4 texColor = texture2D(sampler2d,textureCoord);
gl_FragColor = vec4(fwidth(texColor.a),0.0,0.0,1.0);
}

我使用的纹理是一个空的、透明的 png,但无论我在这个纹理中放什么,这些线框总是可见的。

Mali-400 设备上的相同代码工作正常。谁能告诉我 Tegra fwidth 实现是否正确或我的代码有问题?上面的代码只是一个例子,只显示了着色器的错误部分。

最佳答案

我遇到了一个非常相似的问题,在应用抗锯齿后,三角形线框伪像显示在我们的字体上,仅在 Tegra 3 设备上。我将问题缩小为 fwidth() 函数返回的结果。不幸的是,我找不到问题的根源(我预计这与三角形边缘处的导数不正确有关?)。

不过,我确实找到了解决方法。我使用颜色变化来确定当 fwidth 返回的宽度大于 .2 时出现伪像。然后我忽略了大于 .2 的值并将它们替换为更合理的硬编码 fwidth 值 - 您可能需要做一些调整才能找到适合您的用例的值,对我来说 0.025 就足够了。

为了避免在我的着色器代码中出现分支,我结合使用了 mix 和 step 来在需要时替换 fwidth 值:

mediump float dist = texture2D(Texture, TexCoordOut).a;
mediump float width = fwidth(dist);
width = mix(width, 0.025, step(0.2, width)); // if (width > 0.2) width = 0.025

虽然远非理想,但在应用 smoothstep 抗锯齿时使用此宽度而不是原始 fwidth 允许我显示我的文本而没有伪影。

关于android - fwidth() tegra 3 glsl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048927/

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