imgui - 親愛なるImGui:最小限の依存関係を持つC++用の膨満感のないグラフィカルユーザーインターフェイス

(Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies)

Created at: 2014-07-21 22:29:47
Language: C++
License: MIT

親愛なるImGui

「誰かに状態を与えると、いつかバグが発生しますが、同期を維持する必要がある2つの別々の場所で状態を表す方法を教えてください。そうすれば、一生バグが発生します。」 -ryg

ビルドステータス 静的解析ステータス

(このライブラリは無料でパーミッシブライセンスの下で利用できますが、継続的な改善を維持するには財政的支援が必要です。メンテナンスと安定性に加えて、まだ追加されていない多くの望ましい機能があります。あなたの会社がDear ImGuiを使用している場合は、連絡することを検討してください。 。)

ビジネス:請求された技術サポート、メンテナンス、スポンサー契約を介して継続的な開発とメンテナンスをサポートします:
  電子メール:@ dearimguidotcomに連絡してください

個人:ここで継続的な開発と保守をサポートします。スポンサーページもご覧ください。

提案-使用法-仕組み-リリースと変更ログ-デモ-統合
今後の変更-ギャラリー-サポート、FAQ-支援方法- スポンサー-クレジット-ライセンス
Wiki-言語とフレームワークのバックエンド/バインディング-DearImGuiを使用したソフトウェア-ユーザーの引用

ピッチ

親愛なるImGuiは、C++用の肥大化のないグラフィカルユーザーインターフェイスライブラリです。3Dパイプライン対応アプリケーションでいつでもレンダリングできる最適化された頂点バッファーを出力します。高速で、移植性があり、レンダラーに依存せず、自己完結型です(外部依存関係はありません)。

親愛なるImGuiは、高速な反復を可能にし、プログラマーコンテンツ作成ツールと視覚化/デバッグツールを作成できるように設計されています(平均的なエ​​ンドユーザーのUIとは対照的です)。これは、この目標に向けたシンプルさと生産性を優先し、より高レベルのライブラリに通常見られる特定の機能を欠いています。

親愛なるImGuiは、ゲームエンジン(ツーリング用)、リアルタイム3Dアプリケーション、フルスクリーンアプリケーション、組み込みアプリケーション、またはオペレーティングシステムの機能が標準ではないコンソールプラットフォーム上のアプリケーションへの統合に特に適しています。

  • コード駆動型およびデータ駆動型のツールを簡単に作成できます。
  • アドホックな短命のツールと長命でより手の込んだツールを作成するために使いやすい。
  • ハッキングと改善が簡単です。
  • セットアップとメンテナンスを最小限に抑えます。
  • ユーザー側の状態ストレージを最小限に抑えます。
  • 状態の同期を最小限に抑えます。
  • ポータブルで、依存関係を最小限に抑え、ターゲット(コンソール、電話など)で実行します。
  • 効率的なランタイムとメモリ消費。
  • バトルテスト済みで、ゲーム業界の多くの主要な俳優によって使用されています。

使用法

親愛なるImGuiのコアは、アプリケーション/エンジンで簡単にコンパイルできる、プラットフォームに依存しないいくつかのファイル内に自己完結しています。これらはすべて、リポジトリのルートフォルダ(imgui * .cpp、imgui * .h)にあるファイルです。

特定のビルドプロセスは必要ありません。.cppファイルを既存のプロジェクトに追加できます。

親愛なるImGuiをアプリに統合するには、バックエンドが必要になります。バックエンドは、マウス/キーボード/ゲームパッドの入力とさまざまな設定をDear ImGuiに渡し、結果の頂点のレンダリングを担当します。さまざまなグラフィックAPIおよびレンダリングプラットフォームのバックエンドがbackends /フォルダーに提供され、 examples/フォルダーにサンプルアプリケーションがあります。詳細については、このドキュメントの「統合」セクションを参照してください。独自のバックエンドを作成することもできます。テクスチャ三角形をレンダリングできる場所ならどこでも、DearImGuiをレンダリングできます。

親愛なるImGuiがアプリケーションでセットアップされた後、プログラムループのどこからでも使用できます。

