@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
347 lines • 10.1 kB
TypeScript
/**
* 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