speedy-vision
Version:
GPU-accelerated Computer Vision for JavaScript
105 lines (104 loc) • 4.52 kB
TypeScript
/**
* Reads data from textures
*/
export class SpeedyTextureReader {
/**
* Read pixels to a Uint8Array, asynchronously, using a Pixel Buffer Object (PBO)
* It's assumed that the target texture is in the RGBA8 format
* @param {WebGL2RenderingContext} gl
* @param {WebGLBuffer} pbo
* @param {Uint8Array} outputBuffer with size >= width * height * 4
* @param {WebGLFramebuffer} fbo
* @param {GLint} x
* @param {GLint} y
* @param {GLsizei} width
* @param {GLsizei} height
* @returns {SpeedyPromise<void>}
*/
static _readPixelsViaPBO(gl: WebGL2RenderingContext, pbo: WebGLBuffer, outputBuffer: Uint8Array, fbo: WebGLFramebuffer, x: GLint, y: GLint, width: GLsizei, height: GLsizei): SpeedyPromise<void>;
/**
* Waits for a sync object to become signaled
* @param {WebGL2RenderingContext} gl
* @param {WebGLSync} sync
* @param {GLbitfield} flags may be gl.SYNC_FLUSH_COMMANDS_BIT or 0
* @param {Function} resolve
* @param {Function} reject
* @param {number} [pollInterval] in milliseconds
* @param {number} [remainingAttempts] for timeout
*/
static _clientWaitAsync(gl: WebGL2RenderingContext, sync: WebGLSync, flags: GLbitfield, resolve: Function, reject: Function, pollInterval?: number | undefined, remainingAttempts?: number | undefined): void;
/**
* Constructor
* @param {number} [numberOfBuffers]
*/
constructor(numberOfBuffers?: number | undefined);
/** @type {boolean} is this object initialized? */
_initialized: boolean;
/** @type {Uint8Array[]} pixel buffers for data transfers (each stores RGBA data) */
_pixelBuffer: Uint8Array[];
/** @type {WebGLBuffer[]} Pixel Buffer Objects (PBOs) */
_pbo: WebGLBuffer[];
/** @type {number} the index of the buffer that will be consumed in this frame */
_consumerIndex: number;
/** @type {number} the index of the buffer that will be produced next */
_producerIndex: number;
/** @type {SpeedyPromise<void>[]} producer-consumer promises */
_promise: SpeedyPromise<void>[];
/** @type {boolean[]} are the contents of the ith buffer being produced? */
_busy: boolean[];
/** @type {boolean[]} can the ith buffer be consumed? */
_ready: boolean[];
/**
* Initialize this object
* @param {SpeedyGPU} gpu
*/
init(gpu: SpeedyGPU): void;
/**
* Release resources
* @param {SpeedyGPU} gpu
* @returns {null}
*/
release(gpu: SpeedyGPU): null;
/**
* Read pixels from a texture, synchronously.
* You may optionally specify a (x,y,width,height) sub-rectangle.
* @param {SpeedyDrawableTexture} texture a texture with a FBO
* @param {number} [x]
* @param {number} [y]
* @param {number} [width]
* @param {number} [height]
* @returns {Uint8Array} pixels in the RGBA format
*/
readPixelsSync(texture: SpeedyDrawableTexture, x?: number | undefined, y?: number | undefined, width?: number | undefined, height?: number | undefined): Uint8Array;
/**
* Read pixels from a texture, asynchronously, with PBOs.
* You may optionally specify a (x,y,width,height) sub-rectangle.
* @param {SpeedyDrawableTexture} texture a texture with a FBO
* @param {number} [x]
* @param {number} [y]
* @param {number} [width]
* @param {number} [height]
* @param {boolean} [useBufferedDownloads] accelerate downloads by returning pixels from the texture of the previous call (useful for streaming)
* @returns {SpeedyPromise<Uint8Array>} resolves to an array of pixels in the RGBA format
*/
readPixelsAsync(texture: SpeedyDrawableTexture, x?: number | undefined, y?: number | undefined, width?: number | undefined, height?: number | undefined, useBufferedDownloads?: boolean | undefined): SpeedyPromise<Uint8Array>;
/**
* Reallocate the pixel buffers, so that they can hold the required number of bytes
* If the pixel buffers already have the required capacity, then nothing is done
* @param {number} size in bytes
*/
_reallocate(size: number): void;
/**
* Allocate PBOs
* @param {SpeedyGPU} gpu
*/
_allocatePBOs(gpu: SpeedyGPU): void;
/**
* Deallocate PBOs
* @param {SpeedyGPU} gpu
*/
_deallocatePBOs(gpu: SpeedyGPU): void;
}
import { SpeedyPromise } from "../core/speedy-promise";
import { SpeedyGPU } from "./speedy-gpu";
import { SpeedyDrawableTexture } from "./speedy-texture";