must... write... code... cannot... stop... |
[Mar. 5th, 2018|07:08 am] |
запилил таки в нановегу клипинг (и он даже не шибко тормозит), кобминаторы для клипмасок, и заодно впилил linear gradient with «middle» stop point (то есть, трехцветный). последний удобен для создания всяких хипсторских кнопок одним вызовом закрашивалки, а не двумя. и ещё выправил растеризатор безьерок, чтобы он не уходил в долгую рекурсию на «вырожденых в линию» курвах.
всё, на этом надо прекращать. там, конечно, ещё не хватает dashed strokes, но мне откровенно лень их делать. потому что это надо перепиливать тесселятор строков, и ну его нафиг. диды без этого жили — и мы проживём. |
|
|
ну бля... |
[Feb. 24th, 2018|02:25 pm] |
только-только всё, закончил, больше API не надо, пора уже и… и вот хуй. вспомнил, что хотелось иметь возможность «записать» кучку путей, и потом отрендерить их без повторной тесселяции. пришлось допиливать. выходит немного уродливо, но дело делает.
заодно вкинул pre-rendering affine transform, которое делается на GPU в vertex shader. нужно для того, чтобы двигать и крутить сохранённые пути (нет, менять размеры нельзя, а то antialiasing и stroking пойдёт по пизде, из-за поехавших границ и слетевших antialias fringe). |
|
|
вотбля |
[Feb. 24th, 2018|12:04 am] |
есть такой алгоритм для растеризации безьерок: «adaptive forward differencing». он нерекурсивный, но в среднем чуть-чуть медленней, чем обычный рекурсивный. за одним исключением: рекурсивный растеризатор атомно сосёт на «вырожденых» безьерках (которые представляют из себя линию). адаптивный же на них ОХУИТЕЛЬНО БЫСТРЫЙ. почти как просто линию нарисовать.
то есть, я зря переписывал NanoSVG. сейчас замерил: с AFD скорость растеризации ~46000 безьерок примерно такая же, как с рекурсивным ~7000 безьерок плюс остальное линиями (для интересующихся: без AFD — ~200 миллисекунд, с AFD — ~20 миллисекунд; да, оно того стоило). в итоге добавил простую проверку на приблизительную коллинеарность точек кривой, и если да — то вызываю AFD, иначе делаю рекурсию. в итоге старый выхлоп NanoSVG рендерится с такой же скоростью, что и новый.
ну хуй с ним, тащемта: всё равно получать нормальный путь из NanoSVG прельстиво. |
|
|
ну и пуркуа бы и да |
[Feb. 22nd, 2018|05:59 pm] |
раз уж NanoVega умеет в even-odd fill rule, то добавил API для выдёргивания аутлайнов из ttf. можно сразу к текущему nvg path добавлять, а можно получить отдельно и развлекаться способами посложнее. |
|
|