C# 所有像素的高效像素着色器总和
如何使用HSLS像素着色器有效地计算图像中所有像素的总和?我对Pixel Shader 2.0感兴趣,我可以将其作为WPF着色器效果调用。WPF中的效果更适合生成视觉效果。听起来您想将它们用于不同类型的计算,要做到这一点,您需要将图像结果视为数据,这需要RenderTargetBitmap,这将在软件中完成。 您可能想看看这些为GPGPU设计的项目C# 所有像素的高效像素着色器总和,c#,wpf,hlsl,pixels,pixel-shader,C#,Wpf,Hlsl,Pixels,Pixel Shader,如何使用HSLS像素着色器有效地计算图像中所有像素的总和?我对Pixel Shader 2.0感兴趣,我可以将其作为WPF着色器效果调用。WPF中的效果更适合生成视觉效果。听起来您想将它们用于不同类型的计算,要做到这一点,您需要将图像结果视为数据,这需要RenderTargetBitmap,这将在软件中完成。 您可能想看看这些为GPGPU设计的项目 我不知道OpenTK中OpenCL绑定的状态。其他技术,如DirectCompute和CUDA也值得一看。有一个更简单的解决方案,不使用着色器:
我不知道OpenTK中OpenCL绑定的状态。其他技术,如DirectCompute和CUDA也值得一看。有一个更简单的解决方案,不使用着色器:将图像加载为纹理,创建mipmap链,并读回最后一个mipmap(1x1像素)的值。这个技巧在游戏中广泛使用,例如,计算场景的平均亮度(以便应用HDR色调映射)。如果您重视简单性和效率而不是准确性,这是一个很好的技巧。假设您希望对图像中的r/g/b通道值求和(并假设您可以破坏原始像素)-下面是我的部分解决方案:
在这种情况下,与仅在CPU端求和像素值相比,我们可以获得大约10倍的速度。如何从WPF中的图像创建mipmap链,这与应用像素着色器一样快?通过使用方框过滤器将图像大小调整为1x1。谢谢。我的纹理有点退化(高精度数值FFT),使用三角形滤波器得到了非常好的结果(期望结果的正负1%),这对我来说已经足够好了。不过,框式过滤器已经过时了。你所说的“所有像素总和”是指所有R/G/B值的总和还是其他什么?不需要涉及CPU,一切都可以在GPU上完成。“低效”并没有开始描述这种方法,它甚至不考虑CPU-GPU通信的成本。1.