Slide 1

Slide 1 text

2Dゲーム向けフロントエンドフレームワークの 制作 天狗 (RICORA) 1

Slide 2

Slide 2 text

簡単な自己紹介 東京理科大学 創域理工学部 情報計算科学科 四年生 言語・言語処理系好き OSを作ってみたい 設計者になりたい コンパイラを作っては辞めて、ゲームを作っては辞めて 2

Slide 3

Slide 3 text

制作物 2Dゲーム向けフロントエンドフレームワーク「Shooting Star」 Rust製 パブリックドメイン 少ない依存 LinuxとWindowsで動作 Rust向けライブラリ「sstar」としてcrates.ioに公開。 https://crates.io/crates/sstar 3

Slide 4

Slide 4 text

実践例 (事前準備) 1. VulkanSDKをインストール 2. LinuxならlibX11をインストール 3. cargoで新しいプロジェクトを作成 4. Cargo.tomlのdependenciesにsstarを追記 [dependencies] sstar = { version = "0.1.8", features=["with-default-shaders"] } 4

Slide 5

Slide 5 text

実践例 (コード) use sstar::{ app::{graphics::Position, SStarApp}, vulkan::PushConstant, }; fn main() { let mut app = SStarApp::new("Sample", 640.0, 480.0, 10); let mut pc = PushConstant { scl: [200.0, 200.0, 1.0, 0.0], ..Default::default() }; while app.update() { pc.rot[0] += 0.01; app.draw(pc.clone(), Position::Center); app.flush(); } app.terminate(); } 5

Slide 6

Slide 6 text

実践例 6

Slide 7

Slide 7 text

Shaders Resources Shooting Star Default Shaders bitmap Vulkan Window Manager Game Program window vulkan GPU XInput /dev/input/js0 get input render load attach keyboard gamepad Linux Windows システム構成 7

Slide 8

Slide 8 text

TTF Text1 Text2 Text3 Rasterize Text1 Text2 Text3 Textures Texture Atlas Render and Collect 文字描画 8

Slide 9

Slide 9 text

依存 RustのSTLだけではOS付近のレイヤーは叩けないので、 library use Vulkan GPUを用いたレンダリング処理 X11 ウィンドウ生成、キー入力判定(Linux) WindowsAPI ウィンドウ生成、キー入力判定(Windows) stb_image pngデコーダ stb_truetype ttfラスタライザ 9

Slide 10

Slide 10 text

ビルド時依存 Rust FFIを用いればクレート以外の外部ライブラリとリンクできる。 「bindgen」でシグネチャ(以下のような宣言)を自動生成。 extern "C" { fn foreign_function(); } stbライブラリはヘッダーファイルで提供される。 「cc」でstbをincludeしたCファイル(以下)からオブジェクトファイルを生成。 #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" #define STB_TRUETYPE_IMPLEMENTATION #include "stb_truetype.h" 10

Slide 11

Slide 11 text

なぜ作ったの? Q: この世には沢山の良いフレームワークがあるでしょ? A: 個人開発なんだから好きに作らせてくれ! 外部ライブラリは便利だが負債になる。トレードオフ。 楽に速く開発する 自由度が減る・管理が複雑になる 11

Slide 12

Slide 12 text

ライセンス周りの面倒臭さ ライセンスは法解釈。 大きいフレームワークは大量の依存。 すべて読む必要がある 億劫 12

Slide 13

Slide 13 text

MIT ケース1 MITライセンスされたアプリがある。 このアプリをサーバーに置く。 ユーザからのクエリをアプリに投げて、結果を返す。 アプリの再頒布はないが、サーバに複製し、サービスの一環として利用している。 アプリのライセンス表示義務が生じる。 13

Slide 14

Slide 14 text

MIT ケース2 MITライセンスされたアプリがある。 このアプリ専用のエミュレータを作る。 ユーザにはアプリを含まずに頒布する。 エミュレータはアプリに強く依存する。 サービスとして成立するにはアプリが必須。 アプリを「利用している」と考えられなくもない。 14

Slide 15

Slide 15 text

面倒くさいので 権利を主張しないなら、 パブリックドメインで配布してほしいです。 15