Text- / Schriftwiedergabe in OpenGLES 2 (iOS - CoreText?) - Optionen und Best Practice?

Es gibt viele Fragen zum Rendern von OpenGL-Schriftarten, viele davon werden von Texturatlanten (schnell, aber falsch) oder Zeichenfolgentexturen (nur fester Text) beantwortet.

Diese Ansätze sind jedoch schlecht und scheinen Jahre veraltet zu sein (was ist mit der Verwendung von Shadern, um dies besser / schneller zu machen?). Für OpenGL 4.1 gibt es diese ausgezeichnete Frage, die sich mit der Frage beschäftigt, was Sie verwenden solltenheute? ":

Was ist Stand der Technik beim Rendern von Texten in OpenGL ab Version 4.1?

So,Was sollten wir heute auf iOS GL ES 2 verwenden?

Ich bin enttäuscht, dass es anscheinend keine Open-Source- (oder sogar kommerzielle) Lösung gibt. Ich weiß, dass viele Teams es aufbrauchen und Wochen damit verbringen, dieses Rad neu zu erfinden und nach und nach zu lernen, wie man Kerning und Space usw. (igitt) - aber es muss einen besseren Weg geben, als die gesamten "Schriften" neu zu schreiben. von Grund auf neu?

Soweit ich sehen kann, gibt es dazu zwei Teile:

Wie rendern wir Text mit einer Schriftart?Wie zeigen wir die Ausgabe an?

Für 1 (wie wird gerendert) bietet Apple VIELE Möglichkeiten, um die "richtige" gerenderte Ausgabe zu erhalten - aber die "einfachen" unterstützen OpenGL nicht (vielleicht einige der anderen) - zB gibt es eine einfache Möglichkeit, CoreText-Ausgabe abzubilden zu OpenGL?).

Für 2 (wie wird angezeigt) haben wir Shader, wir haben VBOs, wir haben Glyph-Texturen, wir haben Lookup-Texturen und andere Techniken (z. B. das oben verlinkte OpenGL 4.1-Zeug?)

Hier sind die beiden bekannten OpenGL-Ansätze:

Texturatlas (alle Glyphen einmal rendern, dann 1 x texturiertes Quad pro Zeichen aus der gemeinsamen Textur rendern)Dies ist falsch, es sei denn, Sie verwenden eine "Bitmap-Schriftart" aus den 1980er Jahren (und selbst dann: Texturatlas erfordert mehr Arbeit als es scheint, wenn Sie es für nicht-triviale Schriftarten benötigen).(Schriften sind keine "Ansammlung von Glyphen". Es gibt eine Menge an Positionierung, Layout, Umbruch, Abstand, Kerning, Styling, Färbung, Gewichtung usw.)Feste Zeichenfolge (verwende eine Apple-Klasse, um korrekt zu rendern, mache einen Screenshot der Hintergrundbilddaten und lade sie als Textur hoch)In menschlicher Hinsicht ist dies schnell. Beim Frame-Rendering ist dies sehr, sehr langsam. Wenn Sie dies mit viel wechselndem Text tun, geht Ihre Framerate durch den BodenTechnisch gesehen ist es meistens korrekt (nicht ganz: Sie verlieren auf diese Weise einige Informationen), aber äußerst ineffizient

Ich habe auch gute und schlechte Dinge gesehen, aber gehört:

Imagination / PowerVR "Print3D" (Link unterbrochen) (von den Leuten, die die GPU herstellen! Aber ihre Site hat die Textrendering-Seite verschoben / entfernt)FreeType (Vorverarbeitung, Interpretation, viel Code, zusätzliche Bibliotheken erforderlich?)... und / oder FTGLhttp://sourceforge.net/projects/ftgl/ (Gerüchte: Langsam? Buggy? Seit langer Zeit nicht mehr aktualisiert?)Font-Stashhttp://digestingduck.blogspot.co.uk/2009/08/font-stash.html (hohe Qualität, aber sehr langsam?)1.

In Apples eigenen Betriebssystem- / Standardbibliotheken sind mir mehrere Quellen für die Wiedergabe von Text bekannt. NB:Die meisten davon habe ich im Detail in 2D-Rendering-Projekten verwendet. Meine Aussagen darüber, dass sie unterschiedliche Renderings ausgeben, basieren auf direkten Erfahrungen

CoreGraphics mit NSStringAm einfachsten: "In ein CGRect rendern"Scheint eine etwas schnellere Version des von den Leuten empfohlenen "Fixed-String" -Ansatzes zu sein (auch wenn Sie erwarten würden, dass er in etwa gleich ist)UILabel und UITextArea mit KlartextNB: Sie sind nicht gleich! Geringe Unterschiede in der Darstellung des Smae-TextsNSAttributedString, auf einen der oben genannten Werte gerendertNochmal: Rendert anders (die mir bekannten Unterschiede sind ziemlich subtil und werden als "Bugs" klassifiziert, verschiedene SO-Fragen dazu)CATextLayerEin Hybrid zwischen iOS-Schriftarten und altem C-Rendering. Verwendet das "nicht vollständig" gebührenfrei überbrückte CFFont / UIFont, was einige weitere Renderingunterschiede / -fremdheiten aufzeigtCoreText... die ultimative Lösung? Aber ein Tier für sich ...