際際滷

際際滷Share a Scribd company logo
Unreal Engineが5晩でasm.js
晒竃栖たといて
2014/03/25 KLab ALM 噫dLT
@muo_jp
?なかざわ けい?? @muo_jp
プログラミング19定朕 29r
(BASIC★C★PHP★Ruby★Python★C#2.0★C#3.0★C#4.0)
芙氏繁 10定朕(20r゛)、U嗔俐平(ITI順のU藺壞)
KLab 4定朕(Kラボラトリ`侭奉 C#割)
Playgroundというゲ`ムエンジンのOSSメンテナ
どんな?
!
100,000佩のC++コ`ドを
JavaScriptにQする
念晩T: C++/CLIで
PSVita/PSMへ卞峅
しようとして払
(2013定ゴ`ルデンウィ`ク)
念指までのあらすじ
Webの隆栖 ゛ PNaClとasm.jsでカワルミライ - いま、
モバイルWebの枠極で軟こっていること
http://www.slideshare.net/KeiNakazawa/web-
pnaclasmjs-web
2013/11/22念瘁に{べてたT?をまとめたもの
念指のY
hくない隆栖に、匯協參貧のコンテンツがWebへ指
「するはず
F彜でえている、C/C++でかれたゲ`ムエンジン
卞峅の嗤薦xk岔はPNaClとasm.js
この枠は匯業やってみたほうがえてくるはず
Playgroundのア`キテクチャ
http://www.klab.com/jp/press/130926.html
温壊馨.逮壊晒する何蛍
100,000佩階の遺++コ`ド
まず10扮寂やってみよう
8扮寂ほどコ`ドをり宜す
輝隼匯庶Iではいかない
┌爛?????
abort() at Error
at stackTrace (/.../playground/Engine/porting/emscripten/p.js:1032:15)
at abort (/.../playground/Engine/porting/emscripten/p.js:289649:25)
at nullFunc_viiiiii (/.../playground/Engine/porting/emscripten/p.js:8235:1574)
at Array.b978 [as 0] (/playground/Engine/porting/emscripten/p.js:287407:99)
at Object._main (/.../playground/Engine/porting/emscripten/p.js:11640:43)
at Object.callMain (/.../playground/Engine/porting/emscripten/p.js:289544:30)
at doRun (/.../playground/Engine/porting/emscripten/p.js:289597:25)
at run (/.../playground/Engine/porting/emscripten/p.js:289612:5)
at Object.<anonymous> (/.../playground/Engine/porting/emscripten/p.js:289669:1)
at Module._compile (module.js:456:26)
伉孵れました(3埖貧儁)
このへんをcodelunch.fm
というpodcastで爰って
きました
12扮寂ほどおかわり
怎りないライブラリのソ`ス
を憤ってきたりプラットフォ`
ム卆贋何蛍を岷したり
欹呂杯iむ
15945 $1 = 0;
15946 $2 = $argc;
15947 $3 = $argv;
15948 $width = 800;
15949 $height = 480;
15950 _emscripten_asm_const(((1168)|0));
15951 $6 = (__Znwj(32)|0);
15952 $7 = $6;
15953 __THREW__ = 0;
15954 invoke_viiiiii(6,($7|0),((1264)|0),((1272)|0),((1280)|0),((1288)|0),((1296)|0));
15955 $8 = __THREW__; __THREW__ = 0;
15956 $9 = $8&1;
15957 if (!($9)) {
15958 $pRequest = $7;
15959 $10 = (__ZN12CPFInterface11getInstanceEv()|0);
15960 $pfif = $10;
15961 $11 = $pRequest;
15962 __ZN15CAndroidRequest4initEv($11);
15963 $12 = $pRequest;
15964 __ZN15CAndroidRequest11setHomePathEPKc($12,(1312));
15965 $vararg_ptr = ($vararg_buffer);
15966 HEAP32[$vararg_ptr>>2] = (1320);
15967 _emscripten_log(1,($vararg_buffer|0));
15968 $13 = $pfif;
15969 $14 = $pRequest;
15970 $15 = $14;
15971 __ZN12CPFInterface18setPlatformRequestEP16IPlatformRequest($13,$15);
15972 (__ZN18KLBPlatformMetrics11getInstanceEv()|0);
温壊馨.逮壊をiむ
ifのelse箸鯣煢L晒して托めzむケ`スもある。?
アセンブリiんでるとよくあること。
謹蛍MSILを晩械議に
iんでるC#櫃らし
たら劾奮パンケ`キ
みたいなもの
☆sourcemapはちょい喘余が`うので、?
やっぱアセンブリをiむ
で、竃栖た潤惚は´
Y惚
Luaスクリプトの?
g佩まで撹孔
glClearColorとか咾
テクスチャ宙鮫はまだ
圷井(iOS Simulator)
Chrome 33
Firefox 27
温壊馨.逮壊晒できた何蛍
枠は100rg+かかりそうだけど、
できそうな羨ては羨った
參和温壊馨.逮壊i慕湖詢
ここがイケてるemscripten:
ファイルシステムのQい
掲械にgにファイル蛤を函りzめる
!
!
!
!
ちなみにWebブラウザ貧で伏撹したデ`タを
IndexedDBU喇で喟A晒できる碧Mみを戻工してる
$ emcc -s ASSERTIONS=2 -s LEGACY_GL_EMULATION=1
--embed-file simple_item/@/install/ -O0 ./*.o -o p.html
16 Module['FS_createPath']('/', 'install', true, true);
17 Module['FS_createDataFile']('/install', 'itemimage.png.imag', [76, 73, 78, 75, 0, 0, 0,
18 Module['FS_createDataFile']('/install', 'SimpleItem.lua', [102, 117, 110, 99, 116, 105,
19 Module['FS_createDataFile']('/install', 'start.lua', [102, 117, 110, 99, 116, 105, 111,
20 Module['FS_createDataFile']('/install', 'textureBoat.texb', [84, 69, 88, 66, 0, 1, 146,
ここがイケてるemscripten:
EM_ASM();
インラインアセンブリ議なインラインJavaScript
うわっと房うけど、oいより100蔚マシ。措いxk
匯鬄△海琳个罵スコ`プのポインタ乾れる
501 int main(int argc, char* argv[])
502 {
503 int width = 800;
504 int height = 480;
505 EM_ASM(
506 Browser.createContext(Module.canvas, true, true, {});
507 Browser.setCanvasSize(800, 480, true);
508 );
509
510 CAndroidRequest * pRequest = new CAndroidRequest("model", "brand", "boar
511 CPFInterface& pfif = CPFInterface::getInstance();
OpenGL ES 1.1喘コ`ルは
絶囑の徊
お、おう(PlaygroundはOpenGL ES 1.1+タ`ゲット)
4280 var glTexEnvi = (typeof(_glTexEnvi) != 'undefined') ? _glTexEnvi : function(){};
4281 _glTexEnvi = _emscripten_glTexEnvi = function _glTexEnvi(target, pname, param) {
4282 GLImmediate.TexEnvJIT.hook_texEnvi(target, pname, param);
4283 // Don't call old func, since we are the implementor.
4284 //glTexEnvi(target, pname, param);
4285 };
emscripten/1.13.0/src/library_gl.js あたりをiむ
仇祇デバッグ
匯何を筝してem++でコンパイル、emccでJSファ
イルを預き竃してリロ`ドあたりまでは10昼ぐらい
でいける。かなりインタラクション堀い
ただし: ChromeのJSコンソ`ルで15嵐佩埆えのあた
りにブレ`クポイントを峭めようとすると30昼ぐら
いかかる
リビルド恷堀を朕峺して
-O0コンパイル?
-O0リンク(8.8MiB?堀い)
-O0コンパイル?
-O2リンク(2.7MiB?Wい)
-O2コンパイル?
-O2リンク(2.8MiB?Wい)
WonderSwan:emscripten keinakazawa$ ls -l p.*
-rw-r--r-- 1 keinakazawa staff 101607 Mar 25 18:57 p.html
-rw-r--r-- 1 keinakazawa staff 67 Mar 25 18:57 p.html.map
-rw-r--r-- 1 keinakazawa staff 8967061 Mar 25 18:57 p.js
-rw-r--r-- 1 keinakazawa staff 65 Mar 25 12:11 p.js.map
WonderSwan:emscripten keinakazawa$ ls -l p.*
-rw-r--r-- 1 keinakazawa staff 101607 Mar 25 18:59 p.html
-rw-r--r-- 1 keinakazawa staff 67 Mar 25 18:57 p.html.map
-rw-r--r-- 1 keinakazawa staff 2831435 Mar 25 18:59 p.js
-rw-r--r-- 1 keinakazawa staff 65 Mar 25 12:11 p.js.map
WonderSwan:emscripten keinakazawa$ ls -l p.*
-rw-r--r-- 1 keinakazawa staff 101607 Mar 25 19:02 p.html
-rw-r--r-- 1 keinakazawa staff 67 Mar 25 18:57 p.html.map
-rw-r--r-- 1 keinakazawa staff 2941528 Mar 25 19:02 p.js
-rw-r--r-- 1 keinakazawa staff 65 Mar 25 12:11 p.js.map
佩e`嶄はO0でビルド、g佩撹孔まで
隔っていくのが耳(ビルドrgが3蔚ぐらい`う)
24rg原き栽った咫
emscripten(asm.js)は、?
JSとC++で笋錣辰討る何蛍をうまく簾Г靴弔帖r
に胆しくrに釣株く(=恷)M佩してるプロジェクト
火るJSのつらみ: メモリ腎g慌嗤できる
マルチスレッドCがない
とpodcastで爰ってたら コメントいた
!
!
!
!
!
( 'ω')??????????????``???。
https://bugzilla.mozilla.org/show_bug.cgi?id=933001
侭湖
書のところは、亊。極挑での嘛よりもWindows/Mac貧での嘛
にgったほうが措いY惚になる(SDLと貌た羨ち了崔)?
Luaのスクリプトを筝して3昼で嘛_Jできる(弌トなら)
_k嶄、どんどんリソ`スをきQえていくのに措い
デ`タサイズはやっぱり}。けど、バックグラウンドロ`ドをう
まくg廾すれば、富なくとも芙坪でのテスト喘余には護といける?
もう富しMむと、愔WebView+´でやってたものの侘が剃する
書瘁に鬚韻進岾屬奏n}
Make?leをいい湖じに屁
asm.js晒するプロジェクトによって來|がなるので、ちゃんと深える
餓蛍ビルドをやりやすいように
emscripten耕嗤何蛍をなるべく富ないw侭に]じzめる
g佩rにエラ`となりうるw侭をmake testなどで並念に游めるように
これについては、掲ブラウザg佩r(node.jsg佩r)にOpenGL狼のコ`
ルを匯俳k佩しないようにするなど、採かしらの返を秘れる駅勣がある

More Related Content

雨稼姻艶温鉛掘稼乙庄稼艶が5晩寂で温壊馨.逮壊晒できたと療いた鯵たちは´