コード:

ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);

結果:
サンプルコード出力(暗い) サンプルコード出力(ライト)

コード:

// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();

結果:
サンプルコード出力

親愛なるImGuiを使用すると、非常に短命なツールだけでなく、手の込んだツールも作成できます。短命の極端な側面:最新のコンパイラのEdit&Continue(ホットコードリロード)機能を使用すると、アプリケーションの実行中に変数を微調整するためにいくつかのウィジェットを追加し、1分後にコードを削除できます!親愛なるImGuiは、値を微調整するためだけのものではありません。これを使用して、テキストコマンドを発行するだけで実行中のアルゴリズムをトレースできます。独自のリフレクションデータと一緒に使用して、データセットをライブで閲覧できます。これを使用して、エンジンのサブシステムの内部を公開したり、ロガー、検査ツール、プロファイラー、デバッガー、ゲーム全体の作成エディター/フレームワークなどを作成したりできます。

使い方

IMGUIパラダイムの背後にあるコア原則を理解したい場合は、Wikiの「IMGUIパラダイムについて」セクションを確認してください。IMGUIは、ユーザーの観点から、余分な状態の重複、状態の同期、および状態の保持を最小限に抑えようとします。従来の保持モードインターフェイスよりもエラーが発生しにくく(コードとバグが少ない)、動的なユーザーインターフェイスを作成するのに役立ちます。

親愛なるImGuiは、アプリケーションで簡単にレンダリングできる頂点バッファーとコマンドリストを出力します。描画呼び出しとそれらをレンダリングするために必要な状態変更の数はかなり少ないです。親愛なるImGuiはグラフィックスの状態を直接認識またはタッチしないため、コード内のどこからでもその関数を呼び出すことができます(たとえば、実行中のアルゴリズムの途中、または独自のレンダリングプロセスの途中)。親愛なるImGuiを既存のコードベースと統合する方法については、examples/フォルダーのサンプルアプリケーションを参照してください。

よくある誤解は、イミディエイトモードのGUIをイミディエイトモードのレンダリングと間違えることです。これは通常、ドライバー/ GPUを非効率的な描画呼び出しと、GUI関数の呼び出し時の状態変化で叩くことを意味します。これは、DearImGuiが行うことではありません。親愛なるImGuiは、頂点バッファと描画呼び出しバッチの小さなリストを出力します。GPUに直接触れることはありません。ドローコールバッチは適切に最適化されており、後でアプリ内またはリモートでレンダリングできます。

リリースと変更ログ

リリースページを参照してください。変更ログを読むことは、Dear ImGuiが提供するものを最新に保つための良い方法であり、これまで無視してきたいくつかの機能のアイデアを提供するかもしれません。

デモ

関数を呼び出すと、

ImGui::ShowDemoWindow()
さまざまな機能と例を示すデモウィンドウが作成されます。コードは、でいつでも参照できます
imgui_demo.cpp

スクリーンショットのデモ

ソースから例を作成できるはずです(Windows / Mac / Linuxでテスト済み)。そうでない場合は、お知らせください。親愛なるImGuiの機能を簡単に確認したい場合は、デモアプリのWindowsバイナリをここからダウンロードできます。

デモアプリケーションはDPIに対応していないため、4K画面がぼやけることが予想されます。アプリケーションでのDPI認識のために、フォントをさまざまなスケールでロード/リロードし、スタイルをスケールすることができます

style.ScaleAllSizes()
FAQを参照)。

統合

ほとんどのプラットフォームで、C ++を使用する場合、変更なしでimgui_impl_xxxxバックエンドの組み合わせを使用できるはずです(例:

imgui_impl_win32.cpp
+
imgui_impl_dx11.cpp
)。エンジンが複数のプラットフォームをサポートしている場合は、ファイルを書き換えるのではなく、より多くのimgui_impl_xxxxファイルを使用することを検討してください。これにより作業が減り、DearImGuiをすぐに実行できます。必要に応じて、後でカスタムエンジン関数を使用してカスタムバックエンドを書き直すことを決定できます。

