Representación de texto / fuente en OpenGLES 2 (iOS - ¿CoreText?): ¿Opciones y mejores prácticas?

Hay muchas preguntas sobre la representación de fuentes OpenGL, muchas de ellas se satisfacen con atlas de texturas (rápido, pero incorrecto) o texturas de cuerdas (solo texto fijo).

Sin embargo, esos enfoques son deficientes y parecen estar desactualizados por años (¿qué hay de usar los shaders para hacerlo mejor / más rápido?). Para OpenGL 4.1, hay una excelente pregunta sobre "¿qué debería usar?hoy? ":

¿Qué es el estado del arte para la representación de texto en OpenGL a partir de la versión 4.1?

Asi que,¿Qué deberíamos estar usando en iOS GL ES 2 hoy?

Estoy decepcionado de que no parece haber una fuente abierta (ni siquiera una solución comercial). Sé que muchos equipos lo absorben y pasan semanas de tiempo de desarrollo reinventando esta rueda, aprendiendo poco a poco a kern y al espacio, etc. (ugh), pero debe haber una forma mejor que volver a escribir la totalidad de las "fuentes". desde cero?

Por lo que puedo ver, hay dos partes para esto:

¿Cómo renderizamos texto usando una fuente?¿Cómo mostramos la salida?

Para 1 (cómo renderizar), Apple proporciona MUCHAS maneras de obtener la salida representada "correcta", pero las "fáciles" no son compatibles con OpenGL (tal vez algunas de las otras lo hacen, por ejemplo, ¿existe una forma sencilla de asignar la salida CoreText? a OpenGL?).

Para 2 (cómo mostrar), tenemos sombreadores, tenemos VBO, tenemos texturas con glifos, tenemos texturas de búsqueda y otras técnicas (por ejemplo, las cosas de OpenGL 4.1 vinculadas anteriormente).

Estos son los dos enfoques comunes de OpenGL que conozco:

Atlas de texturas (renderiza todos los glifos una vez, luego renderiza 1 x cuádruple texturado por personaje, de la textura compartida)Esto es incorrecto, a menos que esté usando una "fuente de mapa de bits" de la era de la década de 1980 (e incluso entonces: el atlas de textura requiere más trabajo del que puede parecer, si lo necesita para fuentes no triviales)(Las fuentes no son "una colección de glifos" hay una gran cantidad de posicionamiento, diseño, ajuste, espaciado, kerning, diseño, coloreado, ponderación, etc. Los atlas de textura fallan)Cadena fija (use cualquier clase de Apple para renderizar correctamente, luego haga una captura de pantalla de los datos de imagen de respaldo y cárguelos como una textura)En términos humanos, esto es rápido. En la renderización de cuadros, esto es muy, muy lento. Si haces esto con un montón de texto cambiante, tu velocidad de fotogramas pasa por el pisoTécnicamente, es en su mayoría correcto (no del todo: se pierde información de esta manera) pero es enormemente ineficiente

También he visto, pero he oído cosas buenas y malas sobre:

Imagination / PowerVR "Print3D" (enlace roto) (de los tipos que fabrican la GPU. Pero su sitio ha movido / eliminado la página de representación de texto)FreeType (requiere preprocesamiento, interpretación, muchos códigos, bibliotecas adicionales)... y / o FTGLhttp://sourceforge.net/projects/ftgl/ (Rumores: ¿lento? ¿buggy? ¿no actualizado en mucho tiempo?)Fuente-alijohttp://digestingduck.blogspot.co.uk/2009/08/font-stash.html (alta calidad, pero muy lento?)1.

Dentro de las propias bibliotecas de sistemas operativos / estándares de Apple, conozco varias fuentes de procesamiento de texto. NÓTESE BIEN:He usado la mayoría de estos en detalle en proyectos de renderización en 2D, mis declaraciones acerca de que produzcan diferentes renderizaciones se basan en la experiencia directa

CoreGraphics con NSStringLo más simple de todo: render "en un CGRect"Parece ser una versión un poco más rápida del enfoque de "cadena fija" que recomiendan las personas (aunque usted esperaría que fuera muy similar)UILabel y UITextArea con texto plano.NB: ¡NO son lo mismo! Pequeñas diferencias en la forma en que renderizan el texto smae.NSAttributedString, renderizado a uno de los anterioresUna vez más: se interpreta de manera diferente (las diferencias que conozco son bastante sutiles y están clasificadas como "errores", varias preguntas de SO sobre esto)CATextLayerUn híbrido entre las fuentes de iOS y el viejo C rendering. Utiliza el CFFont / UIFont con puente gratuito "no totalmente", que revela algunas diferencias / extrañeza de renderización másCoreText... la solución definitiva? Pero una bestia propia ...