@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.
- package/dist/index.js +635 -623
- package/dist/index.js.map +1 -1
- package/dist/phaser/core/animation.d.ts +3 -3
- package/dist/phaser/core/animation.d.ts.map +1 -1
- package/dist/phaser/core/animation_manager.d.ts.map +1 -1
- package/dist/phaser/core/animation_parser.d.ts +27 -2
- package/dist/phaser/core/animation_parser.d.ts.map +1 -1
- package/dist/phaser/core/array_set.d.ts +11 -11
- package/dist/phaser/core/array_set.d.ts.map +1 -1
- package/dist/phaser/core/cache.d.ts.map +1 -1
- package/dist/phaser/core/callback.d.ts.map +1 -1
- package/dist/phaser/core/dom.d.ts +125 -19
- package/dist/phaser/core/dom.d.ts.map +1 -1
- package/dist/phaser/core/factory.d.ts +3 -2
- package/dist/phaser/core/factory.d.ts.map +1 -1
- package/dist/phaser/core/frame_data.d.ts.map +1 -1
- package/dist/phaser/core/input.d.ts +3 -2
- package/dist/phaser/core/input.d.ts.map +1 -1
- package/dist/phaser/core/input_handler.d.ts.map +1 -1
- package/dist/phaser/core/input_mouse.d.ts +5 -1
- package/dist/phaser/core/input_mouse.d.ts.map +1 -1
- package/dist/phaser/core/input_pointer.d.ts +3 -3
- package/dist/phaser/core/input_pointer.d.ts.map +1 -1
- package/dist/phaser/core/input_touch.d.ts +8 -8
- package/dist/phaser/core/input_touch.d.ts.map +1 -1
- package/dist/phaser/core/loader.d.ts +11 -2
- package/dist/phaser/core/loader.d.ts.map +1 -1
- package/dist/phaser/core/loader_parser.d.ts +14 -1
- package/dist/phaser/core/loader_parser.d.ts.map +1 -1
- package/dist/phaser/core/raf.d.ts +1 -1
- package/dist/phaser/core/raf.d.ts.map +1 -1
- package/dist/phaser/core/scale_manager.d.ts.map +1 -1
- package/dist/phaser/core/scene_manager.d.ts.map +1 -1
- package/dist/phaser/core/signal.d.ts.map +1 -1
- package/dist/phaser/core/sound.d.ts.map +1 -1
- package/dist/phaser/core/sound_manager.d.ts +1 -1
- package/dist/phaser/core/sound_manager.d.ts.map +1 -1
- package/dist/phaser/core/stage.d.ts +16 -6
- package/dist/phaser/core/stage.d.ts.map +1 -1
- package/dist/phaser/core/time.d.ts.map +1 -1
- package/dist/phaser/core/timer.d.ts +1 -1
- package/dist/phaser/core/timer.d.ts.map +1 -1
- package/dist/phaser/core/tween.d.ts +13 -5
- package/dist/phaser/core/tween.d.ts.map +1 -1
- package/dist/phaser/core/tween_data.d.ts +9 -7
- package/dist/phaser/core/tween_data.d.ts.map +1 -1
- package/dist/phaser/core/tween_manager.d.ts.map +1 -1
- package/dist/phaser/display/button.d.ts +6 -5
- package/dist/phaser/display/button.d.ts.map +1 -1
- package/dist/phaser/display/canvas/buffer.d.ts +1 -1
- package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
- package/dist/phaser/display/canvas/masker.d.ts +1 -1
- package/dist/phaser/display/canvas/masker.d.ts.map +1 -1
- package/dist/phaser/display/canvas/pool.d.ts +2 -2
- package/dist/phaser/display/canvas/pool.d.ts.map +1 -1
- package/dist/phaser/display/canvas/renderer.d.ts +9 -8
- package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
- package/dist/phaser/display/display_object.d.ts +5 -3
- package/dist/phaser/display/display_object.d.ts.map +1 -1
- package/dist/phaser/display/graphics.d.ts +1 -1
- package/dist/phaser/display/graphics.d.ts.map +1 -1
- package/dist/phaser/display/group.d.ts +1 -1
- package/dist/phaser/display/group.d.ts.map +1 -1
- package/dist/phaser/display/image.d.ts +6 -5
- package/dist/phaser/display/image.d.ts.map +1 -1
- package/dist/phaser/display/sprite_util.d.ts +3 -2
- package/dist/phaser/display/sprite_util.d.ts.map +1 -1
- package/dist/phaser/display/text.d.ts +2 -16
- package/dist/phaser/display/text.d.ts.map +1 -1
- package/dist/phaser/display/webgl/abstract_filter.d.ts +14 -8
- package/dist/phaser/display/webgl/abstract_filter.d.ts.map +1 -1
- package/dist/phaser/display/webgl/blend_manager.d.ts +2 -3
- package/dist/phaser/display/webgl/blend_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/earcut.d.ts.map +1 -1
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +11 -5
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_manager.d.ts +6 -4
- package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_texture.d.ts +4 -4
- package/dist/phaser/display/webgl/filter_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/graphics.d.ts +2 -2
- package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
- package/dist/phaser/display/webgl/mask_manager.d.ts +3 -2
- package/dist/phaser/display/webgl/mask_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/render_texture.d.ts +11 -8
- package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/renderer.d.ts +8 -4
- package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/normal.d.ts +28 -3
- package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
- package/dist/phaser/display/webgl/sprite_batch.d.ts +6 -5
- package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/stencil_manager.d.ts +3 -3
- package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/texture_util.d.ts +2 -2
- package/dist/phaser/display/webgl/texture_util.d.ts.map +1 -1
- package/dist/phaser/display/webgl/util.d.ts +1 -1
- package/dist/phaser/display/webgl/util.d.ts.map +1 -1
- package/dist/phaser/geom/circle.d.ts.map +1 -1
- package/dist/phaser/geom/line.d.ts +10 -1
- package/dist/phaser/geom/line.d.ts.map +1 -1
- package/dist/phaser/geom/rectangle.d.ts.map +1 -1
- package/dist/phaser/geom/util/circle.d.ts +2 -1
- package/dist/phaser/geom/util/circle.d.ts.map +1 -1
- package/dist/phaser/geom/util/point.d.ts +1 -1
- package/dist/phaser/geom/util/point.d.ts.map +1 -1
- package/dist/phaser/geom/util/rectangle.d.ts +1 -1
- package/dist/phaser/geom/util/rectangle.d.ts.map +1 -1
- package/dist/phaser/util/math.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/phaser/core/animation.ts +11 -11
- package/src/phaser/core/animation_manager.ts +12 -12
- package/src/phaser/core/animation_parser.ts +39 -37
- package/src/phaser/core/array_set.ts +28 -28
- package/src/phaser/core/cache.test.ts +33 -33
- package/src/phaser/core/cache.ts +7 -7
- package/src/phaser/core/callback.ts +1 -0
- package/src/phaser/core/callback_context.test.ts +8 -8
- package/src/phaser/core/device_util.ts +4 -4
- package/src/phaser/core/dom.ts +38 -24
- package/src/phaser/core/factory.ts +9 -2
- package/src/phaser/core/frame_data.test.ts +23 -23
- package/src/phaser/core/frame_data.ts +2 -5
- package/src/phaser/core/game.ts +12 -12
- package/src/phaser/core/input.ts +11 -10
- package/src/phaser/core/input_handler.test.ts +18 -18
- package/src/phaser/core/input_handler.ts +14 -14
- package/src/phaser/core/input_mouse.ts +13 -12
- package/src/phaser/core/input_pointer.test.ts +26 -26
- package/src/phaser/core/input_pointer.ts +4 -4
- package/src/phaser/core/input_touch.ts +8 -8
- package/src/phaser/core/loader.test.ts +26 -26
- package/src/phaser/core/loader.ts +63 -75
- package/src/phaser/core/loader_parser.test.ts +16 -16
- package/src/phaser/core/loader_parser.ts +16 -6
- package/src/phaser/core/raf.ts +1 -1
- package/src/phaser/core/registry.test.ts +6 -6
- package/src/phaser/core/scale_manager.ts +12 -11
- package/src/phaser/core/scene_manager.test.ts +30 -30
- package/src/phaser/core/scene_manager.ts +3 -3
- package/src/phaser/core/signal.test.ts +8 -8
- package/src/phaser/core/signal.ts +3 -3
- package/src/phaser/core/signal_dispatch.test.ts +30 -30
- package/src/phaser/core/sound.ts +45 -40
- package/src/phaser/core/sound_manager.ts +18 -22
- package/src/phaser/core/sound_sprite.ts +1 -1
- package/src/phaser/core/stage.ts +22 -12
- package/src/phaser/core/time.ts +1 -1
- package/src/phaser/core/timer.test.ts +47 -47
- package/src/phaser/core/timer.ts +2 -2
- package/src/phaser/core/tween.ts +34 -36
- package/src/phaser/core/tween_data.test.ts +119 -0
- package/src/phaser/core/tween_data.ts +54 -39
- package/src/phaser/core/tween_easing.test.ts +5 -5
- package/src/phaser/core/tween_manager.ts +2 -2
- package/src/phaser/display/bitmap_text.test.ts +30 -30
- package/src/phaser/display/bitmap_text.ts +3 -3
- package/src/phaser/display/button.ts +20 -18
- package/src/phaser/display/canvas/buffer.ts +2 -2
- package/src/phaser/display/canvas/graphics.ts +2 -2
- package/src/phaser/display/canvas/masker.ts +1 -1
- package/src/phaser/display/canvas/pool.test.ts +20 -20
- package/src/phaser/display/canvas/pool.ts +6 -6
- package/src/phaser/display/canvas/renderer.ts +18 -16
- package/src/phaser/display/canvas/tinter.ts +1 -1
- package/src/phaser/display/canvas/util.test.ts +25 -25
- package/src/phaser/display/canvas/util.ts +2 -2
- package/src/phaser/display/display_object.ts +16 -15
- package/src/phaser/display/graphics.test.ts +70 -20
- package/src/phaser/display/graphics.ts +46 -42
- package/src/phaser/display/group.ts +13 -12
- package/src/phaser/display/image.ts +35 -31
- package/src/phaser/display/sprite_util.ts +4 -3
- package/src/phaser/display/text.test.ts +28 -25
- package/src/phaser/display/text.ts +56 -62
- package/src/phaser/display/webgl/abstract_filter.ts +21 -11
- package/src/phaser/display/webgl/blend_manager.ts +4 -5
- package/src/phaser/display/webgl/earcut.test.ts +20 -20
- package/src/phaser/display/webgl/earcut.ts +46 -42
- package/src/phaser/display/webgl/fast_sprite_batch.ts +21 -16
- package/src/phaser/display/webgl/filter_manager.ts +7 -4
- package/src/phaser/display/webgl/filter_texture.ts +5 -5
- package/src/phaser/display/webgl/graphics.ts +3 -3
- package/src/phaser/display/webgl/mask_manager.ts +9 -14
- package/src/phaser/display/webgl/render_texture.ts +15 -14
- package/src/phaser/display/webgl/renderer.ts +10 -9
- package/src/phaser/display/webgl/shader/normal.ts +45 -35
- package/src/phaser/display/webgl/shader/shader.test.ts +24 -24
- package/src/phaser/display/webgl/shader_manager.test.ts +18 -18
- package/src/phaser/display/webgl/shader_manager.ts +1 -1
- package/src/phaser/display/webgl/sprite_batch.ts +10 -10
- package/src/phaser/display/webgl/stencil_manager.ts +4 -4
- package/src/phaser/display/webgl/texture.ts +2 -1
- package/src/phaser/display/webgl/texture_util.ts +2 -2
- package/src/phaser/display/webgl/util.ts +4 -4
- package/src/phaser/geom/circle.test.ts +38 -38
- package/src/phaser/geom/circle.ts +7 -7
- package/src/phaser/geom/ellipse.test.ts +12 -12
- package/src/phaser/geom/line.test.ts +15 -15
- package/src/phaser/geom/line.ts +5 -2
- package/src/phaser/geom/matrix.test.ts +31 -31
- package/src/phaser/geom/point.test.ts +31 -31
- package/src/phaser/geom/polygon.test.ts +27 -27
- package/src/phaser/geom/polygon.ts +2 -2
- package/src/phaser/geom/rectangle.test.ts +87 -87
- package/src/phaser/geom/rectangle.ts +12 -13
- package/src/phaser/geom/rounded_rectangle.test.ts +9 -9
- package/src/phaser/geom/util/circle.test.ts +5 -5
- package/src/phaser/geom/util/circle.ts +8 -11
- package/src/phaser/geom/util/ellipse.test.ts +2 -2
- package/src/phaser/geom/util/line.test.ts +2 -2
- package/src/phaser/geom/util/matrix.test.ts +4 -4
- package/src/phaser/geom/util/point.test.ts +2 -2
- package/src/phaser/geom/util/point.ts +6 -8
- package/src/phaser/geom/util/polygon.test.ts +2 -2
- package/src/phaser/geom/util/rectangle.test.ts +2 -2
- package/src/phaser/geom/util/rectangle.ts +1 -1
- package/src/phaser/geom/util/rounded_rectangle.test.ts +2 -2
- package/src/phaser/util/math.test.ts +41 -41
- 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):
|
|
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:
|
|
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?:
|
|
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:
|
|
178
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
265
|
-
|
|
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,
|
|
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(
|
|
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:
|
|
19
|
+
public currentBaseTexture: BaseTexture | null;
|
|
20
20
|
public dirty: boolean;
|
|
21
|
-
public textures:
|
|
21
|
+
public textures: BaseTexture[];
|
|
22
22
|
public blendModes: number[];
|
|
23
23
|
public shaders: NormalShader[];
|
|
24
|
-
public sprites:
|
|
25
|
-
public defaultShader:
|
|
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 =
|
|
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!:
|
|
9
|
-
public reverse!:
|
|
10
|
-
public count!:
|
|
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 =
|
|
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 =
|
|
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
|
|
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?:
|
|
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:
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
}
|