Как эффективно визуализировать текст DirectWrite?
Я пишу приложение C# Direct2D, используя SharpDX, однако я могу понять ответы / примеры, которые представлены в C++.
Я хочу визуализировать текст, но не хочу воссоздавать геометрию текста каждый раз, когда хочу визуализировать его. Однако, используя IDWriteTextLayout
а также IDWriteTextRenderer
заставить меня воссоздать геометрию каждый раз, когда текст отображается с помощью GetGlyphRunOutline()
в DrawGlyphRun()
, Это приводит к снижению производительности рендеринга, когда я пытаюсь визуализировать много текста (я проверяю это, вставляя в него 600 строк собственного кода моего приложения, и частота кадров сразу же страдает).
Я избежал проблемы воссоздания геометрии, кистей и других зависящих от устройства ресурсов без необходимости использования класса, который поддерживает набор словарей, связывая каждую фигуру / текст / элемент со своими ресурсами и воссоздавая их при необходимости.
Теперь, ничего из этого не было бы проблемой, если бы я рендерил текст одной и той же кистью: я могу просто создать GeometryGroup
а затем визуализировать его с помощью кисти и обводки слоя. Тем не менее, это не работает для меня, потому что я хочу, чтобы пользователь мог сделать различные части текста любого цвета, который они хотят.
Я столкнулся с проблемой реализации пользовательского средства визуализации текста, потому что мне требуется, чтобы текст можно было отображать штрихом, что, по-видимому, невозможно по умолчанию. Это также то, что заставляет меня создавать геометрию, а не просто вызывать DrawTextLayout()
,
Как мне связать Geometry
s я генерирую в DrawGlyphRun()
кистям и мазкам, которые я могу отрисовать позже?