@vpmedia/phaser 1.123.0 → 1.125.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 (221) hide show
  1. package/dist/index.js +635 -623
  2. package/dist/index.js.map +1 -1
  3. package/dist/phaser/core/animation.d.ts +3 -3
  4. package/dist/phaser/core/animation.d.ts.map +1 -1
  5. package/dist/phaser/core/animation_manager.d.ts.map +1 -1
  6. package/dist/phaser/core/animation_parser.d.ts +27 -2
  7. package/dist/phaser/core/animation_parser.d.ts.map +1 -1
  8. package/dist/phaser/core/array_set.d.ts +11 -11
  9. package/dist/phaser/core/array_set.d.ts.map +1 -1
  10. package/dist/phaser/core/cache.d.ts.map +1 -1
  11. package/dist/phaser/core/callback.d.ts.map +1 -1
  12. package/dist/phaser/core/dom.d.ts +125 -19
  13. package/dist/phaser/core/dom.d.ts.map +1 -1
  14. package/dist/phaser/core/factory.d.ts +3 -2
  15. package/dist/phaser/core/factory.d.ts.map +1 -1
  16. package/dist/phaser/core/frame_data.d.ts.map +1 -1
  17. package/dist/phaser/core/input.d.ts +3 -2
  18. package/dist/phaser/core/input.d.ts.map +1 -1
  19. package/dist/phaser/core/input_handler.d.ts.map +1 -1
  20. package/dist/phaser/core/input_mouse.d.ts +5 -1
  21. package/dist/phaser/core/input_mouse.d.ts.map +1 -1
  22. package/dist/phaser/core/input_pointer.d.ts +3 -3
  23. package/dist/phaser/core/input_pointer.d.ts.map +1 -1
  24. package/dist/phaser/core/input_touch.d.ts +8 -8
  25. package/dist/phaser/core/input_touch.d.ts.map +1 -1
  26. package/dist/phaser/core/loader.d.ts +11 -2
  27. package/dist/phaser/core/loader.d.ts.map +1 -1
  28. package/dist/phaser/core/loader_parser.d.ts +14 -1
  29. package/dist/phaser/core/loader_parser.d.ts.map +1 -1
  30. package/dist/phaser/core/raf.d.ts +1 -1
  31. package/dist/phaser/core/raf.d.ts.map +1 -1
  32. package/dist/phaser/core/scale_manager.d.ts.map +1 -1
  33. package/dist/phaser/core/scene_manager.d.ts.map +1 -1
  34. package/dist/phaser/core/signal.d.ts.map +1 -1
  35. package/dist/phaser/core/sound.d.ts.map +1 -1
  36. package/dist/phaser/core/sound_manager.d.ts +1 -1
  37. package/dist/phaser/core/sound_manager.d.ts.map +1 -1
  38. package/dist/phaser/core/stage.d.ts +16 -6
  39. package/dist/phaser/core/stage.d.ts.map +1 -1
  40. package/dist/phaser/core/time.d.ts.map +1 -1
  41. package/dist/phaser/core/timer.d.ts +1 -1
  42. package/dist/phaser/core/timer.d.ts.map +1 -1
  43. package/dist/phaser/core/tween.d.ts +13 -5
  44. package/dist/phaser/core/tween.d.ts.map +1 -1
  45. package/dist/phaser/core/tween_data.d.ts +9 -7
  46. package/dist/phaser/core/tween_data.d.ts.map +1 -1
  47. package/dist/phaser/core/tween_manager.d.ts.map +1 -1
  48. package/dist/phaser/display/button.d.ts +6 -5
  49. package/dist/phaser/display/button.d.ts.map +1 -1
  50. package/dist/phaser/display/canvas/buffer.d.ts +1 -1
  51. package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
  52. package/dist/phaser/display/canvas/masker.d.ts +1 -1
  53. package/dist/phaser/display/canvas/masker.d.ts.map +1 -1
  54. package/dist/phaser/display/canvas/pool.d.ts +2 -2
  55. package/dist/phaser/display/canvas/pool.d.ts.map +1 -1
  56. package/dist/phaser/display/canvas/renderer.d.ts +9 -8
  57. package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
  58. package/dist/phaser/display/display_object.d.ts +5 -3
  59. package/dist/phaser/display/display_object.d.ts.map +1 -1
  60. package/dist/phaser/display/graphics.d.ts +1 -1
  61. package/dist/phaser/display/graphics.d.ts.map +1 -1
  62. package/dist/phaser/display/group.d.ts +1 -1
  63. package/dist/phaser/display/group.d.ts.map +1 -1
  64. package/dist/phaser/display/image.d.ts +6 -5
  65. package/dist/phaser/display/image.d.ts.map +1 -1
  66. package/dist/phaser/display/sprite_util.d.ts +3 -2
  67. package/dist/phaser/display/sprite_util.d.ts.map +1 -1
  68. package/dist/phaser/display/text.d.ts +2 -16
  69. package/dist/phaser/display/text.d.ts.map +1 -1
  70. package/dist/phaser/display/webgl/abstract_filter.d.ts +14 -8
  71. package/dist/phaser/display/webgl/abstract_filter.d.ts.map +1 -1
  72. package/dist/phaser/display/webgl/blend_manager.d.ts +2 -3
  73. package/dist/phaser/display/webgl/blend_manager.d.ts.map +1 -1
  74. package/dist/phaser/display/webgl/earcut.d.ts.map +1 -1
  75. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +11 -5
  76. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
  77. package/dist/phaser/display/webgl/filter_manager.d.ts +6 -4
  78. package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
  79. package/dist/phaser/display/webgl/filter_texture.d.ts +4 -4
  80. package/dist/phaser/display/webgl/filter_texture.d.ts.map +1 -1
  81. package/dist/phaser/display/webgl/graphics.d.ts +2 -2
  82. package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
  83. package/dist/phaser/display/webgl/mask_manager.d.ts +3 -2
  84. package/dist/phaser/display/webgl/mask_manager.d.ts.map +1 -1
  85. package/dist/phaser/display/webgl/render_texture.d.ts +11 -8
  86. package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
  87. package/dist/phaser/display/webgl/renderer.d.ts +8 -4
  88. package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
  89. package/dist/phaser/display/webgl/shader/normal.d.ts +28 -3
  90. package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
  91. package/dist/phaser/display/webgl/sprite_batch.d.ts +6 -5
  92. package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
  93. package/dist/phaser/display/webgl/stencil_manager.d.ts +3 -3
  94. package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
  95. package/dist/phaser/display/webgl/texture.d.ts.map +1 -1
  96. package/dist/phaser/display/webgl/texture_util.d.ts +2 -2
  97. package/dist/phaser/display/webgl/texture_util.d.ts.map +1 -1
  98. package/dist/phaser/display/webgl/util.d.ts +1 -1
  99. package/dist/phaser/display/webgl/util.d.ts.map +1 -1
  100. package/dist/phaser/geom/circle.d.ts.map +1 -1
  101. package/dist/phaser/geom/line.d.ts +10 -1
  102. package/dist/phaser/geom/line.d.ts.map +1 -1
  103. package/dist/phaser/geom/rectangle.d.ts.map +1 -1
  104. package/dist/phaser/geom/util/circle.d.ts +2 -1
  105. package/dist/phaser/geom/util/circle.d.ts.map +1 -1
  106. package/dist/phaser/geom/util/point.d.ts +1 -1
  107. package/dist/phaser/geom/util/point.d.ts.map +1 -1
  108. package/dist/phaser/geom/util/rectangle.d.ts +1 -1
  109. package/dist/phaser/geom/util/rectangle.d.ts.map +1 -1
  110. package/dist/phaser/util/math.d.ts.map +1 -1
  111. package/package.json +1 -1
  112. package/src/phaser/core/animation.ts +11 -11
  113. package/src/phaser/core/animation_manager.ts +12 -12
  114. package/src/phaser/core/animation_parser.ts +39 -37
  115. package/src/phaser/core/array_set.ts +28 -28
  116. package/src/phaser/core/cache.test.ts +33 -33
  117. package/src/phaser/core/cache.ts +7 -7
  118. package/src/phaser/core/callback.ts +1 -0
  119. package/src/phaser/core/callback_context.test.ts +8 -8
  120. package/src/phaser/core/device_util.ts +4 -4
  121. package/src/phaser/core/dom.ts +38 -24
  122. package/src/phaser/core/factory.ts +9 -2
  123. package/src/phaser/core/frame_data.test.ts +23 -23
  124. package/src/phaser/core/frame_data.ts +2 -5
  125. package/src/phaser/core/game.ts +12 -12
  126. package/src/phaser/core/input.ts +11 -10
  127. package/src/phaser/core/input_handler.test.ts +18 -18
  128. package/src/phaser/core/input_handler.ts +14 -14
  129. package/src/phaser/core/input_mouse.ts +13 -12
  130. package/src/phaser/core/input_pointer.test.ts +26 -26
  131. package/src/phaser/core/input_pointer.ts +4 -4
  132. package/src/phaser/core/input_touch.ts +8 -8
  133. package/src/phaser/core/loader.test.ts +26 -26
  134. package/src/phaser/core/loader.ts +63 -75
  135. package/src/phaser/core/loader_parser.test.ts +16 -16
  136. package/src/phaser/core/loader_parser.ts +16 -6
  137. package/src/phaser/core/raf.ts +1 -1
  138. package/src/phaser/core/registry.test.ts +6 -6
  139. package/src/phaser/core/scale_manager.ts +12 -11
  140. package/src/phaser/core/scene_manager.test.ts +30 -30
  141. package/src/phaser/core/scene_manager.ts +3 -3
  142. package/src/phaser/core/signal.test.ts +8 -8
  143. package/src/phaser/core/signal.ts +3 -3
  144. package/src/phaser/core/signal_dispatch.test.ts +30 -30
  145. package/src/phaser/core/sound.ts +45 -40
  146. package/src/phaser/core/sound_manager.ts +18 -22
  147. package/src/phaser/core/sound_sprite.ts +1 -1
  148. package/src/phaser/core/stage.ts +22 -12
  149. package/src/phaser/core/time.ts +1 -1
  150. package/src/phaser/core/timer.test.ts +47 -47
  151. package/src/phaser/core/timer.ts +2 -2
  152. package/src/phaser/core/tween.ts +34 -36
  153. package/src/phaser/core/tween_data.test.ts +119 -0
  154. package/src/phaser/core/tween_data.ts +54 -39
  155. package/src/phaser/core/tween_easing.test.ts +5 -5
  156. package/src/phaser/core/tween_manager.ts +2 -2
  157. package/src/phaser/display/bitmap_text.test.ts +30 -30
  158. package/src/phaser/display/bitmap_text.ts +3 -3
  159. package/src/phaser/display/button.ts +20 -18
  160. package/src/phaser/display/canvas/buffer.ts +2 -2
  161. package/src/phaser/display/canvas/graphics.ts +2 -2
  162. package/src/phaser/display/canvas/masker.ts +1 -1
  163. package/src/phaser/display/canvas/pool.test.ts +20 -20
  164. package/src/phaser/display/canvas/pool.ts +6 -6
  165. package/src/phaser/display/canvas/renderer.ts +18 -16
  166. package/src/phaser/display/canvas/tinter.ts +1 -1
  167. package/src/phaser/display/canvas/util.test.ts +25 -25
  168. package/src/phaser/display/canvas/util.ts +2 -2
  169. package/src/phaser/display/display_object.ts +16 -15
  170. package/src/phaser/display/graphics.test.ts +70 -20
  171. package/src/phaser/display/graphics.ts +46 -42
  172. package/src/phaser/display/group.ts +13 -12
  173. package/src/phaser/display/image.ts +35 -31
  174. package/src/phaser/display/sprite_util.ts +4 -3
  175. package/src/phaser/display/text.test.ts +28 -25
  176. package/src/phaser/display/text.ts +56 -62
  177. package/src/phaser/display/webgl/abstract_filter.ts +21 -11
  178. package/src/phaser/display/webgl/blend_manager.ts +4 -5
  179. package/src/phaser/display/webgl/earcut.test.ts +20 -20
  180. package/src/phaser/display/webgl/earcut.ts +46 -42
  181. package/src/phaser/display/webgl/fast_sprite_batch.ts +21 -16
  182. package/src/phaser/display/webgl/filter_manager.ts +7 -4
  183. package/src/phaser/display/webgl/filter_texture.ts +5 -5
  184. package/src/phaser/display/webgl/graphics.ts +3 -3
  185. package/src/phaser/display/webgl/mask_manager.ts +9 -14
  186. package/src/phaser/display/webgl/render_texture.ts +15 -14
  187. package/src/phaser/display/webgl/renderer.ts +10 -9
  188. package/src/phaser/display/webgl/shader/normal.ts +45 -35
  189. package/src/phaser/display/webgl/shader/shader.test.ts +24 -24
  190. package/src/phaser/display/webgl/shader_manager.test.ts +18 -18
  191. package/src/phaser/display/webgl/shader_manager.ts +1 -1
  192. package/src/phaser/display/webgl/sprite_batch.ts +10 -10
  193. package/src/phaser/display/webgl/stencil_manager.ts +4 -4
  194. package/src/phaser/display/webgl/texture.ts +2 -1
  195. package/src/phaser/display/webgl/texture_util.ts +2 -2
  196. package/src/phaser/display/webgl/util.ts +4 -4
  197. package/src/phaser/geom/circle.test.ts +38 -38
  198. package/src/phaser/geom/circle.ts +7 -7
  199. package/src/phaser/geom/ellipse.test.ts +12 -12
  200. package/src/phaser/geom/line.test.ts +15 -15
  201. package/src/phaser/geom/line.ts +5 -2
  202. package/src/phaser/geom/matrix.test.ts +31 -31
  203. package/src/phaser/geom/point.test.ts +31 -31
  204. package/src/phaser/geom/polygon.test.ts +27 -27
  205. package/src/phaser/geom/polygon.ts +2 -2
  206. package/src/phaser/geom/rectangle.test.ts +87 -87
  207. package/src/phaser/geom/rectangle.ts +12 -13
  208. package/src/phaser/geom/rounded_rectangle.test.ts +9 -9
  209. package/src/phaser/geom/util/circle.test.ts +5 -5
  210. package/src/phaser/geom/util/circle.ts +8 -11
  211. package/src/phaser/geom/util/ellipse.test.ts +2 -2
  212. package/src/phaser/geom/util/line.test.ts +2 -2
  213. package/src/phaser/geom/util/matrix.test.ts +4 -4
  214. package/src/phaser/geom/util/point.test.ts +2 -2
  215. package/src/phaser/geom/util/point.ts +6 -8
  216. package/src/phaser/geom/util/polygon.test.ts +2 -2
  217. package/src/phaser/geom/util/rectangle.test.ts +2 -2
  218. package/src/phaser/geom/util/rectangle.ts +1 -1
  219. package/src/phaser/geom/util/rounded_rectangle.test.ts +2 -2
  220. package/src/phaser/util/math.test.ts +41 -41
  221. package/src/phaser/util/math.ts +7 -5
