Я пишу приложение, которое должно нарисовать много текста - несколько строк, может быть, десятки строк - в Direct3D9. Текст может быть сильно отформатирован (т. Е. Разные шрифты, стили, размеры) и может содержать символы Unicode из разных кодировок. Хуже всего, он может меняться «на лету», поэтому он должен быть динамическим (визуализировать, как только дисплей всегда не будет делать).Как отформатировать форматированный текст в Direct3D9?
Есть две проблемы с этим: во-первых, мне, вероятно, потребуется много звонков в D3DXCreateFont, которые предположительно являются дорогостоящими (я не уверен сам). Другой подход заключается в создании всех шрифтов, прежде чем рисовать многочастную линию, а затем просто переключаться между ними - это лучше? Ну, я также могу создавать объекты шрифта «на лету», когда я рисую строку, добавляю их в какой-то кеш-шрифт, а затем просматриваю кеш, прежде чем пытаться создать новый? Как вы думаете, какой подход лучше всего подходит?
Вторая проблема заключается в том, что D3DXFont, похоже, не понимает стили подчеркивания/прокрутки шрифтов. Хотя D3DFONT основан на LOGFONT, он пропускает эти поля (поддерживается курсивом, хотя). Скажем, мне действительно нужно подчеркнуть/пробить, что мне делать? Есть ли способ заставить ID3DXFont подчеркнуть? Должен ли я просто нарисовать эти строки сам (как мне это сделать быстро)? Или, может быть, мне нужно переключиться на рисование с помощью GDI на HDC, а затем скопировать эти пиксели в текстуру - это обеспечит разумную производительность?
Спасибо! Я использовал метод кэширования, отлично работает. – himself