UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

101 lines 7.94 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9zdGF0ZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRTFDLE9BQU8sRUFDSCxhQUFhLEVBRWIsYUFBYSxFQUNiLGFBQWEsRUFFYixhQUFhLEVBQ2IsWUFBWSxFQUVaLFlBQVksRUFFWixlQUFlLEVBQ2YsZUFBZSxHQUNsQixNQUFNLGtCQUFrQixDQUFBO0FBcUJ6QixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUFlO0lBQ3pDLE1BQU0sQ0FBQyxFQUFFLENBQ1osT0FLQyxFQUNELE1BQWtCO1FBRWxCLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUNwRCxPQUFPLENBQUMsRUFBRSxFQUNWLE9BQU8sQ0FDVixDQUFBO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxjQUFjO1lBQUUsTUFBTSxFQUFFLENBQUE7UUFDN0MsTUFBTSxFQUFFLENBQUE7UUFDUixLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWE7WUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsWUFDSSxPQUFtQixFQUNuQixVQUEyQyxFQUFFOztRQUU3QyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNyRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUs7O2dCQUNmLE1BQUEsT0FBTyxDQUFDLE9BQU8sd0RBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUM5QixLQUFLLE1BQU0sQ0FBQyxJQUFJLGNBQWM7b0JBQUUsQ0FBQyxFQUFFLENBQUE7WUFDdkMsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSzs7Z0JBQ2QsS0FBSyxNQUFNLENBQUMsSUFBSSxhQUFhO29CQUFFLENBQUMsRUFBRSxDQUFBO2dCQUNsQyxNQUFBLE9BQU8sQ0FBQyxNQUFNLHdEQUFHLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1NBQ0osQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFBLE9BQU8sQ0FBQyxJQUFJLG1DQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ3BELENBQUM7Q0FDSjtBQUVELFNBQVMsa0JBQWtCLENBQ3ZCLEtBQWlFO0lBRWpFLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDbkQsSUFBSSxLQUFLLEtBQUssS0FBSztRQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN4RCxPQUFPLEtBQUssQ0FBQTtBQUNoQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ25CLEVBQTBCLEVBQzFCLE9BQXdDO0lBRXhDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQ3RELE1BQU0sY0FBYyxHQUFzQixFQUFFLENBQUE7SUFDNUMsTUFBTSxhQUFhLEdBQXNCLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLFNBQVMsR0FDWCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMzQixJQUFJLGNBR1csQ0FBQTtRQUNmLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLGNBQWMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBS2xELENBQUE7WUFDRCxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFDRixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNwQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLGFBQWQsY0FBYyxjQUFkLGNBQWMsR0FBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqRSxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxVQUE2QixDQUFBO1FBQ2pDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDOUIsYUFBYSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQTtRQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksVUFBVTtnQkFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ2pELENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELElBQUksS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLFVBQTZCLENBQUE7UUFDakMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDckIsVUFBVSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUM5QixhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxVQUFVO2dCQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDakQsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksU0FBMkIsQ0FBQTtRQUMvQixjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzVCLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDMUIsQ0FBQyxDQUFDLENBQUE7UUFDRixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNwQixJQUFJLFNBQVM7Z0JBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1YsSUFBSSxZQUFpQyxDQUFBO1FBQ3JDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDbEMsZUFBZSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksWUFBWTtnQkFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3ZELENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUE7QUFDNUMsQ0FBQyJ9