Rizz
@septag
Rizz (ریز) est un petit cadre de développement de jeux / applications minimal, écrit en langue C. Inspiré par la machinerie et Sokol Libs. Il s'agit actuellement d'un travail en cours, des fonctionnalités et des améliorations seront constamment ajoutées à différentes plates-formes.
Le modèle d'échantillon est la courtoisie de Ferre Poorkazem
Conception et utilisation de base
Pour des informations plus détaillées sur les principes de conception, l'architecture et l'utilisation de base du framework, veuillez lire le document Rizz Architecture et Utilisation de base, qui est également disponible dans DOCS / Guide
Note
Ce n'est pas un moteur de jeu, c'est un cadre de niveau relativement bas pour les programmeurs pour construire leur propre moteur / rendu / physique par-dessus. Le cœur de Rizz n'implémente et n'implémentera aucune technique de rendu / physique ni n'impose un système d'entité spécifique à l'utilisateur. Il fournit simplement les éléments de base pour les développeurs de jeux. D'autres fonctionnalités seront implémentées sous forme de plugins.
Caractéristiques
Cœur
- Code C portable : C11 (GCC / Clang), C99 (MSVC) Code compatible, conçu avec l'état d'esprit axé sur les données.
- Système de plugin : Le moteur a un petit noyau. De nombreuses fonctionnalités sont implémentées via des plugins.
- Dépendances minimales : pas de dépendances externes / grandes. Seule une poignée de petites dépendances incluses dans la source.
- Le rechargement à chaud du code C / C ++ : les plugins / code de jeu sont tous relaxables à chaud avec certaines restrictions et règles.
- Système d'emploi basé sur la fibre : Système d'emploi simple à utiliser des fibres.
- Réflexion : fournit un système de réflexion simple pour les structures , les énumérations et les fonctions ainsi que la sérialisation / désérialisation JSON intégrée.
- Async Asset Manager : Flexible Reference Counting Asset Manager. De nouveaux types d'actifs peuvent être ajoutés par code tiers au gestionnaire.
- Relocation à chaud des actifs et des shaders : toutes les ressources et shaders en jeu peuvent être relaxés à chaud.
- Système de fichiers virtuel : lecture / écriture asynchrone. Les répertoires ou archives peuvent être montés sous forme de répertoires virtuels.
- Prise en charge des coroutines : les coroutines peuvent être suspendues pour N cadres ou n millisecondes.
- Gestion des collisions personnalisées : rappels personnalisés pour les plantages. Avec Crash.dmp. Création de fichiers (Windows uniquement)
Graphique
- Prise en charge de l'API graphique multiple : métal (iOS, macOS). OpenGL-ES 2/3 (Android). Direct3d11 (Windows), OpenGL 3.3 (Linux)
- Shaders portables : écrivez des shaders une fois dans GLSL, le ensemble d'outils traduisa automatiquement le shader vers d'autres API.
- Multi-thread GPU Command-Buffer : les commandes de dessin peuvent être soumises par plusieurs threads avec API mis en scène .
- Prise en charge du shader (expérimental) : support expérimental de calcul de calcul, actuellement uniquement sous Direct3D, plus de backends seront ajoutés.
Plugins
De nombreuses fonctionnalités du moteur sont implémentées dans les plugins, visitez chaque lien pour lire leur lecture:
- IMGUI: Plugin Dear-Imgui avec une API utilitaire
- 2dtools: outils de rendu 2D: sprite, animation sprite, dessin de police avec support TTF
- SON: Système audio simple. Bélangeur audio et 2D-Sounds.
- Entrée: système d'entrée avec GamePad et support tactile
- 3DTOOLS: outils de rendu 3D: Prise en charge des modèles GLTF 3D, création et dessin primitifs de débogage de base
- ASTAR: Plugin d'implémentation de recherche de chemin A-Star
- Collision: 2.5D / Plugin de détection de collision isométrique
- Utilité: fonctionnalité d'utilité divers. Actuellement, Spline et générateur de bruit
- BaserUt: Baser_Universal Texture Format Support (Nom du type d'actif:
"texture_basisu" )
Débogage et profilage
- Profiler distant : remomery intégré pour le débogueur à distance / la console de commande et la vision de journal.
- Introspection de l'API graphique : débogage des appels et objets graphiques de niveau d'application.
- Débogueur de mémoire : débogage et surveiller les allocations de mémoire à tous les sous-systèmes.
Plates-formes prises en charge
- Fenêtre
- Linux
- Macos
- Androïde
- Framboise
- ios
Construire
Rizz est conçu pour fonctionner sur toutes les plates-formes Mobile (iOS, Android), PC (Windows, Linux, MacOS) et Web (Webasm). Mais comme le moteur est dans son âge précoce, les plates-formes actuelles sont construites et testées:
- Windows : Testé sur Windows10 avec Visual Studio 14 2015 Update 3 (Win64).
- Linux : testé sur Ubuntu 16 avec Clang (6.0.0) et GCC (7.3.0). Exigences de package:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libasound2-dev (si vous prévoyez de construire un plugin
sound ) - libglew-dev
- MacOS : testé sur macOS High Sierra - Appleclang 9.1.0
- Android : Pour Android, il y a un script Python Android.py qui s'occupe de la préparation de la structure du projet Android, de la construction du code et de l'emballage de l'APK final. Veuillez lire le début d'
android.py . - RaspberryPI : Testé sur RPI1 ModelB Ubuntu-Jessie (GCC Raspbian 4.9.2). Exigences de package:
- libasound2-dev (si vous prévoyez de construire un plugin
sound )
- iOS : Pour iOS, il y a un script python iOS.py qui s'occupe de l'initialisation du projet iOS
Options CMake
Bundle (par défaut = 0, Android / iOS = 1):
-
BUNDLE=0 indique que Rizz est construit en tant qu'hôte exécutable qui exécute le jeu par rizz --run game.dll (sur Linux c'est rizz --run ./game.so ). Recommandé pour le développement, où vous avez besoin de tailles binaires réduites et de chargement en direct du code de jeu et des plugins. -
BUNDLE=1 construit Rizz comme bibliothèque statique. Pour lier et regrouper Rizz et d'autres plugins avec un seul exécutable autonome, il n'y aura donc qu'un seul exécutable et des bundles Rizz et tous les plugins que vous spécifiez. Pour construire correctement le bundle, vous devez définir ces arguments CMake sur Configurer:- Bundle_target : nom cible de l'exécutable que vous essayez de construire (premier exemple:
-DBUNDLE_TARGET=01-hello ) - Bundle_target_name : Si la cible CMake et le nom réel de votre application diffère, utilisez un argument pour résoudre ce problème. (Premier exemple:
-DBUNDLE_TARGET_NAME=hello ) - Bundle_plugins : énumérez les plugins requis par votre application, séparés par demi-colon. (Premier exemple:
-DBUNDLE_PLUGINS=imgui )
Activer_hot_loking (default = 1, Android / iOS = 0) permet le rechargement chaud des actifs et la surveillance des répertoires d'actifs. Ne fonctionne pas sur les OS mobiles.
Activer_profiler (default = 0 / debug, default = 1 / release)
Build_Examples (Default = 1, Android / iOS = 0) Build Exemple Projects in /examples répertoire.
MSVC_STATIC_RUNTIME (Default = 0): MSVC Spécifique. Compile la configuration de version avec l'indicateur '/ mt' au lieu de '/ md'
MSVC_MULTITHREDED_COMPILE (Default = 1): MSVC Spécifique. Allume la compilation multithread (désactive avec Ninja)
Clang_enable_profiler (default = 0): Clang spécifique. Allume le drapeau -ftime-trace . Seulement soutenu dans Clang-9 et supérieur
Exemples
Exemples Des exemples de base sont inclus avec ce dépôt, dans des exemples répertoire:

