Rizz
@SEPTAG
Rizz (ریز) es un marco pequeño, multiplataforma y mínimo de desarrollo de juegos/aplicaciones, escrito en lenguaje C. Inspirado en la maquinaria y los Sokol Libs. Actualmente es un trabajo en progreso, las características y mejoras se agregarán constantemente a diferentes plataformas.
El modelo de muestra es la cortesía de Ferre Poorkazem
Diseño y uso básico
Para obtener información más detallada sobre principios de diseño, arquitectura y uso básico del marco, lea el documento de arquitectura Rizz y uso básico, que también está disponible en Docs/Guía
Nota
Este no es un motor de juego, es un marco de nivel relativamente bajo para que los programadores construyan su propio motor/renderizador/física además. El núcleo de Rizz no implementa ni implementará ninguna técnica de representación/física ni impuso ningún sistema de entidad específico al usuario. Solo proporciona los componentes básicos para desarrolladores de juegos. Otras características se implementarán como complementos.
Características
Centro
- Código C Portable : C11 (GCC/CLANG), código compatible con C99 (MSVC), diseñado con mentalidad orientada a datos.
- Sistema de complementos : el motor tiene un núcleo pequeño. Muchas funcionalidades se implementan a través de complementos.
- Dependencias mínimas : sin dependencias externas/grandes. Solo un puñado de pequeñas dependencias incluidas en la fuente.
- La recuperación en caliente del código C/C ++ : los complementos/código de juego son todos relajables con algunas restricciones y reglas.
- Sistema de trabajo basado en fibra : sistema de trabajo basado en fibra fácil de usar.
- Reflexión : proporciona un sistema de reflexión simple para estructuras , enumeraciones y funciones junto con serialización/deserialización de JSON incorporada.
- Async Asset Manager : Manager de activo de conteo de referencia flexible. Se pueden agregar nuevos tipos de activos mediante código de terceros al administrador.
- Relación de activos y sombreadores : todos los recursos y sombreadores en el juego se pueden recuperar.
- Sistema de archivos virtuales : lectura/escritura async. Los directorios o archivos se pueden montar como directorios virtuales.
- Soporte para coroutinas : las coroutinas se pueden suspender por marcos n o milisegundos.
- Manejo de choques personalizados : devoluciones de llamada personalizadas para bloqueos. Junto con la creación de archivos Crash.dmp (solo Windows)
Gráficos
- Soporte de API de gráficos múltiples : metal (iOS, macOS). OpenGL-es 2/3 (Android). Direct3D11 (Windows), OpenGL 3.3 (Linux)
- Shaders portátiles : escriba sombreadores una vez en GLSL, ToolSet traducirá automáticamente el sombreador a otras API.
- Comando de comandos GPU de múltiples subprocesos : los comandos de dibujo se pueden enviar mediante múltiples hilos con API escenificada .
- Soporte de sombreador de cómputo (experimental) : soporte experimental de cálculo-shader, actualmente solo bajo DIRECT3D, se agregarán más backends.
Complementos
Muchas de las características del motor se implementan en los complementos, visite cada enlace para leer su lectura:
- IMGUI: Dear-Imgui Plugin con alguna API de utilidad
- 2DTools: 2D Herramientas de representación: Sprite, animación de sprite, dibujo de fuentes con soporte TTF
- Sonido: sistema de sonido simple. Mezclador de audio y sonido 2D.
- Entrada: sistema de entrada con soporte de gamepad y táctil
- 3DTools: Herramientas de representación 3D: soporte para modelos 3D GLTF, creación primitiva básica y dibujo
- ASTAR: complemento de implementación de búsqueda de rutas A de estrellas
- Colisión: complemento de detección de colisión 2.5D/isométrico
- Utilidad: funcionalidad de utilidad MISC. Actualmente, Spline y Generador de ruido
- Baseut: Base_Universal Texture Format Support (Nombre de tipo de activo:
"texture_basisu" )
Depuración y perfil
- Profiler remoto : remotura integrada para depurador remoto/consola de comandos y visor de registro.
- Introspección de la API gráfica : nivel de aplicación de depuración llamadas gráficas y objetos.
- Memory Depugger : depurar y monitorear las asignaciones de memoria para todos los subsistemas.
Plataformas compatibles
- Windows
- Linux
- Macosa
- Androide
- Fraspberrypi
- iOS
Construir
Rizz está diseñado para ejecutarse en todas las plataformas principales móviles (iOS, Android), PC (Windows, Linux, MacOS) y Web (webasm). Pero como el motor está en su edad temprana, las plataformas actuales se construyen y proban:
- Windows : probado en Windows10 con Visual Studio 14 2015 Update 3 (Win64).
- Linux : probado en Ubuntu 16 con Clang (6.0.0) y GCC (7.3.0). Requisitos del paquete:
- libx11-dev
- libxrandr-dev
- libxi-dev
- LibASound2-Dev (si planea construir un complemento de
sound ) - Libglew-dev
- MacOS : Probado en MacOS High Sierra - Appleclang 9.1.0
- Android : Para Android, hay un script de Python Android.py que se encarga de preparar la estructura del proyecto de Android, construir el código y empacar el APK final. Lea el comienzo de
android.py . - RaspberryPI : probado en RPI1 Modelb Ubuntu-Jessie (GCC Raspbian 4.9.2). Requisitos del paquete:
- LibASound2-Dev (si planea construir un complemento de
sound )
- iOS : Para iOS, hay un script de Python iOS.py que se encarga de inicializar el proyecto iOS
Opciones de cmake
Paquete (predeterminado = 0, android/iOS = 1):
-
BUNDLE=0 indica que Rizz se construye como un host ejecutable que ejecuta el juego por rizz --run game.dll (en Linux es rizz --run ./game.so ). Recomendado para el desarrollo, donde necesita tamaños binarios reducidos y recuperación en vivo del código de juego y complementos. -
BUNDLE=1 construye rizz como biblioteca estática. Para vincular y agrupar rizz y otros complementos con un solo ejecutable independiente, por lo que solo habrá un ejecutable y agrupa Rizz y todos los complementos que especifique. Para construir el paquete correctamente, debe establecer estos argumentos CMake en Configurar:- Bundle_Target : nombre de destino del ejecutable que está intentando construir (primer ejemplo:
-DBUNDLE_TARGET=01-hello ) - Bundle_target_name : si el objetivo CMake y el nombre real de su aplicación difiere, use el argumento para abordar eso. (primer ejemplo:
-DBUNDLE_TARGET_NAME=hello ) - Bundle_plugins : enumere los complementos requeridos por su aplicación, separados por Semicolon. (primer ejemplo:
-DBUNDLE_PLUGINS=imgui )
Enable_hot_loading (default = 1, android/iOS = 0) habilita la recarga en caliente de los activos y monitorear los directorios de activos. No funciona en OSE móviles.
Enable_profiler (default = 0/debug, default = 1/versión)
Build_examples (default = 1, android /iOS = 0) Crear proyectos de ejemplo en /examples directorio.
Msvc_static_runtime (default = 0): msvc específico. Compila la configuración de lanzamiento con el indicador '/mt' en lugar de '/md'
Msvc_multithreaded_compile (default = 1): msvc específico. Enciende la compilación multiproceso (la apaga con ninja)
Clang_enable_profiler (default = 0): clang específico. Enciende la bandera -ftime-trace . Solo apoyado en Clang-9 y superior
Ejemplos
Ejemplos Se incluyen ejemplos básicos con este repositorio, en el directorio de ejemplos:

