@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
50 lines • 3.87 kB
JavaScript
import { TgdPainterGroup } from "./group.js";
/**
* Paint the children in a subset of the current viewport.
*/
export class TgdPainterScissor extends TgdPainterGroup {
constructor(context, options) {
super(options);
this.context = context;
/**
* X relative to current viewport from 0 (left) to 1 (right).
*/
this.x = 0;
/**
* Width relative to current viewport from 0 (0%) to 1 (100%).
*/
this.y = 0;
/**
* Width relative to current viewport from 0 (0%) to 1 (100%).
*/
this.width = 0;
/**
* Height relative to current viewport from 0 (0%) to 1 (100%).
*/
this.height = 0;
this.x = options.x;
this.y = options.y;
this.width = options.width;
this.height = options.height;
}
paint(time, delta) {
const { gl } = this.context;
const enabled = gl.getParameter(gl.SCISSOR_TEST);
const [curX, curY, curW, curH] = gl.getParameter(gl.SCISSOR_BOX);
const x = Math.round(this.x * gl.drawingBufferWidth);
const y = Math.round(this.y * gl.drawingBufferHeight);
const w = Math.round(this.width * gl.drawingBufferWidth);
const h = Math.round(this.height * gl.drawingBufferHeight);
gl.enable(gl.SCISSOR_TEST);
gl.scissor(x, y, w, h);
super.paint(time, delta);
if (enabled) {
gl.enable(gl.SCISSOR_TEST);
}
else {
gl.disable(gl.SCISSOR_TEST);
}
gl.scissor(curX, curY, curW, curH);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Npc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWludGVyL3NjaXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBMEIsTUFBTSxTQUFTLENBQUE7QUFxQmpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFrQmxELFlBQ3FCLE9BQXVDLEVBQ3hELE9BQWlDO1FBRWpDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUhHLFlBQU8sR0FBUCxPQUFPLENBQWdDO1FBbEI1RDs7V0FFRztRQUNJLE1BQUMsR0FBVyxDQUFDLENBQUE7UUFDcEI7O1dBRUc7UUFDSSxNQUFDLEdBQVcsQ0FBQyxDQUFBO1FBQ3BCOztXQUVHO1FBQ0ksVUFBSyxHQUFXLENBQUMsQ0FBQTtRQUN4Qjs7V0FFRztRQUNJLFdBQU0sR0FBVyxDQUFDLENBQUE7UUFPckIsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDN0IsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDM0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDaEQsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNwRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDckQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUMxRCxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUMxQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3hCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNKLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQy9CLENBQUM7UUFDRCxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDSiJ9