rizz
@septag
rizz(>)は、C言語で記述された、小さく、マルチプラットフォームで最小限のゲーム/アプリ開発フレームワークです。機械とソコルライブに触発されました。現在、進行中の作業であり、機能と改善はさまざまなプラットフォームに常に追加されます。
サンプルモデルは、Ferre Poorkazemの好意によるものです
設計と基本的な使用法
デザインの原則、アーキテクチャ、フレームワークの基本的な使用に関する詳細については、Docs/Guideでも利用できるドキュメントRizzアーキテクチャと基本的な使用法をお読みください。
注記
これはゲームエンジンではなく、プログラマーが独自のエンジン/レンダラー/物理学を構築するための比較的低レベルのフレームワークです。 Rizzのコアは、レンダリングテクニック/物理学を実装しておらず、ユーザーに特定のエンティティシステムを課しません。ゲーム開発者に基本的なビルディングブロックを提供するだけです。その他の機能はプラグインとして実装されます。
特徴
コア
- ポータブルCコード:C11(GCC/Clang)、C99(MSVC)互換性のあるコード、データ指向の考え方で設計されています。
- プラグインシステム:エンジンには小さなコアがあります。プラグインを介して多くの機能が実装されています。
- 最小依存関係:外部/大規模な依存関係はありません。ソースに含まれるほんの一握りの小さな依存関係。
- C/C ++コードのホットリロード:プラグイン/ゲームコードはすべて、いくつかの制限とルールを備えたホットリロード可能です。
- ファイバーベースのジョブシステム:ファイバーベースのジョブシステムを簡単に使用できます。
- リフレクション:組み込みのJSONシリアル化/脱介入とともに、構造体、列挙、機能にシンプルな反射システムを提供します。
- Async Asset Manager :Flexible Reference Counting Asset Manager。新しい資産タイプは、サードパーティのコードによってマネージャーに追加できます。
- 資産とシェーダーのホットリロード:ゲーム内のリソースとシェーダーはすべてホットレロードできます。
- 仮想ファイルシステム:async読み取り/書き込み。ディレクトリまたはアーカイブは、仮想ディレクトリとして取り付けることができます。
- コルーチンのサポート:コルーチンは、nフレームまたはnミリ秒のために停止できます。
- カスタムクラッシュ処理:クラッシュ用のカスタムコールバック。 crash.dmpファイルの作成(Windowsのみ)とともに
グラフィックス
- 複数のグラフィックスAPIサポート:金属(iOS、macOS)。 OpenGl-ES 2/3(Android)。 direct3d11(windows)、opengl 3.3(linux)
- ポータブルシェーダー:シェーダーを1回GLSLで書き込み、ツールセットはシェーダーを他のAPIに自動的に変換します。
- マルチスレッドGPUコマンドバッファ:描画コマンドは、段階的なAPIを使用して複数のスレッドで送信できます。
- Compute Shader Support(実験) :現在Direct3Dでのみ実験的なコンピューティングシェーダーサポートが追加され、より多くのバックエンドが追加されます。
プラグイン
エンジン機能の多くはプラグインに実装されています。各リンクにアクセスして、読み取りを読み取ります。
- IMGUI:いくつかのユーティリティAPIを備えたDear-Imguiプラグイン
- 2DTools:2Dレンダリングツール:スプライト、スプライトアニメーション、TTFサポート付きのフォント図面
- サウンド:シンプルなサウンドシステム。オーディオミキサーと2Dサウンド。
- 入力:ゲームパッドとタッチサポートを備えた入力システム
- 3DTools:3Dレンダリングツール:GLTF 3Dモデルのサポート、基本的なデバッグプリミティブ作成および描画
- ASTAR:A-STARパス検索実装プラグイン
- 衝突:2.5D/等尺性衝突検出プラグイン
- ユーティリティ:その他のユーティリティ機能。現在、スプラインとノイズジェネレーター
- BASINTUT:BANCE_UNIVERSALテクスチャフォーマットサポート(アセットタイプ名:
"texture_basisu" )
デバッグとプロファイリング
- リモートプロファイラー:リモートデバッガー/コマンドコンソールおよびログビューアー用の統合リモータリー。
- グラフィックスAPI内省:デバッグアプリケーションレベルのグラフィックコールとオブジェクト。
- メモリデバッガー:すべてのサブシステムのメモリ割り当てのデバッグと監視。
サポートされているプラットフォーム
- Windows
- Linux
- macos
- アンドロイド
- raspberrypi
- iOS
建てる
Rizzは、すべての主要なモバイル(iOS、Android)、PC(Windows、Linux、MacOS)、およびWeb(WebAsm)プラットフォームで実行するように設計されています。しかし、エンジンが幼い頃にあるため、現在のプラットフォームは構築およびテストされています。
- Windows :Visual Studio 14 2015 Update 3(Win64)でWindows10でテストされています。
- Linux :Clang(6.0.0)とGCC(7.3.0)でUbuntu 16でテストしました。パッケージ要件:
- libx11-dev
- libxrandr-dev
- libxi-dev
- libasound2-dev(
soundプラグインを構築する予定がある場合) - libglew-dev
- macos :Macos High Sierraでテスト - Appleclang 9.1.0
- Android :Androidの場合、Androidプロジェクト構造の準備、コードの構築、最終的なAPKのパッケージに対応するPythonスクリプトAndroid.pyがあります。
android.pyの開始をお読みください。 - Raspberrypi :RPI1 ModelB Ubuntu-Jessie(GCC Raspbian 4.9.2)でテストしました。パッケージ要件:
- libasound2-dev(
soundプラグインを構築する予定がある場合)
- iOS :iOSの場合、iOSプロジェクトの初期化を処理するpythonスクリプトios.pyがあります
cmakeオプション
bundle (default = 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 :semicolonで区切られたアプリケーションで必要なプラグインをリストします。 (最初の例:
-DBUNDLE_PLUGINS=imgui )
enable_hot_loading (default = 1、android/ios = 0)を有効にして、資産のホットリロードと資産ディレクトリの監視を可能にします。モバイルOSでは機能しません。
enable_profiler (default = 0/debug、default = 1/release)
build_examples (default = 1、android /ios = 0)は/examplesディレクトリにプロジェクトの例を作成します。
msvc_static_runtime (default = 0):msvc special。 「/md」の代わりに「/mt」フラグでリリース構成をコンパイルします
msvc_multithreaded_compile (default = 1):msvc special。マルチスレッドコンピレーションをオンにします(忍者でオフにします)
clang_enable_profiler (default = 0):clang固有。 -ftime-traceフラグをオンにします。 Clang-9以上でのみサポートされています
例
例の基本的な例は、このリポジトリの例に含まれています。

Space Invaders Clone -Githubプロジェクトへのリンク

変更
v0.5
wip
v0.4
- ブレイキング:JSONパーサー、SJSONをCJ5に置き換えます
- ブレイキング:スプライトプラグインを2DToolsに変更しました
- ブレイキング:外部マクロAPI(rizz_log_xxxx)は内部のマクロAPIと同じです(API変数はヘッダーで定義されています)
- ブレイキング:リフレクションには、APIにコンテキストがあります
- 新規:imguiログウィンドウ
- 新規: 'rizz_api_font' apiを介したtrue-type font(fontstash)サポート
- 新規:基本テクスチャサポート
- 新しい:@aminvのおかげで、Astar Path-Findingプラグイン
- 新規:ハイブリッド衝突検出プラグイン
- 新しい:「JSON」アセットタイプ(Rizz/JSon.Hを参照)
- 新しい:ユーティリティプラグイン(スプライン、ノイズ、その他のものが追加されます)、@aminvのおかげで
- 更新されたリモータリー
- imguiから1.79ドッキングブランチ
- sx io apiとstd.fopenの代わりにネイティブへのバックエンド
- async vfs api tget個々のファイル
- iffロード/SX/io.hにAPIを保存します
shader_get / texture_getおよびその他のアセットゲッターはすべての資産タイプになります- 多くの数学libの改善とリファクタ
- TMP_ALLOCオーバーホール
- DDS-KTXパーサーの修正
- MSVCコンパイラC11サポート
- C ++とのより良いC-API互換性、およびC ++のいくつかの単純なラッパー(アレイ、ハッシュテーブル、数学演算子、..)
- リフレクションシステムの改善、カスタムシリアル化を作成するための2つの新しいシリアル化/デスリアル化関数
- 反射システム内蔵JSONシリアル化
- 新しいimguiテーマ(@aminvに感謝)
使用されるオープンソースライブラリ
主にRizz用に開発されました
- SX:ポータブルベースライブラリ
- GLSLCC:GLSLクロスコンパイラ(外部バイナリツール)
- DDS-KTX:シングルヘッダーKTX/DDSリーダー
- CJ5:JSMNから派生した非常に最小限のシングルヘッダーJSON5パーサー
- ATLASC:多数の入力画像からAtlasテクスチャを構築するコマンドラインツール。 (外部バイナリツール)
- DMON:ディレクトリの変更を監視するためのシングルヘッダーC99ポータブルライブラリ。
- Stackwalkerc:Windowsシングルヘッダースタックウォーカー。
サードパーティ
- ソコル:最小限のクロスプラットフォームスタンドアロンCヘッダー
- CR:シンプルなCホットリロードヘッダーのみのライブラリ
- Cimgui:imguiのc-api (imguiプラグインで使用)
- IMGUI:親愛なるIMGUI:最小限の依存関係を備えたC ++用のブロートフリーの即時モードグラフィカルユーザーインターフェイス(IMGUIプラグインで使用)
- リモート:シングルCファイル、リモートWebビューアーを備えたリアルタイムCPU/GPUプロファイラー
- LZ4:非常に高速な圧縮アルゴリズム
- HTTP:ソケットを介した基本的なHTTPプロトコルの実装
- STB:C/C ++のSTBシングルファイルパブリックドメインライブラリ
- ソート:「テンプレート」のルーチン実装のソートc
- Imguizmo:Imguiの3D Gizmo (Imguiプラグインで使用)
- Gainput:ゲーム用の入力ライブラリ(入力プラグインで使用)
- BASIT_UNIVERSAL:BASING UNIVERSAL GPUテクスチャコーデック
- フォントスタッシュ:軽量オンラインフォントテクスチャアトラスビルダー(2DToolsプラグインで使用)
- CGLTF:C99で書かれたシングルファイルGLTF 2.0ローダーとライター(3DToolsプラグインで使用)
- cute_headers:ランディゴールのヘッダーLibs(collisionプラグインで使用されるchued_c2.h)
ライセンス(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.