Fix loading

This commit is contained in:
schmelczerandras 2020-11-23 13:21:46 +01:00
parent 9c64392e01
commit 9d71f27a9f

View file

@ -1,9 +1,12 @@
import { mat3, vec2, vec3, vec4 } from 'gl-matrix'; import { mat3, mat4, vec2, vec3, vec4 } from 'gl-matrix';
import { UniversalRenderingContext } from '../universal-rendering-context'; import { UniversalRenderingContext } from '../universal-rendering-context';
/** @internal */ /** @internal */
const loaderMat3 = mat3.create(); const loaderMat3 = mat3.create();
/** @internal */
const loaderMat4 = mat4.create();
/** @internal */ /** @internal */
const converters: Map< const converters: Map<
GLenum, GLenum,
@ -105,10 +108,10 @@ converters.set(
const result = new Float32Array(v.length * 4); const result = new Float32Array(v.length * 4);
for (let i = 0; i < v.length; i++) { for (let i = 0; i < v.length; i++) {
result[3 * i] = (v[i] as Array<number>)[0]; result[4 * i] = (v[i] as Array<number>)[0];
result[3 * i + 1] = (v[i] as Array<number>)[1]; result[4 * i + 1] = (v[i] as Array<number>)[1];
result[3 * i + 2] = (v[i] as Array<number>)[2]; result[4 * i + 2] = (v[i] as Array<number>)[2];
result[3 * i + 3] = (v[i] as Array<number>)[3]; result[4 * i + 3] = (v[i] as Array<number>)[3];
} }
gl.uniform4fv(l, result); gl.uniform4fv(l, result);
@ -120,13 +123,29 @@ converters.set(
converters.set(WebGLRenderingContext.FLOAT_MAT3, (gl, v, l) => { converters.set(WebGLRenderingContext.FLOAT_MAT3, (gl, v, l) => {
if (gl.isWebGL2) { if (gl.isWebGL2) {
gl.uniformMatrix3fv(l, true, mat3.fromMat2d(loaderMat3, v)); if (v.length < 9) {
gl.uniformMatrix3fv(l, true, mat3.fromMat2d(loaderMat3, v));
} else {
gl.uniformMatrix3fv(l, true, v);
}
} else { } else {
gl.uniformMatrix3fv( if (v.length < 9) {
l, gl.uniformMatrix3fv(
false, l,
mat3.transpose(mat3.create(), mat3.fromMat2d(loaderMat3, v)) false,
); mat3.transpose(loaderMat3, mat3.fromMat2d(loaderMat3, v))
);
} else {
gl.uniformMatrix3fv(l, false, mat3.transpose(loaderMat3, v));
}
}
});
converters.set(WebGLRenderingContext.FLOAT_MAT4, (gl, v, l) => {
if (gl.isWebGL2) {
gl.uniformMatrix4fv(l, true, v);
} else {
gl.uniformMatrix4fv(l, false, mat4.transpose(loaderMat4, v));
} }
}); });