Windows Phone 8上的模糊速度太慢

Blur on Windows Phone 8 too slow

本文关键字:速度 模糊 Phone Windows      更新时间:2023-10-16

我正在使用带有DirectX的原生C++在windows phone上实现模糊效果,但看起来即使是最简单的小内核模糊也会导致明显的FPS下降。

float4 main(PixelShaderInput input) : SV_TARGET
{ 
    float4 source = screen.Sample(LinearSampler, input.texcoord);
    float4 sum = float4(0,0,0,0);
    float2 sizeFactor = float2(0.00117, 0.00208);
    for (int x = -2; x <= 2; x ++)
    {
        float2 offset = float2(x, 0) *sizeFactor;
        sum += screen.Sample(LinearSampler, input.texcoord + offset);
    }
    return ((sum / 5) + source);
}

我目前正在使用这个像素着色器进行1D模糊,它比没有模糊的情况下要慢得多。WP8手机硬件真的那么慢吗?还是我犯了一些错误?如果是的话,你能告诉我哪里可以查找错误吗?

谢谢。

手机通常没有最好的填充率,如果你受填充率限制,模糊是最糟糕的事情之一。使用gfxbench.com的填充测试中的一些数字,典型的手机填充率约为600MTex/s。粗略计算:

(600M texel/s)/(1280*720 texel/op)/(60帧/s)~=11操作/帧

因此,在你的循环中,如果你的表面是整个屏幕,并且你正在进行5次读取和1次写入,那么这就是你11次操作中的6次,只是为了模糊。所以我认为帧率下降是意料之中的事。解决这一问题的一种方法是动态降低分辨率,并进行一次线性升级-你会从线性插值中获得不同类型的自然模糊,这可能还可以通过,这取决于你想要的视觉效果。