У меня много текста для рисования. Если я вызываю D3DXFont :: DrawText с первым параметром, равным NULL, я получаю ужасную производительность.
Я слышал, что использование D3DXFont в сочетании с D3DXSprites значительно ускоряет работу.
Как мое приложение должно рисовать строки?
Каждая строка струится псевдо-тенью. Это означает, что я рисую каждую строку 4 раза черным цветом:
х + 1, у + 1
х — 1, у + 1
х — 1, у — 1
х + 1, у — 1
и 1 раз в реальном цвете. Это делает очень красиво выглядящие всегда читаемые строки. Я даже переключился на пиксельные шрифты для более быстрого рендеринга.
Теперь вызовите эту строку с тенью (ShadowString).
Каждый кадр, который я рисую, 256 (в худшем случае) из этих ShadowStrings на экране.
Я хотел бы знать, как использовать спрайты (или любую другую технику), чтобы максимально ускорить рисование этих строк). Теперь я получаю 30 FPS в приложении. Но я нацеливаюсь на 120 мин. И проблема только в том, что текст рисования вещь.
Конечно, вы должны профилировать ваше приложение перед любой оптимизацией, но, по правде говоря, D3DXFont
/D3DXSprites
и «быстрый» это взаимоисключающие понятия. Если они не подходят, просто не используйте их.
Используйте сторонние библиотеки или создайте свой собственный спрайт / рендеринг шрифтов.
Недавно я ответил о том, как это сделать здесь: Как нарисовать линию и шрифт без D3DX9 в DirectX 9?
Кроме того, Google для «шрифта спрайта», «пакетирования спрайта», «текстурных атласов», «рендеринга TTF». Это не очень сложно, если вы знакомы с API (в частности, буферами вершин и текстурированием), и в Интернете есть множество примеров. Не стесняйтесь искать примеры D3D11 или OpenGL, принципы одинаковы.
Других решений пока нет …