Clone Space Invaders - Lien vers le projet GitHub

Changements
v0.5
Vider
v0.4
- Breaking: JSON Parser, remplacer SJSON par CJ5
- Breaking: Renommé Plugin Sprite à 2DTools
- Breaking: les API macro externes (Rizz_log_xxxx) sont désormais les mêmes que celles internes (la variable API est définie dans l'en-tête)
- Breaking: la réflexion a maintenant des contextes dans son API
- Nouveau: fenêtre de journal imgui
- NOUVEAU: Prise en charge de la police de type vrai (Fontstash) via API 'Rizz_API_FONT'
- Nouveau: support de texture de base
- Nouveau: plugin de recherche de chemin Astar, grâce à @aminv
- Nouveau: plugin de détection de collision hybride
- Nouveau: type d'actif "JSON" (voir Rizz / json.h)
- Nouveau: plugin utilitaire (spline, bruit, plus de choses seront ajoutées), grâce à @aminv
- Remoteur mis à jour
- Imgui à la branche de 1,79-docking
- API SX IO et backend à Native au lieu de std.fopen
- API ASYNC VFS API TGET Fichiers individuels
- API IFF Load / Save dans SX / IO.H
-
shader_get / texture_get et autres Getters d'actifs à tous les types d'actifs - Beaucoup d'améliorations et de réfacteurs de mathématiques
- TMP_ALLOC Révision
- Correction dans l'analyseur DDS-KTX
- Prise en charge du compilateur MSVC C11
- Meilleure compatabilité C-API avec C ++, et quelques wrappers simples pour C ++ (tableau, table de hachage, opérateurs mathématiques, ..)
- Améliorations du système de réflexion, deux nouvelles fonctions de sérialisation / désérialise pour l'écriture de sérialisation personnalisée
- Système de réflexion Sérialisation JSON intégrée
- Nouveau thème IMGUI (merci à @aminv)
Bibliothèques open source utilisées
Principalement développé pour Rizz
- SX: bibliothèque de base portable
- GLSLCC: GLSL Cross-Compiler (outil binaire externe)
- DDS-KTX: lecteur KTX / DDS en tête unique
- CJ5: Parser JSON5 en tête unique très minimale en C99, dérivé de JSMN
- ATLASC: outil de ligne de commande qui construit une texture Atlas à partir d'un tas d'images d'entrée. (Outil binaire externe)
- DMON: Bibliothèque portable en en-tête unique C99 pour surveiller les modifications du répertoire.
- Stackwalkerc: Windows Single Header Stack Walker.
3rdparties
- Sokol: en-têtes C autonome minimal de plate-forme C
- CR: Bibliothèque d'en-tête de rechargement chaud C Simple C
- CIMGUI: C-API pour imgui (utilisé dans le plugin imgui)
- IMGUI: Cher Imgui: Interface utilisateur graphique en mode immédiat sans ballonnement pour C ++ avec des dépendances minimales (utilisée dans le plugin IMGui)
- Remotery: fichier C unique, profileur CPU / GPU en temps réel avec visionneuse Web distante
- LZ4: Algorithme de compression extrêmement rapide
- HTTP: implémentation de base du protocole HTTP sur les prises
- STB: Bibliothèques de domaine public unique STB pour C / C ++
- Trier: tri les implémentations de routine dans "modèle" c
- IMGuizmo: 3D Gizmo pour IMGUI (utilisé dans le plugin imgui)
- Gainput: bibliothèque d'entrée pour les jeux (utilisé dans le plugin d'entrée)
- Baser_Universal: Base Universal GPU Texture Codec
- Fontstash: Builateur d'atlas de texture de police en ligne léger (utilisée dans le plugin 2dtools)
- CGLTF: chargeur et écrivain GLTF 2.0 à fichier unique écrit en C99 (utilisé dans le plugin 3DTools)
- Cute_headers: les libs en tête de Randy Gaul (mignon_c2.h utilisés dans le plugin de collision)
Licence (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.