melonjs 10.6.1 → 10.8.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/melonjs.js +37947 -36530
- package/dist/melonjs.min.js +22 -22
- package/dist/melonjs.module.d.ts +1352 -307
- package/dist/melonjs.module.js +2929 -1501
- package/package.json +14 -12
- package/src/camera/camera2d.js +1 -1
- package/src/entity/entity.js +6 -7
- package/src/game.js +5 -5
- package/src/geometries/ellipse.js +10 -11
- package/src/geometries/line.js +3 -3
- package/src/geometries/path2d.js +319 -0
- package/src/geometries/poly.js +11 -11
- package/src/geometries/rectangle.js +30 -15
- package/src/geometries/roundrect.js +67 -0
- package/src/index.js +9 -5
- package/src/input/gamepad.js +12 -10
- package/src/input/keyboard.js +5 -3
- package/src/input/pointer.js +1 -1
- package/src/input/pointerevent.js +3 -4
- package/src/lang/deprecated.js +1 -1
- package/src/level/tiled/TMXLayer.js +1 -1
- package/src/level/tiled/TMXObject.js +9 -12
- package/src/level/tiled/TMXTileMap.js +23 -4
- package/src/level/tiled/TMXUtils.js +1 -1
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
- package/src/loader/loader.js +5 -5
- package/src/loader/loadingscreen.js +1 -1
- package/src/math/color.js +1 -1
- package/src/math/matrix2.js +1 -1
- package/src/math/matrix3.js +67 -66
- package/src/math/observable_vector2.js +1 -1
- package/src/math/observable_vector3.js +1 -1
- package/src/math/vector2.js +1 -1
- package/src/math/vector3.js +1 -1
- package/src/particles/emitter.js +130 -430
- package/src/particles/particle.js +53 -53
- package/src/particles/settings.js +310 -0
- package/src/physics/body.js +67 -51
- package/src/physics/bounds.js +8 -9
- package/src/physics/world.js +1 -1
- package/src/polyfill/console.js +7 -7
- package/src/polyfill/index.js +7 -0
- package/src/polyfill/performance.js +20 -0
- package/src/polyfill/requestAnimationFrame.js +10 -10
- package/src/renderable/collectable.js +9 -2
- package/src/renderable/colorlayer.js +1 -1
- package/src/renderable/container.js +1 -1
- package/src/renderable/imagelayer.js +3 -3
- package/src/renderable/renderable.js +1 -1
- package/src/renderable/sprite.js +2 -3
- package/src/renderable/trigger.js +10 -4
- package/src/state/stage.js +1 -1
- package/src/state/state.js +8 -8
- package/src/system/device.js +148 -133
- package/src/system/event.js +10 -10
- package/src/system/pooling.js +156 -149
- package/src/system/timer.js +1 -1
- package/src/text/bitmaptext.js +1 -1
- package/src/text/text.js +1 -1
- package/src/utils/agent.js +4 -4
- package/src/utils/function.js +2 -2
- package/src/utils/utils.js +10 -5
- package/src/video/canvas/canvas_renderer.js +104 -36
- package/src/video/renderer.js +28 -16
- package/src/video/texture.js +1 -1
- package/src/video/video.js +11 -11
- package/src/video/webgl/glshader.js +30 -194
- package/src/video/webgl/utils/attributes.js +16 -0
- package/src/video/webgl/utils/precision.js +11 -0
- package/src/video/webgl/utils/program.js +58 -0
- package/src/video/webgl/utils/string.js +16 -0
- package/src/video/webgl/utils/uniforms.js +87 -0
- package/src/video/webgl/webgl_compositor.js +1 -14
- package/src/video/webgl/webgl_renderer.js +129 -186
- package/src/particles/particlecontainer.js +0 -95
|
@@ -1,198 +1,10 @@
|
|
|
1
1
|
import * as event from "./../../system/event.js";
|
|
2
2
|
import device from "./../../system/device.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var uniforms = {},
|
|
9
|
-
uniRx = /uniform\s+(\w+)\s+(\w+)/g,
|
|
10
|
-
uniformsData = {},
|
|
11
|
-
descriptor = {},
|
|
12
|
-
locations = {},
|
|
13
|
-
match;
|
|
14
|
-
|
|
15
|
-
// Detect all uniform names and types
|
|
16
|
-
[ shader.vertex, shader.fragment ].forEach(function (shader) {
|
|
17
|
-
while ((match = uniRx.exec(shader))) {
|
|
18
|
-
uniformsData[match[2]] = match[1];
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
// Get uniform references
|
|
23
|
-
Object.keys(uniformsData).forEach(function (name) {
|
|
24
|
-
var type = uniformsData[name];
|
|
25
|
-
locations[name] = gl.getUniformLocation(shader.program, name);
|
|
26
|
-
|
|
27
|
-
descriptor[name] = {
|
|
28
|
-
"get" : (function (name) {
|
|
29
|
-
/**
|
|
30
|
-
* A getter for the uniform location
|
|
31
|
-
* @ignore
|
|
32
|
-
*/
|
|
33
|
-
return function () {
|
|
34
|
-
return locations[name];
|
|
35
|
-
};
|
|
36
|
-
})(name),
|
|
37
|
-
"set" : (function (name, type, fn) {
|
|
38
|
-
if (type.indexOf("mat") === 0) {
|
|
39
|
-
/**
|
|
40
|
-
* A generic setter for uniform matrices
|
|
41
|
-
* @ignore
|
|
42
|
-
*/
|
|
43
|
-
return function (val) {
|
|
44
|
-
gl[fn](locations[name], false, val);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
/**
|
|
49
|
-
* A generic setter for uniform vectors
|
|
50
|
-
* @ignore
|
|
51
|
-
*/
|
|
52
|
-
return function (val) {
|
|
53
|
-
var fnv = fn;
|
|
54
|
-
if (val.length && fn.substr(-1) !== "v") {
|
|
55
|
-
fnv += "v";
|
|
56
|
-
}
|
|
57
|
-
gl[fnv](locations[name], val);
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
})(name, type, "uniform" + fnHash[type])
|
|
61
|
-
};
|
|
62
|
-
});
|
|
63
|
-
Object.defineProperties(uniforms, descriptor);
|
|
64
|
-
|
|
65
|
-
return uniforms;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* @ignore
|
|
70
|
-
*/
|
|
71
|
-
function extractAttributes(gl, shader) {
|
|
72
|
-
var attributes = {},
|
|
73
|
-
attrRx = /attribute\s+\w+\s+(\w+)/g,
|
|
74
|
-
match,
|
|
75
|
-
i = 0;
|
|
76
|
-
|
|
77
|
-
// Detect all attribute names
|
|
78
|
-
while ((match = attrRx.exec(shader.vertex))) {
|
|
79
|
-
attributes[match[1]] = i++;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return attributes;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* @ignore
|
|
87
|
-
*/
|
|
88
|
-
function compileShader(gl, type, source) {
|
|
89
|
-
var shader = gl.createShader(type);
|
|
90
|
-
gl.shaderSource(shader, source);
|
|
91
|
-
gl.compileShader(shader);
|
|
92
|
-
|
|
93
|
-
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
94
|
-
throw new Error(gl.getShaderInfoLog(shader));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return shader;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Compile GLSL into a shader object
|
|
102
|
-
* @ignore
|
|
103
|
-
*/
|
|
104
|
-
function compileProgram(gl, vertex, fragment, attributes) {
|
|
105
|
-
var vertShader = compileShader(gl, gl.VERTEX_SHADER, vertex);
|
|
106
|
-
var fragShader = compileShader(gl, gl.FRAGMENT_SHADER, fragment);
|
|
107
|
-
|
|
108
|
-
var program = gl.createProgram();
|
|
109
|
-
|
|
110
|
-
gl.attachShader(program, vertShader);
|
|
111
|
-
gl.attachShader(program, fragShader);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
// force vertex attributes to use location 0 as starting location to prevent
|
|
115
|
-
// browser to do complicated emulation when running on desktop OpenGL (e.g. on macOS)
|
|
116
|
-
for (var location in attributes) {
|
|
117
|
-
gl.bindAttribLocation(program, attributes[location], location);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
gl.linkProgram(program);
|
|
121
|
-
|
|
122
|
-
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
123
|
-
var error_msg =
|
|
124
|
-
"Error initializing Shader " + this + "\n" +
|
|
125
|
-
"gl.VALIDATE_STATUS: " + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + "\n" +
|
|
126
|
-
"gl.getError()" + gl.getError() + "\n" +
|
|
127
|
-
"gl.getProgramInfoLog()" + gl.getProgramInfoLog(program);
|
|
128
|
-
// house cleaning
|
|
129
|
-
gl.deleteProgram(program);
|
|
130
|
-
program = null;
|
|
131
|
-
// throw the exception
|
|
132
|
-
throw new Error(error_msg);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
gl.useProgram(program);
|
|
136
|
-
|
|
137
|
-
// clean-up
|
|
138
|
-
gl.deleteShader(vertShader);
|
|
139
|
-
gl.deleteShader(fragShader);
|
|
140
|
-
|
|
141
|
-
return program;
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Hash map of GLSL data types to WebGL Uniform methods
|
|
147
|
-
* @ignore
|
|
148
|
-
*/
|
|
149
|
-
var fnHash = {
|
|
150
|
-
"bool" : "1i",
|
|
151
|
-
"int" : "1i",
|
|
152
|
-
"float" : "1f",
|
|
153
|
-
"vec2" : "2fv",
|
|
154
|
-
"vec3" : "3fv",
|
|
155
|
-
"vec4" : "4fv",
|
|
156
|
-
"bvec2" : "2iv",
|
|
157
|
-
"bvec3" : "3iv",
|
|
158
|
-
"bvec4" : "4iv",
|
|
159
|
-
"ivec2" : "2iv",
|
|
160
|
-
"ivec3" : "3iv",
|
|
161
|
-
"ivec4" : "4iv",
|
|
162
|
-
"mat2" : "Matrix2fv",
|
|
163
|
-
"mat3" : "Matrix3fv",
|
|
164
|
-
"mat4" : "Matrix4fv",
|
|
165
|
-
"sampler2D" : "1i"
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* set precision for the fiven shader source
|
|
170
|
-
* won't do anything if the precision is already specified
|
|
171
|
-
* @ignore
|
|
172
|
-
*/
|
|
173
|
-
function setPrecision(src, precision) {
|
|
174
|
-
if (src.substring(0, 9) !== "precision") {
|
|
175
|
-
return "precision " + precision + " float;" + src;
|
|
176
|
-
}
|
|
177
|
-
return src;
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* clean the given source from space, comments, etc...
|
|
182
|
-
* @ignore
|
|
183
|
-
*/
|
|
184
|
-
function minify(src) {
|
|
185
|
-
// remove comments
|
|
186
|
-
src = src.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, "$1");
|
|
187
|
-
// Remove leading and trailing whitespace from lines
|
|
188
|
-
src = src.replace(/(\\n\s+)|(\s+\\n)/g, "");
|
|
189
|
-
// Remove line breaks
|
|
190
|
-
src = src.replace(/(\\r|\\n)+/g, "");
|
|
191
|
-
// Remove unnecessary whitespace
|
|
192
|
-
src = src.replace(/\s*([;,[\](){}\\\/\-+*|^&!=<>?~%])\s*/g, "$1");
|
|
193
|
-
|
|
194
|
-
return src;
|
|
195
|
-
};
|
|
3
|
+
import { extractUniforms } from "./utils/uniforms.js";
|
|
4
|
+
import { extractAttributes } from "./utils/attributes.js";
|
|
5
|
+
import { compileProgram } from "./utils/program.js";
|
|
6
|
+
import { setPrecision } from "./utils/precision.js";
|
|
7
|
+
import { minify } from "./utils/string.js";
|
|
196
8
|
|
|
197
9
|
/**
|
|
198
10
|
* @classdesc
|
|
@@ -284,7 +96,7 @@ class GLShader {
|
|
|
284
96
|
this.uniforms = extractUniforms(this.gl, this);
|
|
285
97
|
|
|
286
98
|
// destroy the shader on context lost (will be recreated on context restore)
|
|
287
|
-
event.on(event.
|
|
99
|
+
event.on(event.ONCONTEXT_LOST, this.destroy, this);
|
|
288
100
|
}
|
|
289
101
|
|
|
290
102
|
/**
|
|
@@ -337,6 +149,30 @@ class GLShader {
|
|
|
337
149
|
}
|
|
338
150
|
}
|
|
339
151
|
|
|
152
|
+
/**
|
|
153
|
+
* activate the given vertex attribute for this shader
|
|
154
|
+
* @name setVertexAttributes
|
|
155
|
+
* @memberof GLShader
|
|
156
|
+
* @function
|
|
157
|
+
* @param {WebGLRenderingContext} gl the current WebGL rendering context
|
|
158
|
+
* @param {object[]} attributes an array of vertex attributes
|
|
159
|
+
* @param {number} vertexByteSize the size of a single vertex in bytes
|
|
160
|
+
*/
|
|
161
|
+
setVertexAttributes(gl, attributes, vertexByteSize) {
|
|
162
|
+
// set the vertex attributes
|
|
163
|
+
for (var index = 0; index < attributes.length; ++index) {
|
|
164
|
+
var element = attributes[index];
|
|
165
|
+
var location = this.getAttribLocation(element.name);
|
|
166
|
+
|
|
167
|
+
if (location !== -1) {
|
|
168
|
+
gl.enableVertexAttribArray(location);
|
|
169
|
+
gl.vertexAttribPointer(location, element.size, element.type, element.normalized, vertexByteSize, element.offset);
|
|
170
|
+
} else {
|
|
171
|
+
gl.disableVertexAttribArray(index);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
340
176
|
/**
|
|
341
177
|
* destroy this shader objects resources (program, attributes, uniforms)
|
|
342
178
|
* @name destroy
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ignore
|
|
3
|
+
*/
|
|
4
|
+
export function extractAttributes(gl, shader) {
|
|
5
|
+
var attributes = {},
|
|
6
|
+
attrRx = /attribute\s+\w+\s+(\w+)/g,
|
|
7
|
+
match,
|
|
8
|
+
i = 0;
|
|
9
|
+
|
|
10
|
+
// Detect all attribute names
|
|
11
|
+
while ((match = attrRx.exec(shader.vertex))) {
|
|
12
|
+
attributes[match[1]] = i++;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return attributes;
|
|
16
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* set precision for the fiven shader source
|
|
3
|
+
* won't do anything if the precision is already specified
|
|
4
|
+
* @ignore
|
|
5
|
+
*/
|
|
6
|
+
export function setPrecision(src, precision) {
|
|
7
|
+
if (src.substring(0, 9) !== "precision") {
|
|
8
|
+
return "precision " + precision + " float;" + src;
|
|
9
|
+
}
|
|
10
|
+
return src;
|
|
11
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ignore
|
|
3
|
+
*/
|
|
4
|
+
function compileShader(gl, type, source) {
|
|
5
|
+
var shader = gl.createShader(type);
|
|
6
|
+
gl.shaderSource(shader, source);
|
|
7
|
+
gl.compileShader(shader);
|
|
8
|
+
|
|
9
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
10
|
+
throw new Error(gl.getShaderInfoLog(shader));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return shader;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Compile GLSL into a shader object
|
|
18
|
+
* @ignore
|
|
19
|
+
*/
|
|
20
|
+
export function compileProgram(gl, vertex, fragment, attributes) {
|
|
21
|
+
var vertShader = compileShader(gl, gl.VERTEX_SHADER, vertex);
|
|
22
|
+
var fragShader = compileShader(gl, gl.FRAGMENT_SHADER, fragment);
|
|
23
|
+
|
|
24
|
+
var program = gl.createProgram();
|
|
25
|
+
|
|
26
|
+
gl.attachShader(program, vertShader);
|
|
27
|
+
gl.attachShader(program, fragShader);
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// force vertex attributes to use location 0 as starting location to prevent
|
|
31
|
+
// browser to do complicated emulation when running on desktop OpenGL (e.g. on macOS)
|
|
32
|
+
for (var location in attributes) {
|
|
33
|
+
gl.bindAttribLocation(program, attributes[location], location);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
gl.linkProgram(program);
|
|
37
|
+
|
|
38
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
39
|
+
var error_msg =
|
|
40
|
+
"Error initializing Shader " + this + "\n" +
|
|
41
|
+
"gl.VALIDATE_STATUS: " + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + "\n" +
|
|
42
|
+
"gl.getError()" + gl.getError() + "\n" +
|
|
43
|
+
"gl.getProgramInfoLog()" + gl.getProgramInfoLog(program);
|
|
44
|
+
// house cleaning
|
|
45
|
+
gl.deleteProgram(program);
|
|
46
|
+
program = null;
|
|
47
|
+
// throw the exception
|
|
48
|
+
throw new Error(error_msg);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
gl.useProgram(program);
|
|
52
|
+
|
|
53
|
+
// clean-up
|
|
54
|
+
gl.deleteShader(vertShader);
|
|
55
|
+
gl.deleteShader(fragShader);
|
|
56
|
+
|
|
57
|
+
return program;
|
|
58
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* clean the given source from space, comments, etc...
|
|
3
|
+
* @ignore
|
|
4
|
+
*/
|
|
5
|
+
export function minify(src) {
|
|
6
|
+
// remove comments
|
|
7
|
+
src = src.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, "$1");
|
|
8
|
+
// Remove leading and trailing whitespace from lines
|
|
9
|
+
src = src.replace(/(\\n\s+)|(\s+\\n)/g, "");
|
|
10
|
+
// Remove line breaks
|
|
11
|
+
src = src.replace(/(\\r|\\n)+/g, "");
|
|
12
|
+
// Remove unnecessary whitespace
|
|
13
|
+
src = src.replace(/\s*([;,[\](){}\\\/\-+*|^&!=<>?~%])\s*/g, "$1");
|
|
14
|
+
|
|
15
|
+
return src;
|
|
16
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* Hash map of GLSL data types to WebGL Uniform methods
|
|
4
|
+
* @ignore
|
|
5
|
+
*/
|
|
6
|
+
const fnHash = {
|
|
7
|
+
"bool" : "1i",
|
|
8
|
+
"int" : "1i",
|
|
9
|
+
"float" : "1f",
|
|
10
|
+
"vec2" : "2fv",
|
|
11
|
+
"vec3" : "3fv",
|
|
12
|
+
"vec4" : "4fv",
|
|
13
|
+
"bvec2" : "2iv",
|
|
14
|
+
"bvec3" : "3iv",
|
|
15
|
+
"bvec4" : "4iv",
|
|
16
|
+
"ivec2" : "2iv",
|
|
17
|
+
"ivec3" : "3iv",
|
|
18
|
+
"ivec4" : "4iv",
|
|
19
|
+
"mat2" : "Matrix2fv",
|
|
20
|
+
"mat3" : "Matrix3fv",
|
|
21
|
+
"mat4" : "Matrix4fv",
|
|
22
|
+
"sampler2D" : "1i"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @ignore
|
|
27
|
+
*/
|
|
28
|
+
export function extractUniforms(gl, shader) {
|
|
29
|
+
var uniforms = {},
|
|
30
|
+
uniRx = /uniform\s+(\w+)\s+(\w+)/g,
|
|
31
|
+
uniformsData = {},
|
|
32
|
+
descriptor = {},
|
|
33
|
+
locations = {},
|
|
34
|
+
match;
|
|
35
|
+
|
|
36
|
+
// Detect all uniform names and types
|
|
37
|
+
[ shader.vertex, shader.fragment ].forEach(function (shader) {
|
|
38
|
+
while ((match = uniRx.exec(shader))) {
|
|
39
|
+
uniformsData[match[2]] = match[1];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Get uniform references
|
|
44
|
+
Object.keys(uniformsData).forEach(function (name) {
|
|
45
|
+
var type = uniformsData[name];
|
|
46
|
+
locations[name] = gl.getUniformLocation(shader.program, name);
|
|
47
|
+
|
|
48
|
+
descriptor[name] = {
|
|
49
|
+
"get" : (function (name) {
|
|
50
|
+
/**
|
|
51
|
+
* A getter for the uniform location
|
|
52
|
+
* @ignore
|
|
53
|
+
*/
|
|
54
|
+
return function () {
|
|
55
|
+
return locations[name];
|
|
56
|
+
};
|
|
57
|
+
})(name),
|
|
58
|
+
"set" : (function (name, type, fn) {
|
|
59
|
+
if (type.indexOf("mat") === 0) {
|
|
60
|
+
/**
|
|
61
|
+
* A generic setter for uniform matrices
|
|
62
|
+
* @ignore
|
|
63
|
+
*/
|
|
64
|
+
return function (val) {
|
|
65
|
+
gl[fn](locations[name], false, val);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
/**
|
|
70
|
+
* A generic setter for uniform vectors
|
|
71
|
+
* @ignore
|
|
72
|
+
*/
|
|
73
|
+
return function (val) {
|
|
74
|
+
var fnv = fn;
|
|
75
|
+
if (val.length && fn.substr(-1) !== "v") {
|
|
76
|
+
fnv += "v";
|
|
77
|
+
}
|
|
78
|
+
gl[fnv](locations[name], val);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
})(name, type, "uniform" + fnHash[type])
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperties(uniforms, descriptor);
|
|
85
|
+
|
|
86
|
+
return uniforms;
|
|
87
|
+
};
|
|
@@ -384,20 +384,7 @@ class WebGLCompositor {
|
|
|
384
384
|
this.activeShader = shader;
|
|
385
385
|
this.activeShader.bind();
|
|
386
386
|
this.activeShader.setUniform("uProjectionMatrix", this.renderer.projectionMatrix);
|
|
387
|
-
|
|
388
|
-
// set the vertex attributes
|
|
389
|
-
for (var index = 0; index < this.attributes.length; ++index) {
|
|
390
|
-
var gl = this.gl;
|
|
391
|
-
var element = this.attributes[index];
|
|
392
|
-
var location = this.activeShader.getAttribLocation(element.name);
|
|
393
|
-
|
|
394
|
-
if (location !== -1) {
|
|
395
|
-
gl.enableVertexAttribArray(location);
|
|
396
|
-
gl.vertexAttribPointer(location, element.size, element.type, element.normalized, this.vertexByteSize, element.offset);
|
|
397
|
-
} else {
|
|
398
|
-
gl.disableVertexAttribArray(index);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
387
|
+
this.activeShader.setVertexAttributes(this.gl, this.attributes, this.vertexByteSize);
|
|
401
388
|
}
|
|
402
389
|
}
|
|
403
390
|
|