melonjs 14.4.0 → 15.0.0

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. package/LICENSE.md +1 -1
  2. package/README.md +13 -57
  3. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/arraymultimap.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  6. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  7. package/dist/melonjs.mjs/_virtual/index.js +1 -1
  8. package/dist/melonjs.mjs/_virtual/index2.js +1 -1
  9. package/dist/melonjs.mjs/_virtual/multimap.js +1 -1
  10. package/dist/melonjs.mjs/_virtual/setmultimap.js +1 -1
  11. package/dist/melonjs.mjs/application/application.js +1 -1
  12. package/dist/melonjs.mjs/application/header.js +1 -1
  13. package/dist/melonjs.mjs/application/resize.js +1 -1
  14. package/dist/melonjs.mjs/application/settings.js +1 -1
  15. package/dist/melonjs.mjs/audio/audio.js +5 -7
  16. package/dist/melonjs.mjs/camera/camera2d.js +1 -1
  17. package/dist/melonjs.mjs/const.js +1 -1
  18. package/dist/melonjs.mjs/entity/entity.js +43 -9
  19. package/dist/melonjs.mjs/geometries/ellipse.js +2 -3
  20. package/dist/melonjs.mjs/geometries/line.js +1 -1
  21. package/dist/melonjs.mjs/geometries/path2d.js +20 -44
  22. package/dist/melonjs.mjs/geometries/point.js +1 -6
  23. package/dist/melonjs.mjs/geometries/poly.js +2 -5
  24. package/dist/melonjs.mjs/geometries/rectangle.js +13 -9
  25. package/dist/melonjs.mjs/geometries/roundrect.js +1 -1
  26. package/dist/melonjs.mjs/index.js +10 -6
  27. package/dist/melonjs.mjs/input/gamepad.js +10 -16
  28. package/dist/melonjs.mjs/input/input.js +1 -1
  29. package/dist/melonjs.mjs/input/keyboard.js +1 -1
  30. package/dist/melonjs.mjs/input/pointer.js +1 -1
  31. package/dist/melonjs.mjs/input/pointerevent.js +3 -17
  32. package/dist/melonjs.mjs/lang/console.js +1 -1
  33. package/dist/melonjs.mjs/lang/deprecated.js +1 -1
  34. package/dist/melonjs.mjs/level/level.js +3 -3
  35. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +1 -1
  36. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +1 -8
  37. package/dist/melonjs.mjs/level/tiled/TMXObject.js +1 -1
  38. package/dist/melonjs.mjs/level/tiled/TMXTile.js +1 -1
  39. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +8 -4
  40. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +5 -5
  41. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +1 -1
  42. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  44. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  45. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  46. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  47. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +1 -1
  48. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  49. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  50. package/dist/melonjs.mjs/loader/cache.js +24 -0
  51. package/dist/melonjs.mjs/loader/loader.js +331 -716
  52. package/dist/melonjs.mjs/loader/loadingscreen.js +4 -4
  53. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  54. package/dist/melonjs.mjs/loader/parser.js +281 -0
  55. package/dist/melonjs.mjs/loader/settings.js +91 -0
  56. package/dist/melonjs.mjs/math/color.js +9 -8
  57. package/dist/melonjs.mjs/math/math.js +1 -1
  58. package/dist/melonjs.mjs/math/matrix2.js +7 -9
  59. package/dist/melonjs.mjs/math/matrix3.js +18 -21
  60. package/dist/melonjs.mjs/math/observable_vector2.js +3 -3
  61. package/dist/melonjs.mjs/math/observable_vector3.js +3 -4
  62. package/dist/melonjs.mjs/math/vector2.js +3 -3
  63. package/dist/melonjs.mjs/math/vector3.js +3 -4
  64. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +1 -1
  65. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +1 -1
  66. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +1 -1
  67. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +1 -1
  68. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  69. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +1 -1
  70. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  71. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  72. package/dist/melonjs.mjs/particles/emitter.js +3 -3
  73. package/dist/melonjs.mjs/particles/particle.js +1 -1
  74. package/dist/melonjs.mjs/particles/settings.js +1 -1
  75. package/dist/melonjs.mjs/physics/body.js +18 -14
  76. package/dist/melonjs.mjs/physics/bounds.js +18 -70
  77. package/dist/melonjs.mjs/physics/collision.js +1 -1
  78. package/dist/melonjs.mjs/physics/detector.js +1 -1
  79. package/dist/melonjs.mjs/physics/quadtree.js +1 -1
  80. package/dist/melonjs.mjs/physics/response.js +1 -1
  81. package/dist/melonjs.mjs/physics/sat.js +1 -1
  82. package/dist/melonjs.mjs/physics/world.js +1 -1
  83. package/dist/melonjs.mjs/plugin/plugin.js +3 -3
  84. package/dist/melonjs.mjs/renderable/collectable.js +1 -1
  85. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  86. package/dist/melonjs.mjs/renderable/container.js +25 -19
  87. package/dist/melonjs.mjs/renderable/dragndrop.js +1 -1
  88. package/dist/melonjs.mjs/renderable/imagelayer.js +7 -1
  89. package/dist/melonjs.mjs/renderable/light2d.js +1 -1
  90. package/dist/melonjs.mjs/renderable/nineslicesprite.js +1 -1
  91. package/dist/melonjs.mjs/renderable/renderable.js +148 -105
  92. package/dist/melonjs.mjs/renderable/sprite.js +33 -54
  93. package/dist/melonjs.mjs/renderable/trigger.js +1 -1
  94. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +1 -1
  95. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +1 -1
  96. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +1 -3
  97. package/dist/melonjs.mjs/state/stage.js +1 -1
  98. package/dist/melonjs.mjs/state/state.js +2 -2
  99. package/dist/melonjs.mjs/system/device.js +2 -2
  100. package/dist/melonjs.mjs/system/dom.js +1 -1
  101. package/dist/melonjs.mjs/system/event.js +1 -1
  102. package/dist/melonjs.mjs/system/platform.js +1 -1
  103. package/dist/melonjs.mjs/system/pooling.js +8 -18
  104. package/dist/melonjs.mjs/system/save.js +1 -1
  105. package/dist/melonjs.mjs/system/timer.js +1 -1
  106. package/dist/melonjs.mjs/text/bitmaptext.js +66 -8
  107. package/dist/melonjs.mjs/text/bitmaptextdata.js +1 -1
  108. package/dist/melonjs.mjs/text/glyph.js +1 -1
  109. package/dist/melonjs.mjs/text/text.js +56 -86
  110. package/dist/melonjs.mjs/text/textmetrics.js +1 -1
  111. package/dist/melonjs.mjs/text/textstyle.js +4 -6
  112. package/dist/melonjs.mjs/tweens/easing.js +1 -1
  113. package/dist/melonjs.mjs/tweens/interpolation.js +1 -1
  114. package/dist/melonjs.mjs/tweens/tween.js +1 -1
  115. package/dist/melonjs.mjs/utils/agent.js +1 -1
  116. package/dist/melonjs.mjs/utils/array.js +1 -1
  117. package/dist/melonjs.mjs/utils/file.js +1 -1
  118. package/dist/melonjs.mjs/utils/function.js +1 -1
  119. package/dist/melonjs.mjs/utils/string.js +2 -2
  120. package/dist/melonjs.mjs/utils/utils.js +2 -4
  121. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +7 -11
  122. package/dist/melonjs.mjs/video/renderer.js +2 -13
  123. package/dist/melonjs.mjs/video/texture/atlas.js +12 -17
  124. package/dist/melonjs.mjs/video/texture/cache.js +3 -3
  125. package/dist/melonjs.mjs/video/texture/canvas_texture.js +1 -1
  126. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  127. package/dist/melonjs.mjs/video/video.js +2 -2
  128. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +21 -17
  129. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +235 -0
  130. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +77 -0
  131. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +249 -0
  132. package/dist/melonjs.mjs/video/webgl/{webgl_compositor.js → compositors/webgl_compositor.js} +20 -205
  133. package/dist/melonjs.mjs/video/webgl/glshader.js +1 -1
  134. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  135. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +2 -2
  136. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  137. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +2 -2
  138. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +1 -1
  139. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  140. package/dist/melonjs.mjs/video/webgl/utils/program.js +1 -1
  141. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  142. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +1 -1
  143. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +139 -149
  144. package/dist/melonjs.module.js +26320 -26376
  145. package/dist/types/entity/entity.d.ts +3 -3
  146. package/dist/types/geometries/path2d.d.ts +5 -31
  147. package/dist/types/geometries/point.d.ts +2 -7
  148. package/dist/types/geometries/poly.d.ts +0 -1
  149. package/dist/types/index.d.ts +5 -3
  150. package/dist/types/loader/cache.d.ts +7 -0
  151. package/dist/types/loader/loader.d.ts +166 -181
  152. package/dist/types/loader/parser.d.ts +41 -0
  153. package/dist/types/loader/settings.d.ts +57 -0
  154. package/dist/types/particles/emitter.d.ts +4 -4
  155. package/dist/types/physics/bounds.d.ts +29 -84
  156. package/dist/types/renderable/container.d.ts +0 -11
  157. package/dist/types/renderable/renderable.d.ts +43 -31
  158. package/dist/types/renderable/sprite.d.ts +3 -3
  159. package/dist/types/renderable/ui/uitextbutton.d.ts +0 -1
  160. package/dist/types/state/state.d.ts +1 -1
  161. package/dist/types/system/pooling.d.ts +2 -2
  162. package/dist/types/text/text.d.ts +6 -20
  163. package/dist/types/text/textstyle.d.ts +1 -1
  164. package/dist/types/video/canvas/canvas_renderer.d.ts +0 -5
  165. package/dist/types/video/renderer.d.ts +1 -5
  166. package/dist/types/video/webgl/buffer/vertex.d.ts +3 -3
  167. package/dist/types/video/webgl/compositors/compositor.d.ts +107 -0
  168. package/dist/types/video/webgl/compositors/primitive_compositor.d.ts +22 -0
  169. package/dist/types/video/webgl/compositors/quad_compositor.d.ts +72 -0
  170. package/dist/types/video/webgl/compositors/webgl_compositor.d.ts +86 -0
  171. package/dist/types/video/webgl/webgl_compositor.d.ts +2 -3
  172. package/dist/types/video/webgl/webgl_renderer.d.ts +34 -28
  173. package/package.json +18 -18
  174. package/src/audio/audio.js +4 -6
  175. package/src/entity/entity.js +42 -8
  176. package/src/geometries/ellipse.js +1 -2
  177. package/src/geometries/path2d.js +19 -43
  178. package/src/geometries/point.js +0 -5
  179. package/src/geometries/poly.js +1 -4
  180. package/src/geometries/rectangle.js +12 -8
  181. package/src/index.js +7 -3
  182. package/src/input/gamepad.js +9 -15
  183. package/src/input/pointerevent.js +1 -15
  184. package/src/level/level.js +2 -2
  185. package/src/level/tiled/TMXLayer.js +0 -7
  186. package/src/level/tiled/TMXTileMap.js +7 -3
  187. package/src/level/tiled/TMXTileset.js +4 -4
  188. package/src/loader/cache.js +16 -0
  189. package/src/loader/loader.js +339 -711
  190. package/src/loader/loadingscreen.js +3 -3
  191. package/src/loader/parser.js +279 -0
  192. package/src/loader/settings.js +85 -0
  193. package/src/math/color.js +8 -7
  194. package/src/math/matrix2.js +6 -8
  195. package/src/math/matrix3.js +17 -20
  196. package/src/math/observable_vector2.js +2 -2
  197. package/src/math/observable_vector3.js +2 -3
  198. package/src/math/vector2.js +2 -2
  199. package/src/math/vector3.js +2 -3
  200. package/src/particles/emitter.js +2 -2
  201. package/src/physics/body.js +17 -13
  202. package/src/physics/bounds.js +17 -69
  203. package/src/polyfill/index.js +0 -2
  204. package/src/renderable/container.js +24 -18
  205. package/src/renderable/imagelayer.js +6 -0
  206. package/src/renderable/renderable.js +147 -104
  207. package/src/renderable/sprite.js +32 -53
  208. package/src/renderable/ui/uitextbutton.js +0 -2
  209. package/src/state/state.js +1 -1
  210. package/src/system/device.js +1 -1
  211. package/src/system/pooling.js +7 -17
  212. package/src/text/bitmaptext.js +65 -7
  213. package/src/text/text.js +55 -85
  214. package/src/text/textstyle.js +3 -5
  215. package/src/utils/string.js +1 -1
  216. package/src/utils/utils.js +1 -3
  217. package/src/video/canvas/canvas_renderer.js +5 -9
  218. package/src/video/renderer.js +0 -11
  219. package/src/video/texture/atlas.js +11 -16
  220. package/src/video/texture/cache.js +2 -2
  221. package/src/video/video.js +1 -1
  222. package/src/video/webgl/buffer/vertex.js +20 -16
  223. package/src/video/webgl/compositors/compositor.js +226 -0
  224. package/src/video/webgl/compositors/primitive_compositor.js +68 -0
  225. package/src/video/webgl/compositors/quad_compositor.js +240 -0
  226. package/src/video/webgl/shaders/primitive.vert +2 -5
  227. package/src/video/webgl/shaders/quad.vert +3 -1
  228. package/src/video/webgl/webgl_renderer.js +137 -147
  229. package/dist/melonjs.mjs/_virtual/make-built-in.js +0 -10
  230. package/dist/melonjs.mjs/_virtual/object-define-property.js +0 -10
  231. package/dist/melonjs.mjs/_virtual/object-get-own-property-descriptor.js +0 -10
  232. package/dist/melonjs.mjs/_virtual/object-get-own-property-names.js +0 -10
  233. package/dist/melonjs.mjs/_virtual/object-get-own-property-symbols.js +0 -10
  234. package/dist/melonjs.mjs/_virtual/object-property-is-enumerable.js +0 -10
  235. package/dist/melonjs.mjs/_virtual/shared.js +0 -10
  236. package/dist/melonjs.mjs/game.js +0 -29
  237. package/dist/melonjs.mjs/polyfill/console.js +0 -18
  238. package/dist/melonjs.mjs/polyfill/performance.js +0 -27
  239. package/dist/melonjs.mjs/polyfill/requestAnimationFrame.js +0 -46
  240. package/dist/melonjs.mjs/polyfill/roundrect.js +0 -242
  241. package/dist/melonjs.mjs/renderable/re_container.js +0 -1016
  242. package/dist/melonjs.mjs/video/utils/resize.js +0 -116
  243. package/src/polyfill/performance.js +0 -20
  244. package/src/polyfill/requestAnimationFrame.js +0 -39
  245. package/src/video/webgl/webgl_compositor.js +0 -486
