UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

32 lines 3.21 kB
import { tgdCanvasCreateWithContext2D } from "./canvas.js"; /** * Creating a Pixel Buffer Object is usefull to store big images into the GPU. * * @param gl * @param source * @returns Handle of the created PBO. */ export function tgdPixelBufferObjectCreate(gl, source, width, height) { const { data, width: w, height: h } = getData(source, width, height); const buffer = gl.createBuffer(); if (!buffer) throw new Error("Unable to create a WebGL2 pixel buffer buffer!"); gl.bindBuffer(gl.PIXEL_UNPACK_BUFFER, buffer); gl.bufferData(gl.PIXEL_UNPACK_BUFFER, data, gl.STATIC_DRAW); gl.pixelStorei(gl.UNPACK_ROW_LENGTH, w); gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, h); return buffer; } function getData(source, width, height) { if (source instanceof Uint8ClampedArray) { if (typeof width === "number" && typeof height === "number") { return { data: source, width, height }; } throw new Error("If you give a Uint8Array to tgdPixelBufferObjectCreate(), you must specify both width and height arguments!"); } const { width: w, height: h } = source; const { ctx } = tgdCanvasCreateWithContext2D(w, h); ctx.drawImage(source, 0, 0); return { data: ctx.getImageData(0, 0, w, h).data, width: w, height: h }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Biby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFdkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxFQUEwQixFQUMxQixNQUFnRSxFQUNoRSxLQUFjLEVBQ2QsTUFBZTtJQUVmLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDcEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ2hDLElBQUksQ0FBQyxNQUFNO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0lBRXJFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDM0QsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDdkMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDekMsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUNaLE1BQWdFLEVBQ2hFLEtBQWMsRUFDZCxNQUFlO0lBRWYsSUFBSSxNQUFNLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUE7UUFDMUMsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ1gsNkdBQTZHLENBQ2hILENBQUE7SUFDTCxDQUFDO0lBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQTtJQUN0QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsNEJBQTRCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMzQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFBO0FBQzNFLENBQUMifQ==