Я хочу написать средство визуализации текста с аппаратным ускорением, используя Free Type 2 для загрузки шрифтов, поиска правильных глифов, их размеров и т. д.
Мой план сделать это состоит в том, чтобы иметь большую текстуру, содержащую глифы (для заданного шрифта, размера и т. д.) в видеопамяти, и таблицу для каждой текстуры, определяющую информацию о содержимом текстуры в системной памяти.
Затем я могу использовать таблицу для создания буфера вершин для рендеринга текста.
Проблема, с которой я столкнулся, заключается в построении текстуры. Нецелесообразно создавать текстуру для каждого глифа в Unicode, их слишком много. Для Ascii в прошлом я просто создавал текстуру в графическом редакторе, а затем сам заранее заполнял таблицу по мере необходимости, однако для этого мне понадобится какая-то динамическая система, которая будет получать необходимые глифы, а также эффективно кэшировать их для избегайте повторных загрузок одного и того же глифа в vram... (какая-то наименее часто используемая система, я думаю)
Другая проблема заключается в том, что не все глифы имеют одинаковый размер, я мог бы разделить текстуру на сетку, достаточно большую для самых больших глифов (что мне нужно как-то точно обработать), что упрощает размещение глифов на текстуре и замену их на новые глифы (на основе наименее часто используемых или что-то в этом роде), однако это оставляет много потраченного впустую места, но я не уверен, как более эффективно их упаковать, не сталкиваясь с проблемами фрагментации, когда глифы меняются местами...
Также я предполагаю, что обновление текстуры может привести к остановке графического оборудования, если текстура все еще используется для некоторого предыдущего текста, правильно ли это предположение и как я могу избежать этого, если это так?