2009-07-27 3 views
3

Ich mag 2 eine Hardware-beschleunigten Text Renderer Freie Art schreiben, die Schriftarten zu laden, findet die richtigen Glyphen und ihre Größen usw.Hardware beschleunigte Unicode-Text-Rendering

Mein Plan, dies zu tun ist, eine große Textur haben enthält Glyphen (für eine gegebene Schriftart, Größe usw.) im Videospeicher und eine Tabelle für jede Textur, die Informationen über den Inhalt der Textur im Systemspeicher definiert.

Ich kann dann die Tabelle verwenden, um einen Vertexpuffer zu erstellen, um den Text zu rendern.

Das Problem, mit dem ich konfrontiert bin, ist die Konstruktion der Textur, es ist nicht praktisch, eine Textur für jede Glyphe in Unicode zu erstellen, da einfach zu viele. Für Ascii in der Vergangenheit habe ich einfach die Textur in einem Bildeditor erstellt und dann die Tabelle nach Bedarf selbst ausgefüllt, aber dafür brauche ich ein dynamisches System, das die erforderlichen Glyphen enthält, aber auch effizient zwischenspeichert Vermeiden Sie wiederholte Uploads der gleichen Glyph zu Vram ... (eine Art am seltensten verwendeten System ich denke)

Ein anderes Problem ist nicht alle Glyphen sind die gleiche Größe, ich könnte die Textur in ein Raster groß genug für die größten Glyphen (die ich auf irgendeine Weise genau ausarbeiten muss), die das Anpassen der Glyphen an die Textur erleichtern und sie durch neue Glyphen ersetzen (basierend auf den am wenigsten verwendeten oder so), die jedoch viel verschwendeten Raum hinterlassen, aber Ich bin nicht sicher, wie man sie effizienter verpackt, ohne Probleme mit der Fragmentierung zu haben, da Glyphen ein- und ausgetauscht werden ...

Auch ich nehme an, dass das Aktualisieren der Textur die Grafikhardware zum Stillstand bringen könnte, wenn die Textur noch für einen früheren Text verwendet wird, ist dies eine korrekte Annahme und wie kann ich es vermeiden, wenn es der Fall ist?

Antwort

3

Text-Rendering ist viel komplexes Thema dann „Einfügen“ einige Glyphen ... Nicht nur viel komplexer, es ist sehr komplex: Kerning, Ligatur, Abstand, bidirektionalen Text, Vokale, und vieles mehr ...

Warum würden Sie nicht einfach einen Text erstellen mit normalen Bibliotheken für Text-Rendering wie Pango, erstellen Sie Bitmap und zeigen Sie es als Bitmap auf Ihrem 3D-Objekt (wenn ich verstehe, was Sie brauchen).

EDIT: Einfache HTML wie Markup kann auch mit Pango gemacht werden: http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html

+2

Weil ich keine in der Lage gefunden haben, formatierten Text (dh wie einige einfache HTML-Art Zeug) zu rendern und niemand wies mich auf etwas, das ich integrieren könnte eine d3d app in meiner anderen Frage. Obwohl Pango so aussieht, als könnte es diese Dinge tun, füge es als Antwort auf meine vorherige Frage hinzu (http://stackoverflow.com/questions/1150289/rendering-formatted-text-in-a-direct3d-application) und wenn nach ive sah es später seine Fähigkeit, die Dinge zu tun, die ich brauche, akzeptiere es. –

+0

Kommentar hinzugefügt mit like zu Rich Text-Funktionen – Artyom

1

Cairo Hardware unterstützt zu many surface types Rendering beschleunigt

Es gibt eine Bibliothek FontForge genannt, die Kairo nutzt für die Darstellung, aber Ich habe es nicht selbst ausprobiert. Sie sollten es überprüfen und lassen Sie mich wissen, wie es geht :-)