親愛なるImGuiをカスタムエンジンに統合するには、1)マウス/キーボード/ゲームパッド入力を配線します2)1つのテクスチャをGPU /レンダリングエンジンにアップロードします3)テクスチャをバインドしてテクスチャ三角形をレンダリングできるレンダリング機能を提供します。examples /フォルダーには、まさにそれを実行するアプリケーションが含まれています。これらの概念に慣れている経験豊富なプログラマーであれば、DearImGuiをカスタムエンジンに統合するのに2時間もかからないはずです。FAQ、コメント、およびいくつかの例/アプリケーションを読むのに時間を費やしてください!

公式に維持されているバックエンド/バインディング(リポジトリ内):

  • レンダラー:DirectX9、DirectX10、DirectX11、DirectX12、Metal、OpenGL / ES / ES2、SDL_Renderer、Vulkan、WebGPU。
  • プラットフォーム:GLFW、SDL2、Win32、Glut、OSX、Android。
  • フレームワーク:Allegro5、Emscripten。

サードパーティのバックエンド/バインディングのwikiページ:

  • 言語:C、C#および:Beef、ChaiScript、Crystal、D、Go、Haskell、Haxe / hxcpp、Java、JavaScript、Julia、Kotlin、Lobster、Lua、Odin、Pascal、PureBasic、Python、Ruby、Rust、Swift。 。
  • フレームワーク:AGS / Adventure Game Studio、Amethyst、Blender、bsf、Cinder、Cocos2d-x、Diligent Engine、Flexium、GML / Game Maker Studio2、GLEQ、Godot、GTK3 + OpenGL3、Irrlicht Engine、LÖVE+ LUA、Magnum、Monogame、 NanoRT、nCine、Nim Game Lib、Nintendo 3DS&Switch(homebrew)、Ogre、openFrameworks、OSG / OpenSceneGraph、Orx、Photoshop、px_render、Qt / QtDirect3D、SDL_Renderer、SFML、Sokol、Unity、Unreal Engine 4、vtk、VulkanHpp、 VulkanSceneGraph、Win32 GDI、WxWidgets。
  • Cバインディング(cimgui)は自動生成されることに注意してください。そのjson / lua出力を使用して、他の言語のバインディングを生成できます。

便利な拡張機能/ウィジェットのwikiページ:

  • テキストエディタ、ノードエディタ、タイムラインエディタ、プロット、ソフトウェアレンダラー、リモートネットワークアクセス、メモリエディタ、ギズモなど。

その他のリンクやアイデアについては、 Wikiも参照してください。

今後の変更

