mirror of
https://github.com/galacean/engine.git
synced 2026-06-21 19:02:50 +08:00
@@ -251,7 +251,7 @@ export class Entity extends EngineObject {
|
||||
*/
|
||||
constructor(engine: Engine, name?: string, ...components: ComponentConstructor[]) {
|
||||
super(engine);
|
||||
this.name = name ?? "New Entity";
|
||||
this.name = name ?? "Entity";
|
||||
for (let i = 0, n = components.length; i < n; i++) {
|
||||
this.addComponent(components[i]);
|
||||
}
|
||||
|
||||
@@ -486,7 +486,7 @@ export class Renderer extends Component implements IComponentCustomClone {
|
||||
|
||||
private _createInstanceMaterial(material: Material, index: number): Material {
|
||||
const insMaterial: Material = material.clone();
|
||||
insMaterial.name = insMaterial.name + "(Instance)";
|
||||
insMaterial.name = material.name + "(Instance)";
|
||||
this._addResourceReferCount(material, -1);
|
||||
this._addResourceReferCount(insMaterial, 1);
|
||||
this._materialsInstanced[index] = true;
|
||||
|
||||
@@ -220,7 +220,7 @@ export class BaseMaterial extends Material {
|
||||
*/
|
||||
override clone(): BaseMaterial {
|
||||
const dest = new BaseMaterial(this._engine, this.shader);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ export class BlinnPhongMaterial extends BaseMaterial {
|
||||
|
||||
override clone(): BlinnPhongMaterial {
|
||||
var dest: BlinnPhongMaterial = new BlinnPhongMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,6 +84,7 @@ export class Material extends ReferResource implements IClone {
|
||||
constructor(engine: Engine, shader: Shader) {
|
||||
super(engine);
|
||||
this.shader = shader;
|
||||
this.name = shader.name;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -91,7 +92,7 @@ export class Material extends ReferResource implements IClone {
|
||||
*/
|
||||
clone(): Material {
|
||||
const dest = new Material(this._engine, this.shader);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
|
||||
@@ -112,6 +113,11 @@ export class Material extends ReferResource implements IClone {
|
||||
this._shader._addReferCount(value);
|
||||
}
|
||||
|
||||
protected _cloneToAndModifyName(target: Material): void {
|
||||
this.cloneTo(target);
|
||||
target.name = this.name + "(Clone)";
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
|
||||
@@ -484,7 +484,7 @@ export class PBRMaterial extends PBRBaseMaterial {
|
||||
*/
|
||||
override clone(): PBRMaterial {
|
||||
const dest = new PBRMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ export class PBRSpecularMaterial extends PBRBaseMaterial {
|
||||
*/
|
||||
override clone(): PBRSpecularMaterial {
|
||||
const dest = new PBRSpecularMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ export class UnlitMaterial extends BaseMaterial {
|
||||
*/
|
||||
override clone(): UnlitMaterial {
|
||||
const dest = new UnlitMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ export class ParticleMaterial extends BaseMaterial {
|
||||
*/
|
||||
override clone(): ParticleMaterial {
|
||||
const dest = new ParticleMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ export class SkyBoxMaterial extends Material {
|
||||
|
||||
override clone(): SkyBoxMaterial {
|
||||
const dest = new SkyBoxMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ export class SkyProceduralMaterial extends Material {
|
||||
*/
|
||||
override clone(): SkyProceduralMaterial {
|
||||
const dest = new SkyProceduralMaterial(this._engine);
|
||||
this.cloneTo(dest);
|
||||
this._cloneToAndModifyName(dest);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,7 +196,7 @@ describe("MeshRenderer", async function () {
|
||||
// Test that getInstanceMaterial works correctly.
|
||||
const material = mr.getInstanceMaterial();
|
||||
expect(material).to.be.instanceOf(UnlitMaterial);
|
||||
expect(material.name).to.be.equal("undefined(Instance)");
|
||||
expect(material.name).to.be.equal("unlit(Instance)");
|
||||
|
||||
// Test that material0 is same as material.
|
||||
const material0 = mr.getInstanceMaterial(0);
|
||||
@@ -204,7 +204,7 @@ describe("MeshRenderer", async function () {
|
||||
|
||||
const material2 = mr.getInstanceMaterial(2);
|
||||
expect(material2).to.be.instanceOf(PBRMaterial);
|
||||
expect(material2.name).to.be.equal("undefined(Instance)");
|
||||
expect(material2.name).to.be.equal("pbr(Instance)");
|
||||
|
||||
expect(mr.getInstanceMaterial(1)).to.be.null;
|
||||
|
||||
@@ -220,9 +220,9 @@ describe("MeshRenderer", async function () {
|
||||
// Test that getInstanceMaterials works correctly.
|
||||
const materials = mr.getInstanceMaterials();
|
||||
expect(materials[0]).to.be.instanceOf(UnlitMaterial);
|
||||
expect(materials[0].name).to.be.equal("undefined(Instance)");
|
||||
expect(materials[0].name).to.be.equal("unlit(Instance)");
|
||||
expect(materials[1]).to.be.instanceOf(PBRMaterial);
|
||||
expect(materials[1].name).to.be.equal("undefined(Instance)");
|
||||
expect(materials[1].name).to.be.equal("pbr(Instance)");
|
||||
});
|
||||
|
||||
it("priority", () => {
|
||||
|
||||
@@ -91,4 +91,12 @@ describe("Material", () => {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it("clone", () => {
|
||||
const material = new Material(engine, Shader.find("blinn-phong"));
|
||||
expect(material.name).to.equal("blinn-phong");
|
||||
|
||||
const clone = material.clone();
|
||||
expect(clone.name).to.equal("blinn-phong(Clone)");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user