ريز
septag
Rizz (Rیز) هو إطار عمل صغير ومتعدد المنصات ، وأدنى إطار لتطوير اللعبة/التطبيق ، مكتوب بلغة C. مستوحاة من الآلات و Sokol Libs. إنه حاليًا عمل مستمر ، وسيتم إضافة ميزات وتحسينات باستمرار إلى منصات مختلفة.
نموذج العينة هو مجاملة Ferre Pookazem
التصميم والاستخدام الأساسي
لمزيد من المعلومات التفصيلية حول مبادئ التصميم والهندسة المعمارية والاستخدام الأساسي للإطار ، يرجى قراءة الوثيقة المعمارية Rizz والاستخدام الأساسي ، والتي تتوفر أيضًا في المستندات/الدليل
ملحوظة
هذا ليس محرك ألعاب ، إنه إطار منخفض نسبيًا للمبرمجين لإنشاء محرك/عارض/فيزياءهم. لا يقوم جوهر Rizz ولن ينفذ أي تقنيات/فيزياء تقديم أو يفرض أي نظام كيان محدد للمستخدم. إنه يوفر فقط لبنات البناء الأساسية لمطوري الألعاب. سيتم تنفيذ ميزات أخرى كملابس إضافية.
سمات
جوهر
- رمز C المحمول : C11 (GCC/CLANG) ، كود متوافق C99 (MSVC) ، مصمم بعقلية موجهة للبيانات.
- نظام البرنامج المساعد : المحرك لديه قلب صغير. يتم تنفيذ العديد من الوظائف من خلال الإضافات.
- الحد الأدنى من التبعيات : لا تبعيات خارجية/كبيرة. فقط حفنة من التبعيات الصغيرة المدرجة في المصدر.
- إن التحميل الساخن من رمز C/C ++ : مكونات الإضافات/رمز اللعبة كلها قابلة للتشغيل مع بعض القيود والقواعد.
- نظام الوظائف القائم على الألياف : بسيط لاستخدام نظام الوظائف القائم على الألياف.
- الانعكاس : يوفر نظام انعكاس بسيط للهياكل والتعداد والوظائف جنبا إلى جنب مع التسلسل المدمج في JSON /إزالة التسلسل.
- مدير الأصول Async : مرجع مرجعي للعد الأصول. يمكن إضافة أنواع الأصول الجديدة بواسطة رمز الطرف الثالث إلى المدير.
- التحميل الساخن للأصول والتظليلات : يمكن تحويل جميع الموارد والتظليل في اللعبة إلى الساخنة.
- نظام الملفات الظاهري : arsync قراءة/الكتابة. يمكن تركيب الدلائل أو المحفوظات كدلائل افتراضية.
- دعم Coroutines : يمكن تعليق Coroutines للإطارات N أو n milliseconds.
- معالجة التعطل المخصصة : عمليات الاسترداد المخصصة للحوادث. جنبا إلى جنب مع Crash.dmp Create (Windows فقط)
الرسومات
- دعم واجهة برمجة تطبيقات الرسومات المتعددة : المعادن (iOS ، MacOS). OpenGL-ES 2/3 (Android). Direct3D11 (Windows) ، OpenGL 3.3 (Linux)
- التظليلات المحمولة : اكتب تظليلًا مرة واحدة في GLSL ، ستقوم مجموعة الأدوات تلقائيًا بترجمة التظليل إلى واجهات برمجة التطبيقات الأخرى.
- متعددة الخيوط GPU Command-Puffer : يمكن تقديم أوامر Draw بواسطة مؤشرات ترابط متعددة مع API على مرحلة .
- حساب دعم تظليل (تجريبي) : دعم تجريبي للحساب ، حاليًا فقط بموجب Direct3D ، ستتم إضافة المزيد من الخلفية.
الإضافات
يتم تطبيق العديد من ميزات المحرك في المكونات الإضافية ، تفضل بزيارة كل رابط لقراءة ReadMe:
- Imgui: مكون مكون عزيزتي Imgui مع بعض واجهة برمجة تطبيقات الأداة المساعدة
- 2Dtools: أدوات التقديم ثنائية الأبعاد: العفريت ، الرسوم المتحركة العفوية ، رسم خط مع دعم TTF
- الصوت: نظام صوت بسيط. خلاط الصوت و 2 د.
- المدخلات: نظام الإدخال مع GamePad ودعم اللمس
- 3Dtools: أدوات التقديم ثلاثية الأبعاد: دعم لنماذج GLTF ثلاثية الأبعاد ، والتصحيح الأساسي إنشاء ورسم بدائي
- Astar: A-Star Path Plating Plugin
- الاصطدام: مكون إضافي 2.5D/متساوي القياس المكوّن
- الأداة المساعدة: وظائف فائدة منسقة. حاليا ، spline و generator الضوضاء
- أساس: دعم تنسيق الملمس (اسم الأصل
"texture_basisu"
تصحيح التصحيح والتوصيف
- Profiler عن بُعد : جهاز التحكم عن بعد متكامل لـ Debugger/Command Console عن بُعد ومشاهد السجل.
- رسومات API التأمل : مكالمات وكائنات مستوى تطبيق Debug.
- تصحيح الأخطاء في الذاكرة : تصحيح ومراقبة تخصيص الذاكرة لجميع الأنظمة الفرعية.
المنصات المدعومة
- النوافذ
- Linux
- ماكوس
- Android
- Raspberrypi
- iOS
يبني
تم تصميم Rizz لتشغيل جميع منصات المحمول الرئيسية (iOS ، Android) ، الكمبيوتر (Windows ، Linux ، MacOS) و Web (Webasm). ولكن نظرًا لأن المحرك في سن مبكر ، يتم تصميم المنصات الحالية واختبارها:
- Windows : تم اختباره على Windows10 مع Visual Studio 14 2015 Update 3 (Win64).
- Linux : تم اختباره على Ubuntu 16 مع Clang (6.0.0) و GCC (7.3.0). متطلبات الحزمة:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libasound2-dev (إذا كنت تخطط لإنشاء مكون إضافي
sound ) - libglew-dev
- MacOS : تم اختباره على MacOS High Sierra - Appleclang 9.1.0
- Android : بالنسبة لنظام Android ، يوجد Script Python Script Android.py الذي يهتم بإعداد بنية مشروع Android ، وبناء الكود وتغليف APK النهائي. يرجى قراءة بداية
android.py . - Raspberrypi : تم اختباره على RPI1 ModelB Ubuntu-Jessie (GCC Raspbian 4.9.2). متطلبات الحزمة:
- libasound2-dev (إذا كنت تخطط لإنشاء مكون إضافي
sound )
- iOS : بالنسبة لنظام التشغيل iOS ، هناك نص python ios.py الذي يهتم بتهيئة مشروع iOS
خيارات cmake
حزمة (افتراضي = 0 ، Android/iOS = 1):
- تشير
BUNDLE=0 إلى أن Rizz تم تصميمه كمضيف قابل للتنفيذ يدير اللعبة بواسطة rizz --run game.dll (على Linux It's rizz --run ./game.so ). الموصى به للتطوير ، حيث تحتاج إلى تقليل أحجام ثنائية وعملية التحميل المباشر لرمز اللعبة والمكونات الإضافية. -
BUNDLE=1 يبني Rizz كمكتبة ثابتة. لربط و Backdle Rizz وغيرها من الإضافات مع قابلة للتنفيذ قائمة بذاتها ، لذلك سيكون هناك واحد فقط من القابل للتنفيذ و Rizz وجميع المكونات الإضافية التي تحددها. لإنشاء الحزمة بشكل صحيح ، يجب عليك تعيين وسيطات cmake هذه على التكوين:- bundle_target : الاسم الهدف من القابل للتنفيذ الذي تحاول إنشاءه (المثال الأول:
-DBUNDLE_TARGET=01-hello ) - backle_target_name : إذا كان هدف CMake والاسم الفعلي للتطبيق الخاص بك يختلف ، فاستخدم الوسيطة لمعالجة ذلك. (المثال الأول:
-DBUNDLE_TARGET_NAME=hello ) - backdle_plugins : اذكر الإضافات المطلوبة من خلال التطبيق الخاص بك ، مفصولة بواسطة Semicolon. (المثال الأول:
-DBUNDLE_PLUGINS=imgui )
Enable_HOT_LOADING (افتراضي = 1 ، Android/iOS = 0) يتيح إعادة تحميل الأصول الساخنة ومراقبة أدلة الأصول. لا يعمل على أنظمة الهاتف المحمول.
enable_profiler (افتراضي = 0/debug ، الافتراضي = 1/الإصدار)
build_examples (افتراضي = 1 ، Android /iOS = 0) قم ببناء مشاريع مثال في /examples دليل.
msvc_static_runtime (افتراضي = 0): msvc محددة. يجمع تكوين الإصدار مع علامة '/mt' بدلاً من '/md'
msvc_multitherded_compile (افتراضي = 1): MSVC محددة. يتحول على تجميع متعدد الخيوط (ينطلق مع النينجا)
clang_enable_profiler (افتراضي = 0): clang محددة. تشغيل العلم -ftime-trace . مدعوم فقط في Clang-9 وأعلى
أمثلة
أمثلة يتم تضمين الأمثلة الأساسية مع هذا الريبو ، في دليل الأمثلة:

استنساخ الغزاة الفضائي - رابط لمشروع جيثب

التغييرات
v0.5
WIP
v0.4
- Breaking: Json Parser ، استبدل SJSON بـ CJ5
- Breaking: تم إعادة تسمية Sprite Plugin إلى 2Dtools
- كسر: واجهات برمجة تطبيقات الماكرو الخارجية (Rizz_log_xxxx) هي الآن مثل تلك الداخلية (يتم تعريف متغير API في الرأس)
- كسر: الانعكاس الآن لديه سياقات في واجهة برمجة التطبيقات
- جديد: نافذة سجل Imgui
- جديد: دعم font من النوع الحقيقي (fontstash) من خلال 'Rizz_API_FONT' API
- جديد: دعم الملمس أساس
- جديد: المكون الإضافي لتوفير مسار Astar ، بفضل @aminv
- جديد: البرنامج المساعد الهجين للكشف عن التصادم
- جديد: نوع الأصول "JSON" (انظر Rizz/JSON.H)
- جديد: المكون الإضافي للأداة المساعدة (spline ، الضوضاء ، سيتم إضافة المزيد من الأشياء) ، بفضل @aminv
- تحديث عن بعد
- Imgui إلى فرع 1.79
- SX IO API والخلفية إلى الأم بدلاً من std.fopen
- async vfs api tget files الفردية
- تحميل IFF/حفظ API في SX/IO.H
-
shader_get / texture_get و getters الأصول الأخرى لجميع أنواع الأصول - الكثير من تحسينات الرياضيات وإعادة البناء
- إصلاح TMP_ALLOC
- إصلاحات في محلل DDS-KTX
- دعم برنامج التحويل البرمجي MSVC C11
- توافق أفضل C-API مع C ++ ، وبعض الأغلفة البسيطة لـ C ++ (صفيف ، جدول تجزئة ، عوامل الرياضيات ، ..)
- تحسينات نظام الانعكاس ، وظيفتان جديدتان للتسلسل/إزالة التسلسل لكتابة التسلسل المخصص
- نظام الانعكاس المدمج في JSON Serialization
- موضوع imgui جديد (بفضل @aminv)
مكتبات مفتوحة المصدر المستخدمة
تم تطويره في المقام الأول لريز
- SX: مكتبة قاعدة محمولة
- GLSLCC: GLSL Cross-Compiler (أداة ثنائية خارجية)
- DDS-KTX: قارئ رأس واحد KTX/DDS
- CJ5: الحد الأدنى من رأس JSON5 في C99 ، مشتق من JSMN
- ATLASC: أداة سطر الأوامر التي تبني نسيج ATLAS من مجموعة من صور الإدخال. (أداة ثنائية خارجية)
- DMON: مكتبة رأس واحدة C99 المحمولة لمراقبة تغييرات دليل.
- StackWalkerc: Windows Single Header Stack Walker.
3rdparties
- سوكول: الحد الأدنى من الرؤوس المستقلة للمنصات المستقلة
- CR: مكتبة ساخنة للرأس الساخنة فقط
- Cimgui: C-API لـ IMGUI (المستخدم في البرنامج المساعد IMGUI)
- Imgui: عزيزي Imgui: واجهة مستخدم رسومية فورية خالية من الفتحات لـ C ++ مع الحد الأدنى من التبعيات (المستخدمة في البرنامج المساعد IMGUI)
- جهاز التحكم عن بعد: ملف C الفردي ، CPU/GPU Profiler مع عارض ويب عن بُعد
- LZ4: خوارزمية ضغط سريعة للغاية
- HTTP: تنفيذ بروتوكول HTTP الأساسي على مآخذ
- STB: مكتبات المجال العام STB واحد من أجل C/C ++
- النوع: فرز التطبيقات الروتينية في "القالب" ج
- Imguizmo: 3D Gizmo لـ Imgui (المستخدم في البرنامج المساعد Imgui)
- Gainput: مكتبة الإدخال للألعاب (المستخدمة في البرنامج المساعد الإدخال)
- verase_universal: أساس رمز نسيج وحدة معالجة الرسومات العالمية العالمية
- Fontstash: Builder الخفيفة الوزن على الإنترنت Atlas Builder (المستخدم في المكون الإضافي 2Dtools)
- CGLTF: LOADER GLTF 2.0 LOADER وكاتب مكتوب في C99 (يستخدم في البرنامج المساعد 3DTOOLS)
- Cute_headers: Libs Randy Gaul's Header (Cute_C2.h المستخدمة في البرنامج المساعد للتصادم)
ترخيص (BSD 2!
Copyright 2021 Sepehr Taghdisian. All rights reserved.
https://github.com/septag/rizz
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.