melonjs 14.5.0 → 15.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/README.md +6 -6
- 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 +18 -20
- 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 +56 -56
- 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 +8 -6
- 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 +59 -59
- 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 +25 -24
- 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 +77 -59
- 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 +35 -13
- 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 -65
- 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 +3 -3
- 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 +63 -92
- package/dist/melonjs.mjs/text/textmetrics.js +15 -15
- package/dist/melonjs.mjs/text/textstyle.js +4 -6
- 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 +41 -119
- package/dist/melonjs.mjs/video/renderer.js +70 -14
- package/dist/melonjs.mjs/video/texture/atlas.js +39 -45
- 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 +23 -19
- package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +80 -80
- package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +77 -0
- package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +252 -0
- package/dist/melonjs.mjs/video/webgl/compositors/webgl_compositor.js +1 -1
- 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 +2 -2
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +2 -2
- 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 +188 -181
- package/dist/melonjs.module.js +25040 -25193
- package/dist/types/application/application.d.ts +11 -8
- package/dist/types/audio/audio.d.ts +3 -3
- package/dist/types/entity/entity.d.ts +1 -1
- package/dist/types/index.d.ts +7 -4
- 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/renderable.d.ts +6 -0
- 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 -12
- 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 +7 -21
- package/dist/types/text/textstyle.d.ts +1 -1
- package/dist/types/utils/array.d.ts +2 -2
- package/dist/types/video/canvas/canvas_renderer.d.ts +8 -81
- package/dist/types/video/renderer.d.ts +48 -4
- 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/buffer/vertex.d.ts +3 -3
- package/dist/types/video/webgl/compositors/compositor.d.ts +38 -32
- package/dist/types/video/webgl/compositors/primitive_compositor.d.ts +22 -0
- package/dist/types/video/webgl/compositors/quad_compositor.d.ts +72 -0
- package/dist/types/video/webgl/glshader.d.ts +1 -1
- package/dist/types/video/webgl/webgl_renderer.d.ts +47 -37
- package/package.json +16 -17
- 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 +17 -19
- 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 +55 -55
- 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 +9 -4
- 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 +24 -23
- 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/polyfill/index.js +0 -2
- package/src/renderable/collectable.js +1 -1
- package/src/renderable/container.js +76 -58
- 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 +34 -12
- 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 -67
- package/src/state/stage.js +6 -6
- package/src/state/state.js +14 -14
- package/src/system/device.js +2 -2
- 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 +62 -91
- package/src/text/textmetrics.js +14 -14
- package/src/text/textstyle.js +3 -5
- 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 +39 -117
- package/src/video/renderer.js +68 -12
- package/src/video/texture/atlas.js +38 -44
- 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 +22 -18
- package/src/video/webgl/compositors/compositor.js +79 -80
- package/src/video/webgl/compositors/primitive_compositor.js +68 -0
- package/src/video/webgl/compositors/{webgl_compositor.js → quad_compositor.js} +52 -109
- package/src/video/webgl/glshader.js +6 -6
- package/src/video/webgl/shaders/primitive.vert +2 -5
- package/src/video/webgl/shaders/quad.vert +3 -1
- 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 +186 -179
- package/dist/melonjs.mjs/_virtual/make-built-in.js +0 -10
- package/dist/melonjs.mjs/_virtual/object-define-property.js +0 -10
- package/dist/melonjs.mjs/_virtual/object-get-own-property-descriptor.js +0 -10
- package/dist/melonjs.mjs/_virtual/object-get-own-property-names.js +0 -10
- package/dist/melonjs.mjs/_virtual/object-get-own-property-symbols.js +0 -10
- package/dist/melonjs.mjs/_virtual/object-property-is-enumerable.js +0 -10
- package/dist/melonjs.mjs/_virtual/shared.js +0 -10
- package/dist/melonjs.mjs/game.js +0 -29
- package/dist/melonjs.mjs/polyfill/console.js +0 -18
- package/dist/melonjs.mjs/polyfill/performance.js +0 -27
- package/dist/melonjs.mjs/polyfill/requestAnimationFrame.js +0 -46
- package/dist/melonjs.mjs/polyfill/roundrect.js +0 -242
- package/dist/melonjs.mjs/renderable/re_container.js +0 -1016
- package/dist/melonjs.mjs/video/utils/resize.js +0 -116
- package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +0 -494
- package/src/polyfill/performance.js +0 -20
- package/src/polyfill/requestAnimationFrame.js +0 -39
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* melonJS Game Engine -
|
|
2
|
+
* melonJS Game Engine - v15.1.0
|
|
3
3
|
* http://www.melonjs.org
|
|
4
4
|
* melonjs is licensed under the MIT License.
|
|
5
5
|
* http://www.opensource.org/licenses/mit-license
|
|
6
6
|
* @copyright (C) 2011 - 2023 Olivier Biot (AltByte Pte Ltd)
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
8
|
+
import VertexArrayBuffer from '../buffer/vertex.js';
|
|
9
|
+
import GLShader from '../glshader.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* @classdesc
|
|
@@ -14,19 +15,26 @@ import { on, CANVAS_ONRESIZE } from '../../../system/event.js';
|
|
|
14
15
|
class Compositor {
|
|
15
16
|
/**
|
|
16
17
|
* @param {WebGLRenderer} renderer - the current WebGL renderer session
|
|
18
|
+
* @param {Object} settings - additional settings to initialize this compositors
|
|
19
|
+
* @param {object[]} attribute - an array of attributes definition
|
|
20
|
+
* @param {string} attribute.name - name of the attribute in the vertex shader
|
|
21
|
+
* @param {number} attribute.size - number of components per vertex attribute. Must be 1, 2, 3, or 4.
|
|
22
|
+
* @param {GLenum} attribute.type - data type of each component in the array
|
|
23
|
+
* @param {boolean} attribute.normalized - whether integer data values should be normalized into a certain range when being cast to a float
|
|
24
|
+
* @param {number} attribute.offset - offset in bytes of the first component in the vertex attribute array
|
|
25
|
+
* @param {object} shader - an array of attributes definition
|
|
26
|
+
* @param {string} shader.vertex - a string containing the GLSL source code to set
|
|
27
|
+
* @param {string} shader.fragment - a string containing the GLSL source code to set
|
|
17
28
|
*/
|
|
18
|
-
constructor (renderer) {
|
|
19
|
-
this.init(renderer);
|
|
29
|
+
constructor (renderer, settings) {
|
|
30
|
+
this.init(renderer, settings);
|
|
20
31
|
}
|
|
21
32
|
|
|
22
33
|
/**
|
|
23
34
|
* Initialize the compositor
|
|
24
35
|
* @ignore
|
|
25
36
|
*/
|
|
26
|
-
init (renderer) {
|
|
27
|
-
// local reference
|
|
28
|
-
var gl = renderer.gl;
|
|
29
|
-
|
|
37
|
+
init (renderer, settings) {
|
|
30
38
|
// the associated renderer
|
|
31
39
|
this.renderer = renderer;
|
|
32
40
|
|
|
@@ -40,17 +48,23 @@ import { on, CANVAS_ONRESIZE } from '../../../system/event.js';
|
|
|
40
48
|
this.viewMatrix = renderer.currentTransform;
|
|
41
49
|
|
|
42
50
|
/**
|
|
43
|
-
*
|
|
51
|
+
* the default shader created by this compositor
|
|
44
52
|
* @type {GLShader}
|
|
45
53
|
*/
|
|
46
|
-
this.
|
|
54
|
+
this.defaultShader = undefined;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* the shader currently used by this compositor
|
|
58
|
+
* @type {GLShader}
|
|
59
|
+
*/
|
|
60
|
+
this.currentShader = undefined;
|
|
47
61
|
|
|
48
62
|
/**
|
|
49
63
|
* primitive type to render (gl.POINTS, gl.LINE_STRIP, gl.LINE_LOOP, gl.LINES, gl.TRIANGLE_STRIP, gl.TRIANGLE_FAN, gl.TRIANGLES)
|
|
50
64
|
* @type {number}
|
|
51
65
|
* @default gl.TRIANGLES
|
|
52
66
|
*/
|
|
53
|
-
this.mode = gl.TRIANGLES;
|
|
67
|
+
this.mode = this.gl.TRIANGLES;
|
|
54
68
|
|
|
55
69
|
/**
|
|
56
70
|
* an array of vertex attribute properties
|
|
@@ -75,11 +89,28 @@ import { on, CANVAS_ONRESIZE } from '../../../system/event.js';
|
|
|
75
89
|
*/
|
|
76
90
|
this.vertexSize = 0;
|
|
77
91
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
92
|
+
/**
|
|
93
|
+
* the vertex data buffer used by this compositor
|
|
94
|
+
* @type {VertexArrayBuffer}
|
|
95
|
+
*/
|
|
96
|
+
this.vertexData = null;
|
|
97
|
+
|
|
98
|
+
// parse given attibrutes
|
|
99
|
+
if (typeof settings !== "undefined" && Array.isArray(settings.attributes)) {
|
|
100
|
+
settings.attributes.forEach((attr) => {
|
|
101
|
+
this.addAttribute(attr.name, attr.size, attr.type, attr.normalized, attr.offset);
|
|
102
|
+
this.vertexData = new VertexArrayBuffer(this.vertexSize, 6);
|
|
103
|
+
});
|
|
104
|
+
} else {
|
|
105
|
+
throw new Error("attributes definition missing");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// parse and instantiate the default shader
|
|
109
|
+
if (typeof settings !== "undefined" && typeof settings.shader !== "undefined") {
|
|
110
|
+
this.defaultShader = new GLShader(this.gl, settings.shader.vertex, settings.shader.fragment);
|
|
111
|
+
} else {
|
|
112
|
+
throw new Error("shader definition missing");
|
|
113
|
+
}
|
|
83
114
|
}
|
|
84
115
|
|
|
85
116
|
/**
|
|
@@ -90,17 +121,35 @@ import { on, CANVAS_ONRESIZE } from '../../../system/event.js';
|
|
|
90
121
|
// WebGL context
|
|
91
122
|
this.gl = this.renderer.gl;
|
|
92
123
|
|
|
93
|
-
|
|
124
|
+
// clear the vertex data buffer
|
|
125
|
+
this.vertexData.clear();
|
|
126
|
+
}
|
|
94
127
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
)
|
|
128
|
+
/**
|
|
129
|
+
* @ignore
|
|
130
|
+
* called by the WebGL renderer when a compositor become the current one
|
|
131
|
+
*/
|
|
132
|
+
bind() {
|
|
133
|
+
if (this.renderer.currentProgram !== this.defaultShader.program) {
|
|
134
|
+
this.useShader(this.defaultShader);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
101
137
|
|
|
102
|
-
|
|
103
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Select the shader to use for compositing
|
|
140
|
+
* @see GLShader
|
|
141
|
+
* @param {GLShader} shader - a reference to a GLShader instance
|
|
142
|
+
*/
|
|
143
|
+
useShader(shader) {
|
|
144
|
+
if (this.renderer.currentProgram !== shader.program) {
|
|
145
|
+
this.flush();
|
|
146
|
+
shader.bind();
|
|
147
|
+
shader.setUniform("uProjectionMatrix", this.renderer.projectionMatrix);
|
|
148
|
+
shader.setVertexAttributes(this.gl, this.attributes, this.vertexByteSize);
|
|
149
|
+
|
|
150
|
+
this.currentShader = shader;
|
|
151
|
+
this.renderer.currentProgram = this.currentShader.program;
|
|
152
|
+
}
|
|
104
153
|
}
|
|
105
154
|
|
|
106
155
|
/**
|
|
@@ -148,51 +197,25 @@ import { on, CANVAS_ONRESIZE } from '../../../system/event.js';
|
|
|
148
197
|
this.vertexSize = this.vertexByteSize / Float32Array.BYTES_PER_ELEMENT;
|
|
149
198
|
}
|
|
150
199
|
|
|
151
|
-
/**
|
|
152
|
-
* Sets the viewport
|
|
153
|
-
* @param {number} x - x position of viewport
|
|
154
|
-
* @param {number} y - y position of viewport
|
|
155
|
-
* @param {number} w - width of viewport
|
|
156
|
-
* @param {number} h - height of viewport
|
|
157
|
-
*/
|
|
158
|
-
setViewport(x, y, w, h) {
|
|
159
|
-
this.gl.viewport(x, y, w, h);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
200
|
/**
|
|
163
201
|
* set/change the current projection matrix
|
|
164
202
|
* @param {Matrix3d} matrix
|
|
165
203
|
*/
|
|
166
204
|
setProjection(matrix) {
|
|
167
|
-
this.
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Select the shader to use for compositing
|
|
172
|
-
* @see GLShader
|
|
173
|
-
* @param {GLShader} shader - a reference to a GLShader instance
|
|
174
|
-
*/
|
|
175
|
-
useShader(shader) {
|
|
176
|
-
if (this.activeShader !== shader) {
|
|
177
|
-
this.flush();
|
|
178
|
-
this.activeShader = shader;
|
|
179
|
-
this.activeShader.bind();
|
|
180
|
-
this.activeShader.setUniform("uProjectionMatrix", this.renderer.projectionMatrix);
|
|
181
|
-
this.activeShader.setVertexAttributes(this.gl, this.attributes, this.vertexByteSize);
|
|
182
|
-
}
|
|
205
|
+
this.currentShader.setUniform("uProjectionMatrix", matrix);
|
|
183
206
|
}
|
|
184
207
|
|
|
185
208
|
/**
|
|
186
|
-
* Flush batched
|
|
209
|
+
* Flush batched vertex data to the GPU
|
|
187
210
|
* @param {number} [mode=gl.TRIANGLES] - the GL drawing mode
|
|
188
211
|
*/
|
|
189
212
|
flush(mode = this.mode) {
|
|
190
|
-
|
|
191
|
-
|
|
213
|
+
let vertex = this.vertexData;
|
|
214
|
+
let vertexCount = vertex.vertexCount;
|
|
192
215
|
|
|
193
216
|
if (vertexCount > 0) {
|
|
194
|
-
|
|
195
|
-
|
|
217
|
+
let gl = this.gl;
|
|
218
|
+
let vertexSize = vertex.vertexSize;
|
|
196
219
|
|
|
197
220
|
// Copy data into stream buffer
|
|
198
221
|
if (this.renderer.WebGLVersion > 1) {
|
|
@@ -207,29 +230,6 @@ import { on, CANVAS_ONRESIZE } from '../../../system/event.js';
|
|
|
207
230
|
vertex.clear();
|
|
208
231
|
}
|
|
209
232
|
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Clear the frame buffer
|
|
213
|
-
* @param {number} [alpha = 0.0] - the alpha value used when clearing the framebuffer
|
|
214
|
-
*/
|
|
215
|
-
clear(alpha = 0) {
|
|
216
|
-
var gl = this.gl;
|
|
217
|
-
gl.clearColor(0, 0, 0, alpha);
|
|
218
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Specify the color values used when clearing color buffers. The values are clamped between 0 and 1.
|
|
223
|
-
* @param {number} [r = 0] - the red color value used when the color buffers are cleared
|
|
224
|
-
* @param {number} [g = 0] - the green color value used when the color buffers are cleared
|
|
225
|
-
* @param {number} [b = 0] - the blue color value used when the color buffers are cleared
|
|
226
|
-
* @param {number} [a = 0] - the alpha color value used when the color buffers are cleared
|
|
227
|
-
*/
|
|
228
|
-
clearColor(r = 0, g = 0, b = 0, a = 0) {
|
|
229
|
-
var gl = this.gl;
|
|
230
|
-
gl.clearColor(r, g, b, a);
|
|
231
|
-
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
232
|
-
}
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
export { Compositor as default };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v15.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2023 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import primitiveVertex from '../shaders/primitive.vert.js';
|
|
9
|
+
import primitiveFragment from '../shaders/primitive.frag.js';
|
|
10
|
+
import Compositor from './compositor.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @classdesc
|
|
14
|
+
* A WebGL Compositor object. This class handles all of the WebGL state<br>
|
|
15
|
+
* Pushes texture regions or shape geometry into WebGL buffers, automatically flushes to GPU
|
|
16
|
+
* @augments Compositor
|
|
17
|
+
*/
|
|
18
|
+
class PrimitiveCompositor extends Compositor {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Initialize the compositor
|
|
22
|
+
* @ignore
|
|
23
|
+
*/
|
|
24
|
+
init(renderer) {
|
|
25
|
+
super.init(renderer, {
|
|
26
|
+
attributes: [
|
|
27
|
+
{name: "aVertex", size: 2, type: renderer.gl.FLOAT, normalized: false, offset: 0 * Float32Array.BYTES_PER_ELEMENT},
|
|
28
|
+
{name: "aColor", size: 4, type: renderer.gl.UNSIGNED_BYTE, normalized: true, offset: 2 * Float32Array.BYTES_PER_ELEMENT}
|
|
29
|
+
],
|
|
30
|
+
shader: {
|
|
31
|
+
vertex: primitiveVertex, fragment: primitiveFragment
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Draw an array of vertices
|
|
38
|
+
* @param {GLenum} mode - primitive type to render (gl.POINTS, gl.LINE_STRIP, gl.LINE_LOOP, gl.LINES, gl.TRIANGLE_STRIP, gl.TRIANGLE_FAN, gl.TRIANGLES)
|
|
39
|
+
* @param {Point[]} verts - an array of vertices
|
|
40
|
+
* @param {number} [vertexCount=verts.length] - amount of points defined in the points array
|
|
41
|
+
*/
|
|
42
|
+
drawVertices(mode, verts, vertexCount = verts.length) {
|
|
43
|
+
let viewMatrix = this.viewMatrix;
|
|
44
|
+
let vertexData = this.vertexData;
|
|
45
|
+
let color = this.renderer.currentColor;
|
|
46
|
+
let alpha = this.renderer.getGlobalAlpha();
|
|
47
|
+
|
|
48
|
+
if (vertexData.isFull(vertexCount)) {
|
|
49
|
+
// is the vertex buffer full if we add more vertices
|
|
50
|
+
this.flush();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// flush if drawing vertices with a different drawing mode
|
|
54
|
+
if (mode !== this.mode) {
|
|
55
|
+
this.flush(this.mode);
|
|
56
|
+
this.mode = mode;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!viewMatrix.isIdentity()) {
|
|
60
|
+
verts.forEach((vert) => {
|
|
61
|
+
viewMatrix.apply(vert);
|
|
62
|
+
vertexData.push(vert.x, vert.y, undefined, undefined, color.toUint32(alpha));
|
|
63
|
+
});
|
|
64
|
+
} else {
|
|
65
|
+
verts.forEach((vert) => {
|
|
66
|
+
vertexData.push(vert.x, vert.y, undefined, undefined, color.toUint32(alpha));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// force flush for primitive using LINE_STRIP or LINE_LOOP
|
|
71
|
+
if (this.mode === this.gl.LINE_STRIP || this.mode === this.gl.LINE_LOOP) {
|
|
72
|
+
this.flush(this.mode);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { PrimitiveCompositor as default };
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v15.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2023 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import Vector2d from '../../../math/vector2.js';
|
|
9
|
+
import { isPowerOfTwo } from '../../../math/math.js';
|
|
10
|
+
import quadVertex from '../shaders/quad.vert.js';
|
|
11
|
+
import quadFragment from '../shaders/quad.frag.js';
|
|
12
|
+
import Compositor from './compositor.js';
|
|
13
|
+
|
|
14
|
+
// a pool of resuable vectors
|
|
15
|
+
let V_ARRAY = [
|
|
16
|
+
new Vector2d(),
|
|
17
|
+
new Vector2d(),
|
|
18
|
+
new Vector2d(),
|
|
19
|
+
new Vector2d()
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @classdesc
|
|
24
|
+
* A WebGL Compositor object. This class handles all of the WebGL state<br>
|
|
25
|
+
* Pushes texture regions or shape geometry into WebGL buffers, automatically flushes to GPU
|
|
26
|
+
* @augments Compositor
|
|
27
|
+
*/
|
|
28
|
+
class QuadCompositor extends Compositor {
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Initialize the compositor
|
|
32
|
+
* @ignore
|
|
33
|
+
*/
|
|
34
|
+
init (renderer) {
|
|
35
|
+
super.init(renderer, {
|
|
36
|
+
attributes: [
|
|
37
|
+
{name: "aVertex", size: 2, type: renderer.gl.FLOAT, normalized: false, offset: 0 * Float32Array.BYTES_PER_ELEMENT},
|
|
38
|
+
{name: "aRegion", size: 2, type: renderer.gl.FLOAT, normalized: false, offset: 2 * Float32Array.BYTES_PER_ELEMENT},
|
|
39
|
+
{name: "aColor", size: 4, type: renderer.gl.UNSIGNED_BYTE, normalized: true, offset: 4 * Float32Array.BYTES_PER_ELEMENT}
|
|
40
|
+
],
|
|
41
|
+
shader: {
|
|
42
|
+
vertex: quadVertex, fragment: quadFragment
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// list of active texture units
|
|
47
|
+
this.currentTextureUnit = -1;
|
|
48
|
+
this.boundTextures = [];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Reset compositor internal state
|
|
53
|
+
* @ignore
|
|
54
|
+
*/
|
|
55
|
+
reset() {
|
|
56
|
+
super.reset();
|
|
57
|
+
|
|
58
|
+
// delete all related bound texture
|
|
59
|
+
for (let i = 0; i < this.renderer.maxTextures; i++) {
|
|
60
|
+
let texture2D = this.getTexture2D(i);
|
|
61
|
+
if (typeof texture2D !== "undefined") {
|
|
62
|
+
this.deleteTexture2D(texture2D);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.currentTextureUnit = -1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Create a WebGL texture from an image
|
|
70
|
+
* @param {number} unit - Destination texture unit
|
|
71
|
+
* @param {Image|HTMLCanvasElement|ImageData|Uint8Array[]|Float32Array[]} [pixels=null] - Source image
|
|
72
|
+
* @param {number} filter - gl.LINEAR or gl.NEAREST
|
|
73
|
+
* @param {string} [repeat="no-repeat"] - Image repeat behavior (see {@link ImageLayer#repeat})
|
|
74
|
+
* @param {number} [w=pixels.width] - Source image width (Only use with UInt8Array[] or Float32Array[] source image)
|
|
75
|
+
* @param {number} [h=pixels.height] - Source image height (Only use with UInt8Array[] or Float32Array[] source image)
|
|
76
|
+
* @param {boolean} [premultipliedAlpha=true] - Multiplies the alpha channel into the other color channels
|
|
77
|
+
* @param {boolean} [mipmap=true] - Whether mipmap levels should be generated for this texture
|
|
78
|
+
* @returns {WebGLTexture} a WebGL texture
|
|
79
|
+
*/
|
|
80
|
+
createTexture2D(unit, pixels = null, filter, repeat = "no-repeat", w = pixels.width, h = pixels.height, premultipliedAlpha = true, mipmap = true) {
|
|
81
|
+
let gl = this.gl;
|
|
82
|
+
let isPOT = isPowerOfTwo(w) && isPowerOfTwo(h);
|
|
83
|
+
let rs = (repeat.search(/^repeat(-x)?$/) === 0) && (isPOT || this.renderer.WebGLVersion > 1) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
|
|
84
|
+
let rt = (repeat.search(/^repeat(-y)?$/) === 0) && (isPOT || this.renderer.WebGLVersion > 1) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
|
|
85
|
+
|
|
86
|
+
let texture = gl.createTexture();
|
|
87
|
+
|
|
88
|
+
this.bindTexture2D(texture, unit);
|
|
89
|
+
|
|
90
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, rs);
|
|
91
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, rt);
|
|
92
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
|
|
93
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
|
|
94
|
+
|
|
95
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultipliedAlpha);
|
|
96
|
+
|
|
97
|
+
if (pixels === null || typeof pixels.byteLength !== "undefined") {
|
|
98
|
+
// if pixels is undefined, or if it's Uint8Array/Float32Array TypedArray
|
|
99
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels, 0);
|
|
100
|
+
} else if (pixels instanceof OffscreenCanvas) {
|
|
101
|
+
// convert to ImageBitmap first (else Safari 16.4 and higher will throw an TypeError exception)
|
|
102
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, pixels.transferToImageBitmap());
|
|
103
|
+
} else {
|
|
104
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// generate the sprite mimap (used when scaling) if a PowerOfTwo texture
|
|
108
|
+
if (isPOT && mipmap === true) {
|
|
109
|
+
gl.generateMipmap(gl.TEXTURE_2D);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return texture;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* delete the given WebGL texture
|
|
117
|
+
* @param {WebGLTexture} [texture] - a WebGL texture to delete
|
|
118
|
+
* @param {number} [unit] - Texture unit to delete
|
|
119
|
+
*/
|
|
120
|
+
deleteTexture2D(texture) {
|
|
121
|
+
this.gl.deleteTexture(texture);
|
|
122
|
+
this.unbindTexture2D(texture);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* returns the WebGL texture associated to the given texture unit
|
|
127
|
+
* @param {number} unit - Texture unit to which a texture is bound
|
|
128
|
+
* @returns {WebGLTexture} texture a WebGL texture
|
|
129
|
+
*/
|
|
130
|
+
getTexture2D(unit) {
|
|
131
|
+
return this.boundTextures[unit];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* assign the given WebGL texture to the current batch
|
|
136
|
+
* @param {WebGLTexture} texture - a WebGL texture
|
|
137
|
+
* @param {number} unit - Texture unit to which the given texture is bound
|
|
138
|
+
*/
|
|
139
|
+
bindTexture2D(texture, unit) {
|
|
140
|
+
let gl = this.gl;
|
|
141
|
+
|
|
142
|
+
if (texture !== this.boundTextures[unit]) {
|
|
143
|
+
this.flush();
|
|
144
|
+
if (this.currentTextureUnit !== unit) {
|
|
145
|
+
this.currentTextureUnit = unit;
|
|
146
|
+
gl.activeTexture(gl.TEXTURE0 + unit);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
150
|
+
this.boundTextures[unit] = texture;
|
|
151
|
+
|
|
152
|
+
} else if (this.currentTextureUnit !== unit) {
|
|
153
|
+
this.flush();
|
|
154
|
+
this.currentTextureUnit = unit;
|
|
155
|
+
gl.activeTexture(gl.TEXTURE0 + unit);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* unbind the given WebGL texture, forcing it to be reuploaded
|
|
161
|
+
* @param {WebGLTexture} [texture] - a WebGL texture
|
|
162
|
+
* @param {number} [unit] - a WebGL texture
|
|
163
|
+
* @returns {number} unit the unit number that was associated with the given texture
|
|
164
|
+
*/
|
|
165
|
+
unbindTexture2D(texture, unit) {
|
|
166
|
+
if (typeof unit === "undefined") {
|
|
167
|
+
unit = this.boundTextures.indexOf(texture);
|
|
168
|
+
}
|
|
169
|
+
if (unit !== -1) {
|
|
170
|
+
delete this.boundTextures[unit];
|
|
171
|
+
if (unit === this.currentTextureUnit) {
|
|
172
|
+
this.currentTextureUnit = -1;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return unit;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @ignore
|
|
180
|
+
*/
|
|
181
|
+
uploadTexture(texture, w, h, force = false) {
|
|
182
|
+
let unit = this.renderer.cache.getUnit(texture);
|
|
183
|
+
let texture2D = this.boundTextures[unit];
|
|
184
|
+
|
|
185
|
+
if (typeof texture2D === "undefined" || force) {
|
|
186
|
+
this.createTexture2D(
|
|
187
|
+
unit,
|
|
188
|
+
texture.getTexture(),
|
|
189
|
+
this.renderer.settings.antiAlias ? this.gl.LINEAR : this.gl.NEAREST,
|
|
190
|
+
texture.repeat,
|
|
191
|
+
w,
|
|
192
|
+
h,
|
|
193
|
+
texture.premultipliedAlpha
|
|
194
|
+
);
|
|
195
|
+
} else {
|
|
196
|
+
this.bindTexture2D(texture2D, unit);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return this.currentTextureUnit;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Add a textured quad
|
|
204
|
+
* @param {TextureAtlas} texture - Source texture atlas
|
|
205
|
+
* @param {number} x - Destination x-coordinate
|
|
206
|
+
* @param {number} y - Destination y-coordinate
|
|
207
|
+
* @param {number} w - Destination width
|
|
208
|
+
* @param {number} h - Destination height
|
|
209
|
+
* @param {number} u0 - Texture UV (u0) value.
|
|
210
|
+
* @param {number} v0 - Texture UV (v0) value.
|
|
211
|
+
* @param {number} u1 - Texture UV (u1) value.
|
|
212
|
+
* @param {number} v1 - Texture UV (v1) value.
|
|
213
|
+
* @param {number} tint - tint color to be applied to the texture in UINT32 (argb) format
|
|
214
|
+
*/
|
|
215
|
+
addQuad(texture, x, y, w, h, u0, v0, u1, v1, tint) {
|
|
216
|
+
let vertexData = this.vertexData;
|
|
217
|
+
|
|
218
|
+
if (vertexData.isFull(6)) {
|
|
219
|
+
// is the vertex buffer full if we add 6 more vertices
|
|
220
|
+
this.flush();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// upload and activate the texture if necessary
|
|
224
|
+
let unit = this.uploadTexture(texture);
|
|
225
|
+
|
|
226
|
+
// set fragment sampler accordingly
|
|
227
|
+
this.currentShader.setUniform("uSampler", unit);
|
|
228
|
+
|
|
229
|
+
// Transform vertices
|
|
230
|
+
let m = this.viewMatrix,
|
|
231
|
+
vec0 = V_ARRAY[0].set(x, y),
|
|
232
|
+
vec1 = V_ARRAY[1].set(x + w, y),
|
|
233
|
+
vec2 = V_ARRAY[2].set(x, y + h),
|
|
234
|
+
vec3 = V_ARRAY[3].set(x + w, y + h);
|
|
235
|
+
|
|
236
|
+
if (!m.isIdentity()) {
|
|
237
|
+
m.apply(vec0);
|
|
238
|
+
m.apply(vec1);
|
|
239
|
+
m.apply(vec2);
|
|
240
|
+
m.apply(vec3);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
vertexData.push(vec0.x, vec0.y, u0, v0, tint);
|
|
244
|
+
vertexData.push(vec1.x, vec1.y, u1, v0, tint);
|
|
245
|
+
vertexData.push(vec2.x, vec2.y, u0, v1, tint);
|
|
246
|
+
vertexData.push(vec2.x, vec2.y, u0, v1, tint);
|
|
247
|
+
vertexData.push(vec1.x, vec1.y, u1, v0, tint);
|
|
248
|
+
vertexData.push(vec3.x, vec3.y, u1, v1, tint);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export { QuadCompositor as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* melonJS Game Engine -
|
|
2
|
+
* melonJS Game Engine - v15.1.0
|
|
3
3
|
* http://www.melonjs.org
|
|
4
4
|
* melonjs is licensed under the MIT License.
|
|
5
5
|
* http://www.opensource.org/licenses/mit-license
|
|
@@ -25,7 +25,7 @@ import { minify } from './utils/string.js';
|
|
|
25
25
|
* @see https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_on_the_web/GLSL_Shaders
|
|
26
26
|
* @example
|
|
27
27
|
* // create a basic shader
|
|
28
|
-
*
|
|
28
|
+
* let myShader = new me.GLShader(
|
|
29
29
|
* // WebGL rendering context
|
|
30
30
|
* gl,
|
|
31
31
|
* // vertex shader
|
|
@@ -100,7 +100,7 @@ import { minify } from './utils/string.js';
|
|
|
100
100
|
* @returns {GLint} number indicating the location of the variable name if found. Returns -1 otherwise
|
|
101
101
|
*/
|
|
102
102
|
getAttribLocation(name) {
|
|
103
|
-
|
|
103
|
+
let attr = this.attributes[name];
|
|
104
104
|
if (typeof attr !== "undefined") {
|
|
105
105
|
return attr;
|
|
106
106
|
} else {
|
|
@@ -116,7 +116,7 @@ import { minify } from './utils/string.js';
|
|
|
116
116
|
* myShader.setUniform("uProjectionMatrix", this.projectionMatrix);
|
|
117
117
|
*/
|
|
118
118
|
setUniform(name, value) {
|
|
119
|
-
|
|
119
|
+
let uniforms = this.uniforms;
|
|
120
120
|
if (typeof uniforms[name] !== "undefined") {
|
|
121
121
|
if (typeof value === "object" && typeof value.toArray === "function") {
|
|
122
122
|
uniforms[name] = value.toArray();
|
|
@@ -136,9 +136,9 @@ import { minify } from './utils/string.js';
|
|
|
136
136
|
*/
|
|
137
137
|
setVertexAttributes(gl, attributes, vertexByteSize) {
|
|
138
138
|
// set the vertex attributes
|
|
139
|
-
for (
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
for (let index = 0; index < attributes.length; ++index) {
|
|
140
|
+
let element = attributes[index];
|
|
141
|
+
let location = this.getAttribLocation(element.name);
|
|
142
142
|
|
|
143
143
|
if (location !== -1) {
|
|
144
144
|
gl.enableVertexAttribArray(location);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* melonJS Game Engine -
|
|
2
|
+
* melonJS Game Engine - v15.1.0
|
|
3
3
|
* http://www.melonjs.org
|
|
4
4
|
* melonjs is licensed under the MIT License.
|
|
5
5
|
* http://www.opensource.org/licenses/mit-license
|
|
6
6
|
* @copyright (C) 2011 - 2023 Olivier Biot (AltByte Pte Ltd)
|
|
7
7
|
*/
|
|
8
|
-
var primitiveVertex = "// Current vertex point\nattribute vec2 aVertex;\n\n// Projection matrix\nuniform mat4 uProjectionMatrix;\n\
|
|
8
|
+
var primitiveVertex = "// Current vertex point\nattribute vec2 aVertex;\nattribute vec4 aColor;\n\n// Projection matrix\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n // Transform the vertex position by the projection matrix\n gl_Position = uProjectionMatrix * vec4(aVertex, 0.0, 1.0);\n // Pass the remaining attributes to the fragment shader\n vColor = vec4(aColor.bgr * aColor.a, aColor.a);\n}\n";
|
|
9
9
|
|
|
10
10
|
export { primitiveVertex as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* melonJS Game Engine -
|
|
2
|
+
* melonJS Game Engine - v15.1.0
|
|
3
3
|
* http://www.melonjs.org
|
|
4
4
|
* melonjs is licensed under the MIT License.
|
|
5
5
|
* http://www.opensource.org/licenses/mit-license
|
|
6
6
|
* @copyright (C) 2011 - 2023 Olivier Biot (AltByte Pte Ltd)
|
|
7
7
|
*/
|
|
8
|
-
var quadVertex = "
|
|
8
|
+
var quadVertex = "// Current vertex point\nattribute vec2 aVertex;\nattribute vec2 aRegion;\nattribute vec4 aColor;\n\n// Projection matrix\nuniform mat4 uProjectionMatrix;\n\nvarying vec2 vRegion;\nvarying vec4 vColor;\n\nvoid main(void) {\n // Transform the vertex position by the projection matrix\n gl_Position = uProjectionMatrix * vec4(aVertex, 0.0, 1.0);\n // Pass the remaining attributes to the fragment shader\n vColor = vec4(aColor.bgr * aColor.a, aColor.a);\n vRegion = aRegion;\n}\n";
|
|
9
9
|
|
|
10
10
|
export { quadVertex as default };
|