2009-07-27 2 views
3

Я хочу написать аппаратное ускорение текста визуализации с помощью Free Type 2, чтобы загрузить шрифты, найти правильные глифы и их размеры и т.д.аппаратное ускорение текста Unicode рендеринга

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

Затем я могу использовать таблицу для создания буфера вершин для визуализации текста.

Проблема, с которой я столкнулся, - это построение текстуры, создание текстуры для каждого символа в Юникоде нецелесообразно, там слишком много. Для Ascii в прошлом я просто создал текстуру в редакторе изображений, а затем заполнил таблицу по мере необходимости заранее, однако для этого мне понадобится какая-то динамическая система, которая получит нужные глифы, но также эффективно кэширует их до избегайте повторных выгрузок одного и того же символа в vram ... (как бы то ни было наименее часто используемая система)

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

Также я предполагаю, что обновление текстуры может привести к остановке графического оборудования, если текстура все еще используется для некоторого предыдущего текста, является ли это правильным предположением и как я могу избежать его, если это так?

ответ

3

Текста рендеринг много сложного вопроса, затем «склейка» некоторые глифы ... Не только много сложный, очень сложно: кернинг, лигатуры, расстояние между двунаправленным текстом, гласные, и многим другое ...

Почему бы вам просто не создать текст, используя обычные библиотеки для текстового рендеринга, такого как Pango, создать растровое изображение и отобразить его как растровое изображение на вашем 3D-объекте (если я понимаю, что вам нужно).

EDIT: Простой HTML, как разметка может быть вынесено с Панго, а также: http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html

+2

Потому что я не нашел способ отформатировать форматированный текст (т. Е. Как простой материал типа html), и никто не указал мне на то, что я мог бы интегрировать с приложение d3d в моем другом вопросе. Хотя Pango выглядит так, как будто он может это сделать, добавьте его в качестве ответа на мой предыдущий вопрос (http://stackoverflow.com/questions/1150289/rendering-formatted-text-in-a-direct3d-application), и если после ive посмотрел на него позже, и он смог сделать то, что мне нужно, принять его. –

+0

Добавлен комментарий с похожими на богатые текстовые объекты – Artyom

1

Cairo поддерживает аппаратное ускорение рендеринга для many surface types

Существует библиотека называется FontForge, который использует Каир для рендеринга, но Я сам не пробовал. Вы должны проверить это и дать мне знать, как это происходит :-)

Смежные вопросы