Рендеринг текста / шрифта в OpenGLES 2 (iOS - CoreText?) - варианты и лучшие практики?

Существует много вопросов относительно рендеринга шрифтов OpenGL, многие из них удовлетворяются текстовыми атласами (быстрыми, но неправильными) или строковыми текстурами (только с фиксированным текстом).

Тем не менее, эти подходы плохие и, похоже, устарели годами (как насчет использования шейдеров, чтобы сделать это лучше / быстрее?). Для OpenGL 4.1 есть отличный вопрос о том, что вы должны использоватьсегодня? ":

Каков современный уровень визуализации текста в OpenGL начиная с версии 4.1?

Так,что мы должны использовать на iOS GL ES 2 сегодня?

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

Насколько я вижу, здесь есть две части:

Как мы отображаем текст, используя шрифт?Как мы отображаем вывод?

Для 1 (как для рендеринга) Apple предоставляет МНОГИЕ способы получения «правильного» рендеринга вывода, но «простые» не поддерживают OpenGL (может быть, некоторые другие делают - например, есть ли простой способ отобразить вывод CoreText в OpenGL?).

Для 2 (как отобразить) у нас есть шейдеры, у нас есть VBO, у нас есть глиф-текстуры, у нас есть lookup-текстуры и другие методы (например, материал OpenGL 4.1, связанный выше?)

Вот два распространенных подхода OpenGL, о которых я знаю:

Текстурный атлас (визуализируйте все глифы один раз, затем визуализируйте 1 x текстурированный квадрат на символ из общей текстуры)Это неправильно, если только вы не используете «растровый шрифт» эпохи 1980-х годов (и даже тогда: текстурный атлас требует больше работы, чем может показаться, если вам нужно исправить его для нетривиальных шрифтов)(шрифты не являются «набором глифов», существует огромное количество позиционирования, макета, обтекания, интервалов, кернинга, стиля, раскраски, взвешивания и т. д. Атласы текстур не работают)Фиксированная строка (используйте любой класс Apple для правильного рендеринга, затем снимите скриншот с сохраняемых данных изображения и загрузите как текстуру)С человеческой точки зрения это быстро. В рендеринге кадров это очень, очень медленно. Если вы делаете это с большим количеством изменяющегося текста, ваша частота кадров проходит через полТехнически это в основном правильно (не совсем так: вы теряете некоторую информацию таким образом), но крайне неэффективно

Я также видел, но слышал как хорошие, так и плохие вещи о:

Imagination / PowerVR "Print3D" (ссылка не работает) (от парней, которые производят GPU! Но их сайт переместил / удалил страницу визуализации текста)FreeType (требует предварительной обработки, интерпретации, большого количества кода, дополнительных библиотек?)... и / или FTGLhttp://sourceforge.net/projects/ftgl/ (слухи: медленно? глючит? долго не обновлялся?)Font-Stashhttp://digestingduck.blogspot.co.uk/2009/08/font-stash.html (качественно, но очень медленно?)1.

В собственных ОС Apple / стандартных библиотеках я знаю несколько источников рендеринга текста. NB:Я использовал большинство из них в деталях в проектах 2D-рендеринга, мои утверждения о том, что они выводят различные рендеринг, основаны на непосредственном опыте

CoreGraphics с NSStringСамый простой из всех: рендеринг "в CGRect"Кажется, что это немного более быстрая версия подхода «фиксированной строки», который рекомендуют люди (даже если вы ожидаете, что он будет почти таким же)UILabel и UITextArea с простым текстомNB: они НЕ одинаковы! Незначительные различия в том, как они отображают текстNSAttributedString, предоставленный одному из вышеупомянутыхОпять же: рендеринг по-разному (различия, которые я знаю, довольно тонки и классифицируются как "ошибки", различные вопросы SO по этому поводу)CATextLayerГибрид между iOS-шрифтами и старым рендерингом Си. Использует "не полностью" бесплатный CFFont / UIFont с мостовым соединением, который выявляет еще некоторые различия / странность рендерингаCoreText... окончательное решение? Но зверь свой ...

Ответы на вопрос(3)

Ваш ответ на вопрос