Skip to content

Commit d8aa11e

Browse files
Tristan Holubtholub99
authored andcommitted
Add option to set default layer masks in the scene
1 parent 01b38ce commit d8aa11e

8 files changed

Lines changed: 42 additions & 1 deletion

File tree

packages/dev/core/src/Cameras/camera.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ export class Camera extends Node {
474474
constructor(name: string, position: Vector3, scene?: Scene, setActiveOnSceneIfNoneActive = true) {
475475
super(name, scene, false);
476476

477+
this.layerMask = this.getScene().defaultCameraLayerMask;
477478
this.getScene().addCamera(this);
478479

479480
if (setActiveOnSceneIfNoneActive && !this.getScene().activeCamera) {

packages/dev/core/src/Layers/layer.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,17 @@ export class Layer {
193193
color?: Color4,
194194
forceGLSL = false
195195
) {
196+
if (!scene) {
197+
scene = EngineStore.LastCreatedScene!;
198+
}
199+
this.layerMask = scene.defaultRenderableLayerMask;
200+
196201
this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;
197202
this.isBackground = isBackground === undefined ? true : isBackground;
198203
this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;
199204

200-
this._scene = <Scene>(scene || EngineStore.LastCreatedScene);
205+
this._scene = scene;
206+
201207
const engine = this._scene.getEngine();
202208
if (engine.isWebGPU && !forceGLSL && !Layer.ForceGLSL) {
203209
this._shaderLanguage = ShaderLanguage.WGSL;

packages/dev/core/src/LensFlares/lensFlareSystem.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ export class LensFlareSystem {
109109
scene: Scene
110110
) {
111111
this._scene = scene || EngineStore.LastCreatedScene;
112+
this.layerMask = scene.defaultRenderableLayerMask;
113+
112114
LensFlareSystem._SceneComponentInitialization(this._scene);
113115

114116
this._emitter = emitter;

packages/dev/core/src/Meshes/abstractMesh.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,7 @@ export abstract class AbstractMesh extends TransformNode implements IDisposable,
999999
constructor(name: string, scene: Nullable<Scene> = null) {
10001000
super(name, scene, false);
10011001

1002+
this.layerMask = this.getScene().defaultRenderableLayerMask;
10021003
scene = this.getScene();
10031004

10041005
scene.addMesh(this);

packages/dev/core/src/Particles/gpuParticleSystem.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,7 @@ export class GPUParticleSystem extends BaseParticleSystem implements IDisposable
972972
this._scene = (sceneOrEngine as Scene) || EngineStore.LastCreatedScene;
973973
this._engine = this._scene.getEngine();
974974
this.uniqueId = this._scene.getUniqueId();
975+
this.layerMask = this._scene.defaultRenderableLayerMask;
975976
this._scene.particleSystems.push(this);
976977
} else {
977978
this._engine = sceneOrEngine as AbstractEngine;

packages/dev/core/src/Particles/thinParticleSystem.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ export class ThinParticleSystem extends BaseParticleSystem implements IDisposabl
558558
this._scene = (sceneOrEngine as Scene) || EngineStore.LastCreatedScene;
559559
this._engine = this._scene.getEngine();
560560
this.uniqueId = this._scene.getUniqueId();
561+
this.layerMask = this._scene.defaultRenderableLayerMask;
561562
this._scene.particleSystems.push(this);
562563
} else {
563564
this._engine = sceneOrEngine as AbstractEngine;

packages/dev/core/src/Sprites/spriteManager.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ export class SpriteManager implements ISpriteManager {
338338
if (!scene) {
339339
scene = EngineStore.LastCreatedScene!;
340340
}
341+
this.layerMask = scene.defaultRenderableLayerMask;
341342

342343
if (!scene._getComponent(SceneComponentConstants.NAME_SPRITE)) {
343344
scene._addComponent(new SpriteSceneComponent(scene));

packages/dev/core/src/scene.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ export interface SceneOptions {
156156

157157
/** Defines if the creation of the scene should impact the engine (Eg. UtilityLayer's scene) */
158158
virtual?: boolean;
159+
160+
/**
161+
* Defines the default layerMask used when creating cameras in the scene (default: 0x0fffffff)
162+
*/
163+
defaultCameraLayerMask?: number;
164+
165+
/**
166+
* Defines the default layerMask used when creating renderable objects in the scene (default: 0x0fffffff)
167+
*/
168+
defaultRenderableLayerMask?: number;
159169
}
160170

161171
/**
@@ -1810,6 +1820,18 @@ export class Scene implements IAnimatable, IClipPlanesHolder, IAssetContainer {
18101820
private _externalData: StringDictionary<object>;
18111821
private _uid: Nullable<string>;
18121822

1823+
/**
1824+
* @internal
1825+
* Gets or sets the default layerMask used for cameras created in this scene.
1826+
*/
1827+
public defaultCameraLayerMask: number;
1828+
1829+
/**
1830+
* @internal
1831+
* Gets or sets the default layerMask used for renderable objects created in this scene.
1832+
*/
1833+
public defaultRenderableLayerMask: number;
1834+
18131835
/**
18141836
* @internal
18151837
* Backing store of defined scene components.
@@ -2021,9 +2043,15 @@ export class Scene implements IAnimatable, IClipPlanesHolder, IAssetContainer {
20212043
useMaterialMeshMap: true,
20222044
useClonedMeshMap: true,
20232045
virtual: false,
2046+
defaultCameraLayerMask: 0x0fffffff,
2047+
defaultRenderableLayerMask: 0x0fffffff,
20242048
...options,
20252049
};
20262050

2051+
// Scene Default Layer Masks
2052+
this.defaultCameraLayerMask = fullOptions.defaultCameraLayerMask;
2053+
this.defaultRenderableLayerMask = fullOptions.defaultRenderableLayerMask;
2054+
20272055
engine = this._engine = engine || EngineStore.LastCreatedEngine;
20282056
if (fullOptions.virtual) {
20292057
engine._virtualScenes.push(this);

0 commit comments

Comments
 (0)