Archived
Private
Public Access
1
0
This repository has been archived on 2026-02-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ProjectBackup/C#/TSEngine/Core/Graphics/materialManager.ts
2022-09-04 12:45:01 +02:00

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];
}
}
}
}
}