@awayjs/stage
Version:
Stage for AwayJS
66 lines • 2.62 kB
TypeScript
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