Руководство по шрифту DirectX, в котором не используется GDI - PullRequest
0 голосов
/ 29 января 2009

Есть ли у кого-нибудь учебники / информация для создания и рендеринга шрифтов в нативном DirectX 9, который не использует GDI? (например, не использует ID3DXFont).
Я читаю, что это не лучшее решение (из-за доступа к GDI), но каков «правильный» способ рендеринга шрифтов в dx?

Ответы [ 4 ]

1 голос
/ 02 февраля 2010

ID3DXFont - отличная штука для удобного раннего отладочного вывода. Тем не менее, он использует GDI для растеризации шрифтов (не с аппаратным ускорением), и наблюдается значительное снижение производительности (попробуйте, на самом деле это очень заметно). Начиная с DirectX 11, однако, шрифты будут отображаться с Direct2D и с аппаратным ускорением.

Самый быстрый способ визуализации текста - использование так называемых «растровых шрифтов». Я бы объяснил, как это сделать, за исключением того, что существует много разных способов реализации этого метода, каждый из которых отличается по сложности и возможностям. Это может быть простая система, которая загружает предварительно созданную текстуру и рисует буквы из нее, или система, которая автоматически регистрирует шрифт в Windows и создает текстуру в памяти во время загрузки (движок, который я разработал с другом сделал это, было очень гладко). В любом случае, вы должны увидеть очень заметное увеличение производительности с растровыми шрифтами.

1 голос
/ 29 января 2009

Почему это не хорошее решение?

Смешивать рендеринг GDI и D3D в одном окне - плохая идея.

Однако ID3DXFont не использует это. Он использует GDI для растеризации глифов в текстуру. И использует эту текстуру для визуализации фактического текста.

Единственной альтернативой было бы использование другой библиотеки (например, FreeType) для растеризации глифов в текстуру, но я не уверен, приведет ли это к каким-либо существенным преимуществам.

Конечно, для простых (например, неазиатских) шрифтов вы можете заранее растеризовать все глифы в текстуру, а затем использовать эту текстуру для рисования текста во время выполнения. Таким образом, во время выполнения не нужно использовать какую-либо библиотеку рендеринга шрифтов, она просто рисует четырехугольники с использованием текстуры. Этот подход плохо масштабируется с большими размерами шрифтов или шрифтами с большим количеством символов. Также не очень хорошо справляется со сложной типографикой (например, где буквы должны соединяться и т. Д.)

0 голосов
/ 23 июля 2010

Лично я думаю, что ID3DXFont - это путь. Если вы действительно хотите создать свои собственные шрифтовые процедуры, я предлагаю вам взглянуть на: http://creators.xna.com/en-us/utilities/bitmapfontmaker

Вы можете использовать это для создания растрового изображения со всеми напечатанными на нем символами. Тогда это просто вопрос или загрузка текстуры и перетаскивание соответствующих символов на экран в нужном месте. (Это то, что XNA использует для рисования шрифтов)

Это намного больше работы, но вам не нужно устанавливать шрифт на целевом ПК, и у вас есть преимущество в том, что вы можете зайти в фотошоп и отредактировать его там.

0 голосов
/ 21 января 2010

В DirectX правильный способ рендеринга стандартных шрифтов - это GDI.

Однако, ЕСЛИ

  • Требуется поддержка межплатформенного рендеринга шрифтов
  • с надлежащей поддержкой интернационализации - включая дальневосточные языки, где нереально поддерживать глиф для каждого символа шрифта
  • и / или Вы хотите распространять свои собственные шрифты и отображать их, не устанавливая их ...

Тогда libfreetype может быть тем, что вы ищете. Я не утверждаю, что это легко: это намного сложнее, чем использование нативного шрифта api.

...