UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

68 lines 5.04 kB
import { isNumber } from "./../types/guards.js"; /** * drawElements() can be used with 8, 16 or 32 unsinged ints arrays. * But the function does not know what type was passed as argument. * You need to specify the type: UNSIGNED_BYTE, UNSIGNED_SHORT or * UNSIGNED_INT. * * This helper function gives you the type of the array passed as argument. */ export function webglElementTypeFromTypedArray(typedArray) { if (typedArray instanceof Uint8Array) return WebGL2RenderingContext.UNSIGNED_BYTE; if (typedArray instanceof Uint16Array) return WebGL2RenderingContext.UNSIGNED_SHORT; if (typedArray instanceof Uint32Array) return WebGL2RenderingContext.UNSIGNED_INT; throw new Error("[webglElementTypeFromDataView] drawElements() and drawElementsInstanced() can only be fed with Uint8Array, Uint16Array or Uint32Array!"); } /** * @returns A type array that uses the less possible space in memory. * * For instance, if `arr` has no value above 255, we can return `Uint8Array` * because a byte will suffice to store each value. */ export function webglElementTypeArrayFromNumberArray(arr) { let max = 0; for (const val of arr) max = Math.max(max, val); if (max <= 0xff) return new Uint8Array(arr); if (max <= 0xffff) return new Uint16Array(arr); return new Uint32Array(arr); } export function webglTypedArrayFromBufferSource(bufferSource, type) { const buffer = bufferSource instanceof ArrayBuffer ? bufferSource : bufferSource.buffer; switch (type) { case 5120: // BYTE return new Int8Array(buffer); case 5121: // UNSIGNED_BYTE return new Uint8Array(buffer); case 5122: // SHORT return new Int16Array(buffer); case 5123: // UNSIGNED_SHORT return new Uint16Array(buffer); case 5125: // UNSIGNED_INT return new Uint32Array(buffer); case 5126: // FLOAT return new Float32Array(buffer); default: throw new Error(`Don't know how to create a TypedArray for type "${webglLookup(type)}"!`); } } export function webglLookup(type) { if (!isNumber(type)) return type; if (gl) { for (const key in gl) { const value = gl[key]; if (value === type) return key; } } return `${type}`; } const canvas = globalThis.document.createElement("canvas"); const gl = canvas.getContext("webgl2"); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViZ2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvd2ViZ2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRTVDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQUMsVUFBbUM7SUFDOUUsSUFBSSxVQUFVLFlBQVksVUFBVTtRQUFFLE9BQU8sc0JBQXNCLENBQUMsYUFBYSxDQUFBO0lBQ2pGLElBQUksVUFBVSxZQUFZLFdBQVc7UUFBRSxPQUFPLHNCQUFzQixDQUFDLGNBQWMsQ0FBQTtJQUNuRixJQUFJLFVBQVUsWUFBWSxXQUFXO1FBQUUsT0FBTyxzQkFBc0IsQ0FBQyxZQUFZLENBQUE7SUFFakYsTUFBTSxJQUFJLEtBQUssQ0FDWCx3SUFBd0ksQ0FDM0ksQ0FBQTtBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxHQUFhO0lBQzlELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUNYLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRztRQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvQyxJQUFJLEdBQUcsSUFBSSxJQUFJO1FBQUUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQyxJQUFJLEdBQUcsSUFBSSxNQUFNO1FBQUUsT0FBTyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QyxPQUFPLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQy9CLENBQUM7QUFFRCxNQUFNLFVBQVUsK0JBQStCLENBQUMsWUFBMEIsRUFBRSxJQUFZO0lBQ3BGLE1BQU0sTUFBTSxHQUFHLFlBQVksWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQTtJQUN2RixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ1gsS0FBSyxJQUFJLEVBQUUsT0FBTztZQUNkLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEMsS0FBSyxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDakMsS0FBSyxJQUFJLEVBQUUsUUFBUTtZQUNmLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDakMsS0FBSyxJQUFJLEVBQUUsaUJBQWlCO1lBQ3hCLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEMsS0FBSyxJQUFJLEVBQUUsZUFBZTtZQUN0QixPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xDLEtBQUssSUFBSSxFQUFFLFFBQVE7WUFDZixPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25DO1lBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBMkM7SUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQW9DLENBQUE7SUFFaEUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNMLEtBQUssTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQW1DLENBQUMsQ0FBQTtZQUNyRCxJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUFFLE9BQU8sR0FBbUMsQ0FBQTtRQUNsRSxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sR0FBRyxJQUFJLEVBQWtDLENBQUE7QUFDcEQsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzFELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUEifQ==