剛剛創建了一個函數來緩存我在SDL2中構建的小遊戲引擎中的任何加載的字體,以下函數完美地工作,並且渲染文本比每次創建新的SDL_Surface快12倍我需要文字。然而,正如你所看到的,它只緩存ANSI字符,這是好的英語,但如果我曾經想翻譯我的遊戲(德語變音,或西里爾字形不可在ANSI)SDL2中的UTF文本
void cacheFonts(){
for(unsigned int i = 0; i < GlobalFontAssets.size; i++){
SDL_Colour color_font = {255, 255, 255, 255};
std::vector<SDL_Texture*> tempVector;
for(int j = 32; j < 128; j++){
char temp[2];
temp[0] = j;
temp[1] = 0;
SDL_Surface* glyph = TTF_RenderUTF8_Blended(GlobalFontAssets.fonts[i], temp, color_font);
SDL_Texture* texture =
SDL_CreateTextureFromSurface(renderer, glyph);
tempVector.push_back(texture);
SDL_FreeSurface(glyph);
}
GlobalFontAssets.cache.push_back(tempVector);
}
printf("Global Fonts Cached!\n");
}
我使用wchar_t
,從0到256^2循環都試過了,但我不能得到任何字符使用printf
,wprintf
,cout
和wcout
打印偶數,但是,如果我做的:
std::string str = "Привет, öäü"
printf("%s\n", str.c_str());
然後打印字符串在終端上就好了。我應該提到,我使用的是Ubuntu 16.04,因此僅Windows的解決方案對我無效,理想情況下我希望以便攜方式進行操作。對於那些不熟悉SDL的人來說,我所需要的只是一種獲取C字符串中每個UTF8字符的方法。我希望這是可能的。
嗯,C-ish C++代碼。建議只有1個語言標記來改善帖子。 – chux
與256個擴展ASCII字符相比,有*百萬*的Unicode字形。你不能盲目地使用相同的方法。除此之外,在Unicode中有「組合字符」,它們不能與修飾字符分開渲染,你必須處理字形單位而不是字符單位。 –
@BenVoigt你的意思是Latin-1而不是ASCII? – Deduplicator