melonjs 15.0.0 → 15.1.1
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/README.md +4 -4
- package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
- package/dist/melonjs.mjs/_virtual/arraymultimap.js +1 -1
- package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
- package/dist/melonjs.mjs/_virtual/howler.js +1 -1
- package/dist/melonjs.mjs/_virtual/index.js +7 -3
- package/dist/melonjs.mjs/_virtual/index2.js +1 -1
- package/dist/melonjs.mjs/_virtual/multimap.js +1 -1
- package/dist/melonjs.mjs/_virtual/setmultimap.js +1 -1
- package/dist/melonjs.mjs/application/application.js +27 -17
- package/dist/melonjs.mjs/application/header.js +6 -5
- package/dist/melonjs.mjs/application/resize.js +20 -20
- package/dist/melonjs.mjs/application/settings.js +1 -1
- package/dist/melonjs.mjs/audio/audio.js +17 -17
- package/dist/melonjs.mjs/camera/camera2d.js +10 -10
- package/dist/melonjs.mjs/const.js +1 -1
- package/dist/melonjs.mjs/entity/entity.js +4 -4
- package/dist/melonjs.mjs/geometries/ellipse.js +6 -6
- package/dist/melonjs.mjs/geometries/line.js +9 -9
- package/dist/melonjs.mjs/geometries/path2d.js +53 -53
- package/dist/melonjs.mjs/geometries/point.js +2 -2
- package/dist/melonjs.mjs/geometries/poly.js +29 -29
- package/dist/melonjs.mjs/geometries/rectangle.js +8 -8
- package/dist/melonjs.mjs/geometries/roundrect.js +6 -6
- package/dist/melonjs.mjs/index.js +5 -5
- package/dist/melonjs.mjs/input/gamepad.js +30 -30
- package/dist/melonjs.mjs/input/input.js +2 -2
- package/dist/melonjs.mjs/input/keyboard.js +15 -15
- package/dist/melonjs.mjs/input/pointer.js +2 -2
- package/dist/melonjs.mjs/input/pointerevent.js +58 -58
- package/dist/melonjs.mjs/lang/console.js +3 -3
- package/dist/melonjs.mjs/lang/deprecated.js +2 -2
- package/dist/melonjs.mjs/level/level.js +9 -9
- package/dist/melonjs.mjs/level/tiled/TMXGroup.js +3 -3
- package/dist/melonjs.mjs/level/tiled/TMXLayer.js +31 -31
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +8 -8
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +8 -8
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +19 -19
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +15 -15
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +3 -3
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +46 -41
- package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +30 -30
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +21 -21
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +10 -10
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +2 -2
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +6 -6
- package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
- package/dist/melonjs.mjs/loader/cache.js +1 -1
- package/dist/melonjs.mjs/loader/loader.js +7 -7
- package/dist/melonjs.mjs/loader/loadingscreen.js +2 -2
- package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
- package/dist/melonjs.mjs/loader/parser.js +13 -13
- package/dist/melonjs.mjs/loader/settings.js +3 -3
- package/dist/melonjs.mjs/math/color.js +21 -21
- package/dist/melonjs.mjs/math/math.js +2 -2
- package/dist/melonjs.mjs/math/matrix2.js +22 -22
- package/dist/melonjs.mjs/math/matrix3.js +52 -52
- package/dist/melonjs.mjs/math/observable_vector2.js +12 -12
- package/dist/melonjs.mjs/math/observable_vector3.js +22 -22
- package/dist/melonjs.mjs/math/vector2.js +11 -11
- package/dist/melonjs.mjs/math/vector3.js +21 -21
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +45 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +130 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +1 -1
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +1 -1
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +1 -1
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +1 -1
- package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
- package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +2 -2
- package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
- package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
- package/dist/melonjs.mjs/particles/emitter.js +5 -5
- package/dist/melonjs.mjs/particles/particle.js +8 -8
- package/dist/melonjs.mjs/particles/settings.js +3 -3
- package/dist/melonjs.mjs/physics/body.js +17 -17
- package/dist/melonjs.mjs/physics/bounds.js +12 -12
- package/dist/melonjs.mjs/physics/collision.js +3 -3
- package/dist/melonjs.mjs/physics/detector.js +14 -14
- package/dist/melonjs.mjs/physics/quadtree.js +19 -19
- package/dist/melonjs.mjs/physics/response.js +1 -1
- package/dist/melonjs.mjs/physics/sat.js +60 -60
- package/dist/melonjs.mjs/physics/world.js +4 -4
- package/dist/melonjs.mjs/plugin/plugin.js +11 -11
- package/dist/melonjs.mjs/renderable/collectable.js +2 -2
- package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
- package/dist/melonjs.mjs/renderable/container.js +107 -63
- package/dist/melonjs.mjs/renderable/dragndrop.js +5 -5
- package/dist/melonjs.mjs/renderable/imagelayer.js +7 -6
- package/dist/melonjs.mjs/renderable/light2d.js +6 -6
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +12 -12
- package/dist/melonjs.mjs/renderable/renderable.js +11 -11
- package/dist/melonjs.mjs/renderable/sprite.js +25 -25
- package/dist/melonjs.mjs/renderable/trigger.js +11 -9
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +97 -27
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +25 -25
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +83 -63
- package/dist/melonjs.mjs/state/stage.js +7 -7
- package/dist/melonjs.mjs/state/state.js +15 -15
- package/dist/melonjs.mjs/system/device.js +2 -2
- package/dist/melonjs.mjs/system/dom.js +1 -1
- package/dist/melonjs.mjs/system/event.js +2 -2
- package/dist/melonjs.mjs/system/platform.js +1 -1
- package/dist/melonjs.mjs/system/pooling.js +9 -9
- package/dist/melonjs.mjs/system/save.js +6 -6
- package/dist/melonjs.mjs/system/timer.js +16 -12
- package/dist/melonjs.mjs/text/bitmaptext.js +20 -20
- package/dist/melonjs.mjs/text/bitmaptextdata.js +22 -22
- package/dist/melonjs.mjs/text/glyph.js +3 -3
- package/dist/melonjs.mjs/text/text.js +10 -9
- package/dist/melonjs.mjs/text/textmetrics.js +15 -15
- package/dist/melonjs.mjs/text/textstyle.js +1 -1
- package/dist/melonjs.mjs/tweens/easing.js +4 -4
- package/dist/melonjs.mjs/tweens/interpolation.js +8 -8
- package/dist/melonjs.mjs/tweens/tween.js +11 -11
- package/dist/melonjs.mjs/utils/agent.js +6 -6
- package/dist/melonjs.mjs/utils/array.js +4 -4
- package/dist/melonjs.mjs/utils/file.js +1 -1
- package/dist/melonjs.mjs/utils/function.js +5 -5
- package/dist/melonjs.mjs/utils/string.js +3 -3
- package/dist/melonjs.mjs/utils/utils.js +16 -16
- package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +35 -109
- package/dist/melonjs.mjs/video/renderer.js +74 -7
- package/dist/melonjs.mjs/video/texture/atlas.js +37 -37
- package/dist/melonjs.mjs/video/texture/cache.js +9 -10
- package/dist/melonjs.mjs/video/texture/canvas_texture.js +63 -3
- package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
- package/dist/melonjs.mjs/video/video.js +2 -2
- package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +3 -3
- package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +5 -5
- package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +5 -5
- package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +18 -15
- package/dist/melonjs.mjs/video/webgl/glshader.js +7 -7
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
- package/dist/melonjs.mjs/video/webgl/utils/attributes.js +2 -2
- package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
- package/dist/melonjs.mjs/video/webgl/utils/program.js +7 -7
- package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
- package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +4 -4
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +55 -38
- package/dist/melonjs.module.js +1777 -1813
- package/dist/types/application/application.d.ts +11 -8
- package/dist/types/audio/audio.d.ts +3 -3
- package/dist/types/index.d.ts +4 -3
- package/dist/types/input/input.d.ts +1 -1
- package/dist/types/input/keyboard.d.ts +1 -1
- package/dist/types/input/pointerevent.d.ts +6 -6
- package/dist/types/level/level.d.ts +2 -2
- package/dist/types/level/tiled/TMXLayer.d.ts +4 -4
- package/dist/types/level/tiled/TMXTileMap.d.ts +2 -2
- package/dist/types/level/tiled/TMXUtils.d.ts +5 -4
- package/dist/types/loader/loader.d.ts +2 -2
- package/dist/types/loader/settings.d.ts +2 -2
- package/dist/types/particles/emitter.d.ts +1 -1
- package/dist/types/physics/collision.d.ts +1 -1
- package/dist/types/physics/detector.d.ts +1 -1
- package/dist/types/plugin/plugin.d.ts +2 -2
- package/dist/types/renderable/container.d.ts +21 -17
- package/dist/types/renderable/sprite.d.ts +11 -11
- package/dist/types/renderable/trigger.d.ts +1 -1
- package/dist/types/renderable/ui/uibaseelement.d.ts +28 -6
- package/dist/types/renderable/ui/uispriteelement.d.ts +12 -14
- package/dist/types/renderable/ui/uitextbutton.d.ts +52 -11
- package/dist/types/state/stage.d.ts +1 -1
- package/dist/types/system/device.d.ts +1 -1
- package/dist/types/system/pooling.d.ts +3 -3
- package/dist/types/system/timer.d.ts +5 -5
- package/dist/types/text/bitmaptext.d.ts +1 -1
- package/dist/types/text/text.d.ts +1 -1
- package/dist/types/utils/array.d.ts +2 -2
- package/dist/types/video/canvas/canvas_renderer.d.ts +8 -76
- package/dist/types/video/renderer.d.ts +48 -0
- package/dist/types/video/texture/atlas.d.ts +3 -3
- package/dist/types/video/texture/canvas_texture.d.ts +40 -0
- package/dist/types/video/webgl/glshader.d.ts +1 -1
- package/dist/types/video/webgl/webgl_renderer.d.ts +13 -9
- package/package.json +14 -14
- package/src/application/application.js +26 -16
- package/src/application/header.js +5 -4
- package/src/application/resize.js +19 -19
- package/src/audio/audio.js +16 -16
- package/src/camera/camera2d.js +9 -9
- package/src/entity/entity.js +3 -3
- package/src/geometries/ellipse.js +5 -5
- package/src/geometries/line.js +8 -8
- package/src/geometries/path2d.js +52 -52
- package/src/geometries/point.js +1 -1
- package/src/geometries/poly.js +28 -28
- package/src/geometries/rectangle.js +7 -7
- package/src/geometries/roundrect.js +5 -5
- package/src/index.js +3 -2
- package/src/input/gamepad.js +29 -29
- package/src/input/input.js +1 -1
- package/src/input/keyboard.js +14 -14
- package/src/input/pointer.js +1 -1
- package/src/input/pointerevent.js +52 -52
- package/src/lang/console.js +2 -2
- package/src/lang/deprecated.js +1 -1
- package/src/level/level.js +8 -8
- package/src/level/tiled/TMXGroup.js +2 -2
- package/src/level/tiled/TMXLayer.js +30 -30
- package/src/level/tiled/TMXObject.js +7 -7
- package/src/level/tiled/TMXTile.js +7 -7
- package/src/level/tiled/TMXTileMap.js +18 -18
- package/src/level/tiled/TMXTileset.js +14 -14
- package/src/level/tiled/TMXTilesetGroup.js +2 -2
- package/src/level/tiled/TMXUtils.js +45 -40
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +29 -29
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +20 -20
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +9 -9
- package/src/level/tiled/renderer/TMXRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +5 -5
- package/src/loader/loader.js +6 -6
- package/src/loader/loadingscreen.js +1 -1
- package/src/loader/parser.js +12 -12
- package/src/loader/settings.js +2 -2
- package/src/math/color.js +20 -20
- package/src/math/math.js +1 -1
- package/src/math/matrix2.js +21 -21
- package/src/math/matrix3.js +51 -51
- package/src/math/observable_vector2.js +11 -11
- package/src/math/observable_vector3.js +21 -21
- package/src/math/vector2.js +10 -10
- package/src/math/vector3.js +20 -20
- package/src/particles/emitter.js +4 -4
- package/src/particles/particle.js +7 -7
- package/src/particles/settings.js +2 -2
- package/src/physics/body.js +16 -16
- package/src/physics/bounds.js +11 -11
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +13 -13
- package/src/physics/quadtree.js +18 -18
- package/src/physics/sat.js +59 -59
- package/src/physics/world.js +3 -3
- package/src/plugin/plugin.js +8 -8
- package/src/renderable/collectable.js +1 -1
- package/src/renderable/container.js +106 -62
- package/src/renderable/dragndrop.js +4 -4
- package/src/renderable/imagelayer.js +6 -5
- package/src/renderable/light2d.js +5 -5
- package/src/renderable/nineslicesprite.js +11 -11
- package/src/renderable/renderable.js +10 -10
- package/src/renderable/sprite.js +24 -24
- package/src/renderable/trigger.js +10 -8
- package/src/renderable/ui/uibaseelement.js +96 -26
- package/src/renderable/ui/uispriteelement.js +24 -24
- package/src/renderable/ui/uitextbutton.js +85 -65
- package/src/state/stage.js +6 -6
- package/src/state/state.js +14 -14
- package/src/system/device.js +1 -1
- package/src/system/event.js +1 -1
- package/src/system/pooling.js +8 -8
- package/src/system/save.js +5 -5
- package/src/system/timer.js +15 -11
- package/src/text/bitmaptext.js +19 -19
- package/src/text/bitmaptextdata.js +21 -21
- package/src/text/glyph.js +2 -2
- package/src/text/text.js +9 -8
- package/src/text/textmetrics.js +14 -14
- package/src/tweens/easing.js +3 -3
- package/src/tweens/interpolation.js +7 -7
- package/src/tweens/tween.js +10 -10
- package/src/utils/agent.js +5 -5
- package/src/utils/array.js +3 -3
- package/src/utils/function.js +4 -4
- package/src/utils/string.js +2 -2
- package/src/utils/utils.js +15 -15
- package/src/video/canvas/canvas_renderer.js +34 -108
- package/src/video/renderer.js +72 -5
- package/src/video/texture/atlas.js +36 -36
- package/src/video/texture/cache.js +6 -6
- package/src/video/texture/canvas_texture.js +62 -2
- package/src/video/video.js +1 -1
- package/src/video/webgl/buffer/vertex.js +2 -2
- package/src/video/webgl/compositors/compositor.js +4 -4
- package/src/video/webgl/compositors/primitive_compositor.js +4 -4
- package/src/video/webgl/compositors/quad_compositor.js +17 -14
- package/src/video/webgl/glshader.js +6 -6
- package/src/video/webgl/utils/attributes.js +1 -1
- package/src/video/webgl/utils/program.js +6 -6
- package/src/video/webgl/utils/uniforms.js +3 -3
- package/src/video/webgl/webgl_renderer.js +54 -37
|
@@ -27,6 +27,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
27
27
|
* @param {boolean} [options.premultipliedAlpha=true] - in WebGL, whether the renderer will assume that colors have premultiplied alpha when canvas transparency is enabled
|
|
28
28
|
* @param {boolean} [options.subPixel=false] - Whether to enable subpixel renderering (performance hit when enabled)
|
|
29
29
|
* @param {boolean} [options.preferWebGL1=false] - if true the renderer will only use WebGL 1
|
|
30
|
+
* @param {boolean} [options.depthTest="sorting"] - ~Experimental~ the default method to sort object on the z axis in WebGL ("sorting", "z-buffer")
|
|
30
31
|
* @param {string} [options.powerPreference="default"] - a hint to the user agent indicating what configuration of GPU is suitable for the WebGL context ("default", "high-performance", "low-power"). To be noted that Safari and Chrome (since version 80) both default to "low-power" to save battery life and improve the user experience on these dual-GPU machines.
|
|
31
32
|
* @param {number} [options.zoomX=width] - The actual width of the canvas with scaling applied
|
|
32
33
|
* @param {number} [options.zoomY=height] - The actual height of the canvas with scaling applied
|
|
@@ -65,7 +66,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
65
66
|
* @name gl
|
|
66
67
|
* @type {WebGLRenderingContext}
|
|
67
68
|
*/
|
|
68
|
-
this.context = this.gl = this.getContextGL(this.getCanvas(), options.transparent);
|
|
69
|
+
this.context = this.gl = this.getContextGL(this.getCanvas(), options.transparent, options.depthTest === "z-buffer");
|
|
69
70
|
|
|
70
71
|
/**
|
|
71
72
|
* the vertex buffer used by this WebGL Renderer
|
|
@@ -131,9 +132,20 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
131
132
|
this.addCompositor(new (this.settings.compositor || QuadCompositor)(this), "quad", true);
|
|
132
133
|
this.addCompositor(new (this.settings.compositor || PrimitiveCompositor)(this), "primitive");
|
|
133
134
|
|
|
135
|
+
// depth Test settings
|
|
136
|
+
this.depthTest = options.depthTest;
|
|
134
137
|
|
|
135
138
|
// default WebGL state(s)
|
|
136
|
-
|
|
139
|
+
if (this.depthTest === "z-buffer") {
|
|
140
|
+
this.gl.enable(this.gl.DEPTH_TEST);
|
|
141
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/depthFunc
|
|
142
|
+
this.gl.depthFunc(this.gl.LEQUAL);
|
|
143
|
+
this.gl.depthMask(true);
|
|
144
|
+
} else {
|
|
145
|
+
this.gl.disable(this.gl.DEPTH_TEST);
|
|
146
|
+
this.gl.depthMask(false);
|
|
147
|
+
}
|
|
148
|
+
|
|
137
149
|
this.gl.disable(this.gl.SCISSOR_TEST);
|
|
138
150
|
this.gl.enable(this.gl.BLEND);
|
|
139
151
|
|
|
@@ -141,7 +153,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
141
153
|
this.setBlendMode(this.settings.blendMode);
|
|
142
154
|
|
|
143
155
|
// get GPU vendor and renderer
|
|
144
|
-
|
|
156
|
+
let debugInfo = this.gl.getExtension("WEBGL_debug_renderer_info");
|
|
145
157
|
if (debugInfo !== null) {
|
|
146
158
|
this.GPUVendor = this.gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
|
|
147
159
|
this.GPURenderer = this.gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
|
|
@@ -158,7 +170,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
158
170
|
this.type = "WebGL" + this.WebGLVersion;
|
|
159
171
|
|
|
160
172
|
// to simulate context lost and restore in WebGL:
|
|
161
|
-
//
|
|
173
|
+
// let ctx = me.video.renderer.context.getExtension('WEBGL_lose_context');
|
|
162
174
|
// ctx.loseContext()
|
|
163
175
|
this.getCanvas().addEventListener("webglcontextlost", (e) => {
|
|
164
176
|
e.preventDefault();
|
|
@@ -281,29 +293,29 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
281
293
|
|
|
282
294
|
/**
|
|
283
295
|
* Create a pattern with the specified repetition
|
|
284
|
-
* @param {
|
|
296
|
+
* @param {HTMLImageElement|SVGImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|OffscreenCanvas|VideoFrame} image - Source image to be used as the pattern's image
|
|
285
297
|
* @param {string} repeat - Define how the pattern should be repeated
|
|
286
298
|
* @returns {TextureAtlas}
|
|
287
299
|
* @see ImageLayer#repeat
|
|
288
300
|
* @example
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
301
|
+
* let tileable = renderer.createPattern(image, "repeat");
|
|
302
|
+
* let horizontal = renderer.createPattern(image, "repeat-x");
|
|
303
|
+
* let vertical = renderer.createPattern(image, "repeat-y");
|
|
304
|
+
* let basic = renderer.createPattern(image, "no-repeat");
|
|
293
305
|
*/
|
|
294
306
|
createPattern(image, repeat) {
|
|
295
307
|
|
|
296
308
|
this.setCompositor("quad");
|
|
297
309
|
|
|
298
310
|
if (renderer.WebGLVersion === 1 && (!isPowerOfTwo(image.width) || !isPowerOfTwo(image.height))) {
|
|
299
|
-
|
|
311
|
+
let src = typeof image.src !== "undefined" ? image.src : image;
|
|
300
312
|
throw new Error(
|
|
301
313
|
"[WebGL Renderer] " + src + " is not a POT texture " +
|
|
302
314
|
"(" + image.width + "x" + image.height + ")"
|
|
303
315
|
);
|
|
304
316
|
}
|
|
305
317
|
|
|
306
|
-
|
|
318
|
+
let texture = new TextureAtlas(createAtlas(image.width, image.height, "pattern", repeat), image);
|
|
307
319
|
|
|
308
320
|
// FIXME: Remove old cache entry and texture when changing the repeat mode
|
|
309
321
|
this.currentCompositor.uploadTexture(texture);
|
|
@@ -342,9 +354,13 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
342
354
|
* Clear the frame buffer
|
|
343
355
|
*/
|
|
344
356
|
clear() {
|
|
345
|
-
|
|
357
|
+
let gl = this.gl;
|
|
346
358
|
gl.clearColor(0, 0, 0, this.settings.transparent ? 0.0 : 1.0);
|
|
347
|
-
|
|
359
|
+
if (this.depthTest === "z-buffer") {
|
|
360
|
+
gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
|
|
361
|
+
} else {
|
|
362
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
|
|
363
|
+
}
|
|
348
364
|
}
|
|
349
365
|
|
|
350
366
|
/**
|
|
@@ -353,13 +369,13 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
353
369
|
* @param {boolean} [opaque=false] - Allow transparency [default] or clear the surface completely [true]
|
|
354
370
|
*/
|
|
355
371
|
clearColor(color = "#000000", opaque = false) {
|
|
356
|
-
|
|
357
|
-
|
|
372
|
+
let glArray;
|
|
373
|
+
let gl = this.gl;
|
|
358
374
|
|
|
359
375
|
if (color instanceof Color) {
|
|
360
376
|
glArray = color.toArray();
|
|
361
377
|
} else {
|
|
362
|
-
|
|
378
|
+
let _color = pool.pull("me.Color");
|
|
363
379
|
// reuse temporary the renderer default color object
|
|
364
380
|
glArray = _color.parseCSS(color).toArray();
|
|
365
381
|
pool.push(_color);
|
|
@@ -386,7 +402,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
386
402
|
|
|
387
403
|
/**
|
|
388
404
|
* Draw an image to the gl context
|
|
389
|
-
* @param {
|
|
405
|
+
* @param {HTMLImageElement|SVGImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|OffscreenCanvas|VideoFrame} image - An element to draw into the context.
|
|
390
406
|
* @param {number} sx - The X coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.
|
|
391
407
|
* @param {number} sy - The Y coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.
|
|
392
408
|
* @param {number} sw - The width of the sub-rectangle of the source image to draw into the destination context. If not specified, the entire rectangle from the coordinates specified by sx and sy to the bottom-right corner of the image is used.
|
|
@@ -431,8 +447,8 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
431
447
|
|
|
432
448
|
this.setCompositor("quad");
|
|
433
449
|
|
|
434
|
-
|
|
435
|
-
|
|
450
|
+
let texture = this.cache.get(image);
|
|
451
|
+
let uvs = texture.getUVs(sx + "," + sy + "," + sw + "," + sh);
|
|
436
452
|
this.currentCompositor.addQuad(texture, dx, dy, dw, dh, uvs[0], uvs[1], uvs[2], uvs[3], this.currentTint.toUint32(this.getGlobalAlpha()));
|
|
437
453
|
}
|
|
438
454
|
|
|
@@ -446,7 +462,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
446
462
|
* @see WebGLRenderer#createPattern
|
|
447
463
|
*/
|
|
448
464
|
drawPattern(pattern, x, y, width, height) {
|
|
449
|
-
|
|
465
|
+
let uvs = pattern.getUVs("0,0," + width + "," + height);
|
|
450
466
|
this.setCompositor("quad");
|
|
451
467
|
this.currentCompositor.addQuad(pattern, x, y, width, height, uvs[0], uvs[1], uvs[2], uvs[3], this.currentTint.toUint32(this.getGlobalAlpha()));
|
|
452
468
|
}
|
|
@@ -455,9 +471,10 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
455
471
|
* Returns the WebGL Context object of the given canvas element
|
|
456
472
|
* @param {HTMLCanvasElement} canvas
|
|
457
473
|
* @param {boolean} [transparent=false] - use true to enable transparency
|
|
474
|
+
* @param {boolean} [depth=false] - use true to enable depth buffer testing
|
|
458
475
|
* @returns {WebGLRenderingContext}
|
|
459
476
|
*/
|
|
460
|
-
getContextGL(canvas, transparent = false) {
|
|
477
|
+
getContextGL(canvas, transparent = false, depth = false) {
|
|
461
478
|
if (typeof canvas === "undefined" || canvas === null) {
|
|
462
479
|
throw new Error(
|
|
463
480
|
"You must pass a canvas element in order to create " +
|
|
@@ -465,10 +482,10 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
465
482
|
);
|
|
466
483
|
}
|
|
467
484
|
|
|
468
|
-
|
|
485
|
+
let attr = {
|
|
469
486
|
alpha : transparent,
|
|
470
487
|
antialias : this.settings.antiAlias,
|
|
471
|
-
depth :
|
|
488
|
+
depth : depth,
|
|
472
489
|
stencil: true,
|
|
473
490
|
preserveDrawingBuffer : false,
|
|
474
491
|
premultipliedAlpha: transparent ? this.settings.premultipliedAlpha : false,
|
|
@@ -476,7 +493,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
476
493
|
failIfMajorPerformanceCaveat : this.settings.failIfMajorPerformanceCaveat
|
|
477
494
|
};
|
|
478
495
|
|
|
479
|
-
|
|
496
|
+
let gl;
|
|
480
497
|
|
|
481
498
|
// attempt to create a WebGL2 context if requested
|
|
482
499
|
if (this.settings.preferWebGL1 === false) {
|
|
@@ -560,8 +577,8 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
560
577
|
restore() {
|
|
561
578
|
// do nothing if there is no saved states
|
|
562
579
|
if (this._matrixStack.length !== 0) {
|
|
563
|
-
|
|
564
|
-
|
|
580
|
+
let color = this._colorStack.pop();
|
|
581
|
+
let matrix = this._matrixStack.pop();
|
|
565
582
|
|
|
566
583
|
// restore the previous context
|
|
567
584
|
this.currentColor.copy(color);
|
|
@@ -650,7 +667,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
650
667
|
* @param {Color|string} color - css color string.
|
|
651
668
|
*/
|
|
652
669
|
setColor(color) {
|
|
653
|
-
|
|
670
|
+
let alpha = this.currentColor.alpha;
|
|
654
671
|
this.currentColor.copy(color);
|
|
655
672
|
this.currentColor.alpha *= alpha;
|
|
656
673
|
}
|
|
@@ -766,8 +783,8 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
766
783
|
this.translate(poly.pos.x, poly.pos.y);
|
|
767
784
|
this.path2D.beginPath();
|
|
768
785
|
|
|
769
|
-
|
|
770
|
-
for (
|
|
786
|
+
let points = poly.points;
|
|
787
|
+
for (let i = 1; i < points.length; i++) {
|
|
771
788
|
this.path2D.moveTo(points[i-1].x, points[i-1].y);
|
|
772
789
|
this.path2D.lineTo(points[i].x, points[i].y);
|
|
773
790
|
}
|
|
@@ -888,11 +905,11 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
888
905
|
* @param {Matrix2d} mat2d - Matrix to transform by
|
|
889
906
|
*/
|
|
890
907
|
transform(mat2d) {
|
|
891
|
-
|
|
908
|
+
let currentTransform = this.currentTransform;
|
|
892
909
|
currentTransform.multiply(mat2d);
|
|
893
910
|
if (this.settings.subPixel === false) {
|
|
894
911
|
// snap position values to pixel grid
|
|
895
|
-
|
|
912
|
+
let a = currentTransform.toArray();
|
|
896
913
|
a[6] |= 0;
|
|
897
914
|
a[7] |= 0;
|
|
898
915
|
}
|
|
@@ -904,11 +921,11 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
904
921
|
* @param {number} y
|
|
905
922
|
*/
|
|
906
923
|
translate(x, y) {
|
|
907
|
-
|
|
924
|
+
let currentTransform = this.currentTransform;
|
|
908
925
|
currentTransform.translate(x, y);
|
|
909
926
|
if (this.settings.subPixel === false) {
|
|
910
927
|
// snap position values to pixel grid
|
|
911
|
-
|
|
928
|
+
let a = currentTransform.toArray();
|
|
912
929
|
a[6] |= 0;
|
|
913
930
|
a[7] |= 0;
|
|
914
931
|
}
|
|
@@ -926,11 +943,11 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
926
943
|
* @param {number} height
|
|
927
944
|
*/
|
|
928
945
|
clipRect(x, y, width, height) {
|
|
929
|
-
|
|
930
|
-
|
|
946
|
+
let canvas = this.getCanvas();
|
|
947
|
+
let gl = this.gl;
|
|
931
948
|
// if requested box is different from the current canvas size
|
|
932
949
|
if (x !== 0 || y !== 0 || width !== canvas.width || height !== canvas.height) {
|
|
933
|
-
|
|
950
|
+
let currentScissor = this.currentScissor;
|
|
934
951
|
if (gl.isEnabled(gl.SCISSOR_TEST)) {
|
|
935
952
|
// if same as the current scissor box do nothing
|
|
936
953
|
if (currentScissor[0] === x && currentScissor[1] === y &&
|
|
@@ -969,7 +986,7 @@ import { isPowerOfTwo } from "./../../math/math.js";
|
|
|
969
986
|
* @param {boolean} [invert=false] - either the given shape should define what is visible (default) or the opposite
|
|
970
987
|
*/
|
|
971
988
|
setMask(mask, invert = false) {
|
|
972
|
-
|
|
989
|
+
let gl = this.gl;
|
|
973
990
|
|
|
974
991
|
// flush the compositor
|
|
975
992
|
this.flush();
|