2016-06-02 14 views
5

Przełączam z SFML na SDL2 w moim programie i zacząłem używać SDL2_ttf do renderowania tekstu w formacie UTF-8. Używam funkcji TTF_RenderUTF8_Solid. Zauważyłem, że niektóre postacie nie są już poprawnie renderowane. Jednym z przykładów jest "(U + 1F70D). Zweryfikowałem, że czcionka zawiera te znaki.Czy SDL2_ttf nie jest w stanie renderować znaków dłuższych niż dwa bajty?

Próbowałem użyć programu przykładowego glfont, który jest zawarty w SDL2_ttf, a także nie renderuje tych znaków.

poszedłem do kodu źródłowego SDL2_ttf i spojrzał w TTF_RenderUTF8_Solid funkcji w SDL_ttf.c, i zauważyłem, że ten wiersz:

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

, natomiast UTF8_getch zwraca UInt32. Zatem wyższe dwa bajty są odrzucane (i nie są odczytywane nigdzie indziej w kodzie), co tłumaczy, dlaczego "nie jest renderowane (nie pasuje do Uint16). Zmieniłem typ "c" na Uint32 i przypisano mu poprawnie 0x1F70D. Nadal jednak nie renderuje. Są najprawdopodobniej inne miejsca, w których znaki dłuższe niż dwa bajty nie były brane pod uwagę.

Moje pytanie brzmi: czy to tylko moje nieporozumienie, czy znany problem z SDL2_ttf, a jeśli tak, to czy jest jakaś znana z tego naprawa.

+0

SDL_ttf przyszedł z następującym zastrzeżeniem: „Jest to biblioteka próbek, które pozwala na wykorzystanie czcionek w swoich aplikacjach SDL Pochodzi z przykładowym programem' showfont' który wyświetla przykładowy ciąg na dany. Plik czcionki TrueType. " Nie znalazłem podobnego zastrzeżenia dla SDL2_ttf, ale moje doświadczenie z SDL_ttf było takie, że pojawiły się zepsucia/awarie pamięci, które pojawiają się, gdy zaczynasz używać egzotycznych znaków Unicode. Możesz sprawdzić swój program do śledzenia błędów. Myślę, że jest to po prostu dla programów zabawkowych - w moim skromnym doświadczeniu lepiej jest po prostu użyć Freetype bezpośrednio i zapomnieć o SDL_ttf. –

+0

Dzięki. Ponieważ jestem nowy w SDL, początkowo myślałem, że wszystkie biblioteki SDL_ * są oficjalnie ich częścią i mają dobrą jakość. Używam również SDL2_mixer, mam nadzieję, że mam więcej szczęścia z tym. Do renderowania tekstu przyjrzę się innym bibliotekom. –

+0

Właśnie tego ostatnio się zastanawiałem. Próba zrobienia tego samego: renderuj unicode za pomocą SDL_ttf, ale po prostu nie będzie działać dla znaków dłuższych niż 2 bajty. Zupełnie poprawna obserwacja. Bardzo często SDL (i powiązane biblioteki takie jak SDL_ttf) rozczarowują mnie. (Na przykład mieszanie alfa nie działa po zmianie rozmiaru okna.) Błędy są wszędzie. – huzzm

Odpowiedz

Powiązane problemy