UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

347 lines • 10.1 kB
/** * Data Texture class, providing an abstraction around 2d numerical arrays, mostly for sampling purposes * Inspired by OpenGL's glsl sampler2d API * @class * @author Alex Goldring * @copyright Company Named Limited (c) 2025 */ export class Sampler2D { /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static uint8clamped(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static uint8(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static uint16(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static uint32(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static int8(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static int16(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static int32(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static float32(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {int} itemSize * @param {int} width * @param {int} height * @return {Sampler2D} */ static float64(itemSize: int, width: int, height: int): Sampler2D; /** * * @param {ArrayLike<number>|number[]|Uint8ClampedArray|Uint8Array|Uint16Array|Uint32Array|Int8Array|Int16Array|Int32Array|Float32Array|Float64Array} data * @param {number} [itemSize] * @param {number} [width] * @param {number} [height] * @constructor */ constructor(data?: ArrayLike<number> | number[] | Uint8ClampedArray | Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array, itemSize?: number, width?: number, height?: number); /** * * @type {number} */ width: number; /** * * @type {number} */ height: number; /** * Number of channels * @type {number} */ itemSize: number; /** * * @type {number[]|Uint8ClampedArray|Uint8Array|Uint16Array|Uint32Array|Int8Array|Int16Array|Int32Array|Float32Array|Float64Array} */ data: number[] | Uint8ClampedArray | Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array; /** * Used to tracking changes * @type {number} */ version: number; /** * * @param {number} u * @param {number} v * @param {number[]} result */ sampleCatmullRomUV(u: number, v: number, result: number[]): void; /** * * @param {number} u * @param {number} v * @param {number} channel * @returns {number} */ sampleChannelCatmullRomUV(u: number, v: number, channel: number): number; /** * * @see https://gist.github.com/TheRealMJP/c83b8c0f46b63f3a88a5986f4fa982b1 * @param {number} x * @param {number} y * @param {number} channel * @returns {number} */ sampleChannelCatmullRom(x: number, y: number, channel: number): number; /** * * @param {number} u * @param {number} v * @param {number[]} result */ sampleBicubicUV(u: number, v: number, result: number[]): void; /** * * @param {number} x * @param {number} y * @param {number[]|Float32Array|Float64Array} result * @param {number} result_offset */ sampleBicubic(x: number, y: number, result: number[] | Float32Array | Float64Array, result_offset: number): void; /** * * @param {number} u * @param {number} v * @param {number} channel * @returns {number} */ sampleChannelBicubicUV(u: number, v: number, channel: number): number; /** * * Bicubic-filtered sampling, note values can be negative due to the nature of the cubic curve * @param {number} x * @param {number} y * @param {number} channel * @returns {number} */ sampleChannelBicubic(x: number, y: number, channel: number): number; /** * * @param {number} u * @param {number} v * @param {number[]|Float32Array} result * @param {number} result_offset */ sampleBilinearUV(u: number, v: number, result: number[] | Float32Array, result_offset?: number): void; /** * * @param {number} x * @param {number} y * @param {number[]|Float32Array|Float64Array} result * @param {number} result_offset */ sampleBilinear(x: number, y: number, result: number[] | Float32Array | Float64Array, result_offset?: number): void; /** * * @param {number} u * @param {number} v * @param {number} channel * @return {number} */ sampleChannelBilinearUV(u: number, v: number, channel: number): number; /** * * @param {number} x * @param {number} y * @param {number} channel * @returns {number} */ sampleChannelBilinear(x: number, y: number, channel: number): number; /** * * @param {number} u * @param {number} v * @param {number[]|ArrayLike<number>} result */ sampleNearestUV(u: number, v: number, result: number[] | ArrayLike<number>): void; /** * * @param {number} x * @param {number} y * @param {number} channel * @returns {number} */ readChannel(x: number, y: number, channel: number): number; /** * * @param {number} x * @param {number} y * @param {number[]} result */ read(x: number, y: number, result: number[]): void; /** * * @param {number} x * @param {number} y * @param {number[]|ArrayLike<number>} texel */ write(x: number, y: number, texel: number[] | ArrayLike<number>): void; /** * * @param {number} x * @param {number} y * @returns {number} */ point2index(x: number, y: number): number; /** * * @param {number} index * @param {Vector2} result */ index2point(index: number, result: Vector2): void; /** * Copy a patch from another sampler * @param {Sampler2D} source where to copy from * @param {Number} sourceX where to start reading from, X coordinate * @param {Number} sourceY where to start reading from, X coordinate * @param {Number} destinationX where to start writing to, X coordinate * @param {Number} destinationY where to start writing to, X coordinate * @param {Number} width size of the patch that is to be copied * @param {Number} height size of the patch that is to be copied */ copy(source: Sampler2D, sourceX: number, sourceY: number, destinationX: number, destinationY: number, width: number, height: number): void; /** * Fill data values with zeros for a given area * Specialized version of `fill` method, optimized for speed * @param {Number} x * @param {Number} y * @param {Number} width * @param {Number} height */ zeroFill(x: number, y: number, width: number, height: number): void; /** * * @param {number} channel_index * @param {number} value */ channelFill(channel_index: number, value: number): void; /** * * @param {number} x * @param {number} y * @param {number} width * @param {number} height * @param {Array.<number>} value */ fill(x: number, y: number, width: number, height: number, value: Array<number>): void; /** * Set channel value of a specific texel * @param {number} x * @param {number} y * @param {number} channel * @param {number} value */ writeChannel(x: number, y: number, channel: number, value: number): void; /** * Traverses area inside a circle * NOTE: Based on palm3d answer on stack overflow: https://stackoverflow.com/questions/1201200/fast-algorithm-for-drawing-filled-circles * @param {number} centerX * @param {number} centerY * @param {number} radius * @param {function(x:number,y:number, sampler:Sampler2D)} visitor */ traverseCircle(centerX: number, centerY: number, radius: number, visitor: any): void; /** * * @param {number} x * @param {number} y * @param {boolean} [preserveData=true] */ resize(x: number, y: number, preserveData?: boolean): void; /** * Estimate memory requirement of the object * @return {number} */ computeByteSize(): number; /** * * @param {Sampler2D} other * @return {boolean} */ equals(other: Sampler2D): boolean; /** * * @return {number} */ hash(): number; /** * @returns {Sampler2D} */ clone(): Sampler2D; toJSON(): { height: number; width: number; itemSize: number; type: import("../../../../core/binary/type/BinaryDataType.js").BinaryDataType; data: string; }; fromJSON({ height, width, itemSize, type, data }: { height: any; width: any; itemSize: any; type: any; data: any; }): void; /** * @readonly * @type {boolean} */ readonly isSampler2D: boolean; } export namespace Sampler2D { let typeName: string; } //# sourceMappingURL=Sampler2D.d.ts.map