Вы пометили это с помощью Direct3D, поэтому я предполагаю, что это целевая среда. В противном случае GDI может справиться со всем этим.
На самом деле, рассмотрение GDI - хорошее место для начала, так как оно поддерживает это в том виде, в каком оно есть. В GDI для рисования текста одновременно выбран только один шрифт. Аналогичным образом, одновременно может быть выбран только один цвет текста. Итак, чтобы нарисовать строку текста, содержащую символы в нескольких цветах и / или шрифтах, вы должны разделить строку на куски символов, которые имеют одинаковое состояние рендеринга. Вы устанавливаете состояние для этого чанка (цвет текста переднего плана / фона, шрифт текста, межстрочный интервал и т. Д.), Затем вызываете ::TextOut
для этого чанка текста, затем устанавливаете состояние для следующего чанка и рисуете его, и так на.
Тот же принцип применяется в Direct3D. Каждый фрагмент текста может требовать своего собственного ID3DXFont
(или вашего собственного механизма шрифтов, если ID3DXFont
недостаточно) и цвета и т. Д. Вы устанавливаете состояние, рисуете текст, устанавливаете состояние, рисуете текст и т. Д.
Теперь, если вы хотите сделать свой собственный рендеринг текста, вы можете делать более интересные вещи с помощью шейдера, но, вероятно, это того не стоит, если у вас нет необходимости в действительно высококачественной типографии.
В Windows 7 (заполненной для Vista после поставки Windows 7) вы сможете использовать DirectWrite для высококачественной типографии в контексте визуализации Direct3D (D3D10 и более поздние версии).