ชิมกุย
นี่คือ wrapper c-api แบบบางที่สร้างขึ้นโดยทางโปรแกรมสำหรับ gui โหมดทันที C ++ ที่ยอดเยี่ยม Dear ImGui ฟังก์ชัน imgui.h ทั้งหมดได้รับการห่อหุ้มโดยทางโปรแกรม ไฟล์ที่สร้างขึ้นคือ: cimgui.cpp
, cimgui.h
สำหรับการคอมไพล์ C นอกจากนี้เพื่อช่วยในการสร้างการโยง, definitions.lua
พร้อมข้อมูลคำจำกัดความของฟังก์ชันและ structs_and_enums.lua
ไลบรารีนี้มีวัตถุประสงค์เพื่อเป็นเลเยอร์กลางเพื่อให้สามารถใช้ Dear ImGui จากภาษาอื่นที่สามารถเชื่อมต่อกับ C ได้ (เช่น D - ดู D-binding)
ประวัติศาสตร์:
ในตอนแรก cimgui ได้รับการพัฒนาโดย Stephan Dilly ในรูปแบบโค้ดที่เขียนด้วยมือ แต่ต่อมาได้กลายเป็นเวอร์ชันที่สร้างขึ้นอัตโนมัติโดย sonoro1234 เพื่อให้ทันกับ imgui ได้ง่ายขึ้น (ให้ผู้ใช้เลือกสาขาที่ต้องการและคอมมิต)
หมายเหตุ:
- ปัจจุบัน wrapper นี้อิงตามเวอร์ชัน [1.91.4 ของ Dear ImGui พร้อม api ภายใน]
- เฉพาะฟังก์ชัน โครงสร้าง และแจงนับจาก 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 สาขา 2.1 ที่ดีกว่า) หรือคอมไพล์ล่วงหน้าสำหรับ linux/macOS/windows ใน https://luapower.com/luajit/download
- คุณต้องใช้คอมไพเลอร์ C++ สำหรับการประมวลผลล่วงหน้า: gcc (ใน windows MinGW-W64-builds เป็นต้น) เสียงดังกราวหรือ cl (MSVC) (repo นี้เสร็จสิ้นด้วย gcc)
- อัปเดตโฟลเดอร์
imgui
เป็นเวอร์ชันที่คุณต้องการ - แก้ไข
generator/generator.bat
บน windows หรือ generator/generator.sh
บน linux เพื่อเลือกระหว่าง gcc, clang หรือ cl และเพื่อเลือกแบ็กเอนด์ที่ต้องการและไม่ว่าจะสร้าง imgui_internal หรือไม่ ความคิดเห็นจะถูกสร้างขึ้นหรือไม่ และหากตัวสร้างถูกสร้างขึ้นหรือไม่ ด้วยเวอร์ชันที่ดำเนินการเพียงการเริ่มต้นโครงสร้างที่จัดทำโดยตัวคุณเอง (_Construct จะถูกเพิ่มในชื่อตัวสร้าง) - ค่าเริ่มต้นของตัวสร้างคือ gcc เป็นคอมไพเลอร์ รวม imgui_internal และ sdl, glfw, vulkan, opengl2 และ opengl3 เป็นแบ็กเอนด์
- แก้ไข config_generator.lua เพื่อเพิ่มการรวมที่จำเป็นสำหรับแบ็กเอนด์ที่คุณเลือก (วัลแคนต้องการสิ่งนั้น)
- เรียกใช้ Generator.bat หรือ Generator.sh ด้วย gcc, clang หรือ cl และ LuaJIT บน PATH ของคุณ
- ผลที่ได้คือไฟล์บางไฟล์ถูกสร้างขึ้น:
cimgui.cpp
, cimgui.h
และ cimgui_impl.h
สำหรับการคอมไพล์และไฟล์ lua/json บางไฟล์พร้อมข้อมูลเกี่ยวกับการเชื่อมโยง: definitions.json
พร้อมข้อมูลฟังก์ชัน structs_and_enums.json
พร้อมข้อมูล struct และ enum, impl_definitions.json
พร้อมฟังก์ชันจากข้อมูลแบ็กเอนด์ - คุณสามารถส่งผ่านแฟล็กคอมไพเลอร์ไปที่ Generator.sh หรือ Generator.bat โดยแก้ไขแฟล็กเมื่อสิ้นสุดการเรียกเพื่อระบุลักษณะการทำงานของคอมไพเลอร์เพิ่มเติม (เช่น -DIMGUI_USER_CONFIG)
- คุณสามารถส่งอาร์กิวเมนต์เพิ่มเติมไปยัง Generator.sh (.bat) ในบรรทัดคำสั่งได้
- หากคุณใช้ตัวเลือกที่แตกต่างจาก cimgui repo และหากคุณต้องการเก็บไว้หลังจากการอัพเดต cimgui คุณสามารถเก็บไว้ในสำเนาของ Generator.sh (.bat) นอกโฟลเดอร์ cimgui ที่ใช้
cd cimgui/generator
ก่อนการโทร luajit . ดู #232 (ความคิดเห็น)
สร้างความผูกพัน
- อินเทอร์เฟซ C ถูกเปิดเผยโดย cimgui.h เมื่อคุณกำหนด CIMGUI_DEFINE_ENUMS_AND_STRUCTS
- ด้วยภาษาที่คุณต้องการคุณสามารถใช้ไฟล์ lua หรือ json ที่สร้างขึ้นใน:
- https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/build.bat (ด้วยการสร้างรหัส lua ใน https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/class_gen .lua)
- https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
คำอธิบายคำจำกัดความ
- เป็นคอลเลกชันที่คีย์คือชื่อ cimgui ที่จะส่งผลให้ไม่มีการโอเวอร์โหลด และค่าเป็นอาร์เรย์ของการโอเวอร์โหลด (อาจเป็นเพียงโอเวอร์โหลดเดียวเท่านั้น)
- การโอเวอร์โหลดแต่ละครั้งถือเป็นการรวบรวม คีย์และค่าที่เกี่ยวข้องบางส่วนได้แก่:
- stname : ชื่อของโครงสร้างที่เป็นของฟังก์ชัน (จะเป็น "" ถ้าเป็นระดับบนสุดในเนมสเปซ ImGui)
- ov_cimguiname : ชื่อ cimguiname ที่โอเวอร์โหลด (หากไม่มีจะถูกนำมาจาก cimguiname)
- cimguiname : ชื่อที่ไม่มีการโอเวอร์โหลด (ควรใช้หากไม่มี ov_cimguiname)
- ret : ประเภทการส่งคืน
- retref : ถูกตั้งค่าหากประเภทการคืนสินค้าดั้งเดิมเป็นข้อมูลอ้างอิง (จะเป็นพอยน์เตอร์ในภาษา Cimgui)
- argsT : อาร์เรย์ของคอลเลกชัน (แต่ละประเภทมีประเภท: ประเภทอาร์กิวเมนต์และชื่อ: ชื่ออาร์กิวเมนต์ เมื่ออาร์กิวเมนต์เป็นตัวชี้ฟังก์ชันยัง ret: ประเภทส่งคืนและลายเซ็น: ลายเซ็นฟังก์ชัน)
- args : สตริงของ argsT ที่ต่อกันและคั่นด้วยเครื่องหมายจุลภาค
- call_args : สตริงที่มีชื่ออาร์กิวเมนต์คั่นด้วยเครื่องหมายจุลภาคสำหรับการเรียกใช้ฟังก์ชัน imgui
- defaults : คอลเลกชันที่คีย์เป็นชื่ออาร์กิวเมนต์ และค่าเป็นค่าเริ่มต้น
- manual : จะเป็นจริงหากฟังก์ชันนี้เขียนด้วยลายมือ (ไม่ได้สร้าง)
- ข้าม : จะเป็นจริงหากไม่ได้สร้างฟังก์ชันนี้ (และไม่ได้เขียนด้วยลายมือ)
- isvararg : ถูกตั้งค่าหากอาร์กิวเมนต์บางตัวเป็น vararg
- 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
- Is เป็นคอลเลกชันที่มีสามรายการ:
- ภายใต้คีย์ enums เราได้รับคอลเลกชัน enum ซึ่งแต่ละคีย์คือชื่อแท็ก enum และค่าคืออาร์เรย์ของค่าที่เรียงลำดับซึ่งแสดงเป็นคอลเลกชันที่มีคีย์
- name : ชื่อของค่าแจงนับนี้
- ค่า : สตริง C
- calc_value : ค่าตัวเลขที่สอดคล้องกับค่า
- ภายใต้คีย์สตรัค เราได้รับคอลเลกชั่นสตรัค โดยคีย์คือชื่อสตรัค และค่าคืออาร์เรย์ของสมาชิกสตรัค แต่ละอันมอบให้เป็นคอลเลกชันพร้อมกุญแจ
- type : ประเภทของสมาชิก struct
- template_type : หาก type มีอาร์กิวเมนต์เทมเพลต (เช่น ImVector) ที่นี่จะเป็นเช่นนี้
- name : ชื่อของสมาชิก struct
- size : จำนวนองค์ประกอบอาร์เรย์ (เมื่อเป็นอาร์เรย์)
- bitfield : ความกว้างของบิตฟิลด์ (กรณีเป็นบิตฟิลด์)
- ภายใต้ตำแหน่งสำคัญ เราได้รับการรวบรวมตำแหน่งซึ่งแต่ละคีย์คือชื่อแท็ก enum หรือชื่อโครงสร้าง และค่าคือชื่อของไฟล์ส่วนหัวและหมายเลขบรรทัดที่มาจากนี้
การใช้งาน
- ใช้วิธีการใดก็ตามที่อยู่ในเนมสเปซ ImGui c++ ใน imgui.h ดั้งเดิมโดยเติม
ig
- วิธีการมีรายการพารามิเตอร์และค่าส่งคืนเหมือนกัน (หากเป็นไปได้)
- ฟังก์ชั่นที่เป็นของโครงสร้างจะมีอาร์กิวเมนต์แรกเพิ่มเติมพร้อมตัวชี้ไปยังโครงสร้าง
- โดยที่ฟังก์ชันส่งคืน UDT (ประเภทที่ผู้ใช้กำหนด) ตามค่าคอมไพเลอร์บางตัวบ่น ดังนั้นฟังก์ชันจึงถูกสร้างขึ้นโดยยอมรับตัวชี้ไปยังประเภท UDT เป็นอาร์กิวเมนต์แรก (หรือตัวที่สองถ้าเป็นของ struct)
การใช้งานกับแบ็กเอนด์
- ดูที่โฟลเดอร์ backend_test สำหรับการสร้างโมดูล cmake ด้วย SDL และ opengl3, glfw และ opengl3, SDL และ Vulkan
- อ่านแบ็กเอนด์ cimgui สามารถใช้งานได้อย่างไร
ตัวอย่างการผูกตาม Cimgui
- ลัวจิต-อิ่มกุย
- ImGui.NET
- นิมเกิล/อิมกุย
- คอตลิน-อิมกุย
- CImGui.jl
- โอดิน-อิมกุย
- ที่ถูกทิ้งร้างImgui
- BindBC-CimGui
- imgui-rs
- imgui-pas
- คริสตัล-imgui
ตัวอย่างภาษา C อิงจาก Cimgui
- sdl2_opengl3
- sdl2-cimgui-สาธิต
- cimgui_c_sdl2_ตัวอย่าง
- cimgui-c-ตัวอย่างกับ GLFW
- raylib-cimgui