/**
 * 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) 2026
 */
export class Sampler2D {
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static uint8clamped(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static uint8(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static uint16(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static uint32(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static int8(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static int16(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static int32(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static float16(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static float32(itemSize: number, width: number, height: number): Sampler2D;
    /**
     *
     * @param {number} itemSize
     * @param {number} width
     * @param {number} height
     * @return {Sampler2D}
     */
    static float64(itemSize: number, width: number, height: number): 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