pixi.js
Version:
PixiJS — The HTML5 Creation Engine =============
64 lines (63 loc) • 3.08 kB
TypeScript
/// <reference types="@webgpu/types" />
import { ExtensionType } from '../../../../extensions/Extensions';
import { STENCIL_MODES } from '../../shared/state/const';
import type { Topology } from '../../shared/geometry/const';
import type { Geometry } from '../../shared/geometry/Geometry';
import type { State } from '../../shared/state/State';
import type { System } from '../../shared/system/System';
import type { GPU } from '../GpuDeviceSystem';
import type { GpuRenderTarget } from '../renderTarget/GpuRenderTarget';
import type { GpuProgram } from '../shader/GpuProgram';
import type { WebGPURenderer } from '../WebGPURenderer';
/**
* A system that creates and manages the GPU pipelines.
*
* Caching Mechanism: At its core, the system employs a two-tiered caching strategy to minimize
* the redundant creation of GPU pipelines (or "pipes"). This strategy is based on generating unique
* keys that represent the state of the graphics settings and the specific requirements of the
* item being rendered. By caching these pipelines, subsequent draw calls with identical configurations
* can reuse existing pipelines instead of generating new ones.
*
* State Management: The system differentiates between "global" state properties (like color masks
* and stencil masks, which do not change frequently) and properties that may vary between draw calls
* (such as geometry, shaders, and blend modes). Unique keys are generated for both these categories
* using getStateKey for global state and getGraphicsStateKey for draw-specific settings. These keys are
* then then used to caching the pipe. The next time we need a pipe we can check
* the cache by first looking at the state cache and then the pipe cache.
* @memberof rendering
*/
export declare class PipelineSystem implements System {
/** @ignore */
static extension: {
readonly type: readonly [ExtensionType.WebGPUSystem];
readonly name: "pipeline";
};
private readonly _renderer;
protected CONTEXT_UID: number;
private _moduleCache;
private _bufferLayoutsCache;
private _pipeCache;
private readonly _pipeStateCaches;
private _gpu;
private _stencilState;
private _stencilMode;
private _colorMask;
private _multisampleCount;
private _depthStencilAttachment;
constructor(renderer: WebGPURenderer);
protected contextChange(gpu: GPU): void;
setMultisampleCount(multisampleCount: number): void;
setRenderTarget(renderTarget: GpuRenderTarget): void;
setColorMask(colorMask: number): void;
setStencilMode(stencilMode: STENCIL_MODES): void;
setPipeline(geometry: Geometry, program: GpuProgram, state: State, passEncoder: GPURenderPassEncoder): void;
getPipeline(geometry: Geometry, program: GpuProgram, state: State, topology?: Topology): GPURenderPipeline;
private _createPipeline;
private _getModule;
private _createModule;
private _generateBufferKey;
private _generateAttributeLocationsKey;
private _createVertexBufferLayouts;
private _updatePipeHash;
destroy(): void;
}