UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

50 lines 3.87 kB
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