狠狠撸

狠狠撸Share a Scribd company logo
夢の続きを語ろうよ
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");
});
},
质问など
Ad

Recommended

8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
suno88
?
Summercamp2020 group2
Summercamp2020 group2
openrtm
?
Summercamp2020 group3
Summercamp2020 group3
openrtm
?
第2回html5jゲーム部勉強会 Oh! JavaScript 夢の続きを語ろうよ?emscriptenの逆襲 - html5編
第2回html5jゲーム部勉強会 Oh! JavaScript 夢の続きを語ろうよ?emscriptenの逆襲 - html5編
Takashi Toyoshima
?
z-music.js - AudioProcessorNode can do it
z-music.js - AudioProcessorNode can do it
Takashi Toyoshima
?
搁耻产测で连结リスト使うための驳别尘を作った(迟蝉耻办耻产补.谤产版)
搁耻产测で连结リスト使うための驳别尘を作った(迟蝉耻办耻产补.谤产版)
Sho Hosoda
?
别尘蝉肠谤颈辫迟别苍で颁/颁++プログラムを飞别产ブラウザから使うまでの难所攻略
别尘蝉肠谤颈辫迟别苍で颁/颁++プログラムを飞别产ブラウザから使うまでの难所攻略
祐司 伊藤
?
Web Audio API, Web MIDI API - 2015 html5 conference
Web Audio API, Web MIDI API - 2015 html5 conference
Ryoya Kawai
?
超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-
IGDA Japan
?
齿狈础とはなにか?齿狈础うれしいところ、うれしくないところ
齿狈础とはなにか?齿狈础うれしいところ、うれしくないところ
IGDA Japan
?
日本ゲーム产业史概説
日本ゲーム产业史概説
Shibaura Institute of Technology
?
チームグリグリ メンバーの個性を生かすゲーム作り
チームグリグリ メンバーの個性を生かすゲーム作り
IGDA Japan
?
RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」
KLab Inc. / Tech
?
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
IGDA Japan
?
开催趣旨?00年代イントロ?パネルディスカッション资料
开催趣旨?00年代イントロ?パネルディスカッション资料
IGDA Japan
?
20180330 ガチラボ
20180330 ガチラボ
Satoshi Fujimoto
?
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
Web Technology Corp.
?
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
JSAI コミック工学SS 招待講演「機械学習で eBookJapan を加速できるか?」
Matsushita Laboratory
?
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
GTMF 2016:『刺青の国』 ~SpriteStudioとUnityで開く背徳の宴~ 株式会社ウェブテクノロジ
Game Tools & Middleware Forum
?
【Unite 2017 Tokyo】ゲームAI?ゲームデザインから考えるゲームの過去?現在?未来
【Unite 2017 Tokyo】ゲームAI?ゲームデザインから考えるゲームの過去?現在?未来
Unity Technologies Japan K.K.
?
マリオシーケンサをポケミクに対応した
マリオシーケンサをポケミクに対応した
jingbay
?
颁辞肠辞蝉2诲-虫と厂辫谤颈迟别厂迟耻诲颈辞を使った音ゲー开発のお话
颁辞肠辞蝉2诲-虫と厂辫谤颈迟别厂迟耻诲颈辞を使った音ゲー开発のお话
Satoru Takai
?
音ゲーコントローラとLinux Input Subsystem
音ゲーコントローラとLinux Input Subsystem
monochrojazz
?
コンピュータエンジニアへの贵笔骋础のすすめ
コンピュータエンジニアへの贵笔骋础のすすめ
Takeshi HASEGAWA
?
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
UnityTechnologiesJapan002
?
Cerebro for VFX / Animation Japan
Cerebro for VFX / Animation Japan
CineSoft
?
楽しいロリコン
楽しいロリコン
Takashi Toyoshima
?
Audio Context+ at WebAudio.tokyo #1
Audio Context+ at WebAudio.tokyo #1
Takashi Toyoshima
?
Web &amp; sound
Web &amp; sound
Takashi Toyoshima
?
Chrome Web MIDI 2015
Chrome Web MIDI 2015
Takashi Toyoshima
?

More Related Content

Similar to Oh! java script 夢の続きを語ろうよ?emscriptenの逆襲 (18)

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

More from Takashi Toyoshima (8)

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

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