Rizz
@Septag
Rizz (ریز) é uma estrutura de desenvolvimento de jogos/aplicativos minúsculos, multi-plataformas e mínimos, escrita no idioma C. Inspirado nas máquinas e na Sokol Libs. Atualmente, é um trabalho em andamento, recursos e melhorias serão adicionados constantemente a diferentes plataformas.
Modelo de amostra é a cortesia de Ferre Poorkazem
Design e uso básico
Para obter informações mais detalhadas sobre os princípios de design, arquitetura e uso básico da estrutura, leia a arquitetura do documento Rizz e o uso básico, que também está disponível em documentos/guia
Observação
Este não é um mecanismo de jogo, é uma estrutura de nível relativamente baixo para os programadores construirem seu próprio motor/renderizador/física no topo dele. O núcleo do RIZZ não implementa e não implementará nenhuma técnica/física de renderização ou impõe qualquer sistema de entidade específico ao usuário. Ele apenas fornece os blocos básicos de construção para desenvolvedores de jogos. Outros recursos serão implementados como plugins.
Características
Essencial
- Código C portátil : C11 (GCC/CLANG), Código compatível com C99 (MSVC), projetado com mentalidade orientada a dados.
- Sistema de plug -in : o motor tem um núcleo pequeno. Muitas funcionalidades são implementadas por meio de plugins.
- Dependências mínimas : sem dependências externas/grandes. Apenas um punhado de pequenas dependências incluídas na fonte.
- RELO-ALOGINDO DE CÓDIGO C/C ++ : Os plugins/código de jogo são todos relo-carregáveis com algumas restrições e regras.
- Sistema de trabalho baseado em fibra : simples de usar o sistema de trabalho baseado em fibra.
- Reflexão : fornece um sistema de reflexão simples para estruturas , enumes e funções , juntamente com a serialização/deserialização do JSON embutido.
- Gerente de ativos assíncronos : gerente de ativos de contagem de referência flexível. Novos tipos de ativos podem ser adicionados pelo código de terceiros ao gerente.
- Reloadia a quente de ativos e shaders : Todos os recursos e shaders do jogo podem ser relembrados a quente.
- Sistema de Arquivos Virtual : Leia/gravação assíncrona. Diretórios ou arquivos podem ser montados como diretórios virtuais.
- Suporte para coroutinas : Coroutines pode ser suspensa por n quadros ou n milissegundos.
- Manuseio de falha personalizado : retornos de chamada personalizados para falhas. Junto com a criação de arquivos Crash.DMP (somente Windows)
Gráficos
- Suporte API gráfico múltiplo : Metal (iOS, macOS). OpenGL-es 2/3 (Android). Direct3D11 (Windows), OpenGL 3.3 (Linux)
- Shaders portáteis : Escreva shaders Uma vez no GLSL, o conjunto de ferramentas traduzirá automaticamente o shader em outras APIs.
- Comando GPU com vários threades : os comandos de desenho podem ser enviados por vários threads com API encenada .
- Suporte de shader de computação (experimental) : suporte experimental de computação-shader, atualmente apenas em Direct3D, mais backnds serão adicionados.
Plugins
Muitos dos recursos do motor são implementados nos plugins, visite cada link para ler o seu ReadMe:
- Imgui: plugin Dear-Imgui com alguma API de utilidade
- 2dtools: ferramentas de renderização 2D: sprite, animação sprite, desenho de fonte com suporte TTF
- Som: sistema de som simples. Mixer de áudio e 2D-Sounds.
- Entrada: sistema de entrada com gamepad e suporte de toque
- 3DTools: Ferramentas de renderização 3D: Suporte para modelos GLTF 3D, criação e desenho básicos de depuração e desenho primitivos
- ASTAR: plugin de implementação de localização de caminho A
- Colisão: 2.5D/plug -in de detecção de colisão isométrica
- Utilidade: funcionalidade da utilidade MISC. Atualmente, gerador de spline e ruído
- BASETUT: BAST_UNIVERSAL TEXTURE FORMAT SUPORTE (Nome do tipo de ativo:
"texture_basisu" )
Depuração e perfil
- Profiler remoto : remoção integrada para depurador remoto/console de comando e visualizador de log.
- Introspecção da API gráfica : chamadas e objetos gráficos no nível do aplicativo de depuração.
- Debugger de memória : Depuração e monitoram alocações de memória para todos os subsistemas.
Plataformas suportadas
- Windows
- Linux
- Macos
- Android
- Raspberrypi
- iOS
Construir
O RIZZ foi projetado para ser executado em todas as plataformas Mobile (iOS, Android), PC (Windows, Linux, MacOS) e Web (WebAm). Mas, como o motor está em sua tenra idade, as plataformas atuais são construídas e testadas:
- Windows : testado no Windows10 com o Visual Studio 14 2015 Atualização 3 (Win64).
- Linux : testado no Ubuntu 16 com Clang (6.0.0) e GCC (7.3.0). Requisitos de pacote:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libasound2-dev (se você está planejando criar plug-in
sound ) - libglew-dev
- MacOS : Testado no MacOS High Sierra - Appleclang 9.1.0
- Android : para o Android, existe um script python android.py que cuida da preparação da estrutura do projeto do Android, criando o código e empacotando o APK final. Por favor, leia o início do
android.py . - Raspberrypi : testado no RPI1 Modelb Ubuntu-Jessie (GCC Raspbian 4.9.2). Requisitos de pacote:
- libasound2-dev (se você está planejando criar plug-in
sound )
- iOS : Para iOS, há um script python ios.py que cuida da inicialização do projeto iOS
Opções de cmake
Pacote (padrão = 0, Android/iOS = 1):
-
BUNDLE=0 indica que o RIZZ é construído como um host executável que executa o jogo por rizz --run game.dll (no Linux It rizz --run ./game.so ). Recomendado para o desenvolvimento, onde você precisa de tamanhos binários reduzidos e reloadia ao vivo do código e dos plugins do jogo. -
BUNDLE=1 constrói Rizz como biblioteca estática. Para vincular e agrupar o Rizz e outros plugins com um único executável independente, para que haja apenas um executável e pacotes e todos os plugins que você especificará. Para construir o pacote corretamente, você deve definir esses argumentos de cmake na configuração:- Bundle_target : Nome de destino do executável Você está tentando construir (primeiro exemplo:
-DBUNDLE_TARGET=01-hello ) - Bundle_target_name : se o destino cmake e o nome real do seu aplicativo diferem, use o argumento para resolver isso. (primeiro exemplo:
-DBUNDLE_TARGET_NAME=hello ) - Bundle_plugins : Liste os plug -ins exigidos pelo seu aplicativo, separados por Semicolon. (Primeiro exemplo:
-DBUNDLE_PLUGINS=imgui )
Enable_hot_loading (padrão = 1, Android/iOS = 0) permite recarregar a quente de ativos e monitorar os diretórios de ativos. Não funciona em oses móveis.
Enable_profiler (default = 0/debug, padrão = 1/liberação)
Build_examples (padrão = 1, Android /iOS = 0) Crie projetos de exemplo no diretório /examples do diretório.
Msvc_static_runtime (default = 0): msvc específico. Compila a configuração de versão com '/mt' bandeira em vez de '/md'
Msvc_multithreaded_compile (default = 1): msvc específico. Liga a compilação multithread (o desliga com o ninja)
Clang_enable_profiler (padrão = 0): clang específico. Liga -se na bandeira -ftime-trace . Apenas suportado em Clang-9 e superior
Exemplos
Exemplos Exemplos básicos estão incluídos neste repositório, no Diretório Exemplos:

Clone Invaders Space - Link para o projeto GitHub

Mudanças
v0.5
WIP
v0.4
- Breaking: JSON Parser, substitua Sjson por CJ5
- Breaking: renomeado Sprite Plugin para 2dtools
- Breaking: Macro APIs externas (rizz_log_xxxx) agora são iguais aos internos (a variável da API é definida no cabeçalho)
- Quebra: a reflexão agora tem contextos em sua API
- Novo: Janela de log de imgui
- NOVO: Suporte de fonte do tipo verdadeiro (Fontstash) através da API 'rizz_api_font'
- Novo: suporte de textura base
- Novo: plug-in Astar Path Finding, graças a @aminv
- Novo: plug -in de detecção de colisão híbrida
- NOVO: "JSON" Tipo de ativo (ver Rizz/JSON.H)
- Novo: plugin de utilitário (spline, ruído, mais coisas serão adicionadas), graças a @aminv
- Remotamento atualizado
- IMGUI a 1,79 ramo
- SX API IO e back -end para nativo em vez de std.fopen
- ASYNC VFS API TGET INDIFICE ARQUIVOS
- Carregar/salvar IFF API em SX/io.h
-
shader_get / texture_get e outros getters de ativos para todos os tipos de ativos - Muitas melhorias e refatores de matemática
- tmp_alloc revisão
- Correções no analisador DDS-KTX
- Suporte do compilador MSVC C11
- Melhor compatibilidade C-API com C ++ e alguns invólucros simples para C ++ (Array, Hash-Table, Operadores de Matemática, ..)
- Melhorias no sistema de reflexão, duas novas funções serializadas/desaperializadas para escrever serialização personalizada
- Sistema de reflexão serializando o JSON de serialização
- Novo tema imgui (obrigado a @aminv)
Bibliotecas de código aberto usadas
Desenvolvido principalmente para Rizz
- SX: biblioteca base portátil
- GLSLCC: GLSL Cross-Compiler (ferramenta binária externa)
- DDS-KTX: Cabeçalho único KTX/DDS Reader
- CJ5: Parser JSON5 de cabeçalho único muito mínimo em C99, derivado do JSMN
- ATLASC: ferramenta de linha de comando que cria textura do Atlas a partir de várias imagens de entrada. (Ferramenta binária externa)
- DMON: Biblioteca portátil de cabeçalho único C99 para monitoramento de alterações do diretório.
- Stackwalkerc: Windows Single cabeçalho pilha Walker.
3rdParties
- Sokol: Cabeçalhos de cross-plataforma cruzada mínima C Cabeçalhos
- CR: Biblioteca de cabeçalho de recarga a quente simples C HOT
- Cimgui: c-api para imgui (usado no plug-in de imgui)
- IMGUI: Caro Imgui: Interface gráfica do usuário imediato sem incha
- Remoteria: arquivo C único, Profiler de CPU/GPU em tempo real com o Visualizador da Web remoto
- LZ4: Algoritmo de compressão extremamente rápido
- HTTP: Implementação básica de protocolo HTTP sobre soquetes
- STB: Bibliotecas de domínio público de arquivo único STB para C/C ++
- Classificar: classificar implementações de rotina em "modelo" C
- IMGUIZMO: 3D GIZMO PARA IMGUI (usado no plug -in Imgui)
- Gainput: Biblioteca de entrada para jogos (usado no plug -in de entrada)
- BAST_UNVERSAL: Codec de textura da GPU universal básico
- Fontstash: Builder Atlas da Fonte Online leve (usado no plug-in 2DTools)
- CGLTF: carregador e escritor GLTF 2.0 de arquivo único escrito em C99 (usado no plugin 3DTools)
- Cute_Headers: Libs de cabeçalho de Randy Gaul (foffe_c2.h usado no plug -in de colisão)
Licença (BSD 2-cláusulas)
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.