molstar
Version:
A comprehensive macromolecular library.
119 lines • 5.46 kB
JavaScript
/**
* Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
export function createState(gl) {
var enabledCapabilities = {};
var currentFrontFace = gl.getParameter(gl.FRONT_FACE);
var currentCullFace = gl.getParameter(gl.CULL_FACE_MODE);
var currentDepthMask = gl.getParameter(gl.DEPTH_WRITEMASK);
var currentColorMask = gl.getParameter(gl.COLOR_WRITEMASK);
var currentClearColor = gl.getParameter(gl.COLOR_CLEAR_VALUE);
var currentBlendSrcRGB = gl.getParameter(gl.BLEND_SRC_RGB);
var currentBlendDstRGB = gl.getParameter(gl.BLEND_DST_RGB);
var currentBlendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);
var currentBlendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);
var currentBlendEqRGB = gl.getParameter(gl.BLEND_EQUATION_RGB);
var currentBlendEqAlpha = gl.getParameter(gl.BLEND_EQUATION_ALPHA);
return {
currentProgramId: -1,
currentMaterialId: -1,
currentRenderItemId: -1,
enable: function (cap) {
if (enabledCapabilities[cap] !== true) {
gl.enable(cap);
enabledCapabilities[cap] = true;
}
},
disable: function (cap) {
if (enabledCapabilities[cap] !== false) {
gl.disable(cap);
enabledCapabilities[cap] = false;
}
},
frontFace: function (mode) {
if (mode !== currentFrontFace) {
gl.frontFace(mode);
currentFrontFace = mode;
}
},
cullFace: function (mode) {
if (mode !== currentCullFace) {
gl.cullFace(mode);
currentCullFace = mode;
}
},
depthMask: function (flag) {
if (flag !== currentDepthMask) {
gl.depthMask(flag);
currentDepthMask = flag;
}
},
colorMask: function (red, green, blue, alpha) {
if (red !== currentColorMask[0] || green !== currentColorMask[1] || blue !== currentColorMask[2] || alpha !== currentColorMask[3]) {
gl.colorMask(red, green, blue, alpha);
currentColorMask[0] = red;
currentColorMask[1] = green;
currentColorMask[2] = blue;
currentColorMask[3] = alpha;
}
},
clearColor: function (red, green, blue, alpha) {
if (red !== currentClearColor[0] || green !== currentClearColor[1] || blue !== currentClearColor[2] || alpha !== currentClearColor[3]) {
gl.clearColor(red, green, blue, alpha);
currentClearColor[0] = red;
currentClearColor[1] = green;
currentClearColor[2] = blue;
currentClearColor[3] = alpha;
}
},
blendFunc: function (src, dst) {
if (src !== currentBlendSrcRGB || dst !== currentBlendDstRGB || src !== currentBlendSrcAlpha || dst !== currentBlendDstAlpha) {
gl.blendFunc(src, dst);
currentBlendSrcRGB = src;
currentBlendDstRGB = dst;
currentBlendSrcAlpha = src;
currentBlendDstAlpha = dst;
}
},
blendFuncSeparate: function (srcRGB, dstRGB, srcAlpha, dstAlpha) {
if (srcRGB !== currentBlendSrcRGB || dstRGB !== currentBlendDstRGB || srcAlpha !== currentBlendSrcAlpha || dstAlpha !== currentBlendDstAlpha) {
gl.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
currentBlendSrcRGB = srcRGB;
currentBlendDstRGB = dstRGB;
currentBlendSrcAlpha = srcAlpha;
currentBlendDstAlpha = dstAlpha;
}
},
blendEquation: function (mode) {
if (mode !== currentBlendEqRGB || mode !== currentBlendEqAlpha) {
gl.blendEquation(mode);
currentBlendEqRGB = mode;
currentBlendEqAlpha = mode;
}
},
blendEquationSeparate: function (modeRGB, modeAlpha) {
if (modeRGB !== currentBlendEqRGB || modeAlpha !== currentBlendEqAlpha) {
gl.blendEquationSeparate(modeRGB, modeAlpha);
currentBlendEqRGB = modeRGB;
currentBlendEqAlpha = modeAlpha;
}
},
reset: function () {
enabledCapabilities = {};
currentFrontFace = gl.getParameter(gl.FRONT_FACE);
currentCullFace = gl.getParameter(gl.CULL_FACE_MODE);
currentDepthMask = gl.getParameter(gl.DEPTH_WRITEMASK);
currentColorMask = gl.getParameter(gl.COLOR_WRITEMASK);
currentClearColor = gl.getParameter(gl.COLOR_CLEAR_VALUE);
currentBlendSrcRGB = gl.getParameter(gl.BLEND_SRC_RGB);
currentBlendDstRGB = gl.getParameter(gl.BLEND_DST_RGB);
currentBlendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);
currentBlendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);
currentBlendEqRGB = gl.getParameter(gl.BLEND_EQUATION_RGB);
currentBlendEqAlpha = gl.getParameter(gl.BLEND_EQUATION_ALPHA);
}
};
}
//# sourceMappingURL=state.js.map