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.