@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
102 lines • 8.17 kB
JavaScript
import { debug, highlightEnum } from "./../../debug/debug.js";
import { WebglEnumBlendEquation, WebglEnumBlendFunction } from "./../../types/index.js";
export const webglPresetBlend = {
off: {
enabled: false,
equationColor: WebglEnumBlendEquation.FUNC_ADD,
functionColorSrc: WebglEnumBlendFunction.SRC_ALPHA,
functionColorDst: WebglEnumBlendFunction.ONE_MINUS_SRC_ALPHA,
equationAlpha: WebglEnumBlendEquation.FUNC_ADD,
functionAlphaSrc: WebglEnumBlendFunction.ONE,
functionAlphaDst: WebglEnumBlendFunction.ZERO,
},
alpha: {
enabled: true,
equationColor: WebglEnumBlendEquation.FUNC_ADD,
functionColorSrc: WebglEnumBlendFunction.SRC_ALPHA,
functionColorDst: WebglEnumBlendFunction.ONE_MINUS_SRC_ALPHA,
equationAlpha: WebglEnumBlendEquation.FUNC_ADD,
functionAlphaSrc: WebglEnumBlendFunction.ONE,
functionAlphaDst: WebglEnumBlendFunction.ZERO,
},
add: {
enabled: true,
equationColor: WebglEnumBlendEquation.FUNC_ADD,
functionColorSrc: WebglEnumBlendFunction.ONE,
functionColorDst: WebglEnumBlendFunction.ONE,
equationAlpha: WebglEnumBlendEquation.FUNC_ADD,
functionAlphaSrc: WebglEnumBlendFunction.ONE,
functionAlphaDst: WebglEnumBlendFunction.ZERO,
},
premultipliedAlpha: {
enabled: true,
equationColor: WebglEnumBlendEquation.FUNC_ADD,
functionColorSrc: WebglEnumBlendFunction.ONE,
functionColorDst: WebglEnumBlendFunction.ONE_MINUS_SRC_ALPHA,
equationAlpha: WebglEnumBlendEquation.FUNC_ADD,
functionAlphaSrc: WebglEnumBlendFunction.ONE,
functionAlphaDst: WebglEnumBlendFunction.ZERO,
},
};
export function webglBlendSet(gl, blend) {
if (blend.enabled)
gl.enable(gl.BLEND);
else
gl.disable(gl.BLEND);
gl.blendEquationSeparate(blend.equationColor, blend.equationAlpha);
gl.blendFuncSeparate(blend.functionColorSrc, blend.functionColorDst, blend.functionAlphaSrc, blend.functionAlphaDst);
}
export function webglBlendGet(gl) {
return {
enabled: Boolean(gl.getParameter(gl.BLEND)),
equationAlpha: gl.getParameter(gl.BLEND_EQUATION_ALPHA),
equationColor: gl.getParameter(gl.BLEND_EQUATION_RGB),
functionAlphaDst: gl.getParameter(gl.BLEND_DST_ALPHA),
functionAlphaSrc: gl.getParameter(gl.BLEND_SRC_ALPHA),
functionColorDst: gl.getParameter(gl.BLEND_DST_RGB),
functionColorSrc: gl.getParameter(gl.BLEND_SRC_ALPHA),
};
}
export function webglBlendExec(gl, blend, action) {
const currentState = webglBlendGet(gl);
webglBlendSet(gl, blend);
try {
action();
}
finally {
webglBlendSet(gl, currentState);
}
}
export function webglDebugBlend(gl, caption = "Blend enabled:") {
console.log(caption);
const blend = webglBlendGet(gl);
debug([
[caption, blend.enabled, "\n"],
[
{ cls: "code" },
[
"gl.",
blend.enabled ? "enable" : "disable",
"(",
highlightEnum("BLEND"),
")\n",
],
[
"gl.blendEquationSeparate(",
highlightEnum(blend.equationColor),
", ",
highlightEnum(blend.equationAlpha),
")\n",
],
[
"gl.blendFuncSeparate(\n",
[" ", highlightEnum(blend.functionColorSrc), ",\n"],
[" ", highlightEnum(blend.functionColorDst), ",\n"],
[" ", highlightEnum(blend.functionAlphaSrc), ",\n"],
[" ", highlightEnum(blend.functionAlphaDst), "\n"],
")\n",
],
],
]);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxlbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvc3RhdGUvYmxlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFZM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBRXpCO0lBQ0EsR0FBRyxFQUFFO1FBQ0QsT0FBTyxFQUFFLEtBQUs7UUFDZCxhQUFhLEVBQUUsc0JBQXNCLENBQUMsUUFBUTtRQUM5QyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxTQUFTO1FBQ2xELGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLG1CQUFtQjtRQUM1RCxhQUFhLEVBQUUsc0JBQXNCLENBQUMsUUFBUTtRQUM5QyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxHQUFHO1FBQzVDLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLElBQUk7S0FDaEQ7SUFDRCxLQUFLLEVBQUU7UUFDSCxPQUFPLEVBQUUsSUFBSTtRQUNiLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRO1FBQzlDLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLFNBQVM7UUFDbEQsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsbUJBQW1CO1FBQzVELGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRO1FBQzlDLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLEdBQUc7UUFDNUMsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsSUFBSTtLQUNoRDtJQUNELEdBQUcsRUFBRTtRQUNELE9BQU8sRUFBRSxJQUFJO1FBQ2IsYUFBYSxFQUFFLHNCQUFzQixDQUFDLFFBQVE7UUFDOUMsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsR0FBRztRQUM1QyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxHQUFHO1FBQzVDLGFB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