@@ -1,5 +1,6 @@
1
1
  import { v4 as uuidv4 } from 'uuid';
2
2
  import { compileProgram } from '../util.js';
3
+ import type { Texture } from '../texture.js';
3
4
 
4
5
  const defaultVertexSrc = [
5
6
  'attribute vec2 aVertexPosition;',
@@ -21,7 +22,7 @@ const defaultVertexSrc = [
21
22
  '}',
22
23
  ];
23
24
 
24
- const glMember = (gl: WebGLRenderingContext, name: string): any => (gl as unknown as Record<string, unknown>)[name];
25
+ const glMember = (gl: WebGLRenderingContext, name: string): GLenum => (gl as unknown as Record<string, GLenum>)[name]!;
25
26
 
26
27
  /** Applies one of the gl uniform setters, whose signatures vary by uniform kind. */
27
28
  const callUniformSetter = (setter: unknown, gl: WebGLRenderingContext, ...args: unknown[]): void => {
@@ -32,9 +33,29 @@ const callUniformSetter = (setter: unknown, gl: WebGLRenderingContext, ...args:
32
33
 
33
34
  // this shader is used for the default sprite rendering
34
35
 
36
+ /** The extra texture parameters a sampler uniform may carry, as the consumer supplied them. */
37
+ export type ShaderTextureData = {
38
+ magFilter?: GLenum;
39
+ minFilter?: GLenum;
40
+ wrapS?: GLenum;
41
+ wrapT?: GLenum;
42
+ luminance?: boolean;
43
+ repeat?: boolean;
44
+ flipY?: boolean;
45
+ width?: number;
46
+ height?: number;
47
+ border?: number;
48
+ };
49
+
50
+ /** A sampler uniform, whose value is the texture to bind. */
51
+ export type SamplerUniform = ShaderUniform & { value: Texture | null };
52
+
53
+ /** A vector uniform value, read component-wise by the setter matching its arity. */
54
+ export type UniformVector = { x: number; y: number; z?: number; w?: number };
55
+
35
56
  export type ShaderUniform = {
36
57
  type: string;
37
- value: any;
58
+ value: unknown;
38
59
  uniformLocation?: WebGLUniformLocation | null;
39
60
  /** One of the gl uniform setters. Their arities differ by uniform kind, so the stored value is
40
61
  * opaque and applied through callUniformSetter. */
@@ -42,7 +63,7 @@ export type ShaderUniform = {
42
63
  glMatrix?: boolean;
43
64
  glValueLength?: number;
44
65
  transpose?: boolean;
45
- textureData?: Record<string, any>;
66
+ textureData?: ShaderTextureData;
46
67
  _init?: boolean;
47
68
  };
48
69
 
@@ -141,7 +162,7 @@ export class NormalShader {
141
162
  if (type === 'sampler2D') {
142
163
  uniform._init = false;
143
164
  if (uniform.value !== null) {
144
- this.initSampler2D(uniform);
165
+ this.initSampler2D(uniform as SamplerUniform);
145
166
  }
146
167
  } else if (type === 'mat2' || type === 'mat3' || type === 'mat4') {
147
168
  // These require special handling
@@ -174,13 +195,14 @@ export class NormalShader {
174
195
  * Sets a uniform value for this shader.
175
196
  * @param {object} uniform - The uniform to set.
176
197
  */
177
- public initSampler2D(uniform: any): void {
178
- if (!uniform.value || !uniform.value.baseTexture || !uniform.value.baseTexture.hasLoaded) {
198
+ public initSampler2D(uniform: SamplerUniform): void {
199
+ const texture = uniform.value;
200
+ if (texture?.baseTexture.hasLoaded !== true) {
179
201
  return;
180
202
  }
181
203
  const { gl } = this;
182
204
  gl.activeTexture(glMember(gl, `TEXTURE${this.textureCount}`));
183
- gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id]);
205
+ gl.bindTexture(gl.TEXTURE_2D, texture.baseTexture._glTextures[gl.id] ?? null);
184
206
  // Extended texture data
185
207
  if (uniform.textureData) {
186
208
  const data = uniform.textureData;
@@ -196,13 +218,13 @@ export class NormalShader {
196
218
  const minFilter = data.minFilter ?? gl.LINEAR;
197
219
  let wrapS = data.wrapS ?? gl.CLAMP_TO_EDGE;
198
220
  let wrapT = data.wrapT ?? gl.CLAMP_TO_EDGE;
199
- const format = data.luminance ? gl.LUMINANCE : gl.RGBA;
200
- if (data.repeat) {
221
+ const format = data.luminance === true ? gl.LUMINANCE : gl.RGBA;
222
+ if (data.repeat === true) {
201
223
  wrapS = gl.REPEAT;
202
224
  wrapT = gl.REPEAT;
203
225
  }
204
226
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, Boolean(data.flipY));
205
- if (data.width) {
227
+ if (data.width !== undefined) {
206
228
  const width = data.width ?? 512;
207
229
  const height = data.height ?? 2;
208
230
  const border = data.border ?? 0;
@@ -211,14 +233,14 @@ export class NormalShader {
211
233
  gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, border, format, gl.UNSIGNED_BYTE, null);
212
234
  } else {
213
235
  // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels);
214
- gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, uniform.value.baseTexture.source);
236
+ gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, texture.baseTexture.source!);
215
237
  }
216
238
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);
217
239
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);
218
240
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS);
219
241
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT);
220
242
  }
221
- gl.uniform1i(uniform.uniformLocation, this.textureCount);
243
+ gl.uniform1i(uniform.uniformLocation ?? null, this.textureCount);
222
244
  uniform._init = true;
223
245
  this.textureCount += 1;
224
246
  }
@@ -231,6 +253,8 @@ export class NormalShader {
231
253
  const { gl } = this;
232
254
  // This would probably be faster in an array and it would guarantee key order
233
255
  for (const uniform of Object.values(this.uniforms)) {
256
+ const vector = uniform.value as UniformVector;
257
+ const sampler = uniform as SamplerUniform;
234
258
  if (uniform.glValueLength === 1) {
235
259
  if (uniform.glMatrix === true) {
236
260
  callUniformSetter(uniform.glFunc, gl, uniform.uniformLocation, uniform.transpose, uniform.value);
@@ -238,40 +262,26 @@ export class NormalShader {
238
262
  callUniformSetter(uniform.glFunc, gl, uniform.uniformLocation, uniform.value);
239
263
  }
240
264
  } else if (uniform.glValueLength === 2) {
241
- callUniformSetter(uniform.glFunc, gl, uniform.uniformLocation, uniform.value.x, uniform.value.y);
265
+ callUniformSetter(uniform.glFunc, gl, uniform.uniformLocation, vector.x, vector.y);
242
266
  } else if (uniform.glValueLength === 3) {
243
- callUniformSetter(
244
- uniform.glFunc,
245
- gl,
246
- uniform.uniformLocation,
247
- uniform.value.x,
248
- uniform.value.y,
249
- uniform.value.z
250
- );
267
+ callUniformSetter(uniform.glFunc, gl, uniform.uniformLocation, vector.x, vector.y, vector.z);
251
268
  } else if (uniform.glValueLength === 4) {
252
- callUniformSetter(
253
- uniform.glFunc,
254
- gl,
255
- uniform.uniformLocation,
256
- uniform.value.x,
257
- uniform.value.y,
258
- uniform.value.z,
259
- uniform.value.w
260
- );
269
+ callUniformSetter(uniform.glFunc, gl, uniform.uniformLocation, vector.x, vector.y, vector.z, vector.w);
261
270
  } else if (uniform.type === 'sampler2D') {
262
- if (uniform._init) {
271
+ if (uniform._init === true) {
263
272
  gl.activeTexture(glMember(gl, `TEXTURE${this.textureCount}`));
264
- if (uniform.value.baseTexture._dirty[gl.id]) {
265
- globalThis.PhaserRegistry.INSTANCES[gl.id]?.updateTexture(uniform.value.baseTexture);
273
+ const { baseTexture } = sampler.value!;
274
+ if (baseTexture._dirty[gl.id] === true) {
275
+ globalThis.PhaserRegistry.INSTANCES[gl.id]?.updateTexture(baseTexture);
266
276
  } else {
267
277
  // bind the current texture
268
- gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id]);
278
+ gl.bindTexture(gl.TEXTURE_2D, baseTexture._glTextures[gl.id] ?? null);
269
279
  }
270
280
  // gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id] || PIXI.createWebGLTexture( uniform.value.baseTexture, gl));
271
281
  gl.uniform1i(uniform.uniformLocation ?? null, this.textureCount);
272
282
  this.textureCount += 1;
273
283
  } else {
274
- this.initSampler2D(uniform);
284
+ this.initSampler2D(sampler);
275
285
  }
276
286
  }
277
287
  }
@@ -23,29 +23,29 @@ const createStubGl = (options: StubOptions = {}) => {
23
23
  createShader: vi.fn(() => ({})),
24
24
  shaderSource: vi.fn(),
25
25
  compileShader: vi.fn(),
26
- getShaderParameter: vi.fn(() => true),
27
- getShaderInfoLog: vi.fn(() => ''),
28
- createProgram: vi.fn(() => program),
26
+ getShaderParameter: vi.fn((): boolean => true),
27
+ getShaderInfoLog: vi.fn((): string => ''),
28
+ createProgram: vi.fn((): object | null => program),
29
29
  attachShader: vi.fn(),
30
30
  linkProgram: vi.fn(),
31
- getProgramParameter: vi.fn(() => linkStatus),
32
- getProgramInfoLog: vi.fn(() => 'link failed'),
31
+ getProgramParameter: vi.fn((): boolean => linkStatus),
32
+ getProgramInfoLog: vi.fn((): string => 'link failed'),
33
33
  useProgram,
34
34
  deleteProgram,
35
- getUniformLocation: vi.fn((_program: unknown, name: string) => {
35
+ getUniformLocation: vi.fn((_program: unknown, name: string): object | undefined => {
36
36
  if (!uniformLocations.has(name)) {
37
37
  uniformLocations.set(name, { name });
38
38
  }
39
39
  return uniformLocations.get(name);
40
40
  }),
41
- getAttribLocation: vi.fn((_program: unknown, name: string) => attribLocations[name] ?? 0),
41
+ getAttribLocation: vi.fn((_program: unknown, name: string): number => attribLocations[name] ?? 0),
42
42
  } as unknown as WebGLRenderingContext;
43
43
  return { gl, deleteProgram, useProgram };
44
44
  };
45
45
 
46
- describe('WebGL shaders', () => {
47
- describe('PrimitiveShader', () => {
48
- it('resolves its uniforms and attributes on construction', () => {
46
+ describe('WebGL shaders', (): void => {
47
+ describe('PrimitiveShader', (): void => {
48
+ it('resolves its uniforms and attributes on construction', (): void => {
49
49
  const { gl } = createStubGl({ attribLocations: { aVertexPosition: 0, aColor: 1 } });
50
50
  const shader = new PrimitiveShader(gl);
51
51
  expect(shader.program).not.toBeNull();
@@ -53,7 +53,7 @@ describe('WebGL shaders', () => {
53
53
  expect(shader.attributes).toStrictEqual([0, 1]);
54
54
  });
55
55
 
56
- it('releases the program on destroy', () => {
56
+ it('releases the program on destroy', (): void => {
57
57
  const { gl, deleteProgram } = createStubGl();
58
58
  const shader = new PrimitiveShader(gl);
59
59
  shader.destroy();
@@ -62,24 +62,24 @@ describe('WebGL shaders', () => {
62
62
  expect(shader.gl).toBeNull();
63
63
  });
64
64
 
65
- it('leaves the program null when compilation fails', () => {
65
+ it('leaves the program null when compilation fails', (): void => {
66
66
  const { gl, useProgram } = createStubGl({ program: null });
67
67
  const shader = new PrimitiveShader(gl);
68
68
  expect(shader.program).toBeNull();
69
69
  expect(useProgram).not.toHaveBeenCalled();
70
70
  });
71
71
 
72
- it('destroys cleanly after a failed compile', () => {
72
+ it('destroys cleanly after a failed compile', (): void => {
73
73
  const { gl } = createStubGl({ program: null });
74
74
  const shader = new PrimitiveShader(gl);
75
- expect(() => {
75
+ expect((): void => {
76
76
  shader.destroy();
77
77
  }).not.toThrow();
78
78
  });
79
79
  });
80
80
 
81
- describe('StripShader', () => {
82
- it('resolves its uniforms and attributes on construction', () => {
81
+ describe('StripShader', (): void => {
82
+ it('resolves its uniforms and attributes on construction', (): void => {
83
83
  const { gl } = createStubGl({
84
84
  attribLocations: { aVertexPosition: 0, aTextureCoord: 1, aColor: 2 },
85
85
  });
@@ -89,7 +89,7 @@ describe('WebGL shaders', () => {
89
89
  expect(shader.translationMatrix).toBeDefined();
90
90
  });
91
91
 
92
- it('clears its attributes on destroy', () => {
92
+ it('clears its attributes on destroy', (): void => {
93
93
  const { gl } = createStubGl();
94
94
  const shader = new StripShader(gl);
95
95
  shader.destroy();
@@ -97,8 +97,8 @@ describe('WebGL shaders', () => {
97
97
  });
98
98
  });
99
99
 
100
- describe('ComplexPrimitiveShader', () => {
101
- it('resolves the uniforms it declares', () => {
100
+ describe('ComplexPrimitiveShader', (): void => {
101
+ it('resolves the uniforms it declares', (): void => {
102
102
  const { gl } = createStubGl();
103
103
  const shader = new ComplexPrimitiveShader(gl);
104
104
  expect(shader.tintColor).toBeDefined();
@@ -106,7 +106,7 @@ describe('WebGL shaders', () => {
106
106
  expect(shader.flipY).toBeDefined();
107
107
  });
108
108
 
109
- it('leaves colorAttribute unresolved, as the shader never reads aColor', () => {
109
+ it('leaves colorAttribute unresolved, as the shader never reads aColor', (): void => {
110
110
  const { gl } = createStubGl();
111
111
  const shader = new ComplexPrimitiveShader(gl);
112
112
  expect(shader.colorAttribute).toBeUndefined();
@@ -114,8 +114,8 @@ describe('WebGL shaders', () => {
114
114
  });
115
115
  });
116
116
 
117
- describe('FastShader', () => {
118
- it('resolves the full attribute set in batch order', () => {
117
+ describe('FastShader', (): void => {
118
+ it('resolves the full attribute set in batch order', (): void => {
119
119
  const { gl } = createStubGl({
120
120
  attribLocations: {
121
121
  aVertexPosition: 0,
@@ -130,13 +130,13 @@ describe('WebGL shaders', () => {
130
130
  expect(shader.attributes).toStrictEqual([0, 1, 2, 3, 4, 5]);
131
131
  });
132
132
 
133
- it('falls back to slot 2 when the driver reports aColor as -1', () => {
133
+ it('falls back to slot 2 when the driver reports aColor as -1', (): void => {
134
134
  const { gl } = createStubGl({ attribLocations: { aColor: -1 } });
135
135
  const shader = new FastShader(gl);
136
136
  expect(shader.colorAttribute).toBe(2);
137
137
  });
138
138
 
139
- it('releases the program and buffers on destroy', () => {
139
+ it('releases the program and buffers on destroy', (): void => {
140
140
  const { gl, deleteProgram } = createStubGl();
141
141
  const shader = new FastShader(gl);
142
142
  shader.destroy();
@@ -21,17 +21,17 @@ const createManager = (): { manager: WebGLShaderManager; gl: GlMocks } => {
21
21
  const shaderStub = (uid: string, attributes: number[]): NormalShader =>
22
22
  ({ _UID: uid, program: {}, attributes }) as unknown as NormalShader;
23
23
 
24
- describe('WebGLShaderManager', () => {
25
- describe('constructor', () => {
26
- it('starts with ten disabled attribute slots', () => {
24
+ describe('WebGLShaderManager', (): void => {
25
+ describe('constructor', (): void => {
26
+ it('starts with ten disabled attribute slots', (): void => {
27
27
  const manager = new WebGLShaderManager();
28
28
  expect(manager.attribState).toHaveLength(10);
29
- expect(manager.attribState.every((enabled) => enabled === false)).toBe(true);
29
+ expect(manager.attribState.every((enabled): boolean => enabled === false)).toBe(true);
30
30
  });
31
31
  });
32
32
 
33
- describe('setAttribs', () => {
34
- it('enables exactly the requested attribute slots', () => {
33
+ describe('setAttribs', (): void => {
34
+ it('enables exactly the requested attribute slots', (): void => {
35
35
  const { manager, gl } = createManager();
36
36
  manager.setAttribs([0, 2]);
37
37
  expect(gl.enableVertexAttribArray).toHaveBeenCalledTimes(2);
@@ -39,7 +39,7 @@ describe('WebGLShaderManager', () => {
39
39
  expect(gl.enableVertexAttribArray).toHaveBeenCalledWith(2);
40
40
  });
41
41
 
42
- it('only touches slots whose state actually changed', () => {
42
+ it('only touches slots whose state actually changed', (): void => {
43
43
  const { manager, gl } = createManager();
44
44
  manager.setAttribs([0, 1]);
45
45
  vi.clearAllMocks();
@@ -48,7 +48,7 @@ describe('WebGLShaderManager', () => {
48
48
  expect(gl.disableVertexAttribArray).not.toHaveBeenCalled();
49
49
  });
50
50
 
51
- it('disables slots dropped between calls', () => {
51
+ it('disables slots dropped between calls', (): void => {
52
52
  const { manager, gl } = createManager();
53
53
  manager.setAttribs([0, 1, 2]);
54
54
  vi.clearAllMocks();
@@ -58,13 +58,13 @@ describe('WebGLShaderManager', () => {
58
58
  expect(gl.enableVertexAttribArray).not.toHaveBeenCalled();
59
59
  });
60
60
 
61
- it('mirrors the sparse temp state, leaving untouched slots unset', () => {
61
+ it('mirrors the sparse temp state, leaving untouched slots unset', (): void => {
62
62
  const { manager } = createManager();
63
63
  manager.setAttribs([1, 3]);
64
64
  expect(manager.attribState.slice(0, 4)).toStrictEqual([undefined, true, undefined, true]);
65
65
  });
66
66
 
67
- it('disables the previously enabled slots when given no attributes', () => {
67
+ it('disables the previously enabled slots when given no attributes', (): void => {
68
68
  const { manager, gl } = createManager();
69
69
  manager.setAttribs([0, 1]);
70
70
  vi.clearAllMocks();
@@ -76,8 +76,8 @@ describe('WebGLShaderManager', () => {
76
76
  });
77
77
  });
78
78
 
79
- describe('setShader', () => {
80
- it('binds a new shader and reports that it switched', () => {
79
+ describe('setShader', (): void => {
80
+ it('binds a new shader and reports that it switched', (): void => {
81
81
  const { manager, gl } = createManager();
82
82
  const shader = shaderStub('a', [0, 1]);
83
83
  expect(manager.setShader(shader)).toBe(true);
@@ -85,7 +85,7 @@ describe('WebGLShaderManager', () => {
85
85
  expect(gl.useProgram).toHaveBeenCalledWith(shader.program);
86
86
  });
87
87
 
88
- it('skips rebinding the shader already in use', () => {
88
+ it('skips rebinding the shader already in use', (): void => {
89
89
  const { manager, gl } = createManager();
90
90
  const shader = shaderStub('a', [0, 1]);
91
91
  manager.setShader(shader);
@@ -94,7 +94,7 @@ describe('WebGLShaderManager', () => {
94
94
  expect(gl.useProgram).not.toHaveBeenCalled();
95
95
  });
96
96
 
97
- it('rebinds when a different shader is supplied', () => {
97
+ it('rebinds when a different shader is supplied', (): void => {
98
98
  const { manager } = createManager();
99
99
  manager.setShader(shaderStub('a', [0]));
100
100
  const next = shaderStub('b', [0, 1]);
@@ -103,8 +103,8 @@ describe('WebGLShaderManager', () => {
103
103
  });
104
104
  });
105
105
 
106
- describe('destroy', () => {
107
- it('clears attribute state and forgets the current shader', () => {
106
+ describe('destroy', (): void => {
107
+ it('clears attribute state and forgets the current shader', (): void => {
108
108
  const { manager } = createManager();
109
109
  manager.setShader(shaderStub('a', [0]));
110
110
  manager.destroy();
@@ -114,9 +114,9 @@ describe('WebGLShaderManager', () => {
114
114
  expect(manager._currentId).toBeNull();
115
115
  });
116
116
 
117
- it('tolerates shaders that were never created', () => {
117
+ it('tolerates shaders that were never created', (): void => {
118
118
  const { manager } = createManager();
119
- expect(() => {
119
+ expect((): void => {
120
120
  manager.destroy();
121
121
  }).not.toThrow();
122
122
  });
@@ -71,7 +71,7 @@ export class WebGLShaderManager {
71
71
  for (i = 0; i < this.attribState.length; i += 1) {
72
72
  if (this.attribState[i] !== this.tempAttribState[i]) {
73
73
  this.attribState[i] = this.tempAttribState[i];
74
- if (this.tempAttribState[i]) {
74
+ if (this.tempAttribState[i] === true) {
75
75
  gl.enableVertexAttribArray(i);
76
76
  } else {
77
77
  gl.disableVertexAttribArray(i);
@@ -16,13 +16,13 @@ export class WebGLSpriteBatch {
16
16
  public lastIndexCount: number;
17
17
  public drawing: boolean;
18
18
  public currentBatchSize: number;
19
- public currentBaseTexture: any;
19
+ public currentBaseTexture: BaseTexture | null;
20
20
  public dirty: boolean;
21
- public textures: any[];
21
+ public textures: BaseTexture[];
22
22
  public blendModes: number[];
23
23
  public shaders: NormalShader[];
24
- public sprites: any[];
25
- public defaultShader: any;
24
+ public sprites: Image[];
25
+ public defaultShader: AbstractFilter;
26
26
  public gl!: IdentifiedWebGLRenderingContext;
27
27
  public vertexBuffer!: WebGLBuffer | null;
28
28
  public indexBuffer!: WebGLBuffer | null;
@@ -234,7 +234,7 @@ export class WebGLSpriteBatch {
234
234
  // bind the buffers
235
235
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
236
236
  gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
237
- shader = this.defaultShader.shaders[gl.id];
237
+ shader = this.defaultShader.shaders[gl.id]!;
238
238
  // this is the same for each shader?
239
239
  const stride = this.vertSize * 4;
240
240
  gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0);
@@ -261,12 +261,12 @@ export class WebGLSpriteBatch {
261
261
  let shaderSwap = false;
262
262
  let sprite;
263
263
  for (let i = 0, j = this.currentBatchSize; i < j; i += 1) {
264
- sprite = this.sprites[i];
264
+ sprite = this.sprites[i]!;
265
265
  nextTexture = sprite.tilingTexture ? sprite.tilingTexture.baseTexture : sprite.texture.baseTexture;
266
266
  nextBlendMode = sprite.blendMode;
267
267
  nextShader = sprite.shader ?? this.defaultShader;
268
268
  blendSwap = currentBlendMode !== nextBlendMode;
269
- shaderSwap = !currentShader || !nextShader || currentShader._UID !== nextShader._UID;
269
+ shaderSwap = currentShader === null || currentShader._UID !== nextShader._UID;
270
270
  let skip = nextTexture.skipRender;
271
271
  if (skip && sprite.children.length > 0) {
272
272
  skip = false;
@@ -317,13 +317,13 @@ export class WebGLSpriteBatch {
317
317
  * @param {number} size - The size of the batch.
318
318
  * @param {number} startIndex - The start index in the batch.
319
319
  */
320
- public renderBatch(texture: BaseTexture, size: number, startIndex: number): void {
321
- if (size === 0) {
320
+ public renderBatch(texture: BaseTexture | null, size: number, startIndex: number): void {
321
+ if (size === 0 || !texture) {
322
322
  return;
323
323
  }
324
324
  const { gl } = this;
325
325
  // check if a texture is dirty..
326
- if (texture._dirty[gl.id]) {
326
+ if (texture._dirty[gl.id] === true) {
327
327
  if (!this.renderSession.renderer.updateTexture(texture)) {
328
328
  // If updateTexture returns false then we cannot render it, so bail out now
329
329
  return;
@@ -5,9 +5,9 @@ import type { RenderSession } from '../render_session.js';
5
5
 
6
6
  export class WebGLStencilManager {
7
7
  public gl!: WebGLRenderingContext;
8
- public stencilStack!: any;
9
- public reverse!: any;
10
- public count!: any;
8
+ public stencilStack!: GraphicsData[];
9
+ public reverse!: boolean;
10
+ public count!: number;
11
11
  /**
12
12
  * Initializes the stencil manager.
13
13
  */
@@ -29,7 +29,7 @@ export class WebGLStencilManager {
29
29
  * Sets up the stencil buffer for rendering.
30
30
  */
31
31
  public destroy(): void {
32
- this.stencilStack = null;
32
+ this.stencilStack = [];
33
33
  }
34
34
 
35
35
  /**
@@ -121,7 +121,8 @@ export class Texture {
121
121
  this.valid = false;
122
122
  return;
123
123
  }
124
- this.valid = Boolean(frame && frame.width && frame.height && this.baseTexture.source && this.baseTexture.hasLoaded);
124
+ this.valid =
125
+ frame.width !== 0 && frame.height !== 0 && this.baseTexture.source !== null && this.baseTexture.hasLoaded;
125
126
  if (this.trim) {
126
127
  this.width = this.trim.width;
127
128
  this.height = this.trim.height;
@@ -7,7 +7,7 @@ import { Texture } from './texture.js';
7
7
  * @param {number} [scaleMode] - The scale mode to use for the texture.
8
8
  * @returns {BaseTexture} The newly created BaseTexture instance.
9
9
  */
10
- export const baseTextureFromCanvas = (canvas: HTMLCanvasElement, scaleMode: number): BaseTexture => {
10
+ export const baseTextureFromCanvas = (canvas: HTMLCanvasElement, scaleMode?: number): BaseTexture => {
11
11
  if (canvas.width === 0) {
12
12
  canvas.width = 1;
13
13
  }
@@ -23,5 +23,5 @@ export const baseTextureFromCanvas = (canvas: HTMLCanvasElement, scaleMode: numb
23
23
  * @param {number} [scaleMode] - The scale mode to use for the texture.
24
24
  * @returns {Texture} The newly created Texture instance.
25
25
  */
26
- export const textureFromCanvas = (canvas: HTMLCanvasElement, scaleMode?: any): Texture =>
26
+ export const textureFromCanvas = (canvas: HTMLCanvasElement, scaleMode?: number): Texture =>
27
27
  new Texture(baseTextureFromCanvas(canvas, scaleMode));
@@ -73,7 +73,7 @@ export const initDefaultShaders = (): void => {};
73
73
  export const compileShader = (
74
74
  gl: WebGLRenderingContext,
75
75
  shaderSrc: string[] | string,
76
- shaderType: any
76
+ shaderType: GLenum
77
77
  ): WebGLShader | null => {
78
78
  const src = Array.isArray(shaderSrc) ? shaderSrc.join('\n') : shaderSrc;
79
79
  const shader = gl.createShader(shaderType);
@@ -82,7 +82,7 @@ export const compileShader = (
82
82
  }
83
83
  gl.shaderSource(shader, src);
84
84
  gl.compileShader(shader);
85
- if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
85
+ if (gl.getShaderParameter(shader, gl.COMPILE_STATUS) !== true) {
86
86
  getRegistry();
87
87
  globalThis.PhaserRegistry.GL_SHADER_INFO_LOG = gl.getShaderInfoLog(shader);
88
88
  return null;
@@ -125,14 +125,14 @@ export const compileProgram = (
125
125
 
126
126
  const shaderProgram = gl.createProgram();
127
127
 
128
- if (!shaderProgram || !vertexShader || !fragmentShader) {
128
+ if (shaderProgram === null || vertexShader === null || fragmentShader === null) {
129
129
  return null;
130
130
  }
131
131
  gl.attachShader(shaderProgram, vertexShader);
132
132
  gl.attachShader(shaderProgram, fragmentShader);
133
133
  gl.linkProgram(shaderProgram);
134
134
 
135
- if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
135
+ if (gl.getProgramParameter(shaderProgram, gl.LINK_STATUS) !== true) {
136
136
  getRegistry();
137
137
  globalThis.PhaserRegistry.GL_PROGRAM_INFO_LOG = gl.getProgramInfoLog(shaderProgram);
138
138
  }