Я предполагаю, что эти приложения кешируют результаты всех штрихов, кроме штриха, редактируемого в настоящее время, так что при редактировании определенного штриха они просто (1) рисуют текстуру, которая имеет все видимое после редактируемого штриха (2) рисовать редактируемый штрих (3) рисует текстуру всего перед редактируемым штрихом (4) рисует виджеты штрихов. Большинство из этих приложений также со временем становятся слишком медленными и имеют опции, позволяющие не отображать обводки, когда сцена становится слишком сложной (режим контура)
Что касается того, как вы рисуете, трудно понять, не видя примеров точной функции Вы пытаетесь реализовать. Существуют различные виды штрихов bru sh. Вот некоторые из них, которые приходят на ум:
(1) Поглаживание выглядит как каллиграфия (1 цвет, резкий или размытый, овальный bru sh)
Я думаю, они строят многоугольник me sh который представляет контур обводки. При заданных вершинах вдоль линии обводки с дополнительным параметром 1,0 и ребер с дополнительным параметром 0,0 (или что-то подобное) кажется, что было бы относительно легко написать шейдер, который затеняет многоугольник с различными параметрами для размытия.
Тяжелая часть - это работа с углами. Большинство программ структурированного рисования имеют опции для обработки углов.
(2) Поглаживание штамповкой изображения (например, нанесение листьев вдоль обводки)
Это похоже на выбранный вами метод, но обычно у этих типов штрихов есть опции для того, как часто ставить штампы (например, количество штампов на единицу) и опции для случайности в таких вещах, как ориентация, смещение от сплайна или даже несколько разных штампов.
(3) повторение bru sh (как узорной ленты или звеньев цепи в цепочке)
Это снова похоже на генерацию многоугольника на основе обводки и настройку текстуры для повторения, хотя я уверен, что это не так просто, если вы на самом деле хотите создавать цепочки, так как цепочки могут сгибаться только в соединениях звеньев.
В любом случае, несколько ссылок, которые могут быть связаны
Не имеет отношения, но gl.POINTS может окончательно потерпеть неудачу, поскольку требуется только поддержка точек размером 1.0 и поведение вне области просмотра не согласовано