86 lines
3.2 KiB
TypeScript
86 lines
3.2 KiB
TypeScript
import { ExtensionType } from '../../../../extensions/Extensions';
|
|
import { GlBuffer } from './GlBuffer';
|
|
import type { Buffer } from '../../shared/buffer/Buffer';
|
|
import type { System } from '../../shared/system/System';
|
|
import type { WebGLRenderer } from '../WebGLRenderer';
|
|
/**
|
|
* System plugin to the renderer to manage buffers.
|
|
*
|
|
* WebGL uses Buffers as a way to store objects to the GPU.
|
|
* This system makes working with them a lot easier.
|
|
*
|
|
* Buffers are used in three main places in WebGL
|
|
* - geometry information
|
|
* - Uniform information (via uniform buffer objects - a WebGL 2 only feature)
|
|
* - Transform feedback information. (WebGL 2 only feature)
|
|
*
|
|
* This system will handle the binding of buffers to the GPU as well as uploading
|
|
* them. With this system, you never need to work directly with GPU buffers, but instead work with
|
|
* the Buffer class.
|
|
* @class
|
|
* @memberof rendering
|
|
*/
|
|
export declare class GlBufferSystem implements System {
|
|
/** @ignore */
|
|
static extension: {
|
|
readonly type: readonly [ExtensionType.WebGLSystem];
|
|
readonly name: "buffer";
|
|
};
|
|
private _gl;
|
|
private _gpuBuffers;
|
|
/** Cache keeping track of the base bound buffer bases */
|
|
private readonly _boundBufferBases;
|
|
private _renderer;
|
|
/**
|
|
* @param {Renderer} renderer - The renderer this System works for.
|
|
*/
|
|
constructor(renderer: WebGLRenderer);
|
|
/**
|
|
* @ignore
|
|
*/
|
|
destroy(): void;
|
|
/** Sets up the renderer context and necessary buffers. */
|
|
protected contextChange(): void;
|
|
getGlBuffer(buffer: Buffer): GlBuffer;
|
|
/**
|
|
* This binds specified buffer. On first run, it will create the webGL buffers for the context too
|
|
* @param buffer - the buffer to bind to the renderer
|
|
*/
|
|
bind(buffer: Buffer): void;
|
|
/**
|
|
* Binds an uniform buffer to at the given index.
|
|
*
|
|
* A cache is used so a buffer will not be bound again if already bound.
|
|
* @param buffer - the buffer to bind
|
|
* @param index - the base index to bind it to.
|
|
*/
|
|
bindBufferBase(buffer: Buffer, index: number): void;
|
|
/**
|
|
* Binds a buffer whilst also binding its range.
|
|
* This will make the buffer start from the offset supplied rather than 0 when it is read.
|
|
* @param buffer - the buffer to bind
|
|
* @param index - the base index to bind at, defaults to 0
|
|
* @param offset - the offset to bind at (this is blocks of 256). 0 = 0, 1 = 256, 2 = 512 etc
|
|
*/
|
|
bindBufferRange(buffer: Buffer, index?: number, offset?: number): void;
|
|
/**
|
|
* Will ensure the data in the buffer is uploaded to the GPU.
|
|
* @param {Buffer} buffer - the buffer to update
|
|
*/
|
|
updateBuffer(buffer: Buffer): GlBuffer;
|
|
/** dispose all WebGL resources of all managed buffers */
|
|
destroyAll(): void;
|
|
/**
|
|
* Disposes buffer
|
|
* @param {Buffer} buffer - buffer with data
|
|
* @param {boolean} [contextLost=false] - If context was lost, we suppress deleteVertexArray
|
|
*/
|
|
protected onBufferDestroy(buffer: Buffer, contextLost?: boolean): void;
|
|
/**
|
|
* creates and attaches a GLBuffer object tied to the current context.
|
|
* @param buffer
|
|
* @protected
|
|
*/
|
|
protected createGLBuffer(buffer: Buffer): GlBuffer;
|
|
}
|