@@ -1,116 +0,0 @@
1
- /*!
2
- * melonJS Game Engine - v14.3.0
3
- * http://www.melonjs.org
4
- * melonjs is licensed under the MIT License.
5
- * http://www.opensource.org/licenses/mit-license
6
- * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
- */
8
- import { getParentBounds, devicePixelRatio } from '../../system/device.js';
9
- import game from '../../game.js';
10
-
11
- /**
12
- * scale the "displayed" canvas by the given scalar.
13
- * this will modify the size of canvas element directly.
14
- * Only use this if you are not using the automatic scaling feature.
15
- * @param {number} x - x scaling multiplier
16
- * @param {number} y - y scaling multiplier
17
- */
18
- function scale(renderer, x, y) {
19
- var canvas = renderer.getCanvas();
20
- var context = renderer.getContext();
21
- var settings = renderer.settings;
22
- var pixelRatio = devicePixelRatio;
23
-
24
- var w = settings.zoomX = canvas.width * x * pixelRatio;
25
- var h = settings.zoomY = canvas.height * y * pixelRatio;
26
-
27
- // update the global scale variable
28
- renderer.scaleRatio.set(x * pixelRatio, y * pixelRatio);
29
-
30
- // adjust CSS style based on device pixel ratio
31
- canvas.style.width = (w / pixelRatio) + "px";
32
- canvas.style.height = (h / pixelRatio) + "px";
33
-
34
- // if anti-alias and blend mode were resetted (e.g. Canvas mode)
35
- renderer.setAntiAlias(context, settings.antiAlias);
36
- renderer.setBlendMode(settings.blendMode, context);
37
-
38
- // force repaint
39
- game.repaint();
40
- }
41
-
42
- /**
43
- * callback for window resize event
44
- */
45
- function onresize(renderer) {
46
- var settings = renderer.settings;
47
- var scaleX = 1, scaleY = 1;
48
-
49
- if (settings.autoScale) {
50
-
51
- // set max the canvas max size if CSS values are defined
52
- var canvasMaxWidth = Infinity;
53
- var canvasMaxHeight = Infinity;
54
-
55
- if (globalThis.getComputedStyle) {
56
- var style = globalThis.getComputedStyle(renderer.getCanvas(), null);
57
- canvasMaxWidth = parseInt(style.maxWidth, 10) || Infinity;
58
- canvasMaxHeight = parseInt(style.maxHeight, 10) || Infinity;
59
- }
60
-
61
- // get the maximum canvas size within the parent div containing the canvas container
62
- var nodeBounds = getParentBounds(game.getParentElement());
63
-
64
- var _max_width = Math.min(canvasMaxWidth, nodeBounds.width);
65
- var _max_height = Math.min(canvasMaxHeight, nodeBounds.height);
66
-
67
- // calculate final canvas width & height
68
- var screenRatio = _max_width / _max_height;
69
-
70
- if ((settings.scaleMethod === "fill-min" && screenRatio > renderer.designRatio) ||
71
- (settings.scaleMethod === "fill-max" && screenRatio < renderer.designRatio) ||
72
- (settings.scaleMethod === "flex-width")
73
- ) {
74
- // resize the display canvas to fill the parent container
75
- var sWidth = Math.min(canvasMaxWidth, settings.height * screenRatio);
76
- scaleX = scaleY = _max_width / sWidth;
77
- renderer.resize(Math.floor(sWidth), settings.height);
78
- }
79
- else if ((settings.scaleMethod === "fill-min" && screenRatio < renderer.designRatio) ||
80
- (settings.scaleMethod === "fill-max" && screenRatio > renderer.designRatio) ||
81
- (settings.scaleMethod === "flex-height")
82
- ) {
83
- // resize the display canvas to fill the parent container
84
- var sHeight = Math.min(canvasMaxHeight, settings.width * (_max_height / _max_width));
85
- scaleX = scaleY = _max_height / sHeight;
86
- renderer.resize(settings.width, Math.floor(sHeight));
87
- }
88
- else if (settings.scaleMethod === "flex") {
89
- // resize the display canvas to fill the parent container
90
- renderer.resize(Math.floor(_max_width), Math.floor(_max_height));
91
- }
92
- else if (settings.scaleMethod === "stretch") {
93
- // scale the display canvas to fit with the parent container
94
- scaleX = _max_width / settings.width;
95
- scaleY = _max_height / settings.height;
96
- }
97
- else {
98
- // scale the display canvas to fit the parent container
99
- // make sure we maintain the original aspect ratio
100
- if (screenRatio < renderer.designRatio) {
101
- scaleX = scaleY = _max_width / settings.width;
102
- }
103
- else {
104
- scaleX = scaleY = _max_height / settings.height;
105
- }
106
- }
107
-
108
- // adjust scaling ratio based on the new scaling ratio
109
- scale(renderer, scaleX, scaleY);
110
- } else {
111
- // adjust scaling ratio based on the given settings
112
- scale(renderer, settings.scale, settings.scale);
113
- }
114
- }
115
-
116
- export { onresize };
@@ -1,20 +0,0 @@
1
- if ("performance" in globalThis === false) {
2
- globalThis.performance = {};
3
- }
4
-
5
- Date.now = (Date.now || function () { // thanks IE8
6
- return new Date().getTime();
7
- });
8
-
9
- if ("now" in globalThis.performance === false) {
10
-
11
- let nowOffset = Date.now();
12
-
13
- if (performance.timing && performance.timing.navigationStart) {
14
- nowOffset = performance.timing.navigationStart;
15
- }
16
-
17
- globalThis.performance.now = function now() {
18
- return Date.now() - nowOffset;
19
- };
20
- }
@@ -1,39 +0,0 @@
1
- import timer from "./../system/timer.js";
2
-
3
- var lastTime = 0;
4
- var vendors = ["ms", "moz", "webkit", "o"];
5
- var x;
6
-
7
- // standardized functions
8
- // https://developer.mozilla.org/fr/docs/Web/API/Window/requestAnimationFrame
9
- var requestAnimationFrame = globalThis.requestAnimationFrame;
10
- var cancelAnimationFrame = globalThis.cancelAnimationFrame;
11
-
12
- // get prefixed rAF and cAF is standard one not supported
13
- for (x = 0; x < vendors.length && !requestAnimationFrame; ++x) {
14
- requestAnimationFrame = globalThis[vendors[x] + "RequestAnimationFrame"];
15
- }
16
- for (x = 0; x < vendors.length && !cancelAnimationFrame; ++x) {
17
- cancelAnimationFrame = globalThis[vendors[x] + "CancelAnimationFrame"] ||
18
- globalThis[vendors[x] + "CancelRequestAnimationFrame"];
19
- }
20
-
21
- if (!requestAnimationFrame || !cancelAnimationFrame) {
22
- requestAnimationFrame = function (callback) {
23
- var currTime = globalThis.performance.now();
24
- var timeToCall = Math.max(0, (1000 / timer.maxfps) - (currTime - lastTime));
25
- var id = globalThis.setTimeout(() => {
26
- callback(currTime + timeToCall);
27
- }, timeToCall);
28
- lastTime = currTime + timeToCall;
29
- return id;
30
- };
31
-
32
- cancelAnimationFrame = function (id) {
33
- globalThis.clearTimeout(id);
34
- };
35
-
36
- // put back in global namespace
37
- globalThis.requestAnimationFrame = requestAnimationFrame;
38
- globalThis.cancelAnimationFrame = cancelAnimationFrame;
39
- }
@@ -1,486 +0,0 @@
1
- import Vector2d from "./../../math/vector2.js";
2
- import GLShader from "./glshader.js";
3
- import VertexArrayBuffer from "./buffer/vertex.js";
4
- import * as event from "./../../system/event.js";
5
- import { isPowerOfTwo } from "./../../math/math.js";
6
-
7
- import primitiveVertex from "./shaders/primitive.vert";
8
- import primitiveFragment from "./shaders/primitive.frag";
9
- import quadVertex from "./shaders/quad.vert";
10
- import quadFragment from "./shaders/quad.frag";
11
-
12
- // a pool of resuable vectors
13
- var V_ARRAY = [
14
- new Vector2d(),
15
- new Vector2d(),
16
- new Vector2d(),
17
- new Vector2d()
18
- ];
19
-
20
- /**
21
- * @classdesc
22
- * A WebGL Compositor object. This class handles all of the WebGL state<br>
23
- * Pushes texture regions or shape geometry into WebGL buffers, automatically flushes to GPU
24
- */
25
- export default class WebGLCompositor {
26
- /**
27
- * @param {WebGLRenderer} renderer - the current WebGL renderer session
28
- */
29
- constructor (renderer) {
30
- this.init(renderer);
31
- }
32
-
33
- /**
34
- * Initialize the compositor
35
- * @ignore
36
- */
37
- init (renderer) {
38
- // local reference
39
- var gl = renderer.gl;
40
-
41
- // list of active texture units
42
- this.currentTextureUnit = -1;
43
- this.boundTextures = [];
44
-
45
- // the associated renderer
46
- this.renderer = renderer;
47
-
48
- // WebGL context
49
- this.gl = renderer.gl;
50
-
51
- // Global fill color
52
- this.color = renderer.currentColor;
53
-
54
- // Global transformation matrix
55
- this.viewMatrix = renderer.currentTransform;
56
-
57
- /**
58
- * a reference to the active WebGL shader
59
- * @type {GLShader}
60
- */
61
- this.activeShader = null;
62
-
63
- /**
64
- * primitive type to render (gl.POINTS, gl.LINE_STRIP, gl.LINE_LOOP, gl.LINES, gl.TRIANGLE_STRIP, gl.TRIANGLE_FAN, gl.TRIANGLES)
65
- * @type {number}
66
- * @default gl.TRIANGLES
67
- */
68
- this.mode = gl.TRIANGLES;
69
-
70
- /**
71
- * an array of vertex attribute properties
72
- * @see WebGLCompositor.addAttribute
73
- * @type {Array}
74
- */
75
- this.attributes = [];
76
-
77
- /**
78
- * the size of a single vertex in bytes
79
- * (will automatically be calculated as attributes definitions are added)
80
- * @see WebGLCompositor.addAttribute
81
- * @type {number}
82
- */
83
- this.vertexByteSize = 0;
84
-
85
- /**
86
- * the size of a single vertex in floats
87
- * (will automatically be calculated as attributes definitions are added)
88
- * @see WebGLCompositor.addAttribute
89
- * @type {number}
90
- */
91
- this.vertexSize = 0;
92
-
93
- // Load and create shader programs
94
- this.primitiveShader = new GLShader(this.gl, primitiveVertex, primitiveFragment);
95
- this.quadShader = new GLShader(this.gl, quadVertex, quadFragment);
96
-
97
- /// define all vertex attributes
98
- this.addAttribute("aVertex", 2, gl.FLOAT, false, 0 * Float32Array.BYTES_PER_ELEMENT); // 0
99
- this.addAttribute("aRegion", 2, gl.FLOAT, false, 2 * Float32Array.BYTES_PER_ELEMENT); // 1
100
- this.addAttribute("aColor", 4, gl.UNSIGNED_BYTE, true, 4 * Float32Array.BYTES_PER_ELEMENT); // 2
101
-
102
- this.vertexBuffer = new VertexArrayBuffer(this.vertexSize, 6); // 6 vertices per quad
103
-
104
- // vertex buffer
105
- gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
106
- gl.bufferData(gl.ARRAY_BUFFER, this.vertexBuffer.buffer, gl.STREAM_DRAW);
107
-
108
- // register to the CANVAS resize channel
109
- event.on(event.CANVAS_ONRESIZE, (width, height) => {
110
- this.flush();
111
- this.setViewport(0, 0, width, height);
112
- });
113
- }
114
-
115
- /**
116
- * Reset compositor internal state
117
- * @ignore
118
- */
119
- reset() {
120
- // WebGL context
121
- this.gl = this.renderer.gl;
122
-
123
- this.flush();
124
-
125
- // initial viewport size
126
- this.setViewport(
127
- 0, 0,
128
- this.renderer.getCanvas().width,
129
- this.renderer.getCanvas().height
130
- );
131
-
132
- // Initialize clear color
133
- this.clearColor(0.0, 0.0, 0.0, 0.0);
134
-
135
- // delete all related bound texture
136
- for (var i = 0; i < this.renderer.maxTextures; i++) {
137
- var texture2D = this.getTexture2D(i);
138
- if (typeof texture2D !== "undefined") {
139
- this.deleteTexture2D(texture2D);
140
- }
141
- }
142
- this.currentTextureUnit = -1;
143
-
144
- // set the quad shader as the default program
145
- this.useShader(this.quadShader);
146
- }
147
-
148
- /**
149
- * add vertex attribute property definition to the compositor
150
- * @param {string} name - name of the attribute in the vertex shader
151
- * @param {number} size - number of components per vertex attribute. Must be 1, 2, 3, or 4.
152
- * @param {GLenum} type - data type of each component in the array
153
- * @param {boolean} normalized - whether integer data values should be normalized into a certain range when being cast to a float
154
- * @param {number} offset - offset in bytes of the first component in the vertex attribute array
155
- */
156
- addAttribute(name, size, type, normalized, offset) {
157
- this.attributes.push({
158
- name: name,
159
- size: size,
160
- type: type,
161
- normalized: normalized,
162
- offset: offset
163
- });
164
-
165
- switch (type) {
166
- case this.gl.BYTE:
167
- this.vertexByteSize += size * Int8Array.BYTES_PER_ELEMENT;
168
- break;
169
- case this.gl.UNSIGNED_BYTE:
170
- this.vertexByteSize += size * Uint8Array.BYTES_PER_ELEMENT;
171
- break;
172
- case this.gl.SHORT:
173
- this.vertexByteSize += size * Int16Array.BYTES_PER_ELEMENT;
174
- break;
175
- case this.gl.UNSIGNED_SHORT:
176
- this.vertexByteSize += size * Uint16Array.BYTES_PER_ELEMENT;
177
- break;
178
- case this.gl.INT:
179
- this.vertexByteSize += size * Int32Array.BYTES_PER_ELEMENT;
180
- break;
181
- case this.gl.UNSIGNED_INT:
182
- this.vertexByteSize += size * Uint32Array.BYTES_PER_ELEMENT;
183
- break;
184
- case this.gl.FLOAT:
185
- this.vertexByteSize += size * Float32Array.BYTES_PER_ELEMENT;
186
- break;
187
- default:
188
- throw new Error("Invalid GL Attribute type");
189
- }
190
- this.vertexSize = this.vertexByteSize / Float32Array.BYTES_PER_ELEMENT;
191
- }
192
-
193
- /**
194
- * Sets the viewport
195
- * @param {number} x - x position of viewport
196
- * @param {number} y - y position of viewport
197
- * @param {number} w - width of viewport
198
- * @param {number} h - height of viewport
199
- */
200
- setViewport(x, y, w, h) {
201
- this.gl.viewport(x, y, w, h);
202
- }
203
-
204
- /**
205
- * Create a WebGL texture from an image
206
- * @param {number} unit - Destination texture unit
207
- * @param {Image|HTMLCanvasElement|ImageData|Uint8Array[]|Float32Array[]} image - Source image
208
- * @param {number} filter - gl.LINEAR or gl.NEAREST
209
- * @param {string} [repeat="no-repeat"] - Image repeat behavior (see {@link ImageLayer#repeat})
210
- * @param {number} [w] - Source image width (Only use with UInt8Array[] or Float32Array[] source image)
211
- * @param {number} [h] - Source image height (Only use with UInt8Array[] or Float32Array[] source image)
212
- * @param {number} [b] - Source image border (Only use with UInt8Array[] or Float32Array[] source image)
213
- * @param {boolean} [premultipliedAlpha=true] - Multiplies the alpha channel into the other color channels
214
- * @param {boolean} [mipmap=true] - Whether mipmap levels should be generated for this texture
215
- * @returns {WebGLTexture} a WebGL texture
216
- */
217
- createTexture2D(unit, image, filter, repeat = "no-repeat", w, h, b, premultipliedAlpha = true, mipmap = true) {
218
- var gl = this.gl;
219
- var isPOT = isPowerOfTwo(w || image.width) && isPowerOfTwo(h || image.height);
220
- var texture = gl.createTexture();
221
- var rs = (repeat.search(/^repeat(-x)?$/) === 0) && (isPOT || this.renderer.WebGLVersion > 1) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
222
- var rt = (repeat.search(/^repeat(-y)?$/) === 0) && (isPOT || this.renderer.WebGLVersion > 1) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
223
-
224
- this.bindTexture2D(texture, unit);
225
-
226
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, rs);
227
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, rt);
228
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
229
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
230
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultipliedAlpha);
231
- if (w || h || b) {
232
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, b, gl.RGBA, gl.UNSIGNED_BYTE, image);
233
- }
234
- else {
235
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
236
- }
237
-
238
- // generate the sprite mimap (used when scaling) if a PowerOfTwo texture
239
- if (isPOT && mipmap !== false) {
240
- gl.generateMipmap(gl.TEXTURE_2D);
241
- }
242
-
243
- return texture;
244
- }
245
-
246
- /**
247
- * delete the given WebGL texture
248
- * @param {WebGLTexture} [texture] - a WebGL texture to delete
249
- * @param {number} [unit] - Texture unit to delete
250
- */
251
- deleteTexture2D(texture) {
252
- this.gl.deleteTexture(texture);
253
- this.unbindTexture2D(texture);
254
- }
255
-
256
- /**
257
- * returns the WebGL texture associated to the given texture unit
258
- * @param {number} unit - Texture unit to which a texture is bound
259
- * @returns {WebGLTexture} texture a WebGL texture
260
- */
261
- getTexture2D(unit) {
262
- return this.boundTextures[unit];
263
- }
264
-
265
- /**
266
- * assign the given WebGL texture to the current batch
267
- * @param {WebGLTexture} texture - a WebGL texture
268
- * @param {number} unit - Texture unit to which the given texture is bound
269
- */
270
- bindTexture2D(texture, unit) {
271
- var gl = this.gl;
272
-
273
- if (texture !== this.boundTextures[unit]) {
274
- this.flush();
275
- if (this.currentTextureUnit !== unit) {
276
- this.currentTextureUnit = unit;
277
- gl.activeTexture(gl.TEXTURE0 + unit);
278
- }
279
-
280
- gl.bindTexture(gl.TEXTURE_2D, texture);
281
- this.boundTextures[unit] = texture;
282
-
283
- } else if (this.currentTextureUnit !== unit) {
284
- this.flush();
285
- this.currentTextureUnit = unit;
286
- gl.activeTexture(gl.TEXTURE0 + unit);
287
- }
288
- }
289
-
290
- /**
291
- * unbind the given WebGL texture, forcing it to be reuploaded
292
- * @param {WebGLTexture} [texture] - a WebGL texture
293
- * @param {number} [unit] - a WebGL texture
294
- * @returns {number} unit the unit number that was associated with the given texture
295
- */
296
- unbindTexture2D(texture, unit) {
297
- if (typeof unit === "undefined") {
298
- unit = this.boundTextures.indexOf(texture);
299
- }
300
- if (unit !== -1) {
301
- delete this.boundTextures[unit];
302
- if (unit === this.currentTextureUnit) {
303
- this.currentTextureUnit = -1;
304
- }
305
- }
306
- return unit;
307
- }
308
-
309
- /**
310
- * @ignore
311
- */
312
- uploadTexture(texture, w, h, b, force = false) {
313
- var unit = this.renderer.cache.getUnit(texture);
314
- var texture2D = this.boundTextures[unit];
315
-
316
- if (typeof texture2D === "undefined" || force) {
317
- this.createTexture2D(
318
- unit,
319
- texture.getTexture(),
320
- this.renderer.settings.antiAlias ? this.gl.LINEAR : this.gl.NEAREST,
321
- texture.repeat,
322
- w,
323
- h,
324
- b,
325
- texture.premultipliedAlpha
326
- );
327
- } else {
328
- this.bindTexture2D(texture2D, unit);
329
- }
330
-
331
- return this.currentTextureUnit;
332
- }
333
-
334
- /**
335
- * set/change the current projection matrix
336
- * @param {Matrix3d} matrix
337
- */
338
- setProjection(matrix) {
339
- this.activeShader.setUniform("uProjectionMatrix", matrix);
340
- }
341
-
342
- /**
343
- * Select the shader to use for compositing
344
- * @see GLShader
345
- * @param {GLShader} shader - a reference to a GLShader instance
346
- */
347
- useShader(shader) {
348
- if (this.activeShader !== shader) {
349
- this.flush();
350
- this.activeShader = shader;
351
- this.activeShader.bind();
352
- this.activeShader.setUniform("uProjectionMatrix", this.renderer.projectionMatrix);
353
- this.activeShader.setVertexAttributes(this.gl, this.attributes, this.vertexByteSize);
354
- }
355
- }
356
-
357
- /**
358
- * Add a textured quad
359
- * @param {TextureAtlas} texture - Source texture atlas
360
- * @param {number} x - Destination x-coordinate
361
- * @param {number} y - Destination y-coordinate
362
- * @param {number} w - Destination width
363
- * @param {number} h - Destination height
364
- * @param {number} u0 - Texture UV (u0) value.
365
- * @param {number} v0 - Texture UV (v0) value.
366
- * @param {number} u1 - Texture UV (u1) value.
367
- * @param {number} v1 - Texture UV (v1) value.
368
- * @param {number} tint - tint color to be applied to the texture in UINT32 (argb) format
369
- */
370
- addQuad(texture, x, y, w, h, u0, v0, u1, v1, tint) {
371
-
372
- if (this.color.alpha < 1 / 255) {
373
- // Fast path: don't send fully transparent quads
374
- return;
375
- }
376
-
377
- this.useShader(this.quadShader);
378
-
379
- if (this.vertexBuffer.isFull(6)) {
380
- // is the vertex buffer full if we add 6 more vertices
381
- this.flush();
382
- }
383
-
384
- // upload and activate the texture if necessary
385
- var unit = this.uploadTexture(texture);
386
- // set fragement sampler accordingly
387
- this.quadShader.setUniform("uSampler", unit);
388
-
389
- // Transform vertices
390
- var m = this.viewMatrix,
391
- vec0 = V_ARRAY[0].set(x, y),
392
- vec1 = V_ARRAY[1].set(x + w, y),
393
- vec2 = V_ARRAY[2].set(x, y + h),
394
- vec3 = V_ARRAY[3].set(x + w, y + h);
395
-
396
- if (!m.isIdentity()) {
397
- m.apply(vec0);
398
- m.apply(vec1);
399
- m.apply(vec2);
400
- m.apply(vec3);
401
- }
402
-
403
- this.vertexBuffer.push(vec0.x, vec0.y, u0, v0, tint);
404
- this.vertexBuffer.push(vec1.x, vec1.y, u1, v0, tint);
405
- this.vertexBuffer.push(vec2.x, vec2.y, u0, v1, tint);
406
- this.vertexBuffer.push(vec2.x, vec2.y, u0, v1, tint);
407
- this.vertexBuffer.push(vec1.x, vec1.y, u1, v0, tint);
408
- this.vertexBuffer.push(vec3.x, vec3.y, u1, v1, tint);
409
- }
410
-
411
- /**
412
- * Flush batched texture operations to the GPU
413
- * @param {number} [mode=gl.TRIANGLES] - the GL drawing mode
414
- */
415
- flush(mode = this.mode) {
416
- var vertex = this.vertexBuffer;
417
- var vertexCount = vertex.vertexCount;
418
-
419
- if (vertexCount > 0) {
420
- var gl = this.gl;
421
- var vertexSize = vertex.vertexSize;
422
-
423
- // Copy data into stream buffer
424
- if (this.renderer.WebGLVersion > 1) {
425
- gl.bufferData(gl.ARRAY_BUFFER, vertex.toFloat32(), gl.STREAM_DRAW, 0, vertexCount * vertexSize);
426
- } else {
427
- gl.bufferData(gl.ARRAY_BUFFER, vertex.toFloat32(0, vertexCount * vertexSize), gl.STREAM_DRAW);
428
- }
429
-
430
- gl.drawArrays(mode, 0, vertexCount);
431
-
432
- // clear the vertex buffer
433
- vertex.clear();
434
- }
435
- }
436
-
437
- /**
438
- * Draw an array of vertices
439
- * @param {GLenum} mode - primitive type to render (gl.POINTS, gl.LINE_STRIP, gl.LINE_LOOP, gl.LINES, gl.TRIANGLE_STRIP, gl.TRIANGLE_FAN, gl.TRIANGLES)
440
- * @param {Vector2d[]} verts - vertices
441
- * @param {number} [vertexCount=verts.length] - amount of points defined in the points array
442
- */
443
- drawVertices(mode, verts, vertexCount = verts.length) {
444
- // use the primitive shader
445
- this.useShader(this.primitiveShader);
446
- // Set the line color
447
- this.primitiveShader.setUniform("uColor", this.color);
448
-
449
- var m = this.viewMatrix;
450
- var vertex = this.vertexBuffer;
451
- var m_isIdentity = m.isIdentity();
452
-
453
- for (var i = 0; i < vertexCount; i++) {
454
- if (!m_isIdentity) {
455
- m.apply(verts[i]);
456
- }
457
- vertex.push(verts[i].x, verts[i].y);
458
- }
459
-
460
- // flush
461
- this.flush(mode);
462
- }
463
-
464
- /**
465
- * Clear the frame buffer
466
- * @param {number} [alpha = 0.0] - the alpha value used when clearing the framebuffer
467
- */
468
- clear(alpha = 0) {
469
- var gl = this.gl;
470
- gl.clearColor(0, 0, 0, alpha);
471
- gl.clear(gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
472
- }
473
-
474
- /**
475
- * Specify the color values used when clearing color buffers. The values are clamped between 0 and 1.
476
- * @param {number} [r = 0] - the red color value used when the color buffers are cleared
477
- * @param {number} [g = 0] - the green color value used when the color buffers are cleared
478
- * @param {number} [b = 0] - the blue color value used when the color buffers are cleared
479
- * @param {number} [a = 0] - the alpha color value used when the color buffers are cleared
480
- */
481
- clearColor(r = 0, g = 0, b = 0, a = 0) {
482
- var gl = this.gl;
483
- gl.clearColor(r, g, b, a);
484
- gl.clear(gl.COLOR_BUFFER_BIT);
485
- }
486
- }