webruby 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/config.rb +4 -9
  3. data/lib/webruby/rake/files.rake +2 -2
  4. data/modules/emscripten/AUTHORS +9 -1
  5. data/modules/emscripten/CONTRIBUTING.markdown +5 -0
  6. data/modules/emscripten/ChangeLog +435 -0
  7. data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
  8. data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
  9. data/modules/emscripten/em++ +0 -2
  10. data/modules/emscripten/emcc +92 -32
  11. data/modules/emscripten/emlink.py +16 -13
  12. data/modules/emscripten/emmake +1 -1
  13. data/modules/emscripten/emrun +918 -0
  14. data/modules/emscripten/emrun.bat +2 -0
  15. data/modules/emscripten/emscripten.py +545 -20
  16. data/modules/emscripten/src/analyzer.js +6 -1
  17. data/modules/emscripten/src/compiler.js +25 -16
  18. data/modules/emscripten/src/emrun_postjs.js +20 -0
  19. data/modules/emscripten/{tests → src}/hello_world.js +0 -0
  20. data/modules/emscripten/src/intertyper.js +45 -16
  21. data/modules/emscripten/src/jsifier.js +78 -48
  22. data/modules/emscripten/src/library.js +381 -96
  23. data/modules/emscripten/src/library_browser.js +50 -53
  24. data/modules/emscripten/src/library_egl.js +66 -24
  25. data/modules/emscripten/src/library_fs.js +122 -90
  26. data/modules/emscripten/src/library_gl.js +739 -353
  27. data/modules/emscripten/src/library_glfw.js +9 -3
  28. data/modules/emscripten/src/library_glut.js +10 -5
  29. data/modules/emscripten/src/library_idbfs.js +14 -14
  30. data/modules/emscripten/src/library_memfs.js +65 -41
  31. data/modules/emscripten/src/library_nodefs.js +61 -9
  32. data/modules/emscripten/src/library_openal.js +4 -4
  33. data/modules/emscripten/src/library_path.js +9 -13
  34. data/modules/emscripten/src/library_sdl.js +301 -64
  35. data/modules/emscripten/src/library_sockfs.js +7 -5
  36. data/modules/emscripten/src/modules.js +62 -22
  37. data/modules/emscripten/src/parseTools.js +135 -102
  38. data/modules/emscripten/src/postamble.js +3 -4
  39. data/modules/emscripten/src/preamble.js +49 -29
  40. data/modules/emscripten/src/proxyClient.js +1 -1
  41. data/modules/emscripten/src/proxyWorker.js +10 -10
  42. data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
  43. data/modules/emscripten/src/runtime.js +32 -8
  44. data/modules/emscripten/src/settings.js +25 -8
  45. data/modules/emscripten/src/shell.html +6 -3
  46. data/modules/emscripten/src/shell.js +13 -11
  47. data/modules/emscripten/src/simd.js +602 -432
  48. data/modules/emscripten/src/struct_info.json +22 -2
  49. data/modules/emscripten/src/utility.js +32 -17
  50. data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
  51. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  52. data/modules/emscripten/system/include/compat/wchar.h +23 -0
  53. data/modules/emscripten/system/include/compat/wctype.h +23 -0
  54. data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
  55. data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
  56. data/modules/emscripten/system/include/emscripten/vector.h +29 -1
  57. data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
  58. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
  59. data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
  60. data/modules/emscripten/system/include/libcxx/__config +95 -17
  61. data/modules/emscripten/system/include/libcxx/__debug +25 -4
  62. data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
  63. data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
  64. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
  65. data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
  66. data/modules/emscripten/system/include/libcxx/__locale +21 -19
  67. data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
  68. data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
  69. data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
  70. data/modules/emscripten/system/include/libcxx/__tree +35 -26
  71. data/modules/emscripten/system/include/libcxx/__tuple +15 -15
  72. data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
  73. data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
  74. data/modules/emscripten/system/include/libcxx/algorithm +121 -110
  75. data/modules/emscripten/system/include/libcxx/array +15 -15
  76. data/modules/emscripten/system/include/libcxx/bitset +4 -4
  77. data/modules/emscripten/system/include/libcxx/chrono +51 -17
  78. data/modules/emscripten/system/include/libcxx/cmath +25 -23
  79. data/modules/emscripten/system/include/libcxx/codecvt +21 -18
  80. data/modules/emscripten/system/include/libcxx/complex +48 -7
  81. data/modules/emscripten/system/include/libcxx/cstddef +1 -1
  82. data/modules/emscripten/system/include/libcxx/cstdio +8 -1
  83. data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
  84. data/modules/emscripten/system/include/libcxx/cwchar +1 -1
  85. data/modules/emscripten/system/include/libcxx/deque +26 -12
  86. data/modules/emscripten/system/include/libcxx/dynarray +311 -0
  87. data/modules/emscripten/system/include/libcxx/exception +4 -4
  88. data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
  89. data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
  90. data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
  91. data/modules/emscripten/system/include/libcxx/forward_list +33 -7
  92. data/modules/emscripten/system/include/libcxx/fstream +4 -4
  93. data/modules/emscripten/system/include/libcxx/functional +200 -170
  94. data/modules/emscripten/system/include/libcxx/future +83 -39
  95. data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
  96. data/modules/emscripten/system/include/libcxx/iomanip +147 -0
  97. data/modules/emscripten/system/include/libcxx/ios +24 -16
  98. data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
  99. data/modules/emscripten/system/include/libcxx/istream +13 -8
  100. data/modules/emscripten/system/include/libcxx/iterator +108 -417
  101. data/modules/emscripten/system/include/libcxx/limits +8 -4
  102. data/modules/emscripten/system/include/libcxx/list +28 -8
  103. data/modules/emscripten/system/include/libcxx/locale +153 -390
  104. data/modules/emscripten/system/include/libcxx/map +280 -100
  105. data/modules/emscripten/system/include/libcxx/memory +49 -97
  106. data/modules/emscripten/system/include/libcxx/mutex +2 -2
  107. data/modules/emscripten/system/include/libcxx/new +43 -14
  108. data/modules/emscripten/system/include/libcxx/numeric +2 -2
  109. data/modules/emscripten/system/include/libcxx/optional +697 -0
  110. data/modules/emscripten/system/include/libcxx/ostream +17 -8
  111. data/modules/emscripten/system/include/libcxx/queue +5 -5
  112. data/modules/emscripten/system/include/libcxx/random +53 -51
  113. data/modules/emscripten/system/include/libcxx/ratio +11 -11
  114. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  115. data/modules/emscripten/system/include/libcxx/regex +23 -20
  116. data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
  117. data/modules/emscripten/system/include/libcxx/set +166 -2
  118. data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
  119. data/modules/emscripten/system/include/libcxx/sstream +4 -4
  120. data/modules/emscripten/system/include/libcxx/stack +3 -3
  121. data/modules/emscripten/system/include/libcxx/streambuf +5 -5
  122. data/modules/emscripten/system/include/libcxx/string +372 -324
  123. data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
  124. data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
  125. data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
  126. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
  127. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
  128. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
  129. data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
  130. data/modules/emscripten/system/include/libcxx/system_error +14 -8
  131. data/modules/emscripten/system/include/libcxx/thread +7 -8
  132. data/modules/emscripten/system/include/libcxx/tuple +29 -88
  133. data/modules/emscripten/system/include/libcxx/type_traits +253 -209
  134. data/modules/emscripten/system/include/libcxx/typeindex +3 -3
  135. data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
  136. data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
  137. data/modules/emscripten/system/include/libcxx/utility +20 -20
  138. data/modules/emscripten/system/include/libcxx/valarray +23 -23
  139. data/modules/emscripten/system/include/libcxx/vector +114 -91
  140. data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
  141. data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
  142. data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
  143. data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
  144. data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
  145. data/modules/emscripten/system/lib/libcextra.symbols +7 -0
  146. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
  147. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
  148. data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
  149. data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
  150. data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
  151. data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
  152. data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
  153. data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
  154. data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
  155. data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
  156. data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
  157. data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
  158. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  159. data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
  160. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
  161. data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
  162. data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
  163. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
  164. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
  165. data/modules/emscripten/system/lib/libcxx/symbols +187 -168
  166. data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
  167. data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
  168. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
  169. data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
  170. data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
  171. data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
  172. data/modules/emscripten/tools/cache.py +5 -7
  173. data/modules/emscripten/tools/cache.pyc +0 -0
  174. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
  175. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
  176. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
  177. data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
  178. data/modules/emscripten/tools/file_packager.py +93 -50
  179. data/modules/emscripten/tools/js-optimizer.js +98 -48
  180. data/modules/emscripten/tools/js_optimizer.py +4 -4
  181. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  182. data/modules/emscripten/tools/jsrun.py +1 -1
  183. data/modules/emscripten/tools/jsrun.pyc +0 -0
  184. data/modules/emscripten/tools/response_file.py +6 -0
  185. data/modules/emscripten/tools/response_file.pyc +0 -0
  186. data/modules/emscripten/tools/settings_template_readonly.py +2 -0
  187. data/modules/emscripten/tools/shared.py +88 -34
  188. data/modules/emscripten/tools/shared.pyc +0 -0
  189. data/modules/emscripten/tools/split.py +21 -13
  190. data/modules/mruby/build_config.rb +7 -1
  191. data/modules/mruby/doc/compile/README.md +5 -9
  192. data/modules/mruby/include/mrbconf.h +5 -2
  193. data/modules/mruby/include/mruby/array.h +1 -0
  194. data/modules/mruby/include/mruby/compile.h +2 -4
  195. data/modules/mruby/include/mruby/dump.h +7 -16
  196. data/modules/mruby/include/mruby/hash.h +1 -1
  197. data/modules/mruby/include/mruby/irep.h +14 -2
  198. data/modules/mruby/include/mruby/khash.h +8 -7
  199. data/modules/mruby/include/mruby/string.h +1 -0
  200. data/modules/mruby/include/mruby/value.h +5 -2
  201. data/modules/mruby/include/mruby.h +12 -13
  202. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
  203. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
  204. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
  205. data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
  206. data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
  207. data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
  208. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
  209. data/modules/mruby/mrblib/numeric.rb +99 -33
  210. data/modules/mruby/src/array.c +11 -4
  211. data/modules/mruby/src/backtrace.c +2 -2
  212. data/modules/mruby/src/class.c +49 -30
  213. data/modules/mruby/src/codegen.c +131 -79
  214. data/modules/mruby/src/debug.c +1 -1
  215. data/modules/mruby/src/dump.c +213 -163
  216. data/modules/mruby/src/error.c +17 -17
  217. data/modules/mruby/src/error.h +1 -1
  218. data/modules/mruby/src/etc.c +10 -0
  219. data/modules/mruby/src/gc.c +35 -17
  220. data/modules/mruby/src/hash.c +5 -5
  221. data/modules/mruby/src/kernel.c +36 -14
  222. data/modules/mruby/src/load.c +238 -296
  223. data/modules/mruby/src/numeric.c +18 -98
  224. data/modules/mruby/src/object.c +3 -5
  225. data/modules/mruby/src/parse.y +63 -56
  226. data/modules/mruby/src/proc.c +8 -5
  227. data/modules/mruby/src/re.h +0 -1
  228. data/modules/mruby/src/state.c +65 -27
  229. data/modules/mruby/src/string.c +3 -31
  230. data/modules/mruby/src/symbol.c +3 -3
  231. data/modules/mruby/src/variable.c +12 -5
  232. data/modules/mruby/src/vm.c +90 -72
  233. data/modules/mruby/tasks/mruby_build.rake +10 -1
  234. data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
  235. data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
  236. data/modules/mruby/test/driver.c +3 -3
  237. data/modules/mruby/test/t/array.rb +5 -5
  238. data/modules/mruby/test/t/class.rb +14 -1
  239. data/modules/mruby/test/t/kernel.rb +4 -0
  240. data/modules/mruby/test/t/module.rb +4 -4
  241. data/modules/mruby/test/t/nameerror.rb +1 -1
  242. data/modules/mruby/tools/mrbc/mrbc.c +23 -17
  243. data/modules/mruby/travis_config.rb +10 -1
  244. metadata +28 -5
  245. data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -4,12 +4,12 @@
