Rizz
@Septag
Rizz (ریز) ist ein winziges, multi-Plattform- und minimales Spiel-/App-Entwicklungsrahmen, das in C-Sprache geschrieben wurde. Inspiriert von den Maschinen und Sokol Libs. Derzeit ist es in Arbeit, Funktionen und Verbesserungen werden ständig zu verschiedenen Plattformen hinzugefügt.
Beispielmodell ist die Höflichkeit von Ferre Poorkazem
Design und Grundnutzung
Ausführlichere Informationen zu Designprinzipien, Architektur und grundlegender Verwendung des Framework
Notiz
Dies ist keine Game-Engine, sondern ein relativ niedriger Rahmen für Programmierer, um ihre eigene Motor/Renderer/Physik zu bauen. Der Kern von Rizz implementiert und wird keine Rendering -Techniken/Physik implementieren oder dem Benutzer ein bestimmtes Entitätssystem auferlegen. Es bietet nur die grundlegenden Bausteine für Spieleentwickler. Andere Funktionen werden als Plugins implementiert.
Merkmale
Kern
- Tragbarer C-Code : C11 (GCC/Clang), C99 (MSVC) kompatibler Code, der mit datenorientierter Denkweise entworfen wurde.
- Plugin -System : Motor hat einen kleinen Kern. Viele Funktionen werden über Plugins implementiert.
- Minimale Abhängigkeiten : Keine externen/großen Abhängigkeiten. Nur eine Handvoll kleiner Abhängigkeiten in der Quelle.
- Hot-Reloading von C/C ++-Code : Plugins/Game Code sind mit einigen Einschränkungen und Regeln heiß-reloadbar.
- Faserbasiertes Jobsystem : Einfach zu verwenden faserbasiertes Jobsystem.
- Reflexion : Bietet ein einfaches Reflexionssystem für Strukturen , Aufzüge und Funktionen sowie eingebaute JSON- Serialisierung/Deserialisierung.
- Async Asset Manager : Flexible Referenzzählvermögen Manager. Neue Anlagestypen können dem Manager mit Code von Drittanbietern hinzugefügt werden.
- Hot-Reloading von Assets und Shadern : Alle Ressourcen und Shader im Spiel können heiß aufgeladen werden.
- Virtuelles Dateisystem : Async Read/Write. Verzeichnisse oder Archive können als virtuelle Verzeichnisse montiert werden.
- Unterstützung für Coroutinen : Coroutinen können für N -Frames oder N -Millisekunden suspendiert werden.
- Benutzerdefinierte Absturzbearbeitung : Benutzerdefinierte Rückrufe für Abstürze. Zusammen mit Crash.dmp -Dateierstellung (nur Windows)
Grafik
- Mehrfachgrafik -API -Unterstützung : Metall (iOS, macOS). OpenGL-EES 2/3 (Android). Direct3D11 (Windows), OpenGL 3.3 (Linux)
- Portable Shader : Schreiben Sie Shader einmal in GLSL und übersetzt den Shader automatisch in andere APIs.
- Multi-Thread-GPU-Befehls-Puffer : Zeichnenbefehle können von mehreren Threads mit inszenierter API eingereicht werden.
- Berechnung der Shader-Unterstützung (experimentell) : Experimentelle Unterstützung für die Berechnung, die derzeit nur unter Direct3D ist, werden mehr Backends hinzugefügt.
Plugins
Viele der Motorfunktionen werden in den Plugins implementiert. Besuchen Sie jeden Link, um die Readme zu lesen:
- Imgui: Dear-Imgui Plugin mit einer Utility-API
- 2dtools: 2D -Rendering -Werkzeuge: Sprite, Sprite -Animation, Schriftart Zeichnung mit TTF -Unterstützung
- Sound: Einfaches Soundsystem. Audiomischer und 2D-Sounds.
- Eingabe: Eingabesystem mit Gamepad und Berührungsunterstützung
- 3Dtools: 3D -Rendering -Tools: Unterstützung für GLTF -3D -Modelle, grundlegende Primitive -Erstellung und Zeichnung
- Astar: A-Star-Pfadfinding-Implementierungs-Plugin
- Kollision: 2,5D/isometrisches Kollisionserkennungs -Plugin
- Dienstprogramm: Misc -Nutzfunktionalität. Derzeit Spline- und Rauschgenerator
- Basisut: Basis_Universal Texturformatunterstützung (Asset -Typ -Name:
"texture_basisu" ))
Debuggen und Profilerstellung
- Remote -Profiler : Integrierte Remoterie für Remote -Debugger/Befehlskonsole und Protokoll Viewer.
- Grafik -API -Selbstbeobachtung : Debugg -Anwendungsebene Grafikaufrufe und Objekte.
- Speicherdebugger : Debugg und überwachen Speicherzuweisungen für alle Subsysteme.
Unterstützte Plattformen
- Fenster
- Linux
- Macos
- Android
- Raspberrypi
- iOS
Bauen
Rizz ist so konzipiert, dass sie auf allen wichtigen Plattformen für mobile mobile (iOS, Android), PC (Windows, Linux, MacOS) und Webasm (Webasm) ausgeführt werden. Aber da der Motor in jungen Jahren ist, werden die aktuellen Plattformen gebaut und getestet:
- Windows : Auf Windows10 mit Visual Studio 14 2015 Update 3 (Win64) getestet.
- Linux : getestet an Ubuntu 16 mit Klang (6.0.0) und GCC (7.3.0). Paketanforderungen:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libaSound2-dev (wenn Sie planen,
sound Plugin zu erstellen) - liblew-dev
- MacOS : getestet auf MacOS High Sierra - AppleClang 9.1.0
- Android : Für Android gibt es eine Python -Skript Android.py, die sich mit der Vorbereitung der Android -Projektstruktur, der Erstellung des Codes und der Verpackung der endgültigen APK kümmert. Bitte lesen Sie den Beginn von
android.py . - RaspberryPI : getestet an RPI1 Modelb Ubuntu-Jessie (GCC Raspbian 4.9.2). Paketanforderungen:
- libaSound2-dev (wenn Sie planen,
sound Plugin zu erstellen)
- iOS : Für iOS gibt es ein Python -Skript iOS.py, das sich um die Initialisierung des iOS -Projekts kümmert
CMAKE -Optionen
Bündel (Standard = 0, Android/iOS = 1):
-
BUNDLE=0 zeigt an, dass Rizz als ausführbarer Host erstellt wurde, der das Spiel von rizz --run game.dll (auf Linux It it is rizz --run ./game.so ) ausführt. Empfohlen für die Entwicklung, wo Sie reduzierte Binärgrößen und Live-Relading von Spielcode und Plugins benötigen. -
BUNDLE=1 baut Rizz als statische Bibliothek. Um Rizz und andere Plugins mit einer einzigen eigenständigen ausführbaren Datei zu verknüpfen und zu bündeln, gibt es nur eine ausführbare Datei und Bündel Rizz und alle von Ihnen angegebenen Plugins. Um das Bundle ordnungsgemäß zu erstellen, sollten Sie diese CMAKE -Argumente auf Konfiguration festlegen:- Bündel_target : Zielname der ausführbaren Datei, die Sie erstellen möchten (erster Beispiel:
-DBUNDLE_TARGET=01-hello ) - BUNDLE_TARGET_NAME : Wenn sich das CMAKE -Ziel und der tatsächliche Name Ihrer Anwendung unterscheiden, verwenden Sie das Argument, um dies anzusprechen. (Erstes Beispiel:
-DBUNDLE_TARGET_NAME=hello )) - BUNDLE_PLUGINS : Listen Sie die Plugins auf, die von Ihrer Anwendung benötigt werden, getrennt von Semikolon. (Erstes Beispiel:
-DBUNDLE_PLUGINS=imgui )
Enable_hot_loading (default = 1, android/iOS = 0) ermöglicht das heiße Nachladen der Vermögenswerte und die Überwachung der Verzeichnisse der Vermögenswerte. Funktioniert nicht auf mobilen Osen.
Enable_profiler (default = 0/debug, default = 1/release)
Build_Examples (default = 1, Android /iOS = 0) BESTELLTEMGESPROJEKTE IN /examples -Verzeichnis.
Msvc_static_runtime (default = 0): msvcspezifisch. Kompiliert die Release -Konfiguration mit '/mt' Flag anstelle von '/md'
Msvc_multitHhread_compile (default = 1): msvcspezifisch. Schaltet eine Multi-Thread-Zusammenstellung ein (schaltet sie mit Ninja aus) ein)
Clang_enable_profiler (default = 0): klangspezifisch. Schaltet die Flagge -ftime-trace . Nur in Clang-9 und höher unterstützt
Beispiele
Beispiele grundlegende Beispiele sind in diesem Repo im Beispielverzeichnis enthalten:

