UNPKG

@awayjs/stage

Version:
66 lines 2.62 kB
import { ShaderRegisterElement } from './ShaderRegisterElement'; /** * RegisterPool is used by the shader compilers process to keep track of which registers of a certain type are * currently used and should not be allowed to be written to. Either entire registers can be requested and locked, * or single components (x, y, z, w) of a single register. * It is used by ShaderRegisterCache to track usages of individual register types. * * @see away.materials.ShaderRegisterCache */ export declare class RegisterPool { private static _regPool; private static _regCompsPool; private _vectorRegisters; private _registerComponents; private _regName; private _usedSingleCount; private _usedVectorCount; private _regCount; private _persistent; /** * Creates a new RegisterPool object. * @param regName The base name of the register type ("ft" for fragment temporaries, "vc" for vertex constants, etc) * @param regCount The amount of available registers of this type. * @param persistent Whether or not registers, once reserved, can be freed again. For example, temporaries are not persistent, but constants are. */ constructor(regName: string, regCount: number, persistent?: boolean); /** * Retrieve an entire vector register that's still available. */ requestFreeVectorReg(): ShaderRegisterElement; /** * Retrieve a single vector component that's still available. */ requestFreeRegComponent(): ShaderRegisterElement; /** * Marks a register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage * has been called usageCount times again. * @param register The register to mark as used. * @param usageCount The amount of usages to add. */ addUsage(register: ShaderRegisterElement, usageCount: number): void; /** * Removes a usage from a register. When usages reach 0, the register is freed again. * @param register The register for which to remove a usage. */ removeUsage(register: ShaderRegisterElement): void; /** * Disposes any resources used by the current RegisterPool object. */ dispose(): void; /** * Indicates whether or not any registers are in use. */ hasRegisteredRegs(): boolean; /** * Initializes all registers. */ private initRegisters; private static _initPool; /** * Check if the temp register is either used for single or vector use */ private isRegisterUsed; private _initArray; } //# sourceMappingURL=RegisterPool.d.ts.map