เสียงอึกทึกครึกโครม
@septag
Rizz (ریز) เป็นกรอบการพัฒนาเกม/แอพขนาดเล็กที่มีขนาดเล็กและมีขนาดเล็กซึ่งเขียนด้วยภาษา C แรงบันดาลใจจากเครื่องจักรและ Sokol libs ปัจจุบันเป็นงานที่อยู่ระหว่างดำเนินการคุณสมบัติและการปรับปรุงจะถูกเพิ่มเข้ากับแพลตฟอร์มที่แตกต่างกันอย่างต่อเนื่อง
ตัวอย่างตัวอย่างคือความอนุเคราะห์จาก Ferre Poogazem
การออกแบบและการใช้งานขั้นพื้นฐาน
สำหรับข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับหลักการออกแบบสถาปัตยกรรมและการใช้งานขั้นพื้นฐานของเฟรมเวิร์กโปรดอ่านเอกสารสถาปัตยกรรม Rizz และการใช้งานขั้นพื้นฐานซึ่งมีอยู่ในเอกสาร/คู่มือ
บันทึก
นี่ไม่ใช่เอ็นจิ้นเกม แต่เป็นเฟรมเวิร์กระดับต่ำสำหรับโปรแกรมเมอร์ในการสร้างเครื่องยนต์/เรนเดอร์/ฟิสิกส์ของตนเอง แกนกลางของ Rizz ไม่ได้และจะไม่ใช้เทคนิคการแสดงผล/ฟิสิกส์ใด ๆ หรือกำหนดระบบเอนทิตีเฉพาะใด ๆ ให้กับผู้ใช้ มันเป็นเพียงการสร้างบล็อกพื้นฐานสำหรับนักพัฒนาเกม คุณสมบัติอื่น ๆ จะถูกนำไปใช้เป็นปลั๊กอิน
คุณสมบัติ
แกนกลาง
- รหัส C แบบพกพา : C11 (GCC/Clang), C99 (MSVC) รหัสที่เข้ากันได้ออกแบบด้วยความคิดเชิงข้อมูล
- ระบบปลั๊กอิน : เครื่องยนต์มีแกนขนาดเล็ก ฟังก์ชั่นจำนวนมากถูกนำไปใช้ผ่านปลั๊กอิน
- การพึ่งพาน้อยที่สุด : ไม่มีการพึ่งพาภายนอก/ขนาดใหญ่ มีเพียงการพึ่งพาขนาดเล็กจำนวนหนึ่งที่รวมอยู่ในแหล่งที่มา
- การโหลดร้อนของรหัส C/C ++ : ปลั๊กอิน/รหัสเกมทั้งหมดสามารถโหลดได้แบบร้อนแรงพร้อมข้อ จำกัด และกฎบางอย่าง
- ระบบงานที่ใช้ไฟเบอร์ : ใช้ระบบงานที่ใช้ไฟเบอร์
- การสะท้อนกลับ : ให้ระบบสะท้อนแสงอย่างง่ายสำหรับ โครงสร้าง enums และ ฟังก์ชั่น พร้อมกับการทำให้เป็นอนุกรม/deserialization JSON ในตัว
- Async Asset Manager : Manager การนับการอ้างอิงที่ยืดหยุ่น ประเภทสินทรัพย์ใหม่สามารถเพิ่มด้วยรหัสบุคคลที่สามให้กับผู้จัดการ
- การโหลดสินทรัพย์และเงาที่ร้อนแรง : ทรัพยากรในเกมและ Shaders ทั้งหมดสามารถเติมเต็มความร้อนได้
- ระบบไฟล์เสมือนจริง : async อ่าน/เขียน ไดเรกทอรีหรือคลังเก็บสามารถติดตั้งเป็นไดเรกทอรีเสมือนจริง
- การสนับสนุนสำหรับ coroutines : coroutines สามารถระงับสำหรับ n เฟรมหรือ n milliseconds
- การจัดการความผิดพลาดที่กำหนดเอง : การเรียกกลับที่กำหนดเองสำหรับการล่ม พร้อมกับการสร้างไฟล์ crash.dmp (Windows เท่านั้น)
กราฟิก
- การรองรับกราฟิก API หลายรายการ : โลหะ (iOS, MacOS) OpenGl-ES 2/3 (Android) Direct3d11 (Windows), OpenGL 3.3 (Linux)
- Shaders แบบพกพา : เขียน shaders หนึ่งครั้งใน GLSL ชุดเครื่องมือจะแปล Shader เป็น API อื่นโดยอัตโนมัติ
- คำสั่ง GPU แบบมัลติเธรด GPU : คำสั่ง DAIN สามารถส่งได้หลายเธรดด้วย API ที่จัดฉาก
- Compute Shader Support (การทดลอง) : การสนับสนุน Compute-Shader ทดลองปัจจุบันภายใต้ Direct3D จะมีการเพิ่มแบ็กเอนด์มากขึ้น
ปลั๊กอิน
คุณสมบัติของเครื่องยนต์จำนวนมากถูกนำไปใช้ในปลั๊กอินเยี่ยมชมแต่ละลิงก์เพื่ออ่าน readme:
- Imgui: ปลั๊กอิน Dear-Imgui พร้อมยูทิลิตี้ API บางส่วน
- 2DTools: เครื่องมือเรนเดอร์ 2D: Sprite, Sprite Animation, การวาดแบบอักษรพร้อมการสนับสนุน TTF
- เสียง: ระบบเสียงที่เรียบง่าย เครื่องผสมเสียงและเสียง 2D
- อินพุต: ระบบอินพุตที่มี gamepad และ touch support
- 3DTools: เครื่องมือเรนเดอร์ 3 มิติ: สนับสนุนรุ่น GLTF 3D, การสร้างและการวาดแบบดั้งเดิมดีบั๊กขั้นพื้นฐาน
- ASTAR: ปลั๊กอินการใช้งานการค้นหาเส้นทาง A-Star
- การชน: ปลั๊กอินตรวจจับการชนกันของการชนกัน 2.5D/ISOMETRIC
- ยูทิลิตี้: ฟังก์ชั่นยูทิลิตี้อื่น ๆ ปัจจุบันเครื่องกำเนิด ไฟฟ้า และ เสียงรบกวน
- พื้นฐาน: การสนับสนุนรูปแบบพื้นผิวพื้นฐาน (ชื่อประเภทสินทรัพย์:
"texture_basisu" )
การดีบักและการทำโปรไฟล์
- Remote Profiler : Integrated Remotery สำหรับคอนโซลดีบั๊ก/คำสั่งคอนโซลและ Log Viewer
- กราฟิก API Introspection : Debug ระดับแอปพลิเคชันระดับการโทรและวัตถุกราฟิก
- DEBUGGER หน่วยความจำ : ดีบักและตรวจสอบการจัดสรรหน่วยความจำสำหรับระบบย่อยทั้งหมด
แพลตฟอร์มที่รองรับ
- หน้าต่าง
- ลินเวกซ์
- แม็กอส
- Android
- Raspberrypi
- iOS
สร้าง
Rizz ได้รับการออกแบบให้ทำงานบนมือถือที่สำคัญ (iOS, Android), PC (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 มีสคริปต์ Python 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
Bundle (default = 0, Android/iOS = 1):
-
BUNDLE=0 ระบุว่า Rizz ถูกสร้างขึ้นเป็นโฮสต์ที่เรียกใช้งานได้ซึ่งเรียกใช้เกมโดย rizz --run game.dll (บน Linux มันเป็น rizz --run ./game.so ) แนะนำสำหรับการพัฒนาที่ซึ่งคุณต้องการขนาดไบนารีลดลงและการโหลดสดของรหัสเกมและปลั๊กอิน -
BUNDLE=1 สร้าง Rizz เป็นห้องสมุดคงที่ ในการเชื่อมโยงและ Bundle Rizz และปลั๊กอินอื่น ๆ ที่มีการเรียกใช้งานแบบสแตนด์อโลนเดียวดังนั้นจะมีเพียงหนึ่งเดียวที่สามารถเรียกใช้งานได้และชุด รวม และปลั๊กอินทั้งหมดที่คุณระบุ ในการสร้างชุดอย่างถูกต้องคุณควรตั้งค่าอาร์กิวเมนต์ CMake เหล่านี้ในการกำหนดค่า:- BUNDLE_TARGET : ชื่อเป้าหมายของการปฏิบัติการที่คุณพยายามสร้าง (ตัวอย่างแรก:
-DBUNDLE_TARGET=01-hello ) - BUNDLE_TARGET_NAME : หากเป้าหมาย CMAKE และชื่อจริงของแอปพลิเคชันของคุณแตกต่างกันให้ใช้อาร์กิวเมนต์เพื่อที่อยู่ (ตัวอย่างแรก:
-DBUNDLE_TARGET_NAME=hello ) - BUNDLE_PLUGINS : แสดงรายการปลั๊กอินที่แอปพลิเคชันของคุณต้องการคั่นด้วยอัฒภาค (ตัวอย่างแรก:
-DBUNDLE_PLUGINS=imgui )
enable_hot_loading (default = 1, Android/iOS = 0) เปิดใช้งานการโหลดสินทรัพย์ใหม่และตรวจสอบไดเรกทอรีสินทรัพย์ ไม่ทำงานกับระบบปฏิบัติการมือถือ
enable_profiler (default = 0/debug, default = 1/release)
build_examples (default = 1, Android /iOS = 0) Build Project Project ในไดเรกทอรี /examples
msvc_static_runtime (default = 0): เฉพาะ MSVC รวบรวมการกำหนด ค่าการเปิดตัว ด้วยธง '/mt' แทน '/md'
msvc_multithreaded_compile (default = 1): MSVC เฉพาะ เปิดการรวบรวมแบบมัลติเธรด (ปิดด้วยนินจา)
clang_enable_profiler (default = 0): Clang เฉพาะ เปิดธง -ftime-trace รองรับเฉพาะใน clang-9 และสูงกว่า
ตัวอย่าง
ตัวอย่าง ตัวอย่างพื้นฐานรวมอยู่ใน repo นี้ในไดเรกทอรีตัวอย่าง:

Space Invaders Clone - ลิงก์ไปยังโครงการ GitHub

การเปลี่ยนแปลง
v0.5
เช็ด
v0.4
- Breaking: JSON Parser แทนที่ SJSON ด้วย CJ5
- Breaking: เปลี่ยนชื่อปลั๊กอิน Sprite เป็น 2DTools
- Breaking: Macro APIs ภายนอก (RIZZ_LOG_XXXX) ตอนนี้เหมือนกับตัวแปรภายใน (ตัวแปร API ถูกกำหนดไว้ในส่วนหัว)
- BREAKING: การสะท้อนกลับตอนนี้มีบริบทใน API ของมัน
- ใหม่: หน้าต่างบันทึก Imgui
- ใหม่: FontStash ประเภทจริง (FontStash) สนับสนุนผ่าน 'RIZZ_API_FONT' API
- ใหม่: การสนับสนุนพื้นผิวพื้นฐาน
- ใหม่: ปลั๊กอินการค้นหาเส้นทาง Astar ขอบคุณ @aminv
- ใหม่: ปลั๊กอินการตรวจจับการชนกันแบบไฮบริด
- ใหม่: ประเภทสินทรัพย์ "JSON" (ดู Rizz/Json.h)
- ใหม่: ปลั๊กอินยูทิลิตี้ (spline, เสียง, สิ่งอื่น ๆ จะถูกเพิ่ม) ขอบคุณ @aminv
- อัปเดตงานของ MEMOTERY
- Imgui ถึง 1.79-docking branch
- sx io api และแบ็กเอนด์เป็นพื้นเมืองแทน std.fopen
- async vfs api tget แต่ละไฟล์
- IFF LOAD/SAVE API ใน SX/IO.H
-
shader_get / texture_get และสินทรัพย์อื่น ๆ สำหรับสินทรัพย์ทุกประเภท - การปรับปรุงและ refactors คณิตศาสตร์จำนวนมาก
- TMP_ALLOC OWHAUL
- แก้ไขในตัวแยกวิเคราะห์ DDS-KTX
- การสนับสนุน MSVC Compiler C11
- ความเข้ากันได้ที่ดีกว่า C-API กับ C ++ และ wrappers ง่าย ๆ สำหรับ C ++ (อาร์เรย์, Hash-Table, ผู้ประกอบการคณิตศาสตร์, .. )
- การปรับปรุงระบบสะท้อนกลับสองฟังก์ชั่นใหม่/deserialize สำหรับการเขียน serialization ที่กำหนดเอง
- ระบบสะท้อนแสงในตัว JSON Serialization ในตัว
- ธีม Imgui ใหม่ (ขอบคุณ @aminv)
ห้องสมุดโอเพนซอร์ซที่ใช้
พัฒนาเป็นหลักสำหรับ Rizz
- SX: ห้องสมุดฐานแบบพกพา
- GLSLCC: GLSL Cross Compiler (เครื่องมือไบนารีภายนอก)
- DDS-KTX: ตัวอ่านส่วนหัวเดียว KTX/DDS
- CJ5: หัวแยก JSON5 ที่น้อยที่สุด JSON5 ใน C99 มาจาก JSMN
- Atlasc: เครื่องมือบรรทัดคำสั่งที่สร้างพื้นผิวของ Atlas จากภาพอินพุตจำนวนมาก (เครื่องมือไบนารีภายนอก)
- DMON: ส่วนหัวเดี่ยว C99 ห้องสมุดพกพาสำหรับการตรวจสอบการเปลี่ยนแปลงไดเรกทอรี
- StackWalkerc: Windows Single Header Stack Walker
3rdparties
- Sokol: ส่วนหัวแบบสแตนด์อโลนแบบข้ามแพลตฟอร์มน้อยที่สุด
- CR: Simple C Hot Reload-header-Oonly Library
- cimgui: c-api สำหรับ imgui (ใช้ในปลั๊กอิน Imgui)
- Imgui: เรียน Imgui: ส่วนต่อประสานกราฟิกแบบกราฟิกแบบกราฟิกที่ปราศจากโหมดพองตัวสำหรับ C ++ ด้วยการพึ่งพาน้อยที่สุด (ใช้ในปลั๊กอิน IMGUI)
- Remotery: ไฟล์ C เดียว, CPU/GPU Profiler แบบเรียลไทม์พร้อมตัวดูเว็บระยะไกล
- LZ4: อัลกอริทึมการบีบอัดที่รวดเร็วมาก
- HTTP: การใช้งานโปรโตคอล HTTP พื้นฐานผ่านซ็อกเก็ต
- STB: STB ห้องสมุดโดเมนสาธารณะแบบไฟล์เดียวสำหรับ C/C ++
- การเรียงลำดับ: การจัดเรียงการใช้งานตามปกติใน "เทมเพลต" C
- Imguizmo: 3D Gizmo สำหรับ Imgui (ใช้ในปลั๊กอิน Imgui)
- กำไร: อินพุตไลบรารีสำหรับเกม (ใช้ในปลั๊กอินอินพุต)
- พื้นฐาน _universal: ตัวแปลงสัญญาณพื้นผิว GPU Universal GPU
- FontStash: Font Texture Font Texture Atlas Builder (ใช้ในปลั๊กอิน 2DTools)
- CGLTF: โหลดเดอร์และนักเขียน GLTF 2.0 ไฟล์เดียวที่เขียนใน C99 (ใช้ในปลั๊กอิน 3DTools)
- libs ส่วนหัวของ Randy Gaul (น่ารัก _c2.h ใช้ในปลั๊กอิน Collision)
ใบอนุญาต (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.