Допустим, я хочу разработать приложение для рисования и должен реализовать движок кисти.Для растровой кисти вам в основном необходимо нанести текстуру на места касания с заданным интервалом.
- Задача : создать небольшое изображение (кончик кисти) поверх большего.
Я решил сначала создать прототип в CG, используя CGContext для рендеринга марок и выяснения, что они работают довольно хорошо, даже со слипшимися штрихами и холстом приличного размера (размер вывода CGContext).
Однако, поскольку мне нужно рисовать на действительно больших текстурах (8000x6000 было бы здорово), я решил дать металлу шанс.Я знаю, что эта задача может быть тривиальной для тех, кто имеет опыт работы с металлом, но я новичок в этой области.Поэтому я попытался использовать CIFilters (с металлической подложкой) для наложения кисти на холст и отображения ее в пользовательском MetalImageView: GTKView.
Я думал, что холст и кисть как CIImages и отображение их в слое металла уже будут более производительными, чем наивная реализация CG.Но это не так.Подход CIFilter визуализирует весь холст каждый штамп (в точке), независимо от того, в CG я просто обновляю маленький прямоугольник вокруг этой точки.
Теперь, я думаю, я мог бы сделать это с помощью CIFilter, если бы я мог изменить вычисляемый экстент.Я не знаю, можно ли это сделать с помощью Core Image, но я уверен, что в металле это будет действительно легко для тех, кто имеет опыт.
- Вопрос : Может ли реализация из чистого металла печатать изображения быстрее, чем CG, учитывая, что CG работает с Metal под капотом?Если так, как быстрее?Стоит ли учиться, как это сделать, или мне лучше потратить это время на улучшение реализации CG?
Обратите внимание, что я прошу растровую кисть, а не векторную кисть с Bezier Paths, которую гораздо прощекод и работает быстрее, но текстурированные кисти не могут быть использованы.
Я очень ценю любую помощь.