Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
My frontend framework for 2D game, TECH UNIVERS...
Search
Tengu712
July 14, 2023
Programming
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
My frontend framework for 2D game, TECH UNIVERSITY LT Summit, July 9, 2023
Tengu712
July 14, 2023
More Decks by Tengu712
See All by Tengu712
Simplest Vulkan Tutorial in Japanese
tengu712
0
3k
Other Decks in Programming
See All in Programming
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.2k
Foundation Models frameworkで画像分析
ryodeveloper
1
140
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
550
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
530
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.3k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
170
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
190
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
180
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
Balancing Empowerment & Direction
lara
6
1.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
For a Future-Friendly Web
brad_frost
183
10k
Everyday Curiosity
cassininazir
0
260
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Color Theory Basics | Prateek | Gurzu
gurzu
0
400
Product Roadmaps are Hard
iamctodd
55
12k
Visualization
eitanlees
152
17k
Paper Plane
katiecoart
PRO
2
52k
The World Runs on Bad Software
bkeepers
PRO
72
12k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
810
Transcript
2Dゲーム向けフロントエンドフレームワークの 制作 天狗 (RICORA) 1
簡単な自己紹介 東京理科大学 創域理工学部 情報計算科学科 四年生 言語・言語処理系好き OSを作ってみたい 設計者になりたい コンパイラを作っては辞めて、ゲームを作っては辞めて 2
制作物 2Dゲーム向けフロントエンドフレームワーク「Shooting Star」 Rust製 パブリックドメイン 少ない依存 LinuxとWindowsで動作 Rust向けライブラリ「sstar」としてcrates.ioに公開。 https://crates.io/crates/sstar 3
実践例 (事前準備) 1. VulkanSDKをインストール 2. LinuxならlibX11をインストール 3. cargoで新しいプロジェクトを作成 4. Cargo.tomlのdependenciesにsstarを追記
[dependencies] sstar = { version = "0.1.8", features=["with-default-shaders"] } 4
実践例 (コード) 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
実践例 6
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
TTF Text1 Text2 Text3 Rasterize Text1 Text2 Text3 Textures Texture
Atlas Render and Collect 文字描画 8
依存 RustのSTLだけではOS付近のレイヤーは叩けないので、 library use Vulkan GPUを用いたレンダリング処理 X11 ウィンドウ生成、キー入力判定(Linux) WindowsAPI ウィンドウ生成、キー入力判定(Windows)
stb_image pngデコーダ stb_truetype ttfラスタライザ 9
ビルド時依存 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
なぜ作ったの? Q: この世には沢山の良いフレームワークがあるでしょ? A: 個人開発なんだから好きに作らせてくれ! 外部ライブラリは便利だが負債になる。トレードオフ。 楽に速く開発する 自由度が減る・管理が複雑になる 11
ライセンス周りの面倒臭さ ライセンスは法解釈。 大きいフレームワークは大量の依存。 すべて読む必要がある 億劫 12
MIT ケース1 MITライセンスされたアプリがある。 このアプリをサーバーに置く。 ユーザからのクエリをアプリに投げて、結果を返す。 アプリの再頒布はないが、サーバに複製し、サービスの一環として利用している。 アプリのライセンス表示義務が生じる。 13
MIT ケース2 MITライセンスされたアプリがある。 このアプリ専用のエミュレータを作る。 ユーザにはアプリを含まずに頒布する。 エミュレータはアプリに強く依存する。 サービスとして成立するにはアプリが必須。 アプリを「利用している」と考えられなくもない。 14
面倒くさいので 権利を主張しないなら、 パブリックドメインで配布してほしいです。 15