melonjs 14.4.0 → 14.5.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 (207) hide show
  1. package/README.md +11 -55
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  3. package/dist/melonjs.mjs/_virtual/arraymultimap.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  6. package/dist/melonjs.mjs/_virtual/index.js +1 -1
  7. package/dist/melonjs.mjs/_virtual/index2.js +1 -1
  8. package/dist/melonjs.mjs/_virtual/multimap.js +1 -1
  9. package/dist/melonjs.mjs/_virtual/setmultimap.js +1 -1
  10. package/dist/melonjs.mjs/application/application.js +1 -1
  11. package/dist/melonjs.mjs/application/header.js +1 -1
  12. package/dist/melonjs.mjs/application/resize.js +1 -1
  13. package/dist/melonjs.mjs/application/settings.js +1 -1
  14. package/dist/melonjs.mjs/audio/audio.js +4 -4
  15. package/dist/melonjs.mjs/camera/camera2d.js +1 -1
  16. package/dist/melonjs.mjs/const.js +1 -1
  17. package/dist/melonjs.mjs/entity/entity.js +43 -9
  18. package/dist/melonjs.mjs/geometries/ellipse.js +2 -3
  19. package/dist/melonjs.mjs/geometries/line.js +1 -1
  20. package/dist/melonjs.mjs/geometries/path2d.js +18 -42
  21. package/dist/melonjs.mjs/geometries/point.js +1 -6
  22. package/dist/melonjs.mjs/geometries/poly.js +2 -5
  23. package/dist/melonjs.mjs/geometries/rectangle.js +13 -9
  24. package/dist/melonjs.mjs/geometries/roundrect.js +1 -1
  25. package/dist/melonjs.mjs/index.js +8 -6
  26. package/dist/melonjs.mjs/input/gamepad.js +10 -16
  27. package/dist/melonjs.mjs/input/input.js +1 -1
  28. package/dist/melonjs.mjs/input/keyboard.js +1 -1
  29. package/dist/melonjs.mjs/input/pointer.js +1 -1
  30. package/dist/melonjs.mjs/input/pointerevent.js +2 -16
  31. package/dist/melonjs.mjs/lang/console.js +1 -1
  32. package/dist/melonjs.mjs/lang/deprecated.js +1 -1
  33. package/dist/melonjs.mjs/level/level.js +3 -3
  34. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +1 -1
  35. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +1 -8
  36. package/dist/melonjs.mjs/level/tiled/TMXObject.js +1 -1
  37. package/dist/melonjs.mjs/level/tiled/TMXTile.js +1 -1
  38. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +8 -4
  39. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +5 -5
  40. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +1 -1
  41. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +1 -1
  42. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  44. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  45. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  46. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +1 -1
  47. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  48. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  49. package/dist/melonjs.mjs/loader/cache.js +24 -0
  50. package/dist/melonjs.mjs/loader/loader.js +331 -716
  51. package/dist/melonjs.mjs/loader/loadingscreen.js +4 -4
  52. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  53. package/dist/melonjs.mjs/loader/parser.js +281 -0
  54. package/dist/melonjs.mjs/loader/settings.js +91 -0
  55. package/dist/melonjs.mjs/math/color.js +1 -1
  56. package/dist/melonjs.mjs/math/math.js +1 -1
  57. package/dist/melonjs.mjs/math/matrix2.js +7 -9
  58. package/dist/melonjs.mjs/math/matrix3.js +18 -21
  59. package/dist/melonjs.mjs/math/observable_vector2.js +3 -3
  60. package/dist/melonjs.mjs/math/observable_vector3.js +3 -4
  61. package/dist/melonjs.mjs/math/vector2.js +3 -3
  62. package/dist/melonjs.mjs/math/vector3.js +3 -4
  63. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +1 -1
  64. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +1 -1
  65. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +1 -1
  66. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +1 -1
  67. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  68. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +1 -1
  69. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  70. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  71. package/dist/melonjs.mjs/particles/emitter.js +3 -3
  72. package/dist/melonjs.mjs/particles/particle.js +1 -1
  73. package/dist/melonjs.mjs/particles/settings.js +1 -1
  74. package/dist/melonjs.mjs/physics/body.js +18 -14
  75. package/dist/melonjs.mjs/physics/bounds.js +18 -70
  76. package/dist/melonjs.mjs/physics/collision.js +1 -1
  77. package/dist/melonjs.mjs/physics/detector.js +1 -1
  78. package/dist/melonjs.mjs/physics/quadtree.js +1 -1
  79. package/dist/melonjs.mjs/physics/response.js +1 -1
  80. package/dist/melonjs.mjs/physics/sat.js +1 -1
  81. package/dist/melonjs.mjs/physics/world.js +1 -1
  82. package/dist/melonjs.mjs/plugin/plugin.js +3 -3
  83. package/dist/melonjs.mjs/renderable/collectable.js +1 -1
  84. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  85. package/dist/melonjs.mjs/renderable/container.js +25 -19
  86. package/dist/melonjs.mjs/renderable/dragndrop.js +1 -1
  87. package/dist/melonjs.mjs/renderable/imagelayer.js +7 -1
  88. package/dist/melonjs.mjs/renderable/light2d.js +1 -1
  89. package/dist/melonjs.mjs/renderable/nineslicesprite.js +1 -1
  90. package/dist/melonjs.mjs/renderable/renderable.js +126 -105
  91. package/dist/melonjs.mjs/renderable/sprite.js +33 -54
  92. package/dist/melonjs.mjs/renderable/trigger.js +1 -1
  93. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +1 -1
  94. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +1 -1
  95. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +1 -1
  96. package/dist/melonjs.mjs/state/stage.js +1 -1
  97. package/dist/melonjs.mjs/state/state.js +2 -2
  98. package/dist/melonjs.mjs/system/device.js +1 -1
  99. package/dist/melonjs.mjs/system/dom.js +1 -1
  100. package/dist/melonjs.mjs/system/event.js +1 -1
  101. package/dist/melonjs.mjs/system/platform.js +1 -1
  102. package/dist/melonjs.mjs/system/pooling.js +8 -18
  103. package/dist/melonjs.mjs/system/save.js +1 -1
  104. package/dist/melonjs.mjs/system/timer.js +1 -1
  105. package/dist/melonjs.mjs/text/bitmaptext.js +66 -8
  106. package/dist/melonjs.mjs/text/bitmaptextdata.js +1 -1
  107. package/dist/melonjs.mjs/text/glyph.js +1 -1
  108. package/dist/melonjs.mjs/text/text.js +1 -1
  109. package/dist/melonjs.mjs/text/textmetrics.js +1 -1
  110. package/dist/melonjs.mjs/text/textstyle.js +1 -1
  111. package/dist/melonjs.mjs/tweens/easing.js +1 -1
  112. package/dist/melonjs.mjs/tweens/interpolation.js +1 -1
  113. package/dist/melonjs.mjs/tweens/tween.js +1 -1
  114. package/dist/melonjs.mjs/utils/agent.js +1 -1
  115. package/dist/melonjs.mjs/utils/array.js +1 -1
  116. package/dist/melonjs.mjs/utils/file.js +1 -1
  117. package/dist/melonjs.mjs/utils/function.js +1 -1
  118. package/dist/melonjs.mjs/utils/string.js +2 -2
  119. package/dist/melonjs.mjs/utils/utils.js +2 -4
  120. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +1 -1
  121. package/dist/melonjs.mjs/video/renderer.js +1 -1
  122. package/dist/melonjs.mjs/video/texture/atlas.js +10 -9
  123. package/dist/melonjs.mjs/video/texture/cache.js +3 -3
  124. package/dist/melonjs.mjs/video/texture/canvas_texture.js +1 -1
  125. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  126. package/dist/melonjs.mjs/video/video.js +2 -2
  127. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +1 -1
  128. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +235 -0
  129. package/{src/video/webgl → dist/melonjs.mjs/video/webgl/compositors}/webgl_compositor.js +28 -205
  130. package/dist/melonjs.mjs/video/webgl/glshader.js +1 -1
  131. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  132. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
  133. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  134. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
  135. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +1 -1
  136. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  137. package/dist/melonjs.mjs/video/webgl/utils/program.js +1 -1
  138. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  139. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +1 -1
  140. package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +2 -2
  141. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +2 -2
  142. package/dist/melonjs.module.js +17844 -17809
  143. package/dist/types/entity/entity.d.ts +2 -2
  144. package/dist/types/geometries/path2d.d.ts +5 -31
  145. package/dist/types/geometries/point.d.ts +2 -7
  146. package/dist/types/geometries/poly.d.ts +0 -1
  147. package/dist/types/index.d.ts +2 -2
  148. package/dist/types/loader/cache.d.ts +7 -0
  149. package/dist/types/loader/loader.d.ts +166 -181
  150. package/dist/types/loader/parser.d.ts +41 -0
  151. package/dist/types/loader/settings.d.ts +57 -0
  152. package/dist/types/particles/emitter.d.ts +4 -4
  153. package/dist/types/physics/bounds.d.ts +29 -84
  154. package/dist/types/renderable/container.d.ts +0 -11
  155. package/dist/types/renderable/renderable.d.ts +37 -31
  156. package/dist/types/renderable/sprite.d.ts +3 -3
  157. package/dist/types/state/state.d.ts +1 -1
  158. package/dist/types/system/pooling.d.ts +2 -2
  159. package/dist/types/video/renderer.d.ts +1 -1
  160. package/dist/types/video/webgl/compositors/compositor.d.ts +101 -0
  161. package/dist/types/video/webgl/compositors/webgl_compositor.d.ts +86 -0
  162. package/dist/types/video/webgl/webgl_compositor.d.ts +2 -3
  163. package/dist/types/video/webgl/webgl_renderer.d.ts +1 -1
  164. package/package.json +16 -15
  165. package/src/audio/audio.js +3 -3
  166. package/src/entity/entity.js +42 -8
  167. package/src/geometries/ellipse.js +1 -2
  168. package/src/geometries/path2d.js +17 -41
  169. package/src/geometries/point.js +0 -5
  170. package/src/geometries/poly.js +1 -4
  171. package/src/geometries/rectangle.js +12 -8
  172. package/src/index.js +2 -2
  173. package/src/input/gamepad.js +9 -15
  174. package/src/input/pointerevent.js +1 -15
  175. package/src/level/level.js +2 -2
  176. package/src/level/tiled/TMXLayer.js +0 -7
  177. package/src/level/tiled/TMXTileMap.js +7 -3
  178. package/src/level/tiled/TMXTileset.js +4 -4
  179. package/src/loader/cache.js +16 -0
  180. package/src/loader/loader.js +339 -711
  181. package/src/loader/loadingscreen.js +3 -3
  182. package/src/loader/parser.js +279 -0
  183. package/src/loader/settings.js +85 -0
  184. package/src/math/matrix2.js +6 -8
  185. package/src/math/matrix3.js +17 -20
  186. package/src/math/observable_vector2.js +2 -2
  187. package/src/math/observable_vector3.js +2 -3
  188. package/src/math/vector2.js +2 -2
  189. package/src/math/vector3.js +2 -3
  190. package/src/particles/emitter.js +2 -2
  191. package/src/physics/body.js +17 -13
  192. package/src/physics/bounds.js +17 -69
  193. package/src/renderable/container.js +24 -18
  194. package/src/renderable/imagelayer.js +6 -0
  195. package/src/renderable/renderable.js +125 -104
  196. package/src/renderable/sprite.js +32 -53
  197. package/src/state/state.js +1 -1
  198. package/src/system/pooling.js +7 -17
  199. package/src/text/bitmaptext.js +65 -7
  200. package/src/utils/string.js +1 -1
  201. package/src/utils/utils.js +1 -3
  202. package/src/video/texture/atlas.js +9 -8
  203. package/src/video/texture/cache.js +2 -2
  204. package/src/video/video.js +1 -1
  205. package/src/video/webgl/compositors/compositor.js +227 -0
  206. package/src/video/webgl/compositors/webgl_compositor.js +300 -0
  207. package/src/video/webgl/webgl_renderer.js +1 -1
