Rizz
@septag
Rizz (ریز) adalah kerangka kerja pengembangan game/aplikasi minimal, multi-platform, dan minimal, yang ditulis dalam bahasa C. Terinspirasi oleh mesin dan lib Sokol. Saat ini sedang dalam proses, fitur dan perbaikan akan ditambahkan terus -menerus ke platform yang berbeda.
Model sampel adalah kesopanan dari Ferre Poorkazem
Desain dan Penggunaan Dasar
Untuk informasi lebih rinci tentang prinsip -prinsip desain, arsitektur, dan penggunaan dasar kerangka kerja, silakan baca dokumen arsitektur Rizz dan penggunaan dasar, yang juga tersedia dalam dokumen/panduan
Catatan
Ini bukan mesin game, ini adalah kerangka kerja tingkat rendah bagi programmer untuk membangun mesin/renderer/fisika mereka sendiri di atasnya. Inti dari Rizz tidak dan tidak akan menerapkan teknik/fisika rendering atau memaksakan sistem entitas tertentu kepada pengguna. Ini hanya menyediakan blok bangunan dasar untuk pengembang game. Fitur lain akan diimplementasikan sebagai plugin.
Fitur
Inti
- Kode C portabel : C11 (GCC/Clang), C99 (MSVC) Kode yang kompatibel, dirancang dengan pola pikir berorientasi data.
- Sistem Plugin : Mesin memiliki inti kecil. Banyak fungsi yang diimplementasikan melalui plugin.
- Ketergantungan minimal : Tidak ada dependensi eksternal/besar. Hanya segelintir dependensi kecil yang termasuk dalam sumber.
- Hot-reloading kode C/C ++ : Plugin/kode game semuanya dapat dimuat dengan beberapa batasan dan aturan.
- Sistem Kerja Berbasis Serat : Sistem Kerja Berbasis Serat yang mudah digunakan.
- Refleksi : Menyediakan sistem refleksi sederhana untuk struktur , enum dan fungsi bersama dengan serialisasi/deserialisasi JSON bawaan.
- Async Asset Manager : Manajer Asset Penghitungan Referensi Fleksibel. Jenis aset baru dapat ditambahkan dengan kode pihak ketiga ke manajer.
- Hot-reloading aset dan shader : Semua sumber daya dalam game dan shader dapat dimuat dengan panas.
- Sistem File Virtual : Async Read/Write. Direktori atau arsip dapat dipasang sebagai direktori virtual.
- Dukungan untuk Coroutines : Coroutine dapat ditangguhkan untuk N frame atau N milidetik.
- Penanganan crash khusus : Panggilan balik khusus untuk crash. Bersamaan dengan pembuatan file crash.dmp (hanya Windows)
Grafik
- Beberapa Dukungan API Grafik : Logam (iOS, MacOS). OpenGl -es 2/3 (Android). Direct3d11 (Windows), OpenGL 3.3 (Linux)
- Portable Shaders : Tulis shader sekali di GLSL, Toolset akan secara otomatis menerjemahkan shader ke API lain.
- Multi-Threaded GPU Command-Buffer : Draw Commands dapat dikirimkan oleh beberapa utas dengan API bertahap .
- Hitung Dukungan Shader (Eksperimental) : Dukungan komputasi eksperimental, saat ini hanya di bawah Direct3D, lebih banyak backend akan ditambahkan.
Plugin
Banyak fitur mesin diimplementasikan di plugin, kunjungi setiap tautan untuk membaca readme mereka:
- IMGUI: Plugin LEAR-IMGUI dengan beberapa API utilitas
- 2DTools: 2D Rendering Tools: Sprite, Sprite Animation, Font Drawing With TTF Support
- Suara: Sistem suara sederhana. Audio Mixer dan 2D-sound.
- Input: Sistem Input dengan GamePad dan Dukungan Sentuh
- 3DTOOLS: 3D Rendering Tools: Dukungan untuk Model 3D GLTF, Dasar Debug Primitive Creation and Drawing
- Astar: plugin implementasi pencarian jalur-bintang
- Tabrakan: plugin deteksi tabrakan 2.5D/isometrik
- Utilitas: Fungsionalitas Utilitas MISC. Saat ini, spline dan generator kebisingan
- Basis: basis_universal Format Dukungan Format (Jenis Aset Nama:
"texture_basisu" )
Debugging dan profil
- Profiler Jarak Jauh : Remotery Terpadu untuk Konsol Debugger/Perintah Jarak Jauh dan Penampil Log.
- Graphics API Introspection : Debug Level Aplikasi Panggilan dan objek grafis.
- Memori Debugger : Debug dan Pantau alokasi memori untuk semua subsistem.
Platform yang didukung
- Windows
- Linux
- MacOS
- Android
- Raspberrypi
- iOS
Membangun
Rizz dirancang untuk berjalan di semua platform seluler utama (iOS, Android), PC (Windows, Linux, MacOS) dan Web (webasm). Tetapi karena mesinnya pada usia dini, platform saat ini dibangun dan diuji:
- Windows : Diuji pada Windows10 dengan Visual Studio 14 2015 Update 3 (Win64).
- Linux : Diuji pada Ubuntu 16 dengan dentang (6.0.0) dan GCC (7.3.0). Persyaratan Paket:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libasound2-dev (jika Anda berencana membangun plugin
sound ) - libglew-dev
- MacOS : Diuji pada MacOS High Sierra - Appleclang 9.1.0
- Android : Untuk Android, ada skrip Python android.py yang menangani persiapan struktur proyek Android, membangun kode dan mengemas APK akhir. Harap baca mulai
android.py . - Raspberrypi : Diuji pada RPI1 ModelB Ubuntu-Jessie (GCC Raspbian 4.9.2). Persyaratan Paket:
- libasound2-dev (jika Anda berencana membangun plugin
sound )
- iOS : Untuk iOS, ada skrip python ios.py yang menangani inisialisasi proyek iOS
Opsi CMake
Bundel (default = 0, android/ios = 1):
-
BUNDLE=0 menunjukkan bahwa Rizz dibangun sebagai host yang dapat dieksekusi yang menjalankan game oleh rizz --run game.dll (di Linux itu rizz --run ./game.so ). Direkomendasikan untuk pengembangan, di mana Anda membutuhkan ukuran biner yang dikurangi dan pemuatan langsung kode permainan dan plugin. -
BUNDLE=1 Membangun Rizz sebagai Perpustakaan Statis. Untuk menautkan dan membundel Rizz dan plugin lainnya dengan satu yang dapat dieksekusi sendiri, jadi hanya akan ada satu yang dapat dieksekusi dan bundel Rizz dan semua plugin yang Anda tentukan. Untuk membangun bundel dengan benar, Anda harus mengatur argumen cmake ini pada konfigurasi:- Bundle_target : Nama target dari yang dapat dieksekusi yang Anda coba bangun (contoh pertama:
-DBUNDLE_TARGET=01-hello ) - Bundle_target_name : Jika target cmake dan nama sebenarnya dari aplikasi Anda berbeda, gunakan argumen untuk mengatasinya. (Contoh pertama:
-DBUNDLE_TARGET_NAME=hello ) - Bundle_plugins : Sebutkan plugin yang diperlukan oleh aplikasi Anda, dipisahkan oleh titik koma. (Contoh pertama:
-DBUNDLE_PLUGINS=imgui )
Enable_hot_loading (default = 1, android/ios = 0) memungkinkan pemuatan ulang aset yang panas dan memantau direktori aset. Tidak bekerja pada OS seluler.
Enable_profiler (default = 0/debug, default = 1/rilis)
Build_examples (default = 1, android /ios = 0) Bangun contoh proyek di /examples direktori.
Msvc_static_runtime (default = 0): msvc spesifik. Mengkompilasi konfigurasi rilis dengan bendera '/mt' bukannya '/md'
Msvc_multithreaded_compile (default = 1): msvc spesifik. Menyalakan kompilasi multi-threaded (mematikannya dengan ninja)
Clang_enable_profiler (default = 0): Clang spesifik. Menyalakan bendera -ftime-trace . Hanya didukung dalam clang-9 dan lebih tinggi
Contoh
Contoh contoh dasar disertakan dengan repo ini, dalam Contoh Direktori:

