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