Windows Phone 8上的模糊速度太慢
Blur on Windows Phone 8 too slow
我正在使用带有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次,只是为了模糊。所以我认为帧率下降是意料之中的事。解决这一问题的一种方法是动态降低分辨率,并进行一次线性升级-你会从线性插值中获得不同类型的自然模糊,这可能还可以通过,这取决于你想要的视觉效果。
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 方便地对C++中的所有字符串文字进行模糊处理
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 想要检测图像中的模糊,但无法正确
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 具有可分离内核的 2D 模糊卷积
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- 线程相互减慢速度
- Windows Phone 8上的模糊速度太慢