概要
Dear ImGui は、C++ 向けに設計された即時モード GUI ライブラリで、シンプルさと高い効率性を重視しています。ゲームエンジン、リアルタイム 3D アプリケーション、コンテンツ作成ツールに適しており、外部依存は不要で、状態の同期も最小限に抑えられています。
README プレビュー
Dear ImGui\n=====\n\n"Give someone state and they'll have a bug one day, but teach them how to represent state in two separate locations that have to be kept in sync and they'll have bugs for a lifetime." -ryg\n\n----\n\n[](https://github.com/ocornut/imgui/actions?workflow=build) [](https://github.com/ocornut/imgui/actions?workflow=static-analysis) [](https://github.com/ocornut/imgui_test_engine/actions?workflow=tests)\n\n(This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addition to maintenance and stability there are many desirable features yet to be added. If your company is using Dear ImGui, please consider reaching out.)\n\nBusinesses: support continued development and maintenance via invoiced sponsoring/support contracts:\n _E-mail: contact @ dearimgui dot com_\nIndividuals: support continued development and maintenance [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Funding) page.\n\n| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) - [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting Started & Integration](#getting-started--integration) |\n:----------------------------------------------------------: |\n| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-faq) - [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |\n| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |\n\n### The Pitch\n\nDear I
FAQ (5)
トラブル対応Dear ImGui のテーブルのカラムが、カラムを追加した後や、保存された .ini 設定で再起動した後に、順序が乱れてしまうのはなぜですか?
これは Dear ImGui 1.93.0 WIP の並べ替え不可なテーブルに影響します。カラムの照合時や設定からの読み込み時に、古い DisplayOrder の値が保持されてしまうため、新旧のカラムが正しくソートされません。特に、保存されたカラムデータを持たない素の .ini エントリの場合に顕著です。
コミット 68bd43b を含むバージョンにアップグレードするか、TableFixDisplayOrder() に次の修正を適用してください。
void ImGui::TableFixDisplayOrder(ImGuiTable* table)
{
if ((table->Flags & ImGuiTableFlags_Reorderable) == 0)
{
for (int n = 0; n < table->ColumnsCount; n++)
table->DisplayOrderToIndex[n] = table->Columns[n].DisplayOrder = (ImGuiTableColumnIdx)n;
return;
}
ImGuiContext& g = *GImGui;
// existing reorderable-table logic...
}
ImGuiTableFlags_Reorderable が設定されていないテーブルでは、カラムは常に宣言/インデックス順で表示されるようになります。カラム幅やその他のカラム単位のデータは、引き続き ID によって照合されます。なお、この変更により、Reorderable でないテーブルに対するプログラム上の並べ替えは保持されなくなることに注意してください。
トラブル対応なぜ IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION では Dear ImGui の stb_truetype が無効にならないのですか?
IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION は stb_truetype.h のリンク可能な実装内容のみを無効にするものであり、ImGui の stb_truetype フォントバックエンドを無効にするものではありません。コミット 4989b4c を含むリビジョンへ Dear ImGui を更新し、以下を imconfig.h またはコンパイラの定義に追加してください:
#define IMGUI_DISABLE_STB_TRUETYPE 1
IMGUI_ENABLE_STB_TRUETYPE は定義しないでください。IMGUI_ENABLE_FREETYPE を定義しても stb_truetype がデフォルトで有効になるのを防ぐことはできますが、カスタムフォントローダーを使用している場合は不要です。
古いバージョンでは、imgui_internal.h のデフォルト選択ブロックに以下のパッチを適用してください:
#if !defined(IMGUI_ENABLE_FREETYPE) && !defined(IMGUI_ENABLE_STB_TRUETYPE) && !defined(IMGUI_DISABLE_STB_TRUETYPE)
#define IMGUI_ENABLE_STB_TRUETYPE
#endif
その後、IMGUI_DISABLE_STB_TRUETYPE を定義してリビルドしてください。
トラブル対応Dear ImGui の AddRect のアウトラインが AddRectFilled より 1 ピクセル短くなる問題を修正する方法
同じ p_min/p_max で塗りつぶし矩形とアウトラインを描画する場合、ストロークされた下端が塗りつぶされた下端よりも1ピクセル上にラスタライズされることがあります。デフォルトの1ピクセルの境界線では、アウトラインの最大Y座標のみを1ピクセル拡張します:
draw_list->AddRectFilled(pmin, pmax, fill_color);
draw_list->AddRect(pmin, pmax + ImVec2(0.0f, 1.0f), border_color);
AddRectFilled の pmax は変更しないでください。これにより、表示される下側の境界線が塗りつぶし矩形と揃います。AddCircle/AddCircleFilled は同じ半径ベースのジオメトリを使用するため、影響を受けません。
ハウツーDear ImGuiでMenuItemにアイコンを追加するにはどうすればよいですか?
推奨されるアプローチは、アイコンフォント(例:FontAwesome)をフォントアトラスにマージすることです。アイコンフォントを読み込む際に ImFontConfig::MergeMode = true を設定し、その後、アイコングリフをメニューラベルテキストに直接埋め込みます(例:ImGui::MenuItem(ICON_FA_SAVE " Save"))。詳細な手順については misc/fonts/README.txt を参照してください。あるいは、内部の MenuItemEx() 関数はアイコンパラメータを別途受け付けます。画像ベースのアイコンの場合は、SameLine() の後に Image((void*)texture_id, ImVec2(16,16)) を続けることで、アイテムの横にテクスチャを手動で描画できますが、これにはウィジェットやカスタムレイアウトコードの変更が必要であり、アイコンフォント方式よりも柔軟性に欠けます。
トラブル対応Dear ImGui 1.93.0 で、平行な AddLine() 呼び出しを使ってポリゴンを塗りつぶすと、色が薄く見えたり色あせて見えたりするのはなぜですか?
ImGui 1.93.0では、AddLine()はデフォルトでアンチエイリアス付きのストロークを使用します。隣接する平行線を描画して領域をスキャン充填する場合(奇偶ラインスキャン充填)、半透明のAAフリンジが重なり合ってブレンドされ、充填が色褪せて見えてしまいます。修正方法:これらのストロークでAAフリンジを無効にするために、ImDrawFlags_StrokeLegacyを渡してください:
draw->AddLine(as, bs, color, 1.0f, ImDrawFlags_StrokeLegacy);これにより、1.93以前のソリッドストロークの動作と期待される充填色が復元されます。なお、これはバグではなく使用上の制限です。一般的なポリゴンや凹ポリゴンの場合は、穴が不要であればImGuiの凸充填APIの使用を検討してください。