diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 04e21338dc..d10ec1d749 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -40,6 +40,7 @@ export { Downsampling } from "./enums/Downsampling"; export { ColorSpace } from "./enums/ColorSpace"; export { BackgroundTextureFillMode } from "./enums/BackgroundTextureFillMode"; export { XRManager } from "./xr/XRManager"; +export * from "./utils/index"; export * from "./input/index"; export * from "./lighting/index"; export * from "./shadow/index"; diff --git a/packages/core/src/utils/ClearableObjectPool.ts b/packages/core/src/utils/ClearableObjectPool.ts index ef3e1d4c5d..a48ef7e222 100644 --- a/packages/core/src/utils/ClearableObjectPool.ts +++ b/packages/core/src/utils/ClearableObjectPool.ts @@ -11,6 +11,9 @@ export class ClearableObjectPool extends ObjectPool { this._elements = []; } + /** + * Get an object. + */ get(): T { const { _usedElementCount: usedElementCount, _elements: elements } = this; this._usedElementCount++; @@ -23,6 +26,9 @@ export class ClearableObjectPool extends ObjectPool { } } + /** + * Clear used object count to 0, not destroy any object, just change index. + */ clear(): void { this._usedElementCount = 0; } diff --git a/packages/core/src/utils/ObjectPool.ts b/packages/core/src/utils/ObjectPool.ts index ea805830e8..5b5cab525b 100644 --- a/packages/core/src/utils/ObjectPool.ts +++ b/packages/core/src/utils/ObjectPool.ts @@ -17,6 +17,12 @@ export abstract class ObjectPool { abstract get(): T; } +/** + * The basic interface for Object Pool's element. + */ export interface IPoolElement { + /** + * Called when the object need be release. + */ dispose?(): void; } diff --git a/packages/core/src/utils/ReturnableObjectPool.ts b/packages/core/src/utils/ReturnableObjectPool.ts index 58ce9550fd..7a1aa8ccc7 100644 --- a/packages/core/src/utils/ReturnableObjectPool.ts +++ b/packages/core/src/utils/ReturnableObjectPool.ts @@ -15,6 +15,9 @@ export class ReturnableObjectPool extends ObjectPool } } + /** + * Get an object from the pool. + */ get(): T { if (this._lastElementIndex < 0) { return new this._type(); @@ -22,6 +25,9 @@ export class ReturnableObjectPool extends ObjectPool return this._elements[this._lastElementIndex--]; } + /** + * Return an object to the pool. + */ return(element: T): void { this._elements[++this._lastElementIndex] = element; } diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts new file mode 100644 index 0000000000..ab2155d40c --- /dev/null +++ b/packages/core/src/utils/index.ts @@ -0,0 +1,3 @@ +export { ClearableObjectPool } from "./ClearableObjectPool"; +export type { IPoolElement } from "./ObjectPool"; +export { ReturnableObjectPool } from "./ReturnableObjectPool";