繁体   English   中英

为什么相同的片段着色器在不同的Android手机上给出不同的结果?

[英]Why same fragment shader gives different results on different android phones?

我正在尝试在Android上使用OpenGL ES 2.0实现模糊滤镜。 这是我正在使用的代码:

varying highp vec2 fragTexCoord;
highp vec2 u_Scale;
uniform sampler2D s_texture;
highp vec2 gaussFilter[7];
uniform highp float radius;
highp vec4 boxVerBlur(){
    gaussFilter[0] = vec2( -3.0,0.015625);
    gaussFilter[1] = vec2(-2.0, 0.09375);
    gaussFilter[2] = vec2(-1.0, 0.234375);
    gaussFilter[3] = vec2(0.0,  0.3125);
    gaussFilter[4] = vec2(1.0,  0.234375);
    gaussFilter[5] = vec2(2.0,  0.09375);
    gaussFilter[6] = vec2(3.0,  0.015625);  
    highp vec4 color = vec4(0,0,0,1);
    u_Scale = vec2( 1.0/radius, 0 );
    for( int i = 0; i < 7; i++ )
    {
        color += texture2D( s_texture, vec2( 
                 fragTexCoord.x + gaussFilter[i].x*u_Scale.x, 
                 fragTexCoord.y + gaussFilter[i].x*u_Scale.y )) * gaussFilter[i].y;
    }
    return color;
}
void main(void)
{
    gl_FragColor = boxVerBlur();
}

在“三星Galaxy S”上,它可以正常工作。 但是,当我在“ Samsung Galaxy Ace”上运行相同的应用程序时,它会产生更亮的纹理而没有模糊效果。

Galaxy S的结果:

Galaxy S的结果

Galaxy ACE的结果:

Galaxy Ace的结果

我假设gaussFilter1和gaussFilter2的意思是gaussFilter [1]和gaussFilter [2]。

我注意到的代码唯一的问题是您正在添加Alpha,请尝试仅添加rgb:

    color.rgb += texture2D( s_texture, vec2( 
             fragTexCoord.x + gaussFilter[i].x*u_Scale.x, 
             fragTexCoord.y + gaussFilter[i].x*u_Scale.y )).rgb * gaussFilter[i].y;

它不应该引起您的问题,但是请尝试一下,即使它不能解决问题,您也将为每次纹理访问节省不必要的费用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM