cimgui
Ini adalah pembungkus c-api tipis yang dihasilkan secara terprogram untuk gui mode langsung C++ yang sangat baik, ImGui yang terhormat. Semua fungsi imgui.h dibungkus secara terprogram. File yang dihasilkan adalah: cimgui.cpp
, cimgui.h
untuk kompilasi C. Juga untuk membantu dalam pembuatan binding, definitions.lua
dengan informasi definisi fungsi dan structs_and_enums.lua
. Pustaka ini dimaksudkan sebagai lapisan perantara untuk dapat menggunakan Dear ImGui dari bahasa lain yang dapat berinteraksi dengan C (seperti D - lihat D-binding)
Sejarah:
Awalnya cimgui dikembangkan oleh Stephan Dilly sebagai kode tulisan tangan tetapi akhir-akhir ini berubah menjadi versi yang dibuat secara otomatis oleh sonoro1234 untuk mengikuti imgui dengan lebih mudah (membiarkan pengguna memilih cabang yang diinginkan dan melakukan komit)
Catatan:
- saat ini pembungkus ini didasarkan pada versi [1.91.4 dari Dear ImGui dengan api internal]
- hanya fungsi, struct, dan enum dari imgui.h (opsional imgui_internal.h) yang dibungkus.
- jika Anda tertarik dengan backend imgui, Anda harus melihat proyek LuaJIT-ImGui.
- Semua penamaan bersifat algoritmik kecuali nama-nama yang dikodekan dalam tabel cimgui_overloads (https://github.com/cimgui/cimgui/blob/master/generator/generator.lua#L60). Dalam versi resmi tabel ini kosong.
- Nama fungsi kelebihan beban saat ini dapat ditemukan di (https://github.com/cimgui/cimgui/blob/master/generator/output/overloads.txt)
kompilasi
menggunakan generator
- ini hanya diperlukan (sebelum kompilasi) jika Anda menginginkan versi imgui berbeda dari yang disediakan, jika tidak, pembuatan sudah selesai.
- Anda memerlukan LuaJIT (https://github.com/LuaJIT/LuaJIT.git cabang 2.1 yang lebih baik) atau dikompilasi sebelumnya untuk linux/macOS/windows di https://luapower.com/luajit/download
- Anda juga perlu menggunakan kompiler C++ untuk melakukan prapemrosesan: gcc (misalnya di windows MinGW-W64-builds), clang atau cl (MSVC). (repo ini dilakukan dengan gcc)
- perbarui folder
imgui
ke versi yang Anda inginkan. - edit
generator/generator.bat
di windows, atau generator/generator.sh
di linux, untuk memilih antara gcc, clang, atau cl dan untuk memilih backend yang diinginkan dan apakah imgui_internal dibuat atau tidak, komentar dibuat atau tidak dan jika konstruktor dibuat juga dengan versi yang hanya melakukan inisialisasi struct yang disediakan sendiri (_Construct ditambahkan ke nama konstruktor) - default generator adalah gcc sebagai kompiler, termasuk imgui_internal dan sdl, glfw, vulkan, opengl2 dan opengl3 sebagai backend.
- edit config_generator.lua untuk menambahkan penyertaan yang diperlukan oleh backend pilihan Anda (vulkan memerlukannya).
- Jalankan generator.bat atau generator.sh dengan gcc, clang atau cl dan LuaJIT di PATH Anda.
- sebagai hasilnya beberapa file dihasilkan:
cimgui.cpp
, cimgui.h
dan cimgui_impl.h
untuk kompilasi dan beberapa file lua/json dengan informasi tentang pengikatan: definitions.json
dengan info fungsi, structs_and_enums.json
dengan info struct dan enum, impl_definitions.json
dengan fungsi dari info backend. - Anda dapat meneruskan flag compiler ke generator.sh atau generator.bat dengan mengeditnya di akhir panggilan untuk menentukan lebih lanjut perilaku compiler. (misalnya -DIMGUI_USER_CONFIG)
- Anda dapat meneruskan argumen tambahan apa pun ke generator.sh (.bat) di baris perintah.
- Jika Anda menggunakan opsi yang berbeda dari repo cimgui dan jika Anda ingin menyimpannya setelah pembaruan cimgui, Anda dapat menyimpannya dalam salinan generator.sh (.bat) di luar folder cimgui tempat
cd cimgui/generator
digunakan sebelum panggilan luajit . Lihat #232 (komentar)
menghasilkan pengikatan
- Antarmuka C diekspos oleh cimgui.h saat Anda mendefinisikan CIMGUI_DEFINE_ENUMS_AND_STRUCTS
- dengan bahasa pilihan Anda, Anda dapat menggunakan file lua atau json yang dihasilkan seperti pada:
- https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/build.bat (dengan pembuatan kode lua di https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/class_gen .lua)
- https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
deskripsi definisi
- Ini adalah kumpulan di mana kuncinya adalah nama cimgui yang akan dihasilkan tanpa kelebihan beban dan nilainya adalah array kelebihan beban (mungkin hanya satu kelebihan beban)
- Setiap kelebihan beban adalah sebuah koleksi. Beberapa kunci dan nilai yang relevan adalah:
- stname : nama struct tempat fungsi tersebut berada (akan menjadi "" jika berada pada level teratas dalam namespace ImGui)
- ov_cimguiname : nama cimgui yang kelebihan beban (jika tidak ada akan diambil dari cimguiname)
- cimguiname : nama tanpa kelebihan (ini harus digunakan jika tidak ada ov_cimguiname)
- ret : tipe pengembalian
- retref : diatur jika tipe pengembalian asli adalah referensi. (akan menjadi penunjuk di cimgui)
- argsT : array koleksi (masing-masing dengan tipe: tipe dan nama argumen: nama argumen, jika argumennya adalah penunjuk fungsi juga ret: tipe kembalian dan tanda tangan: tanda tangan fungsi)
- args : string argsT digabungkan dan dipisahkan dengan koma
- call_args : string dengan nama argumen dipisahkan dengan koma untuk memanggil fungsi imgui
- defaults : koleksi yang kuncinya adalah nama argumen dan nilainya adalah nilai default.
- manual : akan menjadi kenyataan jika fungsi ini ditulis tangan (tidak dibuat)
- skipped : akan menjadi kenyataan jika fungsi ini tidak dibuat (dan tidak ditulis tangan)
- isvararg : disetel jika suatu argumen berupa vararg
- konstruktor : diatur jika fungsinya adalah konstruktor untuk suatu kelas.
- destructor : diatur jika fungsinya adalah destruktor untuk suatu kelas tetapi bukan hanya destruktor default.
- realdestructor : diatur jika fungsinya adalah destruktor untuk suatu kelas
- templated : diatur jika fungsi tersebut termasuk dalam kelas templated (ImVector)
- templatedgen: diatur jika fungsi tersebut milik struct yang dihasilkan dari template (ImVector_ImWchar)
- nonUDT : jika ada, fungsi asli mengembalikan tipe yang ditentukan pengguna sehingga tanda tangan telah diubah untuk menerima penunjuk ke UDT sebagai argumen pertama.
- location : nama file header dan nomor baris asal fungsi ini. (imgui:000, internal:123, imgui_impl_xxx:123)
- is_static_function : diatur ketika itu adalah fungsi struct statis.
deskripsi structs_and_enums
- Is adalah koleksi dengan tiga item:
- di bawah key enums kita mendapatkan koleksi enums di mana setiap kunci adalah nama tag enum dan nilainya adalah array dari nilai-nilai yang diurutkan yang direpresentasikan sebagai koleksi dengan kunci
- name : nama nilai enum ini
- nilai : string C
- calc_value : nilai numerik yang sesuai dengan nilai
- di bawah key struct kita mendapatkan koleksi struct yang kuncinya adalah nama struct dan nilainya adalah array dari anggota struct. Masing-masing diberikan sebagai koleksi dengan kunci
- type : tipe anggota struct
- template_type : jika tipe memiliki argumen templat (sebagai ImVector) maka akan ada di sini
- name : nama anggota struct
- size : jumlah elemen array (bila berupa array)
- bitfield : lebar bitfield (jika bitfield)
- di bawah lokasi kunci kita mendapatkan kumpulan lokasi di mana setiap kunci adalah nama tag enum atau nama struct dan nilainya adalah nama file header dan nomor baris asalnya.
penggunaan
- gunakan metode apa pun yang ada di namespace ImGui c++ di imgui.h asli dengan menambahkan
ig
- metode memiliki daftar parameter dan nilai kembalian yang sama (jika memungkinkan)
- fungsi yang dimiliki oleh sebuah struct memiliki argumen tambahan pertama dengan sebuah pointer ke struct tersebut.
- di mana suatu fungsi mengembalikan UDT (tipe yang ditentukan pengguna) berdasarkan nilai yang dikeluhkan beberapa kompiler sehingga fungsi tersebut dihasilkan dengan menerima pointer ke tipe UDT sebagai argumen pertama (atau kedua jika milik suatu struct).
penggunaan dengan backend
- lihat folder backend_test untuk pembuatan modul cmake dengan SDL dan opengl3, glfw dan opengl3, SDL dan Vulkan
- baca Bagaimana backend cimgui dapat digunakan
contoh binding berdasarkan cimgui
- LuaJIT-ImGui
- ImGui.NET
- nimgl/imgui
- kotlin-imgui
- CImGui.jl
- odin-imgui
- TerlantarImgui
- BindBC-CimGui
- imgui-rs
- imgui-pas
- kristal-imgui
Contoh C berdasarkan cimgui
- sdl2_opengl3
- sdl2-cimgui-demo
- cimgui_c_sdl2_example
- contoh cimgui-c dengan GLFW
- raylib-cimgui