如何使用HSLS像素着色器有效地计算图像中所有像素的总和?我对Pixel Shader 2.0感兴趣,我可以调用它作为WPF着色器效果。
答案 0 :(得分:6)
有一个更简单的解决方案,不使用着色器:将图像加载为纹理,创建一个mipmap链并读回最后一个mipmap(1x1像素)的值。这个技巧在游戏中广泛用于计算,例如,场景的平均亮度(为了应用HDR色调映射)。如果你重视简单性和效率而不是准确性,这是一个很好的技巧。
答案 1 :(得分:3)
假设您要在图像中求和r / g / b通道值(并假设您可以销毁原始像素) - 这是我的部分解决方案:
Pix_Value*10。
在这种情况下,与仅在CPU端汇总像素值相比,我们可以获得大约10倍的加速。
答案 2 :(得分:-1)
WPF中的效果更适合产生视觉效果。听起来你想要将它们用于不同类型的计算,为此你需要将图像结果视为数据,这需要RenderTargetBitmap,无论如何都要在软件中完成。 您可能希望查看为GPGPU设计的这些项目。
OpenTK我不知道OpenTK中OpenCL绑定的状态。其他技术如DirectCompute和CUDA也值得一看。