Space Invaders Clone - Link zum GitHub -Projekt

Änderungen
v0.5
Wip
v0.4
- BREAKING: JSON Parser, ersetzen Sie SJSON durch CJ5
- BREAKING: Umbenanntes Sprite -Plugin in 2dtools umbenannt
- Bruch: Externe Makro -APIs (Rizz_log_xxxx) sind jetzt gleich wie die internen (API -Variable ist in Header definiert)
- Breaking: Reflection hat jetzt Kontexte in seiner API
- Neu: Imgui -Protokollfenster
- NEU: FONTSTASH-FONT (TRUE-Typ-Unterstützung) durch 'Rizz_api_font' API
- NEU: Basis -Texturunterstützung
- Neu: Astar Path-Finding-Plugin dank @aminv
- Neu: Hybrid -Kollisionserkennungs -Plugin
- NEU: "JSON" Asset Type (siehe Rizz/json.h)
- NEU: Utility Plugin (Spline, Rauschen, weitere Dinge werden hinzugefügt) dank @aminv
- Remotion aktualisiert
- Imgui bis 1,79 Docking Branch
- SX IO -API und Backend an native anstelle von std.fopen
- Async VFS -API tget individuelle Dateien
- IFF -Lade-/Speichern -API in SX/IO.H
-
shader_get / texture_get und andere Asset -Getters für alle Anlagestypen - Viele Verbesserungen und Refaktoren für Mathematiklibs
- TMP_Alloc -Überholung
- Korrekturen im DDS-KTX-Parser
- MSVC -Compiler C11 -Unterstützung
- Bessere C-API-Kompatibilität mit C ++ und einigen einfachen Wrappern für C ++ (Array, Hash-Table, Mathematikoperatoren, ..)
- Verbesserungen des Reflexionssystems, zwei neue Serialisierungen/Deserialisierungsfunktionen zum Schreiben einer benutzerdefinierten Serialisierung
- Reflexionssystem integrierte JSON-Serialisierung
- Neues IMgui -Thema (danke an @aminv)
Open-Source-Bibliotheken verwendet
In erster Linie für Rizz entwickelt
- SX: Tragbare Basisbibliothek
- GLSLCC: GLSL Cross-Compiler (externes binäres Werkzeug)
- DDS-KTX: Single Header KTX/DDS-Leser
- CJ5: Sehr minimaler Single -Header JSON5 -Parser in C99, abgeleitet von JSMN
- ATLASC: Befehlszeilen-Tool, das die Atlas-Textur aus einer Reihe von Eingabebildern erstellt. (Externes binäres Werkzeug)
- DMON: Einzelkopf C99 Tragbare Bibliothek zur Überwachung des Verzeichnisses Änderungen.
- Stackwalkerc: Windows Single Header Stack Walker.
3. Teilnehmer
- Sokol: minimale plattformübergreifende eigenständige C-Header
- CR: Einfache C-Bibliothek mit HOT RELOAD-Header nur
- Cimgui: C-API für IMgui (verwendet im IMGui-Plugin)
- IMGUI: Lieber IMGUI: Bloat-Free Sofortiger Modus Grafische Benutzeroberfläche für C ++ mit minimalen Abhängigkeiten (verwendet im IMGui-Plugin)
- Remoterie: Einzel -C -Datei, Echtzeit -CPU/GPU -Profiler mit Remote Web Viewer
- LZ4: Extrem schneller Komprimierungsalgorithmus
- HTTP: Grundlegende HTTP -Protokollimplementierung über Sockets
- STB: STB Single-File Public-Domain-Bibliotheken für C/C ++
- Sortieren: Sortieren von Routineimplementierungen in "Vorlage" C
- Imguizmo: 3d Gizmo für IMGui (verwendet im IMGui -Plugin)
- Gainput: Eingabebibliothek für Spiele (verwendet im Eingabe -Plugin)
- Basis_universal: Basis Universal GPU Textur Codec
- Fontstash: Leichtes Online-Schriftart Textur Atlas Builder (verwendet im 2Dtools-Plugin)
- CGLTF: Single-File GLTF 2.0-Lader und Schriftsteller in C99 (verwendet im 3Dtools-Plugin)
- Cute_Headers: Randy Gauls Header Libs (Cute_c2.h im Kollisions -Plugin)
Lizenz (BSD 2-Klausel)
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.