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