Help us understand the problem. What is going on with this article?

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

More than 3 years have 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);
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away