シムギ
これは、優れた C++ イミディエイト モード GUI Dear ImGui 用にプログラムで生成された薄い C-API ラッパーです。すべての imgui.h 関数はプログラムによってラップされています。生成されるファイルは、C コンパイル用のcimgui.cpp
、 cimgui.h
です。また、バインディングの作成を支援するために、関数定義情報を含むdefinitions.lua
とstructs_and_enums.lua
も含まれます。このライブラリは、C (D など - D バインディングを参照) とインターフェイスできる他の言語から Dear ImGui を使用できるようにするための中間層として意図されています。
歴史:
当初、cimgui は Stephan Dilly によって手書きのコードとして開発されましたが、最近では imgui をより簡単に利用できるように (ユーザーが目的のブランチを選択してコミットできるように)、sonoro1234 によって自動生成バージョンに変更されました。
注:
- 現在、このラッパーはバージョン [内部 API を備えた Dear ImGui の 1.91.4] に基づいています。
- imgui.h (オプションで imgui_internal.h) の関数、構造体、列挙型のみがラップされます。
- imgui バックエンドに興味がある場合は、LuaJIT-ImGui プロジェクトを参照してください。
- cimgui_overloads テーブル (https://github.com/cimgui/cimgui/blob/master/generator/generator.lua#L60) でコーディングされた名前を除き、すべての名前付けはアルゴリズムによって行われます。正式バージョンでは、このテーブルは空です。
- 現在のオーバーロードされた関数名は (https://github.com/cimgui/cimgui/blob/master/generator/output/overloads.txt) で確認できます。
編集
発電機を使用して
- これは、提供されているものとは異なる imgui バージョンが必要な場合にのみ (コンパイル前に) 必要になります。そうでない場合は、生成はすでに完了しています。
- LuaJIT (https://github.com/LuaJIT/LuaJIT.git better 2.1 ブランチ)、または https://luapower.com/luajit/download で Linux/macOS/windows 用にプリコンパイルされたものが必要になります。
- 前処理を行うには C++ コンパイラも使用する必要があります: gcc (Windows MinGW-W64-builds など)、clang または cl (MSVC)。 (このリポジトリは gcc で作成されました)
-
imgui
フォルダーを希望のバージョンに更新します。 - Windows の場合は
generator/generator.bat
、Linuxの場合はgenerator/generator.sh
を編集して、gcc、clang、clのいずれかを選択し、必要なバックエンドを選択します。また、imgui_internalが生成されるかどうか、コメントが生成されるかどうか、およびコンストラクターが生成されるかどうかを選択します。独自に提供した構造体の初期化のみを実行するバージョンでも (コンストラクター名に _Construct が追加されます) - ジェネレーターのデフォルトは、コンパイラーとして gcc、imgui_internal が含まれ、バックエンドとして sdl、glfw、vulkan、opengl2、opengl3 です。
- config_generator.lua を編集して、選択したバックエンドに必要なインクルードを追加します (vulkan にはそれが必要です)。
- gcc、clang、または cl と LuaJIT を PATH 上で指定して、generator.bat またはgenerator.sh を実行します。
- その結果、いくつかのファイルが生成されます: コンパイル用の
cimgui.cpp
、 cimgui.h
およびcimgui_impl.h
と、バインディングに関する情報を含むいくつかの lua/json ファイル: 関数情報を含むdefinitions.json
、構造体および列挙情報を含むstructs_and_enums.json
、 impl_definitions.json
バックエンド情報からの関数を含むimpl_definitions.json
。 - 呼び出しの最後にコンパイラ フラグを編集することで、generator.sh またはgenerator.bat にコンパイラ フラグを渡し、コンパイラの動作をさらに指定できます。 (例: -DIMGUI_USER_CONFIG)
- コマンドラインで追加の引数をgenerator.sh (.bat)に渡すことができます。
- cimgui リポジトリとは異なるオプションを使用しており、cimgui の更新後にそれらを保持したい場合は、luajit 呼び出しの前に
cd cimgui/generator
が使用される cimgui フォルダーの外にある、generator.sh (.bat) のコピーにそれらのオプションを保持できます。 。 #232 (コメント) を参照してください。
バインディングを生成する
- CIMGUI_DEFINE_ENUMS_AND_STRUCTS を定義すると、C インターフェイスが cimgui.h によって公開されます。
- 好みの言語で、次のように生成された lua または json ファイルを使用できます。
- https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/build.bat (https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/class_gen の lua コード生成を使用) .lua)
- https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
定義の説明
- これは、キーがオーバーロードなしの結果となる cimgui 名であり、値がオーバーロードの配列であるコレクションです (オーバーロードは 1 つだけの場合があります)。
- 各オーバーロードはコレクションです。関連するキーと値の一部は次のとおりです。
- stname : 関数が属する構造体の名前 (ImGui 名前空間のトップレベルの場合は "" になります)
- ov_cimguiname : オーバーロードされた cimgui 名 (存在しない場合は cimguiname から取得されます)
- cimguiname : オーバーロードなしの名前 (ov_cimguiname がない場合に使用する必要があります)
- ret : 戻り値の型
- retref : 元の戻り値の型が参照の場合に設定されます。 (cimguiのポインタになります)
- argsT : コレクションの配列 (それぞれ type: 引数の型と name: 引数の名前、引数が関数ポインタの場合は ret: 戻り値の型と署名: 関数のシグネチャ)
- args : argsT をカンマで区切って連結した文字列
- call_args : imgui 関数を呼び出すための引数名をカンマで区切った文字列
- defaults : key が引数名、value がデフォルト値であるコレクション。
- Manual : この関数が手書きの場合 (生成されない場合)、true になります。
- Skiped : この関数が生成されていない (および手書きではない) 場合は true になります。
- isvararg : 引数が可変長引数の場合に設定されます
- constructor : 関数がクラスのコンストラクターである場合に設定されます。
- destructor : 関数がクラスのデストラクターであるが、単なるデフォルトのデストラクターではない場合に設定されます。
- realdestructor : 関数がクラスのデストラクターである場合に設定されます。
- templated : 関数がテンプレート クラス (ImVector) に属している場合に設定されます。
- templatedgen: 関数がテンプレート (ImVector_ImWchar) から生成された構造体に属している場合に設定されます。
- nonUDT : 存在する場合、元の関数はユーザー定義型を返していたため、最初の引数として UDT へのポインターを受け入れるようにシグネチャが変更されました。
- location : この関数の由来となるヘッダー ファイルの名前と行番号。 (imgui:000、内部:123、imgui_impl_xxx:123)
- is_static_function : struct static 関数の場合に設定されます。
structs_and_enums の説明
- は 3 つのアイテムからなるコレクションです。
- key enums の下で、各キーが enum タグ名であり、値がキーのコレクションとして表される順序付けされた値の配列である enums コレクションを取得します。
- name : この列挙値の名前
- 値 : C 文字列
- calc_value : value に対応する数値
- key structs の下で、キーが構造体名、値が構造体メンバーの配列である構造体コレクションを取得します。それぞれがキー付きのコレクションとして提供されます
- type : 構造体メンバーの型
- template_type : type にテンプレート引数 (ImVector など) がある場合、ここは次のようになります。
- name : 構造体のメンバーの名前
- size : 配列の要素数(配列の場合)
- bitfield : ビットフィールド幅 (ビットフィールドの場合)
- キーの場所の下で、各キーが enum タグ名または構造体名であり、値がヘッダー ファイルの名前とその元の行番号である場所コレクションを取得します。
使用法
- 元の imgui.h の ImGui C++ 名前空間にあるメソッドを先頭に
ig
追加して使用します - メソッドには同じパラメータ リストと戻り値があります (可能な場合)。
- 構造体に属する関数には、構造体へのポインターを含む追加の最初の引数があります。
- 関数が値によって UDT (ユーザー定義型) を返す場合、一部のコンパイラーは、最初の引数 (構造体に属している場合は 2 番目) として UDT 型へのポインターを受け入れて関数が生成されるように要求します。
バックエンドでの使用
- SDL と opengl3、glfw と opengl3、SDL と Vulkan を使用して構築された cmake モジュールの backend_test フォルダーを見てください。
- cimgui バックエンドの使用方法を読む
cimgui に基づくバインディングの例
- LuaJIT-ImGui
- ImGui.NET
- ニムグル/イムギ
- kotlin-imgui
- CImGui.jl
- オーディン・イムギ
- 遺棄されたイムギ
- BindBC-CimGui
- imgui-rs
- イムギパス
- クリスタルイムグイ
cimgui に基づく C の例
- sdl2_opengl3
- sdl2-cimgui-デモ
- cimgui_c_sdl2_example
- GLFW を使用した cimgui-c-example
- raylib-cimgui