Space Invaders Clone - Tautan ke Proyek GitHub

Perubahan
v0.5
WIP
V0.4
- Breaking: Json Parser, ganti SJSON dengan CJ5
- Breaking: berganti nama plugin sprite menjadi 2dtools
- Breaking: API makro eksternal (rizz_log_xxxx) sekarang sama dengan yang internal (variabel API didefinisikan dalam header)
- Breaking: Reflection sekarang memiliki konteks di API itu
- Baru: jendela log imgui
- BARU: Dukungan Font-Type (FontSh) melalui API 'rizz_api_font'
- Baru: Dukungan Tekstur Basis
- BARU: Plugin pencarian path astar, terima kasih kepada @aminv
- Baru: Plugin Deteksi Tabrakan Hibrida
- Baru: Jenis Aset "JSON" (lihat Rizz/Json.H)
- BARU: Plugin Utilitas (Spline, Noise, lebih banyak barang akan ditambahkan), terima kasih kepada @aminv
- Remotery yang Diperbarui
- Imgui ke cabang 1,79-docking
- SX IO API dan backend ke asli bukan std.fopen
- Async vfs api tget file individual
- IFF LOAD/Simpan API di SX/IO.H
-
shader_get / texture_get dan getters aset lainnya untuk semua jenis aset - Banyak perbaikan matematika dan refactors
- Overhaul TMP_ALLOC
- Perbaikan dalam parser DDS-KTX
- Dukungan MSVC Compiler C11
- Kompatbilitas C-API yang lebih baik dengan C ++, dan beberapa pembungkus sederhana untuk C ++ (Array, Hash-Table, Operator Matematika, ..)
- Perbaikan Sistem Refleksi, Dua Fungsi Serialize/Deserialize Baru Untuk Menulis Serialisasi Kustom
- Sistem Refleksi Serialisasi JSON bawaan
- Tema Imgui Baru (terima kasih untuk @aminv)
Perpustakaan open-source digunakan
Terutama dikembangkan untuk Rizz
- SX: Perpustakaan Basis Portabel
- GLSLCC: GLSL Cross-Compiler (External Binary Tool)
- DDS-KTX: Pembaca header tunggal KTX/DDS
- CJ5: Header tunggal yang sangat minimal JSON5 Parser di C99, berasal dari JSMN
- Atlasc: Alat baris perintah yang membangun tekstur Atlas dari sekelompok gambar input. (Alat Biner Eksternal)
- DMON: Single Header C99 Portable Library untuk Memantau Perubahan Direktori.
- Stackwalkerc: Windows Single Header Stack Walker.
3rdparties
- Sokol: header crossform crossform crossform C minimal
- CR: Perpustakaan Sederhana C Hot Reload Header saja
- CIMGUI: C-API untuk IMGUI (digunakan dalam plugin IMGUI)
- IMGUI: Dear IMGUI: Antarmuka pengguna grafis mode langsung yang bebas bloat untuk C ++ dengan dependensi minimal (digunakan dalam plugin IMGUI)
- Remotery: File C Tunggal, Realtime CPU/GPU Profiler dengan Penampil Web Jarak Jauh
- LZ4: Algoritma kompresi yang sangat cepat
- HTTP: Implementasi Protokol HTTP Dasar Melalui Soket
- STB: STB Perpustakaan Domain Publik Single-File untuk C/C ++
- Sortir: Menyortir Implementasi Rutin di "Template" C
- IMGUIZMO: 3D GIZMO untuk IMGUI (digunakan dalam plugin IMGUI)
- Gainput: Perpustakaan Input untuk Game (digunakan dalam plugin input)
- basis_universal: basis codec tekstur GPU universal
- FontSh: Pembangun Atlas Tekstur Font Online Terang (Digunakan dalam Plugin 2DTools)
- CGLTF: GLTF 2.0 Loader dan penulis tunggal yang ditulis dalam C99 (digunakan dalam plugin 3DTools)
- Cute_headers: Libs Header Randy Gaul (cute_c2.h digunakan dalam plugin tabrakan)
Lisensi (BSD 2 Clause)
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.