Clone de Space Invaders - Link to GitHub Project

Cambios
V0.5
Ceñudo
V0.4
- Breaking: Json Parser, reemplace a SJSON con CJ5
- Breaking: renombrado Sprite Plugin a 2DTools
- Breaking: las API de macro externos (rizz_log_xxxx) ahora son las mismas que las internas (la variable API se define en el encabezado)
- Breaking: La reflexión ahora tiene contextos en su API
- Nuevo: ventana de registro de imgui
- Nuevo: soporte de fuentes de tipo verdadero (FontStash) a través de la API 'Rizz_api_Font'
- NUEVO: Soporte de textura de base
- Nuevo: complemento Astar Rath-Finding, gracias a @aminv
- Nuevo: complemento de detección de colisión híbrida
- Nuevo: "JSON" Tipo de activo (ver Rizz/JSON.H)
- Nuevo: complemento de utilidad (spline, ruido, se agregarán más cosas), gracias a @aminv
- Remotura actualizada
- Imgui a 1.79 rama de lanzamiento
- API SX IO y backend a Native en lugar de std.fopen
- Async VFS API TGet Archivos individuales
- IFF Load/Guard API en SX/IO.H
-
shader_get / texture_get y otros getters de activos a todos los tipos de activos - Muchas mejoras y refactores matemáticos LIB
- revisión tmp_alloc
- correcciones en el analizador DDS-KTX
- Soporte del compilador MSVC C11
- Mejor compatilidad C-API con C ++ y algunos envoltorios simples para C ++ (matriz, hash-table, operadores de matemáticas, ..)
- Mejoras del sistema de reflexión, dos nuevas funciones serializar/deserializar para escribir serialización personalizada
- Sistema de reflexión Serialización JSON incorporada
- Nuevo tema imgui (gracias a @aminv)
Bibliotecas de código abierto utilizadas
Desarrollado principalmente para rizz
- SX: biblioteca base portátil
- GLSLCC: GLSL Cross-Compiler (herramienta binaria externa)
- DDS-KTX: Lector de KTX/DDS de encabezado único
- CJ5: encabezado único muy mínimo JSON5 Parser en C99, derivado de JSMN
- Atlasc: herramienta de línea de comandos que construye textura de Atlas a partir de un montón de imágenes de entrada. (Herramienta binaria externa)
- DMON: Biblioteca portátil C99 de encabezado único para monitorear los cambios en el directorio.
- StackwalkerC: Windows Single Header Stack Walker.
Terceros
- Sokol: encabezados de C en la plataforma multiplataforma mínima
- CR: Simple C Hot Reboad Header Biblioteca solo de encabezado
- CIMGUI: C-API para IMGUI (utilizado en el complemento IMGUI)
- IMGUI: Estimado IMGUI: Interfaz de usuario gráfico de modo inmediato sin hinchazón para C ++ con dependencias mínimas (utilizadas en el complemento IMGUI)
- Remotura: archivo C único, perfilador de CPU/GPU en tiempo real con visor web remoto
- LZ4: Algoritmo de compresión extremadamente rápido
- HTTP: implementación básica del protocolo HTTP sobre enchufes
- STB: Bibliotecas de dominio público de un solo archivo STB para C/C ++
- Ordenar: implementaciones de rutina de clasificación en "plantilla" c
- IMGUIZMO: GIZMO 3D para IMGUI (utilizado en el complemento IMGUI)
- GavePut: biblioteca de entrada para juegos (utilizado en el complemento de entrada)
- base_universal: base de códec de textura de GPU universal
- Fontstash: Ligera en línea Textura de fuentes Atlas Builder (utilizado en el complemento 2DTools)
- CGLTF: cargador GLTF 2.0 de un solo archivo y escritor escrito en C99 (utilizado en el complemento 3DTools)
- Cute_headers: el encabezado de Randy Gaul libs (lindo_c2.h usado en el complemento de colisión)
Licencia (Cláusula 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.