UNPKG

speedy-vision

Version:

GPU-accelerated Computer Vision for JavaScript

183 lines (182 loc) 6.68 kB
/** * Get a buffer filled with zeros * @param {number} size number of bytes * @returns {Uint8Array} */ /** * A wrapper around WebGLTexture */ export class SpeedyTexture { /** * Create a WebGL texture * @param {WebGL2RenderingContext} gl * @param {number} width in pixels * @param {number} height in pixels * @param {number} format usually gl.RGBA * @param {number} internalFormat usually gl.RGBA8 * @param {number} dataType usually gl.UNSIGNED_BYTE * @param {number} filter usually gl.NEAREST or gl.LINEAR * @param {number} wrap gl.REPEAT, gl.MIRRORED_REPEAT or gl.CLAMP_TO_EDGE * @returns {WebGLTexture} */ static _createTexture(gl: WebGL2RenderingContext, width: number, height: number, format: number, internalFormat: number, dataType: number, filter: number, wrap: number): WebGLTexture; /** * Upload pixel data to a WebGL texture * @param {WebGL2RenderingContext} gl * @param {WebGLTexture} texture * @param {GLsizei} width texture width * @param {GLsizei} height texture height * @param {TexImageSource} pixels * @param {GLint} lod mipmap level-of-detail * @param {number} format * @param {number} internalFormat * @param {number} dataType * @returns {WebGLTexture} texture */ static _upload(gl: WebGL2RenderingContext, texture: WebGLTexture, width: GLsizei, height: GLsizei, pixels: TexImageSource, lod: GLint, format: number, internalFormat: number, dataType: number): WebGLTexture; /** * Constructor * @param {WebGL2RenderingContext} gl * @param {number} width texture width in pixels * @param {number} height texture height in pixels * @param {number} [format] * @param {number} [internalFormat] * @param {number} [dataType] * @param {number} [filter] * @param {number} [wrap] */ constructor(gl: WebGL2RenderingContext, width: number, height: number, format?: number | undefined, internalFormat?: number | undefined, dataType?: number | undefined, filter?: number | undefined, wrap?: number | undefined); /** @type {WebGL2RenderingContext} rendering context */ _gl: WebGL2RenderingContext; /** @type {number} width of the texture */ _width: number; /** @type {number} height of the texture */ _height: number; /** @type {boolean} have we generated mipmaps for this texture? */ _hasMipmaps: boolean; /** @type {number} texture format */ _format: number; /** @type {number} internal format (usually a sized format) */ _internalFormat: number; /** @type {number} data type */ _dataType: number; /** @type {number} texture filtering (min & mag) */ _filter: number; /** @type {number} texture wrapping */ _wrap: number; /** @type {WebGLTexture} internal texture object */ _glTexture: WebGLTexture; /** * Releases the texture * @returns {null} */ release(): null; /** * Upload pixel data to the texture. The texture will be resized if needed. * @param {TexImageSource} pixels * @param {number} [width] in pixels * @param {number} [height] in pixels * @return {SpeedyTexture} this */ upload(pixels: TexImageSource, width?: number | undefined, height?: number | undefined): SpeedyTexture; /** * Clear the texture * @returns {this} */ clear(): this; /** * Resize this texture. Its content will be lost! * @param {number} width new width, in pixels * @param {number} height new height, in pixels * @returns {this} */ resize(width: number, height: number): this; /** * Generate mipmap * @param {SpeedyDrawableTexture[]} [mipmap] custom texture for each mip level * @returns {SpeedyTexture} this */ generateMipmaps(mipmap?: SpeedyDrawableTexture[] | undefined): SpeedyTexture; /** * Invalidates previously generated mipmap, if any */ discardMipmaps(): void; /** * Does this texture have a mipmap? * @returns {boolean} */ hasMipmaps(): boolean; /** * Has this texture been released? * @returns {boolean} */ isReleased(): boolean; /** * The internal WebGLTexture * @returns {WebGLTexture} */ get glTexture(): WebGLTexture; /** * The width of the texture, in pixels * @returns {number} */ get width(): number; /** * The height of the texture, in pixels * @returns {number} */ get height(): number; /** * The WebGL Context * @returns {WebGL2RenderingContext} */ get gl(): WebGL2RenderingContext; } /** * A SpeedyTexture with a framebuffer */ export class SpeedyDrawableTexture extends SpeedyTexture { /** * Create a FBO associated with an existing texture * @param {WebGL2RenderingContext} gl * @param {WebGLTexture} texture * @returns {WebGLFramebuffer} */ static _createFramebuffer(gl: WebGL2RenderingContext, texture: WebGLTexture): WebGLFramebuffer; /** * Copy data from a framebuffer to a texture * @param {WebGL2RenderingContext} gl * @param {WebGLFramebuffer} fbo we'll read the data from this * @param {WebGLTexture} texture destination texture * @param {GLint} x xpos (where to start copying) * @param {GLint} y ypos (where to start copying) * @param {GLsizei} width width of the texture * @param {GLsizei} height height of the texture * @param {GLint} [lod] mipmap level-of-detail * @returns {WebGLTexture} texture */ static _copyToTexture(gl: WebGL2RenderingContext, fbo: WebGLFramebuffer, texture: WebGLTexture, x: GLint, y: GLint, width: GLsizei, height: GLsizei, lod?: number | undefined): WebGLTexture; /** @type {WebGLFramebuffer} framebuffer */ _glFbo: WebGLFramebuffer; /** * The internal WebGLFramebuffer * @returns {WebGLFramebuffer} */ get glFbo(): WebGLFramebuffer; /** * Copy this texture into another * (you may have to discard the mipmaps after calling this function) * @param {SpeedyTexture} texture target texture * @param {number} [lod] level-of-detail of the target texture */ copyTo(texture: SpeedyTexture, lod?: number | undefined): void; /** * Clear the texture to a color * @param {number} r red component, a value in [0,1] * @param {number} g green component, a value in [0,1] * @param {number} b blue component, a value in [0,1] * @param {number} a alpha component, a value in [0,1] * @returns {this} */ clearToColor(r: number, g: number, b: number, a: number): this; }