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