com.cmgui
هذا عبارة عن غلاف c-api رفيع تم إنشاؤه برمجيًا لواجهة المستخدم الرسومية للوضع الفوري الممتاز لـ C++ عزيزي ImGui. يتم تغليف جميع وظائف imgui.h برمجيًا. الملفات التي تم إنشاؤها هي: cimgui.cpp
و cimgui.h
لتجميع C. أيضًا للمساعدة في إنشاء الروابط، definitions.lua
مع معلومات تعريف الوظيفة و structs_and_enums.lua
. تم تصميم هذه المكتبة لتكون طبقة وسيطة لتتمكن من استخدام عزيزي ImGui من اللغات الأخرى التي يمكنها التفاعل مع لغة C (مثل D - راجع D-binding)
تاريخ:
في البداية، تم تطوير cimgui بواسطة ستيفان ديلي كرمز مكتوب بخط اليد ولكن تم تحويله مؤخرًا إلى إصدار تم إنشاؤه تلقائيًا بواسطة sonoro1234 من أجل مواكبة imgui بسهولة أكبر (السماح للمستخدم بتحديد الفرع المطلوب والالتزام)
ملحوظات:
- يعتمد هذا المجمع حاليًا على الإصدار [1.91.4 من Dear ImGui مع واجهة برمجة التطبيقات الداخلية]
- يتم تغليف الوظائف والبنيات والتعدادات من 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 على سبيل المثال)، clang أو cl (MSVC). (تم تنفيذ هذا الريبو مع دول مجلس التعاون الخليجي)
- قم بتحديث مجلد
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 لإضافة التضمينات التي تحتاجها الواجهات الخلفية التي اخترتها (يحتاج vulkan إلى ذلك).
- قم بتشغيل generator.bat أو generator.sh باستخدام gcc أو clang أو cl وLuaJIT على المسار الخاص بك.
- ونتيجة لذلك، يتم إنشاء بعض الملفات:
cimgui.cpp
و cimgui.h
و cimgui_impl.h
للتجميع وبعض ملفات lua/json مع معلومات حول الربط: definitions.json
مع معلومات الوظيفة، structs_and_enums.json
مع معلومات البنية والتعداد، 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 .لوا)
- https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
وصف التعريفات
- إنها مجموعة يكون فيها المفتاح هو اسم cimgui الذي قد ينتج بدون تحميلات زائدة والقيمة عبارة عن مصفوفة من التحميلات الزائدة (قد تكون تحميلات زائدة واحدة فقط)
- كل التحميل الزائد هو مجموعة. بعض المفاتيح والقيم ذات الصلة هي:
- stname : اسم البنية التي تنتمي إليها الوظيفة (سيكون "" إذا كان المستوى الأعلى في مساحة اسم ImGui)
- ov_cimguiname : اسم cimguiname المثقل (إذا كان غائبًا فسيتم أخذه من cimguiname)
- cimguiname : الاسم بدون التحميل الزائد (يجب استخدامه في حالة عدم وجود ov_cimguiname)
- ret: نوع الإرجاع
- retref : يتم تعيينه إذا كان نوع الإرجاع الأصلي مرجعًا. (سيكون مؤشرًا في cimgui)
- argsT : مصفوفة من المجموعات (كل واحدة لها نوع: نوع الوسيطة واسمها: اسم الوسيطة، عندما تكون الوسيطة مؤشر دالة، يتم أيضًا إعادة: نوع الإرجاع والتوقيع: توقيع الوظيفة)
- args : سلسلة من argsT متسلسلة ومفصولة بفواصل
- call_args: سلسلة تحتوي على أسماء الوسيطات مفصولة بفواصل لاستدعاء وظيفة imgui
- الإعدادات الافتراضية: مجموعة يكون فيها المفتاح هو اسم الوسيطة والقيمة هي القيمة الافتراضية.
- دليل : سيكون صحيحًا إذا كانت هذه الوظيفة مكتوبة بخط اليد (لم يتم إنشاؤها)
- تم تخطيها : ستكون صحيحة إذا لم يتم إنشاء هذه الوظيفة (وليست مكتوبة بخط اليد)
- isvararg : يتم تعيينه إذا كانت بعض الوسيطات عبارة عن vararg
- المُنشئ: يتم تعيينه إذا كانت الوظيفة مُنشئًا لفئة ما.
- destructor : يتم تعيينه إذا كانت الوظيفة مدمرة لفئة ما ولكنها ليست مجرد أداة مدمرة افتراضية.
- Realdestructor : يتم تعيينه إذا كانت الوظيفة مدمرة لفئة ما
- templated : يتم تعيينه إذا كانت الوظيفة تنتمي إلى فئة templated (ImVector)
- templatedgen: يتم تعيينه إذا كانت الوظيفة تنتمي إلى بنية تم إنشاؤها من القالب (ImVector_ImWchar)
- NonUDT : في حالة وجودها، كانت الوظيفة الأصلية تُرجع نوعًا محددًا من قبل المستخدم بحيث تم تغيير التوقيع لقبول مؤشر إلى UDT كوسيطة أولى.
- الموقع: اسم ملف الرأس ورقم الكتان الذي تأتي منه هذه الوظيفة. (imgui:000، داخلي:123، imgui_impl_xxx:123)
- is_static_function : يتم ضبطها عندما تكون دالة ثابتة للبنية.
وصف structs_and_enums
- هو عبارة عن مجموعة من ثلاثة عناصر:
- ضمن التعدادات الرئيسية، نحصل على مجموعة التعدادات التي يكون فيها كل مفتاح هو اسم علامة التعداد والقيمة عبارة عن مصفوفة من القيم المرتبة الممثلة كمجموعة تحتوي على مفاتيح
- name : اسم قيمة التعداد هذه
- القيمة: سلسلة C
- calc_value : القيمة الرقمية المقابلة للقيمة
- ضمن بنيات المفاتيح نحصل على مجموعة البنيات التي يكون فيها المفتاح هو اسم البنية والقيمة عبارة عن مصفوفة من أعضاء البنية. كل واحدة تعطى كمجموعة مع المفاتيح
- النوع: نوع عضو البنية
- template_type : إذا كان النوع يحتوي على وسيطة قالب (مثل ImVector) فسيكون هنا
- الاسم: اسم عضو البنية
- الحجم : عدد عناصر المصفوفة (عندما تكون مصفوفة)
- bitfield : عرض حقل البت (في حالة كونه حقل بت)
- ضمن المواقع الرئيسية، نحصل على مجموعة المواقع التي يكون فيها كل مفتاح هو اسم علامة التعداد أو اسم البنية والقيمة هي اسم ملف الرأس ورقم السطر الذي يأتي منه.
الاستخدام
- استخدم أي طريقة موجودة في مساحة الاسم ImGui c++ في imgui.h الأصلي عن طريق إضافة
ig
- الأساليب لها نفس قائمة المعلمات وقيم الإرجاع (حيثما أمكن)
- تحتوي الوظائف التي تنتمي إلى البنية على وسيطة أولى إضافية مع مؤشر إلى البنية.
- حيث تقوم الدالة بإرجاع UDT (النوع المحدد من قبل المستخدم) من حيث القيمة، يشكو بعض المترجمين لذلك يتم إنشاء الوظيفة بقبول مؤشر لنوع UDT كوسيطة أولى (أو ثانية إذا كانت تنتمي إلى بنية).
الاستخدام مع الواجهات الخلفية
- انظر إلى مجلد backend_test للتعرف على بناء وحدة cmake باستخدام SDL وopengl3 وglfw وopengl3 وSDL وVulkan
- اقرأ كيف يمكن استخدام الواجهات الخلفية لـ cimgui
مثال على الارتباطات بناءً على cimgui
- LuaJIT-ImGui
- ImGui.NET
- نيمل/imgui
- kotlin-imgui
- CImGui.jl
- أودين-imgui
- مهجورImgui
- BindBC-CimGui
- imgui-rs
- imgui-pas
- crystal-imgui
أمثلة C على أساس cimgui
- sdl2_opengl3
- sdl2-cimgui-demo
- cimgui_c_sdl2_example
- مثال cimgui-c مع GLFW
- raylib-cimgui