4
4
 
5
5
  mergeInto(LibraryManager.library, {
6
6
  $Browser__deps: ['$PATH'],
7
- $Browser__postset: 'Module["requestFullScreen"] = function(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };\n' + // exports
8
- 'Module["requestAnimationFrame"] = function(func) { Browser.requestAnimationFrame(func) };\n' +
9
- 'Module["setCanvasSize"] = function(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };\n' +
10
- 'Module["pauseMainLoop"] = function() { Browser.mainLoop.pause() };\n' +
11
- 'Module["resumeMainLoop"] = function() { Browser.mainLoop.resume() };\n' +
12
- 'Module["getUserMedia"] = function() { Browser.getUserMedia() }',
7
+ $Browser__postset: 'Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };\n' + // exports
8
+ 'Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };\n' +
9
+ 'Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };\n' +
10
+ 'Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };\n' +
11
+ 'Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };\n' +
12
+ 'Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }',
13
13
  $Browser: {
14
14
  mainLoop: {
15
15
  scheduler: null,
@@ -77,10 +77,10 @@ mergeInto(LibraryManager.library, {
77
77
  // might create some side data structure for use later (like an Image element, etc.).
78
78
 
79
79
  var imagePlugin = {};
80
- imagePlugin['canHandle'] = function(name) {
80
+ imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
81
81
  return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
82
82
  };
83
- imagePlugin['handle'] = function(byteArray, name, onload, onerror) {
83
+ imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
84
84
  var b = null;
85
85
  if (Browser.hasBlobConstructor) {
86
86
  try {
@@ -103,7 +103,7 @@ mergeInto(LibraryManager.library, {
103
103
  assert(typeof url == 'string', 'createObjectURL must return a url as a string');
104
104
  #endif
105
105
  var img = new Image();
106
- img.onload = function() {
106
+ img.onload = function img_onload() {
107
107
  assert(img.complete, 'Image ' + name + ' could not be decoded');
108
108
  var canvas = document.createElement('canvas');
109
109
  canvas.width = img.width;
@@ -114,7 +114,7 @@ mergeInto(LibraryManager.library, {
114
114
  Browser.URLObject.revokeObjectURL(url);
115
115
  if (onload) onload(byteArray);
116
116
  };
117
- img.onerror = function(event) {
117
+ img.onerror = function img_onerror(event) {
118
118
  console.log('Image ' + url + ' could not be decoded');
119
119
  if (onerror) onerror();
120
120
  };
@@ -123,10 +123,10 @@ mergeInto(LibraryManager.library, {
123
123
  Module['preloadPlugins'].push(imagePlugin);
124
124
 
125
125
  var audioPlugin = {};
126
- audioPlugin['canHandle'] = function(name) {
126
+ audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
127
127
  return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
128
128
  };
129
- audioPlugin['handle'] = function(byteArray, name, onload, onerror) {
129
+ audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
130
130
  var done = false;
131
131
  function finish(audio) {
132
132
  if (done) return;
@@ -152,7 +152,7 @@ mergeInto(LibraryManager.library, {
152
152
  #endif
153
153
  var audio = new Audio();
154
154
  audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
155
- audio.onerror = function(event) {
155
+ audio.onerror = function audio_onerror(event) {
156
156
  if (done) return;
157
157
  console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
158
158
  function encode64(data) {
@@ -250,13 +250,24 @@ mergeInto(LibraryManager.library, {
250
250
  contextAttributes.preserveDrawingBuffer = true;
251
251
  #endif
252
252
 
253
- ctx = canvas.getContext('experimental-webgl', contextAttributes);
253
+ var errorInfo = '?';
254
+ function onContextCreationError(event) {
255
+ errorInfo = event.statusMessage || errorInfo;
256
+ }
257
+ canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
258
+ try {
259
+ ['experimental-webgl', 'webgl'].some(function(webglId) {
260
+ return ctx = canvas.getContext(webglId, contextAttributes);
261
+ });
262
+ } finally {
263
+ canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
264
+ }
254
265
  } else {
255
266
  ctx = canvas.getContext('2d');
256
267
  }
257
268
  if (!ctx) throw ':(';
258
269
  } catch (e) {
259
- Module.print('Could not create canvas - ' + e);
270
+ Module.print('Could not create canvas: ' + [errorInfo, e]);
260
271
  return null;
261
272
  }
262
273
  if (useWebGL) {
@@ -268,7 +279,7 @@ mergeInto(LibraryManager.library, {
268
279
  (function(prop) {
269
280
  switch (typeof tempCtx[prop]) {
270
281
  case 'function': {
271
- wrapper[prop] = function() {
282
+ wrapper[prop] = function gl_wrapper() {
272
283
  if (GL.debug) {
273
284
  var printArgs = Array.prototype.slice.call(arguments).map(Runtime.prettyPrint);
274
285
  Module.printErr('[gl_f:' + prop + ':' + printArgs + ']');
@@ -359,16 +370,20 @@ mergeInto(LibraryManager.library, {
359
370
  canvas.requestFullScreen();
360
371
  },
361
372
 
362
- requestAnimationFrame: function(func) {
363
- if (!window.requestAnimationFrame) {
364
- window.requestAnimationFrame = window['requestAnimationFrame'] ||
365
- window['mozRequestAnimationFrame'] ||
366
- window['webkitRequestAnimationFrame'] ||
367
- window['msRequestAnimationFrame'] ||
368
- window['oRequestAnimationFrame'] ||
369
- window['setTimeout'];
373
+ requestAnimationFrame: function requestAnimationFrame(func) {
374
+ if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
375
+ setTimeout(func, 1000/60);
376
+ } else {
377
+ if (!window.requestAnimationFrame) {
378
+ window.requestAnimationFrame = window['requestAnimationFrame'] ||
379
+ window['mozRequestAnimationFrame'] ||
380
+ window['webkitRequestAnimationFrame'] ||
381
+ window['msRequestAnimationFrame'] ||
382
+ window['oRequestAnimationFrame'] ||
383
+ window['setTimeout'];
384
+ }
385
+ window.requestAnimationFrame(func);
370
386
  }
371
- window.requestAnimationFrame(func);
372
387
  },
373
388
 
374
389
  // generic abort-aware wrapper for an async callback
@@ -497,7 +512,7 @@ mergeInto(LibraryManager.library, {
497
512
  var xhr = new XMLHttpRequest();
498
513
  xhr.open('GET', url, true);
499
514
  xhr.responseType = 'arraybuffer';
500
- xhr.onload = function() {
515
+ xhr.onload = function xhr_onload() {
501
516
  if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
502
517
  onload(xhr.response);
503
518
  } else {
@@ -610,7 +625,7 @@ mergeInto(LibraryManager.library, {
610
625
  http.responseType = 'arraybuffer';
611
626
 
612
627
  // LOAD
613
- http.onload = function(e) {
628
+ http.onload = function http_onload(e) {
614
629
  if (http.status == 200) {
615
630
  FS.createDataFile( _file.substr(0, index), _file.substr(index + 1), new Uint8Array(http.response), true, true);
616
631
  if (onload) Runtime.dynCall('vii', onload, [arg, file]);
@@ -620,12 +635,12 @@ mergeInto(LibraryManager.library, {
620
635
  };
621
636
 
622
637
  // ERROR
623
- http.onerror = function(e) {
638
+ http.onerror = function http_onerror(e) {
624
639
  if (onerror) Runtime.dynCall('vii', onerror, [arg, http.status]);
625
640
  };
626
641
 
627
642
  // PROGRESS
628
- http.onprogress = function(e) {
643
+ http.onprogress = function http_onprogress(e) {
629
644
  var percentComplete = (e.position / e.totalSize)*100;
630
645
  if (onprogress) Runtime.dynCall('vii', onprogress, [arg, percentComplete]);
631
646
  };
@@ -705,7 +720,7 @@ mergeInto(LibraryManager.library, {
705
720
 
706
721
  assert(runDependencies === 0, 'async_load_script must be run when no other dependencies are active');
707
722
  var script = document.createElement('script');
708
- script.onload = function() {
723
+ script.onload = function script_onload() {
709
724
  if (runDependencies > 0) {
710
725
  dependenciesFulfilled = onload;
711
726
  } else {
@@ -720,7 +735,7 @@ mergeInto(LibraryManager.library, {
720
735
  emscripten_set_main_loop: function(func, fps, simulateInfiniteLoop) {
721
736
  Module['noExitRuntime'] = true;
722
737
 
723
- Browser.mainLoop.runner = function() {
738
+ Browser.mainLoop.runner = function Browser_mainLoop_runner() {
724
739
  if (ABORT) return;
725
740
  if (Browser.mainLoop.queue.length > 0) {
726
741
  var start = Date.now();
@@ -777,11 +792,11 @@ mergeInto(LibraryManager.library, {
777
792
  Browser.mainLoop.scheduler();
778
793
  }
779
794
  if (fps && fps > 0) {
780
- Browser.mainLoop.scheduler = function() {
795
+ Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
781
796
  setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
782
797
  }
783
798
  } else {
784
- Browser.mainLoop.scheduler = function() {
799
+ Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
785
800
  Browser.requestAnimationFrame(Browser.mainLoop.runner);
786
801
  }
787
802
  }
@@ -848,7 +863,7 @@ mergeInto(LibraryManager.library, {
848
863
  var styleSheet = document.styleSheets[0];
849
864
  var rules = styleSheet.cssRules;
850
865
  for (var i = 0; i < rules.length; i++) {
851
- if (rules[i].cssText.substr(0, 5) == 'canvas') {
866
+ if (rules[i].cssText.substr(0, 6) == 'canvas') {
852
867
  styleSheet.deleteRule(i);
853
868
  i--;
854
869
  }
@@ -867,24 +882,6 @@ mergeInto(LibraryManager.library, {
867
882
  {{{ makeSetValue('isFullscreen', '0', 'Browser.isFullScreen ? 1 : 0', 'i32') }}};
868
883
  },
869
884
 
870
- emscripten_get_now: function() {
871
- if (!_emscripten_get_now.actual) {
872
- if (ENVIRONMENT_IS_NODE) {
873
- _emscripten_get_now.actual = function() {
874
- var t = process['hrtime']();
875
- return t[0] * 1e3 + t[1] / 1e6;
876
- }
877
- } else if (typeof dateNow !== 'undefined') {
878
- _emscripten_get_now.actual = dateNow;
879
- } else if (ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now']) {
880
- _emscripten_get_now.actual = function() { return window['performance']['now'](); };
881
- } else {
882
- _emscripten_get_now.actual = Date.now;
883
- }
884
- }
885
- return _emscripten_get_now.actual();
886
- },
887
-
888
885
  emscripten_create_worker: function(url) {
889
886
  url = Pointer_stringify(url);
890
887
  var id = Browser.workers.length;
@@ -895,7 +892,7 @@ mergeInto(LibraryManager.library, {
895
892
  buffer: 0,
896
893
  bufferSize: 0
897
894
  };
898
- info.worker.onmessage = function(msg) {
895
+ info.worker.onmessage = function info_worker_onmessage(msg) {
899
896
  var info = Browser.workers[id];
900
897
  if (!info) return; // worker was destroyed meanwhile
901
898
  var callbackId = msg.data['callbackId'];
@@ -9,10 +9,16 @@
9
9
  var LibraryEGL = {
10
10
  $EGL: {
11
11
  // This variable tracks the success status of the most recently invoked EGL function call.
12
- eglErrorCode: 0x3000 /* EGL_SUCCESS */,
12
+ errorCode: 0x3000 /* EGL_SUCCESS */,
13
+ defaultDisplayInitialized: false,
14
+ currentContext: 0 /* EGL_NO_CONTEXT */,
15
+ currentReadSurface: 0 /* EGL_NO_SURFACE */,
16
+ currentDrawSurface: 0 /* EGL_NO_SURFACE */,
17
+
18
+ stringCache: {},
13
19
 
14
20
  setErrorCode: function(code) {
15
- EGL.eglErrorCode = code;
21
+ EGL.errorCode = code;
16
22
  },
17
23
 
18
24
  chooseConfig: function(display, attribList, config, config_size, numConfigs) {
@@ -63,6 +69,7 @@ var LibraryEGL = {
63
69
  if (minorVersion) {
64
70
  {{{ makeSetValue('minorVersion', '0', '4', 'i32') }}}; // Advertise EGL Minor version: '4'
65
71
  }
72
+ EGL.defaultDisplayInitialized = true;
66
73
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
67
74
  return 1;
68
75
  }
@@ -78,18 +85,10 @@ var LibraryEGL = {
78
85
  EGL.setErrorCode(0x3008 /* EGL_BAD_DISPLAY */);
79
86
  return 0;
80
87
  }
81
- // TODO: Tear down EGL here. Currently a no-op since we don't need to actually do anything here for the browser.
82
- EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
83
- return 1;
84
- },
85
-
86
- // EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
87
- eglTerminate: function(display) {
88
- if (display != 62000 /* Magic ID for Emscripten 'default display' */) {
89
- EGL.setErrorCode(0x3008 /* EGL_BAD_DISPLAY */);
90
- return 0;
91
- }
92
- // TODO: Tear down EGL here. Currently a no-op since we don't need to actually do anything here for the browser.
88
+ EGL.currentContext = 0;
89
+ EGL.currentReadSurface = 0;
90
+ EGL.currentDrawSurface = 0;
91
+ EGL.defaultDisplayInitialized = false;
93
92
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
94
93
  return 1;
95
94
  },
@@ -246,6 +245,12 @@ var LibraryEGL = {
246
245
  EGL.setErrorCode(0x300D /* EGL_BAD_SURFACE */);
247
246
  return 1;
248
247
  }
248
+ if (EGL.currentReadSurface == surface) {
249
+ EGL.currentReadSurface = 0;
250
+ }
251
+ if (EGL.currentDrawSurface == surface) {
252
+ EGL.currentDrawSurface = 0;
253
+ }
249
254
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
250
255
  return 1; /* Magic ID for Emscripten 'default surface' */
251
256
  },
@@ -263,6 +268,7 @@ var LibraryEGL = {
263
268
  EGL.windowID = _glutCreateWindow();
264
269
  if (EGL.windowID != 0) {
265
270
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
271
+ // Note: This function only creates a context, but it shall not make it active.
266
272
  return 62004; // Magic ID for Emscripten EGLContext
267
273
  } else {
268
274
  EGL.setErrorCode(0x3009 /* EGL_BAD_MATCH */); // By the EGL 1.4 spec, an implementation that does not support GLES2 (WebGL in this case), this error code is set.
@@ -278,10 +284,17 @@ var LibraryEGL = {
278
284
  EGL.setErrorCode(0x3008 /* EGL_BAD_DISPLAY */);
279
285
  return 0;
280
286
  }
287
+ if (context != 62004 /* Magic ID for Emscripten EGLContext */) {
288
+ EGL.setErrorCode(0x3006 /* EGL_BAD_CONTEXT */);
289
+ return 0;
290
+ }
281
291
 
282
292
  _glutDestroyWindow(EGL.windowID);
283
293
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
284
- return 62004; // Magic ID for Emscripten EGLContext
294
+ if (EGL.currentContext == context) {
295
+ EGL.currentContext = 0;
296
+ }
297
+ return 1 /* EGL_TRUE */;
285
298
  },
286
299
 
287
300
  // EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
@@ -405,7 +418,7 @@ var LibraryEGL = {
405
418
 
406
419
  // EGLAPI EGLint EGLAPIENTRY eglGetError(void);
407
420
  eglGetError: function() {
408
- return EGL.eglErrorCode;
421
+ return EGL.errorCode;
409
422
  },
410
423
 
411
424
  // EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
@@ -416,15 +429,19 @@ var LibraryEGL = {
416
429
  }
417
430
  //\todo An EGL_NOT_INITIALIZED error is generated if EGL is not initialized for dpy.
418
431
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
432
+ if (EGL.stringCache[name]) return EGL.stringCache[name];
433
+ var ret;
419
434
  switch(name) {
420
- case 0x3053 /* EGL_VENDOR */: return allocate(intArrayFromString("Emscripten"), 'i8', ALLOC_NORMAL);
421
- case 0x3054 /* EGL_VERSION */: return allocate(intArrayFromString("1.4 Emscripten EGL"), 'i8', ALLOC_NORMAL);
422
- case 0x3055 /* EGL_EXTENSIONS */: return allocate(intArrayFromString(""), 'i8', ALLOC_NORMAL); // Currently not supporting any EGL extensions.
423
- case 0x308D /* EGL_CLIENT_APIS */: return allocate(intArrayFromString("OpenGL_ES"), 'i8', ALLOC_NORMAL);
435
+ case 0x3053 /* EGL_VENDOR */: ret = allocate(intArrayFromString("Emscripten"), 'i8', ALLOC_NORMAL); break;
436
+ case 0x3054 /* EGL_VERSION */: ret = allocate(intArrayFromString("1.4 Emscripten EGL"), 'i8', ALLOC_NORMAL); break;
437
+ case 0x3055 /* EGL_EXTENSIONS */: ret = allocate(intArrayFromString(""), 'i8', ALLOC_NORMAL); break; // Currently not supporting any EGL extensions.
438
+ case 0x308D /* EGL_CLIENT_APIS */: ret = allocate(intArrayFromString("OpenGL_ES"), 'i8', ALLOC_NORMAL); break;
424
439
  default:
425
440
  EGL.setErrorCode(0x300C /* EGL_BAD_PARAMETER */);
426
441
  return 0;
427
442
  }
443
+ EGL.stringCache[name] = ret;
444
+ return ret;
428
445
  },
429
446
 
430
447
  // EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
@@ -471,21 +488,46 @@ var LibraryEGL = {
471
488
  eglMakeCurrent: function(display, draw, read, context) {
472
489
  if (display != 62000 /* Magic ID for Emscripten 'default display' */) {
473
490
  EGL.setErrorCode(0x3008 /* EGL_BAD_DISPLAY */);
474
- return 0;
491
+ return 0 /* EGL_FALSE */;
475
492
  }
476
493
  //\todo An EGL_NOT_INITIALIZED error is generated if EGL is not initialized for dpy.
477
- if (context != 62004 /* Magic ID for Emscripten EGLContext */) {
494
+ if (context != 0 && context != 62004 /* Magic ID for Emscripten EGLContext */) {
478
495
  EGL.setErrorCode(0x3006 /* EGL_BAD_CONTEXT */);
479
496
  return 0;
480
497
  }
481
- if (read != 62006 || draw != 62006 /* Magic ID for Emscripten 'default surface' */) {
498
+ if ((read != 0 && read != 62006) || (draw != 0 && draw != 62006 /* Magic ID for Emscripten 'default surface' */)) {
482
499
  EGL.setErrorCode(0x300D /* EGL_BAD_SURFACE */);
483
500
  return 0;
484
501
  }
502
+ EGL.currentContext = context;
503
+ EGL.currentDrawSurface = draw;
504
+ EGL.currentReadSurface = read;
485
505
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);
486
- return 1;
506
+ return 1 /* EGL_TRUE */;
507
+ },
508
+
509
+ // EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
510
+ eglGetCurrentContext: function() {
511
+ return EGL.currentContext;
487
512
  },
488
513
 
514
+ // EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
515
+ eglGetCurrentSurface: function(readdraw) {
516
+ if (readdraw == 0x305A /* EGL_READ */) {
517
+ return EGL.currentReadSurface;
518
+ } else if (readdraw == 0x3059 /* EGL_DRAW */) {
519
+ return EGL.currentDrawSurface;
520
+ } else {
521
+ EGL.setErrorCode(0x300C /* EGL_BAD_PARAMETER */);
522
+ return 0 /* EGL_NO_SURFACE */;
523
+ }
524
+ },
525
+
526
+ // EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
527
+ eglGetCurrentDisplay: function() {
528
+ return EGL.currentContext ? 62000 /* Magic ID for Emscripten 'default display' */ : 0;
529
+ },
530
+
489
531
  // EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
490
532
  eglSwapBuffers: function() {
491
533
  EGL.setErrorCode(0x3000 /* EGL_SUCCESS */);