2015-12-01 4 views
2

Я работаю с GPUImage Брэдом Ларсоном, который я считаю действительно потрясающим. Для гибкости и простоты написания я создал собственный фильтр, который имеет 3 равномерных входа. Я основывал его на GPUImageBrightnessFilter.h и .m. Одна форма - это просто «параметр» float, один из которых - это «центр» CGPoint, чтобы передавать в касание координаты, если они мне нужны, и, надеюсь, будет временным поплавком, это время, прошедшее с момента запуска шейдера. Я использую initWithFragmentShaderFromFile для использования своих собственных файлов шейдеров.Создание единообразной формы времени для GPUImage

Работа с «параметром» и «центром». Это временная форма, которая не работает, потому что я не понимаю, как создать униформу, которая постоянно меняется (как это делает время).

Цель моей временной формы, похоже, похожа на u_time от SpriteKit. Он возвращает количество секунд с момента запуска текущего шейдера, которое вы можете использовать в своем пользовательском шейдере для его анимации. Одним очень простым примером может быть циклическое изменение оттенка изображения с течением времени. Я надеюсь, что это будет более сложным, поскольку мои знания о GLSL растут.

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

Getting the time elapsed (Objective-c)

Проблема заключается в том, что я не знаю, как постоянно обновлять форму, чтобы перейти к моей затенении. Я делаю это в настройщике настраиваемого фильтра на время? Не запускать ли пользовательский сеттер только один раз? Я делаю это в моем переопределении init? Разве это не выполняется только один раз? Я пишу цикл в моем контроллере, который постоянно вызывает сеттер? Это похоже на дорогое и грязное решение.

Я не прошу ввести код, просто предложения, направленные на то, чтобы направить меня в правильном направлении или не оттолкнуть меня от того неправильного направления, в котором я думал.

ответ

1

Задав вопрос, я помог мне найти решение и узнать о NSTimer. Я включил метод, который создает повторяющийся NSTimer в мой подклассу GPUImageFilter, который передает форму времени шейдеру. Он вызывает селектор, который увеличивает мою переменную «время» и передает ее в единый массив.