Ваш вопрос немного неясен. Насколько я понимаю, вам нужен легко масштабируемый шрифт.
Я думаю, что это неприемлемо
Насколько я знаю, это стандартное поведение для шрифтов - даже для системных шрифтов. Они не должны быть легко масштабируемыми.
Возможные решения:
- Используйте ID3DXRenderTarget для рендеринга текста на текстуру. Шрифт будет отфильтрован, когда вы увеличите его слишком много. Некоторые люди подумают, что это выглядит ужасно.
- Написать пользовательскую библиотеку, которая поддерживает векторные шрифты. То есть - он должен быть в состоянии извлечь контур шрифта из шрифта и построить текст из него. Это будет НАМНОГО медленнее, чем ID3DXFont (который уже медленнее, чем традиционные «текстурные» шрифты). Текст будет легко масштабироваться. Используя этот способ, вы, скорее всего, получите видимые артефакты («шум») для мелкого текста. Я бы не использовал этот подход, если вы не хотите огромные буквы (более 40 пикселей). Библиотека Freetype может иметь функции для обработки контуров шрифтов.
- Или вы можете попробовать использовать D3DXCreateText. Это создаст 3D текст для ОДНОЙ строки. Не будет быстро вообще.
Я бы забыл об этом. Пока пользователь доволен общей производительностью, улучшение процедур рендеринга шрифтов (так что их поведение выглядит приятным для вас) не стоит усилий.
- EDIT -
Об ID3DXRenderTarget.
Даже если вы используете ID3DXRenderTarget, вам понадобится ID3DXFont. То есть вы используете ID3DXFont для рендеринга текста на текстуру, а затем с помощью текстуры перетаскиваете текст на экран.
Поскольку вы сказали, что производительность критична, вы можете отложить создание нового ID3DXFont до тех пор, пока пользователь не перестанет изменять размер видео. То есть Когда пользователь начинает изменять размер видео, вы используете старый шрифт, но увеличиваете его, используя текстуру. Там будет фильтрация, конечно. Когда пользователь перестает изменять размер, вы создаете новый шрифт, когда у вас есть время. Вы, вероятно, можете сделать это в отдельной ветке, но я не уверен в этом. ИЛИ вы всегда можете просто визуализировать текст в том же разрешении, что и видео. Таким образом, вам не придется беспокоиться об изменении его размера (он все равно будет отфильтрован вместе с видео). Некоторые видеоплееры работают таким образом.
Еще немного о ID3DXFont. Есть одна проблема с ID3DXFont - она медленная в ситуациях, когда вам нужно много текста (но он вам все еще нужен, потому что он поддерживает юникод, а написание текстуры с поддержкой юникода - боль). В прошлый раз, когда я работал с ним, я оптимизировал вещи, кэшируя часто используемые строки в текстурах. То есть любая строка, которая была нарисована более чем в 3 кадрах в строке, визуализировалась в цель текстуры / рендера D3DFMT_A8R8G8B8, а затем я копировал эту строку из текстуры вместо использования ID3DXFont. Строки, которые не отображались некоторое время, были удалены из текстуры. Это дало серьезный импульс. Это решение, однако, является хитрым - мониторинг пустого пространства в текстуре, удаление неиспользуемых строк и дефрагментация текстуры не совсем тривиальны (в этом нет ничего особенно сложного, но легко ошибиться). Вам не понадобится такая сложная система, если ваш экран буквально не покрыт текстом.