UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

131 lines 10.6 kB
import { TgdPainterGroup } from "../group.js"; import { webglBlendGet, webglBlendSet, webglDepthGet, webglDepthSet, webglCullGet, webglCullSet, webglStencilGet, webglStencilSet, } from "./../../utils/state/index.js"; import { webglLookup } from "./../../utils/index.js"; export class TgdPainterState extends TgdPainterGroup { static do(options, action) { const self = { color: { red: true, green: true, blue: true, alpha: true, }, }; const { onEnterActions, onExitActions } = prepareActions(self, options.gl, options); for (const action of onEnterActions) action(); action(); for (const action of onExitActions) action(); } static debug(gl) { const depth = webglDepthGet(gl); console.log("Depth:", { enabled: depth.enabled, func: webglLookup(depth.func), mask: depth.mask, range: [depth.rangeMin, depth.rangeMax], }); console.log("Cull:", webglCullGet(gl)); console.log("Blend:", webglBlendGet(gl)); } constructor(context, options = {}) { var _a; super(options.children); this.color = { red: true, green: true, blue: true, alpha: true, }; const { gl } = context; const { onEnterActions, onExitActions } = prepareActions(this, gl, options); this.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(); }; this.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(self, gl, options) { const { color, blend, depth, cull, stencil } = options; const onEnterActions = []; const onExitActions = []; const colorMask = figureOutColorMask(color); const [red, green, blue, alpha] = colorMask !== null && colorMask !== void 0 ? colorMask : [true, true, true, true]; self.color.red = red; self.color.green = green; self.color.blue = blue; self.color.alpha = alpha; if (Array.isArray(colorMask)) { let savedColorMask; onEnterActions.push(() => { savedColorMask = gl.getParameter(gl.COLOR_WRITEMASK); gl.colorMask(self.color.red, self.color.green, self.color.blue, self.color.alpha); }); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9zdGF0ZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRTFDLE9BQU8sRUFDSCxhQUFhLEVBRWIsYUFBYSxFQUNiLGFBQWEsRUFFYixhQUFhLEVBQ2IsWUFBWSxFQUVaLFlBQVksRUFFWixlQUFlLEVBQ2YsZUFBZSxHQUNsQixNQUFNLGtCQUFrQixDQUFBO0FBRXpCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFvQnhDLE1BQU0sT0FBTyxlQUFnQixTQUFRLGVBQWU7SUFDekMsTUFBTSxDQUFDLEVBQUUsQ0FDWixPQUtDLEVBQ0QsTUFBa0I7UUFFbEIsTUFBTSxJQUFJLEdBQUc7WUFDVCxLQUFLLEVBQUU7Z0JBQ0gsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLENBQUE7UUFDRCxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxHQUFHLGNBQWMsQ0FDcEQsSUFBSSxFQUNKLE9BQU8sQ0FBQyxFQUFFLEVBQ1YsT0FBTyxDQUNWLENBQUE7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGNBQWM7WUFBRSxNQUFNLEVBQUUsQ0FBQTtRQUM3QyxNQUFNLEVBQUUsQ0FBQTtRQUNSLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYTtZQUFFLE1BQU0sRUFBRSxDQUFBO0lBQ2hELENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQTBCO1FBQzFDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFD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