@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
131 lines • 10.6 kB
JavaScript
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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