function setWebGLEnabled(v) { try { coreModel.useWebGL(v); } catch (e) { console.warn("WebGL initialization failed. CPU solvers and rendering will be used."); console.warn(e.message); } }
Shader.prototype.uniforms = function (uniforms) { var name, location, value; gl.useProgram(this.program); for (name in uniforms) { if (uniforms.hasOwnProperty(name)) { if (this.uniformLocations[name] === undefined) { this.uniformLocations[name] = gl.getUniformLocation(this.program, name); } location = this.uniformLocations[name]; if (location === null) { console.warn('Shader: name ' + name + ' does not correspond to an active uniform variable.'); continue; } value = uniforms[name]; if (isArray(value)) { switch (value.length) { case 1: gl.uniform1fv(location, new Float32Array(value)); break; case 2: gl.uniform2fv(location, new Float32Array(value)); break; case 3: gl.uniform3fv(location, new Float32Array(value)); break; case 4: gl.uniform4fv(location, new Float32Array(value)); break; // Matrices are automatically transposed, since WebGL uses column-major // indices instead of row-major indices. case 9: gl.uniformMatrix3fv(location, false, new Float32Array([ value[0], value[3], value[6], value[1], value[4], value[7], value[2], value[5], value[8] ])); break; case 16: gl.uniformMatrix4fv(location, false, new Float32Array([ value[0], value[4], value[8], value[12], value[1], value[5], value[9], value[13], value[2], value[6], value[10], value[14], value[3], value[7], value[11], value[15] ])); break; default: throw new Error('Shader: don\'t know how to load uniform "' + name + '" of length ' + value.length); } } else if (isNumber(value)) { (this.isSampler[name] ? gl.uniform1i : gl.uniform1f).call(gl, location, value); } else { throw new Error('Shader: attempted to set uniform "' + name + '" to invalid value ' + value); } } } return this; };
target.tick = function () { console.warn("[PlaybackSupport] .tick() method should be overwritten by target!"); };