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
Scala 3 で GLSL のための c-like-for を実装してみた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
TATSUNO Yasuhiro
March 14, 2025
Programming
990
1
Share
Scala 3 で GLSL のための c-like-for を実装してみた
【オフライン】Scalaわいわい勉強会 #5【東京】
https://scala-tokyo.connpass.com/event/344598/
TATSUNO Yasuhiro
March 14, 2025
More Decks by TATSUNO Yasuhiro
See All by TATSUNO Yasuhiro
ゆくKotlin くるRust
exoego
1
260
Bun に LCOV 出力を実装した
exoego
2
350
terraform-provider-aws にプルリクして マージされるまで
exoego
2
500
ライブラリをパブリッシュせずにすばやく試す
exoego
2
350
esbuild 最適化芸人
exoego
3
2.7k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
900
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
110
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
830
Scala と AWS でフルサーバーレス開発事例 / How Chatworks uses Scala and Serverless
exoego
3
1.7k
Other Decks in Programming
See All in Programming
Vibe NLP for Applied NLP
inesmontani
PRO
0
430
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
270
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
210
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
250
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
460
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
180
アーキテクチャモダナイゼーションとは何か
nwiizo
17
5.2k
Vibe하게 만드는 Flutter GenUI App With ADK , 박제창, BWAI Incheon 2026
itsmedreamwalker
0
550
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
290
「速くなった気がする」をデータで疑う
senleaf24
0
180
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
370
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
380
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
106
240k
Faster Mobile Websites
deanohume
310
31k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
350
A Modern Web Designer's Workflow
chriscoyier
698
190k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
370
Producing Creativity
orderedlist
PRO
348
40k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Transcript
TATSUNO Yasuhiro 2025/03/14 #scala_waiwai TATSUNO Yasuhiro Implementing C-like-for for GLSL
in Scala 3
自己紹介 - TATSUNO Yasuhiro @exoego on GitHub & Twitter(𝕏) -
データ分析系 SaaS の Stuff Software Engineer - 趣味で Scala Steward のメンテナンスなどをしています - 東京のおいしいカレー屋を食べて帰りたいので教えてく ださい
わたしと Scala 3年間 Isomorphic Scala.jsで 開発してました 最近は主に TypeScript と Kotlin
でメシを食べてます
【悲報】 会社で新規に Scala 利用禁止令
仕事で書けないなら 趣味で書けばいい 大井昌和『パンがなければ焼けばいい』竹書房, 2022
個人開発で作りたいものが 特にないのだった… 個人開発してる人マジすごい https://nota.connpass.com/event/346659/
あっ… ゲーム作りたかったな… 小学生のころから… 30年何もできてないが… アスキー『RPGツクール2』1996
Scala 製ゲームエンジン Indigo Scala.js で JS に変換し、ブラウザなどで実行 開発されたゲームがスマホに数個リリースされてる グラフィックスは WebGL
で描画 Scala で Shader を書ける
ゲームにおける Shader とはなんぞや 2D や 3D のグラフィックスを計算で加工する仕組み 光と影、質感、画面効果などを与えられる、らしい https://www.reddit.com/r/admincraft/comments/k4pibq/made_a_comparison_of_the_3_most_popular_shaders/ Minecraft
における光源や水表現の強化 https://www.reddit.com/r/RetroGamePorn/comments/10k40am/jet_set_radio_wi thout_celshaded_graphics_is_cursed/#lightbox Jet Set Radio におけるトゥーンレンダリング
Shader ってどう書くの GLSL(OpenGL Shading Language)という C 風言語が主。 グラフィックス処理に必須のベクトルや行列を扱えて、色ん なハードウェアで動かせる、らしい 他にも固有言語あり
• High-Level Shading Language。Microsoft DirectX 用 • Metal Shading Language。Apple の Metal 用
Shader でこんなことも 素材なし、計算だけで イケてるグラフィックスを生成 センスがあれば…… https://x.com/XorDev/status/1605413317165490176
Scala ゲームエンジン Indigo で Shader はどう使う? ultraviolet という Scala 3
to GLSL トランスパイラーが Scala コードを GLSL に変換してくれる !!!!
ultraviolet で生成する GLSL Shader 型は単純な関数 c-like な for cfor(初期状態, 継続条件,
次の状態) 中身こんな感じ。えっ普通…? これが GLSL WebGL で実行できる ここで魔法が起きます
魔法の中身 = Scala 3マクロ ≒ コンパイル時の AST 変 換 fragment.toGLSL[T]
は cfor コードから GLSL 文字列を コンパイル時に生成 入力:Shader インスタンスの AST 出力:別の AST 今回は GLSL インスタンス
AST 変換:欲しいツリーをマッチで こんな cfor を こんなツリーのパターンマッチで解析して あとは新しいツリーを生成するだけ マッチ作るまでがダルかった
https://x.com/McDonaldsJapan/status/1892439036947485111 kwsk はこちらを見るお https://github.com/PurpleKingdomGames/ultraviolet/pull/142
ところで ゲーム開発どうなった? アッ ハイ…… 終