@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
101 lines • 7.94 kB
JavaScript
import { TgdPainterGroup } from "../group.js";
import { webglBlendGet, webglBlendSet, webglDepthGet, webglDepthSet, webglCullGet, webglCullSet, webglStencilGet, webglStencilSet, } from "./../../utils/state/index.js";
export class TgdPainterState extends TgdPainterGroup {
static do(options, action) {
const { onEnterActions, onExitActions } = prepareActions(options.gl, options);
for (const action of onEnterActions)
action();
action();
for (const action of onExitActions)
action();
}
constructor(context, options = {}) {
var _a;
const { gl } = context;
const { onEnterActions, onExitActions } = prepareActions(gl, options);
super(options.children, {
onEnter(time, delay) {
var _a;
(_a = options.onEnter) === null || _a === void 0 ? void 0 : _a.call(options, time, delay);
for (const f of onEnterActions)
f();
},
onExit(time, delay) {
var _a;
for (const f of onExitActions)
f();
(_a = options.onExit) === null || _a === void 0 ? void 0 : _a.call(options, time, delay);
},
});
this.name = (_a = options.name) !== null && _a !== void 0 ? _a : `State/${this.name}`;
}
}
function figureOutColorMask(color) {
if (color === true)
return [true, true, true, true];
if (color === false)
return [false, false, false, false];
return color;
}
function prepareActions(gl, options) {
const { color, blend, depth, cull, stencil } = options;
const onEnterActions = [];
const onExitActions = [];
const colorMask = figureOutColorMask(color);
if (Array.isArray(colorMask)) {
let savedColorMask;
onEnterActions.push(() => {
savedColorMask = gl.getParameter(gl.COLOR_WRITEMASK);
gl.colorMask(...colorMask);
});
onExitActions.push(() => {
gl.colorMask(...(savedColorMask !== null && savedColorMask !== void 0 ? savedColorMask : [true, true, true, true]));
});
}
if (blend) {
let savedBlend;
onEnterActions.push(() => {
savedBlend = webglBlendGet(gl);
webglBlendSet(gl, blend);
});
onExitActions.push(() => {
if (savedBlend)
webglBlendSet(gl, savedBlend);
});
}
if (depth) {
let savedDepth;
onEnterActions.push(() => {
savedDepth = webglDepthGet(gl);
webglDepthSet(gl, depth);
});
onExitActions.push(() => {
if (savedDepth)
webglDepthSet(gl, savedDepth);
});
}
if (cull) {
let savedCull;
onEnterActions.push(() => {
savedCull = webglCullGet(gl);
webglCullSet(gl, cull);
});
onExitActions.push(() => {
if (savedCull)
webglCullSet(gl, savedCull);
});
}
if (stencil) {
let savedStencil;
onEnterActions.push(() => {
savedStencil = webglStencilGet(gl);
webglStencilSet(gl, stencil);
});
onExitActions.push(() => {
if (savedStencil)
webglStencilSet(gl, savedStencil);
});
}
return { onEnterActions, onExitActions };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9zdGF0ZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRTFDLE9BQU8sRUFDSCxhQUFhLEVBRWIsYUFBYSxFQUNiLGFBQWEsRUFFYixhQUFhLEVBQ2IsWUFBWSxFQUVaLFlBQVksRUFFWixlQUFlLEVBQ2YsZUFBZSxHQUNsQixNQUFNLGtCQUFrQixDQUFBO0FBcUJ6QixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUFlO0lBQ3pDLE1BQU0sQ0FBQyxFQUFFLENBQ1osT0FLQyxFQUNELE1BQWtCO1FBRWxCLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUNwRCxPQUFPLENBQUMsRUFBRSxFQUNWLE9BQU8sQ0FDVixDQUFBO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxjQUFjO1lBQUUsTUFBTSxFQUFFLENBQUE7UUFDN0MsTUFBTSxFQUFFLENBQUE7UUFDUixLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWE7WUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsWUFDSSxPQUFtQixFQUNuQixVQUEyQyxFQUFFOztRQUU3QyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNyRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUs7O2dCQUNmLE1BQUEsT0FBTyxDQUFDLE9BQU8sd0RBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUM5QixLQUFLLE1BQU0sQ0FBQyxJQUFJLGNBQWM7b0JBQUUsQ0FBQyxFQUFFLENBQUE7WUFD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