2017-01-16 16 views
2

Я пытаюсь реализовать пользовательский алгоритм, который принимает серию пикселей с заданным радиусом вокруг данной точки. Поскольку я хочу потенциально запустить этот алгоритм на каждом пикселе в изображении 1080p, я думал, что параллелизм с графическим процессором будет хорошим вариантом.OpenGL - Compute Shader - iOS - Опции?

Проблема в том, что мне нужно, чтобы она работала на iOS. Я столкнулся с полезной библиотекой iOS под названием GPUImage2, которая позволяет кучу предопределенных функций, но теперь я попал в дорожный блок.

Насколько я могу судить, я не могу использовать вычислительные шейдеры с iOS? Моя единственная возможность переключиться на использование Металла? Я понимаю, что у андроида есть поддержка ES 3.1, но их нет такой возможности для iOS?

Я предполагаю, что мой другой вопрос; использует вычислительный шейдер даже в правильном варианте здесь? Моя идея состояла в том, чтобы разделить последовательность точек на группы потоков, а затем прокрутить каждую нить по радиусу и выполнить вычисление, позволяя одновременно вычислить все комбинированные значения радиусов. Это похоже на правильную идею, или есть лучший способ (возможно, тот, который не требует вычислительных шейдеров)?

ответ

1

«Потому что я хочу, чтобы потенциально запустить этот алгоритм над каждым пикселем в 1080p изображения»

Это означает, что вам будет хорошо с использованием фрагмента шейдер, который работает на каждом IOS устройств. Я не знаю вашего опыта в OpenGL, но один из способов начать изучение того, как запускать что-то похожее на iOS, - это реализовать пример Gaussian Blur.

+0

Это действительно похоже на то, что я пытаюсь достичь, однако мне нужно вернуть несколько точек данных на пиксель. Возможно ли это, не используя что-то вроде SSBO? – Marcel

+0

Все зависит от того, чего вы пытаетесь достичь. Если «Выполнение нескольких точек данных на пиксель» означает запуск одного и того же алгоритма, вы можете просто запустить фрагментарный шейдер несколько раз. Если вы хотите запустить его в определенных областях, вы также можете обрезать изображение и отобразить его в другом FBO. А потом добавив все вместе к окончательному изображению. – andras