Как я могу эффективно вычислить сумму всех пикселей в изображении, при помощи пиксельного шейдера HSLS? Я интересуюсь Пиксельным шейдером 2.0, который я мог вызвать как эффект программы построения теней WPF.
Эффекты в WPF гораздо лучше подходят для получения визуального результата. Похоже, вы хотите использовать их для другого типа вычислений, для этого вам нужно будет обработать результат изображения как данные, для этого потребуется RenderTargetBitmap, что в любом случае будет выполнено в программном обеспечении. Возможно, вы захотите взглянуть на эти проекты, разработанные для GPGPU.
OpenTK Я не знаю состояние привязок OpenCL в OpenTK. Также стоит обратить внимание на другие технологии, такие как DirectCompute и CUDA.
Есть гораздо более простое решение, которое не использует шейдеры: загрузите изображение как текстуру, создайте цепочку мипмапов и считайте обратно значение последнего мипмапа (1x1 пиксель). Этот трюк широко используется в играх для вычисления, например, средней яркости сцены (чтобы применить тональное отображение HDR). Это отличный трюк, если для вас простота и эффективность важнее точности.
Предполагая, что вы хотите суммировать значения каналов r/g/b в изображении (и предполагая, что вы можете уничтожить исходные пиксели) - вот мое частичное решение:
Pix_Value*10каждого 10-го пикселя.
В этом случае мы получаем примерно 10-кратное ускорение по сравнению с суммированием значений пикселей только на стороне процессора.