benim programda SDL2 için SFML'de geçiş ediyorum ve UTF-8 biçiminde metin oluşturmak için SDL2_ttf kullanmaya başladı. TTF_RenderUTF8_Solid işlevini kullanıyorum. Bazı karakterlerin artık düzgün şekilde oluşturulmadığını fark ettim. Bir örnek '' (U + 1F70D). Yazı tipinin bu karakterleri içerdiğini doğruladım.SDL2_ttf, iki bayttan uzun karakterler oluşturmayı başaramıyor mu?
SDL2_ttf'de bulunan glfont örnek programını kullanmayı denedim ve bu karakterleri de oluşturmuyor. UTF8_getch uint32 döndürür iken,
Uint16 c = UTF8_getch(&text, &textlen);
:
Ben SDL2_ttf kaynak koduna gitti ve SDL_ttf.c fonksiyonu TTF_RenderUTF8_Solid içine baktı ve bu çizgiyi fark ettim. işlenmez neden '' açıklıyor Yani yüksek iki bayt atılır (ve onlar kodunda başka bir yerde okumak değildir) (o uint16 uymuyor). Uint32 için 'c' türünü değiştirdim ve doğru 0x1F70D atanır. Yine de ortaya çıkmaz. İki bayttan uzun karakterlerin dikkate alınmadığı yerler de muhtemelen daha fazladır.Sorum şu ki, bu sadece benim yanlış anlama veya SDL2_ttf ile bilinen bir sorun olup olmadığını ve eğer evet, bunun için bilinen herhangi bir düzeltme varsa.
SDL_ttf aşağıdaki uyarı geldi: "Bu, SDL uygulamalarda TrueType yazı tiplerini kullanmak için izin veren bir örnek kütüphanesi Verilen bir örnek dizesini görüntüler showfont' örnek programı' ile birlikte gelir. TrueType yazı tipi dosyası. " Ben SDL2_ttf için benzer bir ihtar bulamadık ama SDL_ttf ile benim deneyim bellek bozulmaları/egzotik unicode karakterleri kullanmaya başladığınızda görünen çöker bulunduğunu ifade etti. Hata izleyicilerini kontrol edebilirsiniz. Bence sadece oyuncak programlarını kastettim - mütevazı deneyimlerimde, Freetype'ı doğrudan kullanmak ve SDL_ttf'yi unutmak daha iyi. –
Teşekkürler. SDL için yeni olduğum için, başlangıçta tüm SDL_ * kitaplıklarının resmi olarak bunun bir parçası ve kaliteli olduğunu düşündüm. Ayrıca SDL2_mixer kullanıyorum, umarım daha fazla şansım olur. Metin oluşturma için diğer kütüphanelere bakacağım. –
Son zamanlarda merak ettiğim şey bu. Aynı şeyi yapmaya çalışıyorum: SDL_ttf ile unicode oluştur, ancak 2 bayttan uzun karakterler için çalışmayacak. Tamamen doğru gözlem. Çoğu zaman SDL (ve SDL_ttf gibi ilgili kütüphaneler) beni hayal kırıklığına uğratıyor. (Örneğin, pencereyi yeniden boyutlandırdığınızda alfa harmanlama çalışmaz.) Hatalar her yerdedir. – huzzm