2016-06-02 5 views
5

Ich wechsle von SFML zu SDL2 in meinem Programm, und ich begann mit SDL2_ttf, um Text im UTF-8-Format zu rendern. Ich benutze die Funktion TTF_RenderUTF8_Solid. Ich habe festgestellt, dass einige Zeichen nicht mehr korrekt dargestellt werden. Ein Beispiel ist '' (U + 1F70D). Ich habe überprüft, dass die Schriftart diese Zeichen enthält.Kann SDL2_ttf keine Zeichen darstellen, die länger als zwei Byte sind?

Ich habe versucht, mit dem Beispielprogramm glfont, das in SDL2_ttf enthalten ist, und es gibt auch diese Zeichen nicht.

ging ich zum SDL2_ttf Quellcode und sah in die Funktion TTF_RenderUTF8_Solid in SDL_ttf.c und bemerkte diese Zeile:

Uint16 c = UTF8_getch(&text, &textlen); 

, während UTF8_getch Uint32 zurückgibt. Also werden die höheren zwei Bytes verworfen (und sie werden nirgendwo sonst im Code gelesen), was erklärt, warum '' nicht gerendert wird (es passt nicht in Uint16). Ich habe den Typ von 'c' in Uint32 geändert und es wird korrekt 0x1F70D zugewiesen. Es wird jedoch immer noch nicht wiedergegeben. Es gibt höchstwahrscheinlich andere Orte, an denen Zeichen länger als zwei Bytes nicht berücksichtigt wurden.

Meine Frage ist, ob es nur mein Missverständnis oder ein bekanntes Problem mit SDL2_ttf ist, und wenn ja, ob es eine bekannte Lösung dafür gibt.

+0

SDL_ttf kam mit folgenden Einschränkung: „Das ist eine Sample-Bibliothek, die Sie Truetype-Schriftarten in Ihren SDL-Anwendungen verwenden kann Es kommt mit einem Beispielprogramm' showfont', die für einen bestimmte Zeichenfolge eines Beispiels zeigt. TrueType-Schriftdatei. " Ich habe keine ähnliche Einschränkung für SDL2_ttf gefunden, aber meine Erfahrung mit SDL_ttf war, dass es Speicherbeschädigungen/Abstürze gab, die auftreten, wenn Sie exotische Unicode-Zeichen verwenden. Sie können ihren Bug Tracker überprüfen. Ich denke, es ist nur für Spielzeugprogramme gedacht - meiner bescheidenen Erfahrung nach ist es besser, Freetype direkt zu verwenden und SDL_ttf zu vergessen. –

+0

Danke. Da ich neu bei SDL bin, dachte ich zunächst, dass alle SDL_ * -Bibliotheken offiziell dazu gehören und von guter Qualität sind. Ich benutze auch SDL2_mixer, ich hoffe, dass ich mehr Glück damit habe. Für die Textwiedergabe schaue ich mir andere Bibliotheken an. –

+0

Genau das habe ich mich in letzter Zeit gefragt. Versuchen Sie dasselbe zu tun: render Unicode mit SDL_ttf, aber es funktioniert nur für Zeichen, die länger als 2 Bytes sind. Absolut korrekte Beobachtung. So oft enttäuscht SDL (und verwandte Bibliotheken wie SDL_ttf) mich. (Zum Beispiel funktioniert Alpha-Blending nicht, sobald Sie die Größe des Fensters ändern.) Fehler sind überall. – huzzm

Antwort

Verwandte Themen