SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
夢の続きを語ろうよ
Emscriptenの逆襲
sun6925 とよしま
ウェブ大好きっ子
低レイヤー大好きっ子
レトロPC大好きっ子
X68000大好きっ子
大丈夫、ウェブ業界の人です。仲良くしてください。
知ってますか?
● なぜか 編集部が作ったゲーム
○ 創刊10周年記念 PRO-68K に収録
(雑誌付録ディスク)
○ 編集部制作の強力インフラ
■ MAGIC2 - 3D描画ライブラリ
■ Z-MUSIC - サウンドドライバ
○ ゲーム自体、普通に面白い
実演
原作@エミュレータ
あれ?ショボい!
256 x 256 ドット 16 色 ワイヤフレーム
・
・
・
んじゃ、高解像度化しますか
実演
ハイレゾ@ウェブ
bit.ly/sion2
原作をウェブで
Powered by Emscripten
run68 (in C)
sion2.x
(Binary for X68k)
実行
JavaScript VM
実行
互換レイヤー
(in JavaScript)
DOS/IOCS
MAGIC
Z-MUSIC
GVRAM I/O
<iframe>
zmusic.x
(Binary for X68k)
非同期RPC化
ここで気合
ハイレゾ化するぞ!
X68Sound.dll (in C++)
run68 (in C)
高解像度+16:9化
256 pixel
256 lines
ピクセル
アスペクト比
4:3 1080 lines
1440 pixel
4:3
1920 pixel
16:9
アスペクト比補正+ベクトル拡大
+本来見えていなかった部分の表示
ワイヤーフレームは楽勝
ビットマップ文字のベクターフォント置き換え
一部の文字(4×6サイズ)が画像だった
● 仕方ないのでGVRAMのアクセスパタンから文字推定
{ “111010101110101010100000”: 64, ... }
文字コード64
A
内部で使ってる主な技術
● HTML5 Canvas(2D)
○ WebGLは使わずにJavaScriptで座標変換計算
● Web Audio API
○ FM音源と音響処理(リバーブ)
● Web App Manifest
○ モバイルでホームスクリーン追加
● Gamepad API / TouchEvent
● WebFonts
Emscriptenまめ知識〜その1
描画ループにrequestAnimationFrameを使う
❏ emscripten_set_main_loop()を使いましょう
void emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop)
❏ fpsに0を指定するとrequestAnimationFrameが使われる
❏ それ以外の値だとsetTimeoutを使うので注意
❏ 失敗談:知らずにsetTimeoutを書き換えて中からrAF呼んでた
❏ simulate_infinite_loop=1でこの関数から戻らない
Emscriptenまめ知識〜その2
常駐するサービス・ライブラリを作る
❏ emscripten_exit_with_live_runtime()で常駐
void emscripten_exit_with_live_runtime(void)
❏ ひとまず実行終了
❏ ただしatexit()系やリソース解放処理は走らない
❏ JavaScriptからC/C++の関数を継続して呼び出し可能
❏ 空のmain()から呼べば共有ライブラリっぽい物が作れる
Emscriptenまめ知識〜その3
JavaScriptから呼び出せる関数を(確実に)作る
❏ リンク時に-s EXPORTED_FUNCTIONS="..."
❏ "..."にはmainを含めた関数のリストを渡す
例:"['_main', '_myAPI1', '_myAPI2']"
❏ 関数名は"_"のプレフィクスが付くので注意
❏ 数値以外は直接渡せない点に注意
❏ C/C++側のメモリ空間はModule.HEAPU8等でアクセス
❏ Module.cwrap()やWebIDL-Binderなどの道具はある
Emscriptenまめ知識〜その4
JavaScriptのライブラリを呼び出す
❏ リンク時に--js-library myLibrary.jsで組み込む
❏ 渡すJavaScriptは特定の方法で記述されている必要がある
mergeInto(LibraryManager.library, {
myFunc: function(a, b) {
// ここから外の世界は直接触れる(this==Window)
console.info(‘hello my func’);
return a + b;
}, // 以下、同様に関数を定義
});
❏ 登録なしでCから呼ぶとundefined symbolで実行時abort
Emscriptenまめ知識〜その5
実行開始を遅延させる
❏ preInit内でaddRunDependency()を呼ぶ
❏ 対応するremoveRunDependency()が呼ばれるまで待つ
❏ WebFonts読み込みを待つ例
preInit: function() {
Module.addRunDependency("fonts");
document.fonts.ready.then(function() {
Module.removeRunDependency("fonts");
});
},
質問など

Weitere ähnliche Inhalte

Ähnlich wie Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲

