rizz
@Septag
rizz(et部分)是用C语言编写的微小,多平台和最小的游戏/应用程序开发框架。受到机械和索科尔液体的启发。目前正在进行的工作,功能和改进将不断地添加到不同的平台中。
样本模型是由Ferre Poorkazem提供的
设计和基本用法
有关框架的设计原理,体系结构和基本用法的更多详细信息,请阅读文档rizz架构和基本用法,该文档/指南也可以使用
笔记
这不是游戏引擎,它是程序员在其上构建自己的引擎/渲染器/物理学的相对较低级别的框架。 Rizz的核心不会也不会实施任何渲染技术/物理,也不会向用户强加任何特定的实体系统。它只是为游戏开发人员提供了基本的构建块。其他功能将作为插件实现。
特征
核
- 便携式C代码:C11(GCC/CLANG),C99(MSVC)兼容代码,设计为面向数据的心态。
- 插件系统:发动机具有小核心。通过插件实现了许多功能。
- 最小依赖性:没有外部/大依赖性。来源中只有少数小依赖项。
- C/C ++代码的热功能:插件/游戏代码都是可以通过一些限制和规则的热保加载。
- 基于纤维的工作系统:易于使用基于光纤的工作系统。
- 反思:为结构,枚举和功能提供简单的反射系统以及内置的JSON序列化/次要化。
- 异步资产管理器:灵活的参考计数资产管理器。新资产类型可以通过第三方代码添加到经理。
- 资产和着色器的热填充:所有游戏中的资源和着色器都可以热加载。
- 虚拟文件系统:异步读/写。目录或档案可以安装为虚拟目录。
- 对Coroutines的支持:可以将Coroutines悬挂在N框架或N毫秒内。
- 自定义崩溃处理:崩溃的自定义回调。以及crash.dmp文件创建(仅Windows)
图形
- 多个图形API支持:金属(iOS,macOS)。 OpenGL-ES 2/3(Android)。 Direct3D11(Windows),OpenGL 3.3(Linux)
- 便携式着色器:在GLSL中写下着色器一次,工具集将自动将着色器转换为其他API。
- 多线程GPU命令屏障:绘制命令可以由带有上演API的多个线程提交。
- 计算着色器支持(实验) :实验性计算遮挡支持,目前仅在Direct3D下,将添加更多后端。
插件
插件中实现了许多引擎功能,请访问每个链接以读取他们的读数:
- IMGUI:带有一些实用程序API的Dear-Imgui插件
- 2DTOOLS:2D渲染工具:Sprite,Sprite Animation,带有TTF支持的字体绘图
- 声音:简单的声音系统。音频搅拌机和2D声音。
- 输入:带有游戏板和触摸支持的输入系统
- 3DTOOLS:3D渲染工具:支持GLTF 3D模型,基本调试原始创建和绘图
- ASTAR:A-Star路径找到实现插件
- 碰撞:2.5D/等距碰撞检测插件
- 实用程序:MASC实用程序功能。目前,样条和噪声生成器
- 基础:基础_universal纹理格式支持(资产类型名称:
"texture_basisu" )
调试和分析
- 远程剖面:远程调试器/命令控制台和日志查看器的集成遥控器。
- 图形API内省:调试应用程序级别的图形调用和对象。
- 内存调试器:所有子系统的调试和监视内存分配。
支持的平台
- 视窗
- Linux
- macos
- 安卓
- Raspberrypi
- ios
建造
Rizz旨在在所有主要移动设备(iOS,Android),PC(Windows,Linux,MacOS)和Web(Webasm)平台上运行。但是,随着引擎的幼年,当前平台将被构建和测试:
- Windows :通过Visual Studio 14 2015 Update 3(Win64)在Windows10上测试。
- Linux :在ubuntu 16上测试了clang(6.0.0)和GCC(7.3.0)。包裹要求:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libasound2-dev(如果您打算构建
sound插件) - libglew-dev
- MACOS :在Macos High Sierra上测试 - Appleclang 9.1.0
- Android :对于Android,有一个Python脚本Android.py,它照顾准备Android项目结构,构建代码并包装最终APK。请阅读
android.py的开始。 - RaspberryPI :在RPI1 ModelB Ubuntu-Jessie(GCC Raspbian 4.9.2)上进行了测试。包裹要求:
- libasound2-dev(如果您打算构建
sound插件)
- iOS :对于iOS,有一个python脚本ios.py,它会照顾初始化iOS项目
CMAKE选项
捆绑(默认值= 0,android/ios = 1):
-
BUNDLE=0表示Rizz是作为可执行主机构建的,该主机通过rizz --run game.dll (在Linux上是rizz --run ./game.so )运行游戏。推荐用于开发,您需要减少二进制尺寸以及游戏代码和插件的实时填充。 -
BUNDLE=1将rizz构建为静态库。要使用单个独立可执行文件链接和捆绑rizz和其他插件,因此只有一个可执行文件和捆绑rizz以及您指定的所有插件。要正确构建捆绑包,您应该在配置上设置以下CMAKE参数:- bundle_target :您要构建可执行文件的目标名称(第一个示例:
-DBUNDLE_TARGET=01-hello ) - Bundle_target_name :如果CMAKE目标和应用程序的实际名称有所不同,请使用参数来解决这一点。 (第一个示例:
-DBUNDLE_TARGET_NAME=hello ) - Bundle_plugins :列出您的应用程序所需的插件,并由半隆分开。 (第一个示例:
-DBUNDLE_PLUGINS=imgui )
enable_hot_loading (Default = 1,Android/ios = 0)启用资产的热加载并监视资产目录。在移动OS上不起作用。
enable_profiler (默认= 0/debug,默认值= 1/preasion)
build_examples (default = 1,android /ios = 0)在/examples目录中构建示例项目。
MSVC_STATIC_RUNTIME (DEFAULT = 0):MSVC特定。用“/mt”标志而不是“/md”编译发行构型
msvc_multithreaded_compile (默认值= 1):MSVC特定。打开多线程汇编(用忍者将其关闭)
clang_enable_profiler (默认值= 0):特定于clang。打开-ftime-trace标志。仅在Clang-9及更高
例子
示例中包含基本示例的示例,示例目录中:

