Compare commits

..

4 Commits

Author SHA1 Message Date
80173d580e Implement ResourceHandler. 2023-02-09 16:06:47 +08:00
067baf8c72 Remove ResourceType. 2023-02-09 14:28:33 +08:00
d991d96ecb Remove ResourceType. 2023-02-09 14:27:47 +08:00
83dac5289f Unified virtual renderer resource naming. 2023-02-09 11:02:35 +08:00
8 changed files with 103 additions and 14 deletions

View File

@ -1,10 +1,18 @@
import type { ResourceSet } from "./ResourceType";
type ResourceNameType = string | number;
type ResourceIdType = string | number | symbol;
interface Resource { interface Resource {
type: ResourceSet; /**
* Unique identification of resource type.
*/
type: ResourceNameType;
id: string | number; /**
* Unique number of the resource instance.
*/
id: ResourceIdType;
} }
export type { Resource }; export type { Resource, ResourceNameType, ResourceIdType };

View File

@ -0,0 +1,10 @@
import type { ShaderResource } from "./ShaderResource";
namespace ResourceName {
export type Shader = ShaderResource["type"];
}
type ResourceSet = ShaderResource;
type ResourceNameSet = ResourceName.Shader;
export type { ResourceName, ResourceNameSet, ResourceSet };

View File

@ -1,9 +0,0 @@
namespace ResourceType {
export type Shader = "SHADER" | 100_001;
}
type ResourceSet = ResourceType.Shader;
export type { ResourceType, ResourceSet };

View File

@ -0,0 +1,8 @@
import type { Resource } from "./Resource";
interface ShaderResource extends Resource {
type: "SHADER" | 100_001;
}
export type { ShaderResource };

View File

@ -4,4 +4,5 @@ export * from "command/CommandType";
export * from "command/RenderCommand"; export * from "command/RenderCommand";
export * from "command/ClearCommand"; export * from "command/ClearCommand";
export * from "resource/Resource"; export * from "resource/Resource";
export * from "resource/ResourceType"; export * from "resource/ResourceSet";
export * from "resource/ShaderResource";

View File

@ -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<ResourceOption extends Resource = Resource> {
/**
* 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;
}

View File

@ -0,0 +1,8 @@
/**
* Used to manage and process all GL resources.
* Rely on adding `ResourceHandler` to extend functions.
*/
class ResourcePool {
}