molstar
Version:
A comprehensive macromolecular library.
112 lines • 4.06 kB
JavaScript
/**
* Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.cloneUniformValues = exports.isUniformValueScalar = exports.getUniformGlslType = exports.getUniformSetters = exports.getUniformType = void 0;
var mol_util_1 = require("../../mol-util");
var object_1 = require("../../mol-util/object");
function getUniformType(gl, kind) {
switch (kind) {
case 'b':
case 'b[]': return gl.BOOL;
case 'f':
case 'f[]': return gl.FLOAT;
case 'i':
case 'i[]': return gl.INT;
case 'v2':
case 'v2[]': return gl.FLOAT_VEC2;
case 'v3':
case 'v3[]': return gl.FLOAT_VEC3;
case 'v4':
case 'v4[]': return gl.FLOAT_VEC4;
case 'm3':
case 'm3[]': return gl.FLOAT_MAT3;
case 'm4':
case 'm4[]': return gl.FLOAT_MAT4;
default: console.error("unknown uniform kind '" + kind + "'");
}
}
exports.getUniformType = getUniformType;
function uniform1f(gl, location, value) { gl.uniform1f(location, value); }
function uniform1fv(gl, location, value) { gl.uniform1fv(location, value); }
function uniform1i(gl, location, value) { gl.uniform1i(location, value); }
function uniform1iv(gl, location, value) { gl.uniform1iv(location, value); }
function uniform2fv(gl, location, value) { gl.uniform2fv(location, value); }
function uniform3fv(gl, location, value) { gl.uniform3fv(location, value); }
function uniform4fv(gl, location, value) { gl.uniform4fv(location, value); }
function uniformMatrix3fv(gl, location, value) { gl.uniformMatrix3fv(location, false, value); }
function uniformMatrix4fv(gl, location, value) { gl.uniformMatrix4fv(location, false, value); }
function getUniformSetter(kind) {
switch (kind) {
case 'f': return uniform1f;
case 'f[]': return uniform1fv;
case 'i':
case 't':
case 'b': return uniform1i;
case 'i[]':
case 't[]':
case 'b[]': return uniform1iv;
case 'v2':
case 'v2[]': return uniform2fv;
case 'v3':
case 'v3[]': return uniform3fv;
case 'v4':
case 'v4[]': return uniform4fv;
case 'm3':
case 'm3[]': return uniformMatrix3fv;
case 'm4':
case 'm4[]': return uniformMatrix4fv;
}
}
function getUniformSetters(schema) {
var setters = {};
Object.keys(schema).forEach(function (k) {
var spec = schema[k];
if (spec.type === 'uniform') {
setters[k] = getUniformSetter(spec.kind);
}
else if (spec.type === 'texture') {
setters[k] = getUniformSetter('t');
}
});
return setters;
}
exports.getUniformSetters = getUniformSetters;
function getUniformGlslType(kind) {
switch (kind) {
case 'f': return 'float';
case 'i': return 'int';
case 't': return 'sampler2D';
case 'b': return 'bool';
case 'v2': return 'vec2';
case 'v3': return 'vec3';
case 'v4': return 'vec4';
case 'm3': return 'mat3';
case 'm4': return 'mat4';
}
throw new Error(kind + " has no primitive GLSL type.");
}
exports.getUniformGlslType = getUniformGlslType;
function isUniformValueScalar(kind) {
switch (kind) {
case 'f':
case 'i':
case 'b':
return true;
default:
return false;
}
}
exports.isUniformValueScalar = isUniformValueScalar;
function cloneUniformValues(uniformValues) {
var clonedValues = {};
Object.keys(uniformValues).forEach(function (k) {
clonedValues[k] = mol_util_1.ValueCell.create((0, object_1.deepClone)(uniformValues[k].ref.value));
});
return clonedValues;
}
exports.cloneUniformValues = cloneUniformValues;
//# sourceMappingURL=uniform.js.map
;