45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
namespace TSE {
|
|
|
|
class MaterialReferenceNode {
|
|
|
|
public material: Material;
|
|
public referenceCount: number = 1;
|
|
|
|
public constructor(material: Material) {
|
|
this.material = material;
|
|
}
|
|
|
|
}
|
|
|
|
export class MaterialManager {
|
|
|
|
private static _materials: { [name: string]: MaterialReferenceNode } = {};
|
|
|
|
private constructor() { }
|
|
|
|
public static registerMaterial(material: Material): void {
|
|
if (MaterialManager._materials[material.name] === undefined)
|
|
MaterialManager._materials[material.name] = new MaterialReferenceNode(material);
|
|
}
|
|
|
|
public static getMaterial(materialName: string): Material {
|
|
if (MaterialManager._materials[materialName] === undefined) return undefined;
|
|
|
|
MaterialManager._materials[materialName].referenceCount++;
|
|
return MaterialManager._materials[materialName].material;
|
|
}
|
|
|
|
public static releaseMaterial(materialName: string): void {
|
|
if (MaterialManager._materials[materialName] === undefined) console.warn("Cannot release an undefined Material!");
|
|
else {
|
|
MaterialManager._materials[materialName].referenceCount--;
|
|
if (MaterialManager._materials[materialName].referenceCount < 1) {
|
|
MaterialManager._materials[materialName].material.destroy();
|
|
delete MaterialManager._materials[materialName];
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} |