Skip to content

Commit

Permalink
fix: destroy background error
Browse files Browse the repository at this point in the history
  • Loading branch information
cptbtptpbcptdtptp committed Sep 20, 2023
2 parents 7308106 + b499f94 commit 26423ae
Show file tree
Hide file tree
Showing 18 changed files with 126 additions and 18 deletions.
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-core",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/ComponentsManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ export class ComponentsManager {
const { _disposeDestroyScripts: pendingDestroyScripts, _pendingDestroyScripts: disposeDestroyScripts } = this;
this._disposeDestroyScripts = disposeDestroyScripts;
this._pendingDestroyScripts = pendingDestroyScripts;
length = disposeDestroyScripts.length;
const length = disposeDestroyScripts.length;
if (length > 0) {
for (let i = length - 1; i >= 0; i--) {
disposeDestroyScripts[i].onDestroy();
Expand Down
22 changes: 22 additions & 0 deletions packages/core/src/Scene.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { Camera } from "./Camera";
import { ComponentsManager } from "./ComponentsManager";
import { Engine } from "./Engine";
import { Entity } from "./Entity";
import { SceneManager } from "./SceneManager";
import { EngineObject, Logger } from "./base";
import { ActiveChangeFlag } from "./enums/ActiveChangeFlag";
import { FogMode } from "./enums/FogMode";
Expand Down Expand Up @@ -56,6 +57,8 @@ export class Scene extends EngineObject {
/** @internal */
_isActiveInEngine: boolean = false;
/** @internal */
_sceneManager: SceneManager;
/** @internal */
_globalShaderMacro: ShaderMacroCollection = new ShaderMacroCollection();
/** @internal */
_rootEntities: Entity[] = [];
Expand All @@ -72,6 +75,25 @@ export class Scene extends EngineObject {
private _fogEnd: number = 300;
private _fogDensity: number = 0.01;
private _fogParams: Vector4 = new Vector4();
private _isActive: boolean = true;

/**
* Whether the scene is active.
*/
get isActive(): boolean {
return this._isActive;
}

set isActive(value: boolean) {
if (this._isActive !== value) {
this._isActive = value;
if (value) {
this._sceneManager && this._processActive(true);
} else {
this._sceneManager && this._processActive(false);
}
}
}

/**
* Scene-related shader data.
Expand Down
25 changes: 21 additions & 4 deletions packages/core/src/SceneManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,34 @@ export class SceneManager {
addScene(index: number, scene: Scene): void;

addScene(indexOrScene: number | Scene, scene?: Scene): void {
const scenes = this._scenes;

let index: number;
if (typeof indexOrScene === "number") {
this._scenes.add(indexOrScene, scene);
if (indexOrScene < 0 || indexOrScene > scenes.length) {
throw "The index is out of range.";
}
index = indexOrScene;
} else {
index = scenes.length;
scene = indexOrScene;
this._scenes.push(scene);
}

if (scene.engine !== this.engine) {
throw "The scene is not belong to this engine.";
}

scene._processActive(true);
if (scene._sceneManager) {
const currentIndex = scenes.indexOf(scene);
if (currentIndex !== index) {
scenes.removeByIndex(currentIndex);
scenes.add(index, scene);
}
} else {
scene._sceneManager = this;
scenes.add(index, scene);
scene.isActive && scene._processActive(true);
}
}

/**
Expand All @@ -63,7 +79,8 @@ export class SceneManager {
if (index !== -1) {
const removedScene = scenes.getArray()[index];
scenes.removeByIndex(index);
removedScene._processActive(false);
scene._sceneManager = null;
removedScene.isActive && removedScene._processActive(false);
}
}

Expand Down
2 changes: 1 addition & 1 deletion packages/design/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-design",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/draco/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-draco",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/galacean/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/loader/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-loader",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/math/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-math",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/physics-lite/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-physics-lite",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/physics-physx/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-physics-physx",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/rhi-webgl/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-rhi-webgl",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-lab/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@galacean/engine-shader-lab",
"version": "1.1.0-beta.4",
"version": "1.1.0-beta.5",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-lab/src/RuntimeContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ export default class RuntimeContext {

getMacroText(macros: (FnMacroAstNode | FnMacroConditionAstNode)[], needSort = false): string {
const list = needSort ? macros.sort(AstNodeUtils.astSortAsc) : macros;
return list.map((item) => item.serialize(this)).join("\n");
return list?.map((item) => item.serialize(this)).join("\n");
}

getGlobalText(): string {
Expand Down
32 changes: 32 additions & 0 deletions tests/src/core/Scene.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,41 @@ describe("Scene", () => {

engine.sceneManager.addScene(scene);
expect(engine.sceneManager.scenes.length).eq(2);
engine.sceneManager.addScene(0, scene);
expect(engine.sceneManager.scenes.length).eq(2);

engine.sceneManager.removeScene(scene);
expect(engine.sceneManager.scenes.length).eq(1);
engine.sceneManager.removeScene(scene);
expect(engine.sceneManager.scenes.length).eq(1);
});

it("The second scene destroy", () => {
const scene = new Scene(engine);
engine.sceneManager.addScene(scene);

scene.destroy();
expect(engine.sceneManager.scenes.length).eq(1);
});
});

describe("MultiScene isActive test", () => {
it("Add and remove", () => {
const scene = new Scene(engine);
expect(scene.isActive).eq(true);
scene.isActive = false;
expect(scene.isActive).eq(false);

engine.sceneManager.addScene(scene);
expect(scene["_isActiveInEngine"]).eq(false);
scene.isActive = true;
expect(scene["_isActiveInEngine"]).eq(true);

engine.sceneManager.removeScene(scene);
expect(scene["_isActiveInEngine"]).eq(false);
engine.sceneManager.addScene(scene);
expect(scene["_isActiveInEngine"]).eq(true);
engine.sceneManager.removeScene(scene);
});

it("The second scene destroy", () => {
Expand Down
5 changes: 3 additions & 2 deletions tests/src/core/mesh/PrimitiveMesh.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,10 @@ describe("PrimitiveMesh", () => {
);
});

it("test limit vertex count", () => {
it("test limit vertex count", function () {
this.timeout(5000);
const radius = 1;
const segments = 300;
const segments = 256;
const floorSegments = Math.floor(segments);
const count = segments + 1;

Expand Down
5 changes: 5 additions & 0 deletions tests/src/shader-lab/ShaderLab.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,4 +195,9 @@ describe("ShaderLab", () => {
const demoShader = fs.readFileSync(path.join(__dirname, "shaders/planarShadow.shader")).toString();
glslValidate(demoShader, shaderLab);
});

it("Empty macro shader", () => {
const demoShader = fs.readFileSync(path.join(__dirname, "shaders/triangle.shader")).toString();
glslValidate(demoShader, shaderLab);
});
});
31 changes: 31 additions & 0 deletions tests/src/shader-lab/shaders/triangle.shader
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Shader "Triangle" {
SubShader "Default" {
Pass "0" {
mat4 renderer_MVPMat;
vec3 u_color;

struct a2v {
vec4 POSITION;
}

struct v2f {
vec3 v_color;
}

VertexShader = vert;
FragmentShader = frag;

v2f vert(a2v v) {
v2f o;

gl_Position = renderer_MVPMat * v.POSITION;
o.v_color = u_color;
return o;
}

void frag(v2f i) {
gl_FragColor = vec4(i.v_color, 1.0);
}
}
}
}

0 comments on commit 26423ae

Please sign in to comment.