imgui で日本語が「?」になる場合の対処

More than 1 year has passed since last update.

imgui で日本語を表示する際、以下のようにします。

ImGuiIO& io = ImGui::GetIO();

io.Fonts->AddFontFromFileTTF("フォントのパス", 10.0f, nullptr, io.Fonts->GetGlyphRangesJapanese());

これで日本語を表示していると、たまに「?」になってしまう文字があります。

例えば「瞳」などです。


「?」になる原因

これは、io.Fonts->GetGlyphRangesJapanese() で取得できるグリフの範囲が JIS X 0208 で表示できるものより狭いことにあるようです。


対処法

JIS X 0208 で表示できる文字すべてを登録すればよいので、以下を参考にグリフの範囲を作成します。

ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT

出来上がる配列は量が多いので、こちらに張り付けておきました。

https://gist.github.com/benikabocha/6b9ee35557b7058810dc2f4a06fe0304

これを次のように使います。

ImGuiIO& io = ImGui::GetIO();

io.Fonts->AddFontFromFileTTF("フォントのパス", 10.0f, nullptr, glyphRangesJapanese);