超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-IGDA Japan
 
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところXNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところIGDA Japan
 
チームグリグリ メンバーの個性を生かすゲーム作り
チームグリグリ メンバーの個性を生かすゲーム作りチームグリグリ メンバーの個性を生かすゲーム作り
チームグリグリ メンバーの個性を生かすゲーム作りIGDA Japan
 
RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」KLab Inc. / Tech
 
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題IGDA Japan
 
開催趣旨・00年代イントロ・パネルディスカッション資料
開催趣旨・00年代イントロ・パネルディスカッション資料開催趣旨・00年代イントロ・パネルディスカッション資料
開催趣旨・00年代イントロ・パネルディスカッション資料IGDA Japan
 
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」Web Technology Corp.
 
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」Matsushita Laboratory
 
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジGTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジGame Tools & Middleware Forum
 
【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来
【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来
【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来Unity Technologies Japan K.K.
 
マリオシーケンサをポケミクに対応した
マリオシーケンサをポケミクに対応したマリオシーケンサをポケミクに対応した
マリオシーケンサをポケミクに対応したjingbay
 
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話Satoru Takai
 
音ゲーコントローラとLinux Input Subsystem
音ゲーコントローラとLinux Input Subsystem音ゲーコントローラとLinux Input Subsystem
音ゲーコントローラとLinux Input Subsystemmonochrojazz
 
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめコンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめTakeshi HASEGAWA
 
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能についてUnityTechnologiesJapan002
 
Cerebro for VFX / Animation Japan
Cerebro for VFX / Animation JapanCerebro for VFX / Animation Japan
Cerebro for VFX / Animation JapanCineSoft
 

Ähnlich wie Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲 (18)

超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
 
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところXNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところ
 
日本ゲーム産業史概説
日本ゲーム産業史概説日本ゲーム産業史概説
日本ゲーム産業史概説
 
チームグリグリ メンバーの個性を生かすゲーム作り
チームグリグリ メンバーの個性を生かすゲーム作りチームグリグリ メンバーの個性を生かすゲーム作り
チームグリグリ メンバーの個性を生かすゲーム作り
 
RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」
 
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
 
開催趣旨・00年代イントロ・パネルディスカッション資料
開催趣旨・00年代イントロ・パネルディスカッション資料開催趣旨・00年代イントロ・パネルディスカッション資料
開催趣旨・00年代イントロ・パネルディスカッション資料
 
20180330 ガチラボ
20180330 ガチラボ20180330 ガチラボ
20180330 ガチラボ
 
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
 
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
 
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジGTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
 
【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来
【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来
【Unite 2017 Tokyo】ゲームAI・ゲームデザインから考えるゲームの過去・現在・未来
 
マリオシーケンサをポケミクに対応した
マリオシーケンサをポケミクに対応したマリオシーケンサをポケミクに対応した
マリオシーケンサをポケミクに対応した
 
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
 
音ゲーコントローラとLinux Input Subsystem
音ゲーコントローラとLinux Input Subsystem音ゲーコントローラとLinux Input Subsystem
音ゲーコントローラとLinux Input Subsystem
 
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめコンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめ
 
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
 
Cerebro for VFX / Animation Japan
Cerebro for VFX / Animation JapanCerebro for VFX / Animation Japan
Cerebro for VFX / Animation Japan
 

Mehr von Takashi Toyoshima

Mehr von Takashi Toyoshima (8)

楽しいロリコン
楽しいロリコン楽しいロリコン
楽しいロリコン
 
Audio Context+ at WebAudio.tokyo #1
Audio Context+ at WebAudio.tokyo #1Audio Context+ at WebAudio.tokyo #1
Audio Context+ at WebAudio.tokyo #1
 
Web &amp; sound
Web &amp; soundWeb &amp; sound
Web &amp; sound
 
Chrome Web MIDI 2015
Chrome Web MIDI 2015Chrome Web MIDI 2015
Chrome Web MIDI 2015
 
子供と使う便利ツール
子供と使う便利ツール子供と使う便利ツール
子供と使う便利ツール
 
Web MIDI API update
Web MIDI API updateWeb MIDI API update
Web MIDI API update
 
Web MIDI API - the paster, the present, and the future -
Web MIDI API - the paster, the present, and the future -Web MIDI API - the paster, the present, and the future -
Web MIDI API - the paster, the present, and the future -
 
USB MIDI - DMX bridge
USB MIDI - DMX bridgeUSB MIDI - DMX bridge
USB MIDI - DMX bridge
 

Kürzlich hochgeladen

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Kürzlich hochgeladen (9)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Oh! java script 夢の続きを語ろうよ〜emscriptenの逆襲