2014-09-25 97 views
3

我在使用原生C++和DirectX的windows phone上實現了模糊效果,但它看起來像是使用小內核的最簡單的模糊會導致可見的FPS丟棄。Windows Phone 8上的模糊太慢

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); 
} 

我目前正在使用這個像素着色器進行一維模糊處理,它的可見光比沒有模糊要慢。 WP8手機硬件真的太慢了​​還是我犯了一些錯誤?如果是這樣,你能指出我在哪裏尋找錯誤?

謝謝。

回答

1

手機通常沒有最好的填充率,而模糊是你可以做的最糟糕的事情之一,如果你是填充率限制。使用gfxbench.com的填充測試中的一些數字,典型的手機填充率大約是600MTex/s。與一些粗糙數學:

(600M紋理像素/秒)/(1280×720層的紋理像素/ OP)/(60幀/秒)〜= 11次操作/幀

所以在循環,如果你的表面是整個屏幕,你正在做5讀和1寫,這是你使用的11個操作中的6個,只是爲了模糊。所以我會說幀速下降是預期的。解決這個問題的一個方法是動態降低分辨率,並進行單個線性高級 - 您將從線性插值中獲得一種不同的自然模糊效果,這可能是可以通過的,具體取決於您要進行的視覺效果。

+0

感謝您的回答,我會盡力而爲。 – user1760770 2014-09-26 08:07:04