太空入侵者克隆- 链接到GitHub项目

更改
v0.5
WIP
v0.4
- 打破:JSON PARSER,用CJ5替换SJSON
- 打破:将Sprite插件重命名为2DTOOLS
- 破裂:外部宏API(RIZZ_LOG_XXXX)现在与内部宏(API变量在标题中定义)相同)
- 破裂:反思现在具有API的上下文
- 新:IMGUI日志窗口
- new:通过'rizz_api_font'api支持true-type字体(fontstash)支持
- 新:基础纹理支持
- 新:Astar path找到插件,感谢@AMINV
- 新:混合碰撞检测插件
- 新:“ JSON”资产类型(请参阅Rizz/json.h)
- 新的:公用事业插件(链条,噪音,将添加更多内容),多亏@AMINV
- 更新的远程
- imgui至1.79 docking分支
- sx io api,后端到本机而不是std.fopen
- 异步VFS api tget单个文件
- iff load/在sx/io.h中保存API
-
shader_get / texture_get和所有资产类型的其他资产获取器 - 大量数学的改进和重构
- TMP_Alloc大修
- 修复DDS-KTX解析器
- MSVC编译器C11支持
- 更好的C-API与C ++的兼容性,以及一些用于C ++的简单包装器(数组,哈希表,数学运算符,..)
- 反射系统的改进,两个新的序列化/值函数用于编写自定义序列化
- 反射系统内置JSON序列化
- 新的Imgui主题(感谢@Aminv)
使用的开源库
主要是为rizz开发的
- SX:便携式基础库
- GLSLCC:GLSL跨编译器(外部二进制工具)
- DDS-KTX:单头ktx/DDS读取器
- CJ5:C99中非常最小的单头JSON5解析器,源自JSMN
- Atlasc:命令行工具,该工具从一堆输入图像中构建Atlas纹理。 (外部二进制工具)
- DMON:用于监视目录更改的单头C99便携式库。
- StackWalkerc:Windows单头堆栈Walker。
3rdparties
- Sokol:最小的跨平台独立C标题
- CR:简单C热加载纯库
- CIMGUI:IMGUI的C-API (用于IMGUI插件)
- IMGUI:亲爱的IMGUI:无膨胀的即时模式,用于C ++的图形用户界面具有最小的依赖(在IMGUI插件中使用)
- 远程:单C文件,带有远程Web查看器的实时CPU/GPU PROFILER
- LZ4:非常快速的压缩算法
- HTTP:基本的HTTP协议实现了插座
- STB:C/C ++的STB单文件公共域库
- 排序:在“模板” C中对例程实现进行排序
- IMGUIZMO:IMGUI的3D Gizmo (用于IMGUI插件)
- 增益说明:游戏的输入库(输入插件中)
- 基础_universal:基础通用GPU纹理编解码器
- FONTSTASH:轻巧的在线字体纹理Atlas Builder (在2Dtools插件中使用)
- CGLTF:用C99编写的单文件GLTF 2.0加载程序和作者(在3Dtools插件中使用)
- Cute_headers:Randy Gaul的标题libs(cute_c2.h碰撞插件中使用)
许可证(BSD 2-cause)
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.