2022年の目標のいくつかは次のとおりです。

  • ドッキングに取り組む(パブリックドッキングブランチの#2109を参照)
  • マルチビューポート/複数のOSウィンドウで作業します。(フィードバックを探しているパブリックドッキングブランチの#1542を参照)
  • ゲームパッド/キーボードコントロールで作業します。(#787を参照)
  • ライブラリとエンドユーザーアプリの両方をテストするために、自動化とテストシステムに取り組みます。(#435を参照)
  • 例の見栄えを良くし、スタイルを改善し、フォントサポートを改善し、例をhi-DPIおよびマルチDPI対応にします。

ギャラリー

親愛なるImGuiを使用してユーザーが送信したプロジェクトのスクリーンショットについては、ギャラリースレッドをご覧ください。

サードパーティのウィジェットと拡張機能のリストについては、Useful Extensions /Widgetswikiページを確認してください。

カスタムエンジンehre(ドッキングブランチ) ええ

ワンダーボーイのカスタムエンジン:ドラゴンの罠(2017) スクリーンショットゲーム

カスタムエンジン(無題) スクリーンショットツール

トレーシープロファイラー トレーシープロファイラー

サポート、よくある質問(FAQ)

参照:よくある質問に回答するよくある質問(FAQ)

多くのリンク、参照、記事についてはWikiを参照してください。

イミディエイトモードGUIパラダイムについて読む/学ぶには、IMGUIパラダイムに関する記事を参照してください。

入門?コンパイル/リンク/実行に問題がある、またはフォントの読み込みに問題がある初めてのユーザーの場合は、GitHubディスカッションを使用してください。

その他の質問、バグレポート、リクエスト、フィードバックについては、GitHubの問題に投稿できます。NewIssueテンプレートを注意深く読んで記入してください。

有料のビジネス顧客にはプライベートサポートを利用できます(Eメール:@ dearimgui dot comに連絡してください)。

どのバージョンを入手すればよいですか?

リリースにタグを付けることもありますが、一般的に安全であり、マスター/最新に同期することをお勧めします。ライブラリはかなり安定しており、報告されるとリグレッションはすばやく修正される傾向があります。

Advanced users may want to use the

docking
branch with Multi-Viewport and Docking features. This branch is kept in sync with master regularly.

Who uses Dear ImGui?

See the Quotes, Sponsors, Software using dear imgui Wiki pages for an idea of who is using Dear ImGui. Please add your game/software if you can! Also see the Gallery Threads!

How to help

How can I help?

  • See GitHub Forum/issues and Github Discussions.
  • 開発を手伝ったり、プルリクエストを送信したりできます。PRを送信すると、メンテナにコードを確認して、そのメンテナンスを永久に引き継ぐように要求することにもなります。PRは、エンドユーザーの利益のために、またメンテナがそれを理解して受け入れるのを容易にするために作成する必要があります。
  • その他のアイデアについては、Wikiで必要なヘルプを参照してください。
  • あなたの会社にこのプロジェクトを財政的に支援してもらいます(電子メールで連絡してください)

親愛なるImGuiのさらなる開発に資金を提供するにはどうすればよいですか?

スポンサーページをご覧ください。

スポンサー

進行中の親愛なるImGuiの開発は、現在、2021年から2022年にかけて、ユーザーと民間スポンサーによって財政的に支援されています。

プラチナチョコレートスポンサー

ダブルチョコレートスポンサー

チョコレートスポンサー

塩キャラメルスポンサー

詳細については、現在および過去の親愛なるImGuiサポーターの詳細なリストを参照してください。2014年11月から2019年12月まで、進行中の開発は、Patreonのユーザーと個人の寄付によっても財政的に支援されてきました。

このプロジェクトの存続と繁栄を支援してくれた過去と現在のすべてのサポーターに感謝します!

親愛なるImGuiは、オープンソースプロジェクトに無料で提供されるソフトウェアとサービスを使用しています。

クレジット

Omar Cornutと、GitHubへのすべての直接的または間接的な貢献者によって開発されました。このライブラリの初期バージョンは、Media Moleculeのサポートを受けて開発され、ゲームTearaway(PS Vita)の内部で最初に使用されました。

定期的な寄稿者(2022年):Omar Cornut @ocornut、Rokas Kupstys @rokups(自動化システム、回帰テスト、その他の機能に関する作業の大部分は現在公開されていません)。

スポンサー、サポート契約、およびその他のB2Bトランザクションは、Lizardcubeによってホストおよび処理されます。

オマール:「 Q-Gamesで最初にIMGUIパラダイムを発見しました。そこでは、アートマンビンストックがコードベースに独自の単純な実装を落とし、それを改善して考えることにかなりの時間を費やしました。アートマンは、作業することでこの概念に直接触れたことがわかりました。 Media Moleculeに移動したとき、最初に使用したライブラリの欠陥と制限を克服するために新しいライブラリを書き直しました。それがこのライブラリになり、それ以来、不当な時間を繰り返して改善してきました。 。」

Tristan Grimmer(MITライセンス)によるProggyClean.ttfフォントを埋め込みます。

Sean Barrett(パブリックドメイン)によるstb_textedit.h、stb_truetype.h、stb_rect_pack.hを埋め込みます。

初期バージョンのインスピレーション、フィードバック、テスト:Casey Muratori、Atman Binstock、Mikko Mononen、Emmanuel Briney、Stefan Kamoda、Anton Mikhailov、MattWillis。また、GitHubにフィードバック、質問、パッチを投稿してくださった皆さんにも感謝します。

ライセンス

親愛なるImGuiはMITライセンスの下でライセンスされています。詳細については、 LICENSE.txtを参照してください。