diff --git a/packages/renderer-webgl/source/kernel/ResourceHandler.ts b/packages/renderer-webgl/source/kernel/ResourceHandler.ts index e69de29..0cf5fd1 100644 --- a/packages/renderer-webgl/source/kernel/ResourceHandler.ts +++ b/packages/renderer-webgl/source/kernel/ResourceHandler.ts @@ -0,0 +1,63 @@ +import { Resource, ResourceNameType, ResourceIdType } from "@ray-lab/renderer-virtual"; + +/** + * Resource processing tools. + * Whenever a new resource setting is received, + * an instance of this class will be instantiated to manage the received resource. + * @typeParam ResourceOption - Resource option type. + */ +abstract class ResourceHandler { + + /** + * Resource type enumeration. + */ + public static resourceType: ResourceNameType; + public static resourceTypeAlias: ResourceNameType; + + /** + * Original resource option. + */ + public resourceOption: ResourceOption; + + /** + * Resource unique number. + */ + public resourceId: ResourceIdType; + + /** + * @param resourceOption - Resource option. + */ + public constructor(resourceOption: ResourceOption) { + this.resourceOption = resourceOption; + this.resourceId = resourceOption.id ?? Symbol(resourceOption.type); + } + + /** + * Resource initialization lifecycle. + * It will be called once after `WebGLState` is ready. + */ + public abstract setup(): any; + + /** + * Marks whether the instance is destroyed. + */ + public isDestroyed: boolean = false; + + /** + * Resource destruction lifecycle. + * Will be called when the resource is destroyed. + */ + public abstract destroy(): any; + + /** + * Resource Settings Update Lifecycle. + * Called when the resource settings will to be updated. + * At this time, you can access the old settings through `this.resourceOption`. + * + * Note: + * You don't need to execute ```this.resourceOption = newResourceOption``` manually, + * The assignment will be done after this function returns. + * @param newResourceOption - New resource option. + */ + public abstract update(newResourceOption: ResourceOption): any; +} diff --git a/packages/renderer-webgl/source/kernel/ResourcePool.ts b/packages/renderer-webgl/source/kernel/ResourcePool.ts index e69de29..e2360e2 100644 --- a/packages/renderer-webgl/source/kernel/ResourcePool.ts +++ b/packages/renderer-webgl/source/kernel/ResourcePool.ts @@ -0,0 +1,8 @@ + +/** + * Used to manage and process all GL resources. + * Rely on adding `ResourceHandler` to extend functions. + */ +class ResourcePool { + +} \ No newline at end of file