@@ -0,0 +1,300 @@
1
+ import Vector2d from "../../../math/vector2.js";
2
+ import GLShader from "../glshader.js";
3
+ import VertexArrayBuffer from "../buffer/vertex.js";
4
+ import { isPowerOfTwo } from "../../../math/math.js";
5
+ import primitiveVertex from "./../shaders/primitive.vert";
6
+ import primitiveFragment from "./../shaders/primitive.frag";
7
+ import quadVertex from "./../shaders/quad.vert";
8
+ import quadFragment from "./../shaders/quad.frag";
9
+ import Compositor from "./compositor.js";
10
+
11
+ // a pool of resuable vectors
12
+ var V_ARRAY = [
13
+ new Vector2d(),
14
+ new Vector2d(),
15
+ new Vector2d(),
16
+ new Vector2d()
17
+ ];
18
+
19
+ /**
20
+ * @classdesc
21
+ * A WebGL Compositor object. This class handles all of the WebGL state<br>
22
+ * Pushes texture regions or shape geometry into WebGL buffers, automatically flushes to GPU
23
+ * @augments Compositor
24
+ */
25
+ export default class WebGLCompositor extends Compositor {
26
+
27
+ /**
28
+ * Initialize the compositor
29
+ * @ignore
30
+ */
31
+ init (renderer) {
32
+ super.init(renderer);
33
+
34
+ // list of active texture units
35
+ this.currentTextureUnit = -1;
36
+ this.boundTextures = [];
37
+
38
+ // Load and create shader programs
39
+ this.primitiveShader = new GLShader(this.gl, primitiveVertex, primitiveFragment);
40
+ this.quadShader = new GLShader(this.gl, quadVertex, quadFragment);
41
+
42
+ /// define all vertex attributes
43
+ this.addAttribute("aVertex", 2, this.gl.FLOAT, false, 0 * Float32Array.BYTES_PER_ELEMENT); // 0
44
+ this.addAttribute("aRegion", 2, this.gl.FLOAT, false, 2 * Float32Array.BYTES_PER_ELEMENT); // 1
45
+ this.addAttribute("aColor", 4, this.gl.UNSIGNED_BYTE, true, 4 * Float32Array.BYTES_PER_ELEMENT); // 2
46
+
47
+ this.vertexBuffer = new VertexArrayBuffer(this.vertexSize, 6); // 6 vertices per quad
48
+
49
+ // vertex buffer
50
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.gl.createBuffer());
51
+ this.gl.bufferData(this.gl.ARRAY_BUFFER, this.vertexBuffer.buffer, this.gl.STREAM_DRAW);
52
+ }
53
+
54
+ /**
55
+ * Reset compositor internal state
56
+ * @ignore
57
+ */
58
+ reset() {
59
+ super.reset();
60
+
61
+ // delete all related bound texture
62
+ for (var i = 0; i < this.renderer.maxTextures; i++) {
63
+ var texture2D = this.getTexture2D(i);
64
+ if (typeof texture2D !== "undefined") {
65
+ this.deleteTexture2D(texture2D);
66
+ }
67
+ }
68
+ this.currentTextureUnit = -1;
69
+
70
+ // set the quad shader as the default program
71
+ this.useShader(this.quadShader);
72
+ }
73
+
74
+ /**
75
+ * Create a WebGL texture from an image
76
+ * @param {number} unit - Destination texture unit
77
+ * @param {Image|HTMLCanvasElement|ImageData|Uint8Array[]|Float32Array[]} image - Source image
78
+ * @param {number} filter - gl.LINEAR or gl.NEAREST
79
+ * @param {string} [repeat="no-repeat"] - Image repeat behavior (see {@link ImageLayer#repeat})
80
+ * @param {number} [w] - Source image width (Only use with UInt8Array[] or Float32Array[] source image)
81
+ * @param {number} [h] - Source image height (Only use with UInt8Array[] or Float32Array[] source image)
82
+ * @param {number} [b] - Source image border (Only use with UInt8Array[] or Float32Array[] source image)
83
+ * @param {boolean} [premultipliedAlpha=true] - Multiplies the alpha channel into the other color channels
84
+ * @param {boolean} [mipmap=true] - Whether mipmap levels should be generated for this texture
85
+ * @returns {WebGLTexture} a WebGL texture
86
+ */
87
+ createTexture2D(unit, image, filter, repeat = "no-repeat", w, h, b, premultipliedAlpha = true, mipmap = true) {
88
+ var gl = this.gl;
89
+ var isPOT = isPowerOfTwo(w || image.width) && isPowerOfTwo(h || image.height);
90
+ var texture = gl.createTexture();
91
+ var rs = (repeat.search(/^repeat(-x)?$/) === 0) && (isPOT || this.renderer.WebGLVersion > 1) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
92
+ var rt = (repeat.search(/^repeat(-y)?$/) === 0) && (isPOT || this.renderer.WebGLVersion > 1) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
93
+
94
+ this.bindTexture2D(texture, unit);
95
+
96
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, rs);
97
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, rt);
98
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
99
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
100
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultipliedAlpha);
101
+ if (w || h || b) {
102
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, b, gl.RGBA, gl.UNSIGNED_BYTE, image);
103
+ }
104
+ else {
105
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
106
+ }
107
+
108
+ // generate the sprite mimap (used when scaling) if a PowerOfTwo texture
109
+ if (isPOT && mipmap !== false) {
110
+ gl.generateMipmap(gl.TEXTURE_2D);
111
+ }
112
+
113
+ return texture;
114
+ }
115
+
116
+ /**
117
+ * delete the given WebGL texture
118
+ * @param {WebGLTexture} [texture] - a WebGL texture to delete
119
+ * @param {number} [unit] - Texture unit to delete
120
+ */
121
+ deleteTexture2D(texture) {
122
+ this.gl.deleteTexture(texture);
123
+ this.unbindTexture2D(texture);
124
+ }
125
+
126
+ /**
127
+ * returns the WebGL texture associated to the given texture unit
128
+ * @param {number} unit - Texture unit to which a texture is bound
129
+ * @returns {WebGLTexture} texture a WebGL texture
130
+ */
131
+ getTexture2D(unit) {
132
+ return this.boundTextures[unit];
133
+ }
134
+
135
+ /**
136
+ * assign the given WebGL texture to the current batch
137
+ * @param {WebGLTexture} texture - a WebGL texture
138
+ * @param {number} unit - Texture unit to which the given texture is bound
139
+ */
140
+ bindTexture2D(texture, unit) {
141
+ var gl = this.gl;
142
+
143
+ if (texture !== this.boundTextures[unit]) {
144
+ this.flush();
145
+ if (this.currentTextureUnit !== unit) {
146
+ this.currentTextureUnit = unit;
147
+ gl.activeTexture(gl.TEXTURE0 + unit);
148
+ }
149
+
150
+ gl.bindTexture(gl.TEXTURE_2D, texture);
151
+ this.boundTextures[unit] = texture;
152
+
153
+ } else if (this.currentTextureUnit !== unit) {
154
+ this.flush();
155
+ this.currentTextureUnit = unit;
156
+ gl.activeTexture(gl.TEXTURE0 + unit);
157
+ }
158
+ }
159
+
160
+ /**
161
+ * unbind the given WebGL texture, forcing it to be reuploaded
162
+ * @param {WebGLTexture} [texture] - a WebGL texture
163
+ * @param {number} [unit] - a WebGL texture
164
+ * @returns {number} unit the unit number that was associated with the given texture
165
+ */
166
+ unbindTexture2D(texture, unit) {
167
+ if (typeof unit === "undefined") {
168
+ unit = this.boundTextures.indexOf(texture);
169
+ }
170
+ if (unit !== -1) {
171
+ delete this.boundTextures[unit];
172
+ if (unit === this.currentTextureUnit) {
173
+ this.currentTextureUnit = -1;
174
+ }
175
+ }
176
+ return unit;
177
+ }
178
+
179
+ /**
180
+ * @ignore
181
+ */
182
+ uploadTexture(texture, w, h, b, force = false) {
183
+ var unit = this.renderer.cache.getUnit(texture);
184
+ var texture2D = this.boundTextures[unit];
185
+
186
+ if (typeof texture2D === "undefined" || force) {
187
+ this.createTexture2D(
188
+ unit,
189
+ texture.getTexture(),
190
+ this.renderer.settings.antiAlias ? this.gl.LINEAR : this.gl.NEAREST,
191
+ texture.repeat,
192
+ w,
193
+ h,
194
+ b,
195
+ texture.premultipliedAlpha
196
+ );
197
+ } else {
198
+ this.bindTexture2D(texture2D, unit);
199
+ }
200
+
201
+ return this.currentTextureUnit;
202
+ }
203
+
204
+
205
+ /**
206
+ * Select the shader to use for compositing
207
+ * @see GLShader
208
+ * @param {GLShader} shader - a reference to a GLShader instance
209
+ */
210
+ useShader(shader) {
211
+ if (this.activeShader !== shader) {
212
+ this.flush();
213
+ this.activeShader = shader;
214
+ this.activeShader.bind();
215
+ this.activeShader.setUniform("uProjectionMatrix", this.renderer.projectionMatrix);
216
+ this.activeShader.setVertexAttributes(this.gl, this.attributes, this.vertexByteSize);
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Add a textured quad
222
+ * @param {TextureAtlas} texture - Source texture atlas
223
+ * @param {number} x - Destination x-coordinate
224
+ * @param {number} y - Destination y-coordinate
225
+ * @param {number} w - Destination width
226
+ * @param {number} h - Destination height
227
+ * @param {number} u0 - Texture UV (u0) value.
228
+ * @param {number} v0 - Texture UV (v0) value.
229
+ * @param {number} u1 - Texture UV (u1) value.
230
+ * @param {number} v1 - Texture UV (v1) value.
231
+ * @param {number} tint - tint color to be applied to the texture in UINT32 (argb) format
232
+ */
233
+ addQuad(texture, x, y, w, h, u0, v0, u1, v1, tint) {
234
+
235
+ if (this.color.alpha < 1 / 255) {
236
+ // Fast path: don't send fully transparent quads
237
+ return;
238
+ }
239
+
240
+ this.useShader(this.quadShader);
241
+
242
+ if (this.vertexBuffer.isFull(6)) {
243
+ // is the vertex buffer full if we add 6 more vertices
244
+ this.flush();
245
+ }
246
+
247
+ // upload and activate the texture if necessary
248
+ var unit = this.uploadTexture(texture);
249
+ // set fragement sampler accordingly
250
+ this.quadShader.setUniform("uSampler", unit);
251
+
252
+ // Transform vertices
253
+ var m = this.viewMatrix,
254
+ vec0 = V_ARRAY[0].set(x, y),
255
+ vec1 = V_ARRAY[1].set(x + w, y),
256
+ vec2 = V_ARRAY[2].set(x, y + h),
257
+ vec3 = V_ARRAY[3].set(x + w, y + h);
258
+
259
+ if (!m.isIdentity()) {
260
+ m.apply(vec0);
261
+ m.apply(vec1);
262
+ m.apply(vec2);
263
+ m.apply(vec3);
264
+ }
265
+
266
+ this.vertexBuffer.push(vec0.x, vec0.y, u0, v0, tint);
267
+ this.vertexBuffer.push(vec1.x, vec1.y, u1, v0, tint);
268
+ this.vertexBuffer.push(vec2.x, vec2.y, u0, v1, tint);
269
+ this.vertexBuffer.push(vec2.x, vec2.y, u0, v1, tint);
270
+ this.vertexBuffer.push(vec1.x, vec1.y, u1, v0, tint);
271
+ this.vertexBuffer.push(vec3.x, vec3.y, u1, v1, tint);
272
+ }
273
+
274
+ /**
275
+ * Draw an array of vertices
276
+ * @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)
277
+ * @param {Point[]} verts - an array of vertices
278
+ * @param {number} [vertexCount=verts.length] - amount of points defined in the points array
279
+ */
280
+ drawVertices(mode, verts, vertexCount = verts.length) {
281
+ // use the primitive shader
282
+ this.useShader(this.primitiveShader);
283
+ // Set the line color
284
+ this.primitiveShader.setUniform("uColor", this.color);
285
+
286
+ var m = this.viewMatrix;
287
+ var vertex = this.vertexBuffer;
288
+ var m_isIdentity = m.isIdentity();
289
+
290
+ for (var i = 0; i < vertexCount; i++) {
291
+ if (!m_isIdentity) {
292
+ m.apply(verts[i]);
293
+ }
294
+ vertex.push(verts[i].x, verts[i].y);
295
+ }
296
+
297
+ // flush
298
+ this.flush(mode);
299
+ }
300
+ }
@@ -1,6 +1,6 @@
1
1
  import Color from "./../../math/color.js";
2
2
  import Matrix2d from "./../../math/matrix2.js";
3
- import WebGLCompositor from "./webgl_compositor.js";
3
+ import WebGLCompositor from "./compositors/webgl_compositor.js";
4
4
  import Renderer from "./../renderer.js";
5
5
  import TextureCache from "./../texture/cache.js";
6
6
  import { TextureAtlas, createAtlas } from "./../texture/atlas.js";