@onerjs/core 8.23.12 → 8.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Behaviors/Meshes/index.d.ts +1 -0
- package/Behaviors/Meshes/index.js +1 -0
- package/Behaviors/Meshes/index.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +6 -34
- package/Behaviors/Meshes/pointerDragBehavior.js +0 -12
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragEvents.d.ts +38 -0
- package/Behaviors/Meshes/pointerDragEvents.js +2 -0
- package/Behaviors/Meshes/pointerDragEvents.js.map +1 -0
- package/Buffers/storageBuffer.d.ts +6 -0
- package/Buffers/storageBuffer.js +8 -0
- package/Buffers/storageBuffer.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.d.ts +2 -1
- package/Engines/Extensions/engine.multiRender.js +12 -7
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.multiview.js +5 -5
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +2 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +12 -7
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +6 -0
- package/Engines/WebGPU/webgpuDrawContext.js +9 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/abstractEngine.js +3 -3
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +4 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/engineFactory.d.ts +4 -1
- package/Engines/engineFactory.js.map +1 -1
- package/Engines/nativeEngine.js +2 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +2 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +17 -0
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +7 -0
- package/Engines/webgpuEngine.js +19 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +12 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +52 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +0 -3
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +7 -2
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +4 -0
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +7 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +11 -2
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +6 -6
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +27 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +76 -8
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +2 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +0 -7
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphRenderTarget.js +1 -1
- package/FrameGraph/frameGraphRenderTarget.js.map +1 -1
- package/Gizmos/cameraGizmo.js +2 -2
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/lightGizmo.js +2 -2
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +7 -6
- package/Gizmos/positionGizmo.js +3 -9
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +7 -6
- package/Gizmos/rotationGizmo.js +3 -9
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +7 -6
- package/Gizmos/scaleGizmo.js +3 -9
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.d.ts +2 -0
- package/Instrumentation/sceneInstrumentation.js +58 -32
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.d.ts +102 -0
- package/Lights/Clustered/clusteredLightContainer.js +487 -0
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.d.ts +34 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.js +47 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.js.map +1 -0
- package/Lights/Clustered/index.d.ts +6 -0
- package/Lights/Clustered/index.js +7 -0
- package/Lights/Clustered/index.js.map +1 -0
- package/Lights/Shadows/cascadedShadowGenerator.js +1 -0
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +10 -8
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/index.d.ts +1 -0
- package/Lights/index.js +1 -0
- package/Lights/index.js.map +1 -1
- package/Lights/light.d.ts +7 -1
- package/Lights/light.js +7 -1
- package/Lights/light.js.map +1 -1
- package/Lights/lightConstants.d.ts +4 -0
- package/Lights/lightConstants.js +4 -0
- package/Lights/lightConstants.js.map +1 -1
- package/Lights/spotLight.d.ts +6 -3
- package/Lights/spotLight.js.map +1 -1
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +0 -5
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +3 -2
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +5 -0
- package/Materials/Textures/renderTargetTexture.js +9 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +12 -4
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.js +4 -3
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +7 -4
- package/Materials/uniformBuffer.js +37 -15
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.d.ts +1 -1
- package/Maths/math.vector.js +2 -2
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +25 -0
- package/Meshes/abstractMesh.hotSpot.js +37 -25
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/abstractMesh.js +4 -0
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg2.js +6 -4
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geometry.js +1 -1
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +1 -0
- package/Meshes/instancedMesh.js +3 -0
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/linesMesh.d.ts +5 -3
- package/Meshes/linesMesh.js +27 -8
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +0 -19
- package/Meshes/mesh.js +2 -26
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +2 -2
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Misc/dumpTools.d.ts +1 -1
- package/Misc/dumpTools.js +23 -14
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/fileTools.js +8 -1
- package/Misc/fileTools.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +16 -7
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/lazy.d.ts +16 -0
- package/Misc/lazy.js +25 -0
- package/Misc/lazy.js.map +1 -0
- package/Misc/screenshotTools.js +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/snapshotRenderingHelper.d.ts +6 -3
- package/Misc/snapshotRenderingHelper.js +37 -6
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +4 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +4 -0
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js +17 -3
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +0 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.d.ts +31 -0
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js +67 -0
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js.map +1 -0
- package/Particles/Node/Blocks/index.d.ts +1 -0
- package/Particles/Node/Blocks/index.js +1 -0
- package/Particles/Node/Blocks/index.js.map +1 -1
- package/Particles/Node/Blocks/particleInputBlock.js +1 -0
- package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +2 -2
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +3 -3
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.d.ts +3 -0
- package/Particles/Node/Blocks/systemBlock.js +3 -0
- package/Particles/Node/Blocks/systemBlock.js.map +1 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +3 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.js +2 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.js +3 -1
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.d.ts +2 -1
- package/Particles/Node/nodeParticleSystemSet.helper.js +118 -61
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +1 -0
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/particle.d.ts +8 -0
- package/Particles/particle.js +10 -0
- package/Particles/particle.js.map +1 -1
- package/Particles/particleSystem.d.ts +2 -4
- package/Particles/particleSystem.js +2 -4
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +6 -0
- package/Particles/thinParticleSystem.function.d.ts +2 -0
- package/Particles/thinParticleSystem.function.js +3 -0
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.js +15 -5
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +33 -3
- package/Rendering/objectRenderer.js +164 -38
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/clusteredLightingFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/clusteredLightingFunctions.js +19 -0
- package/Shaders/ShadersInclude/clusteredLightingFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/helperFunctions.js +6 -1
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +33 -1
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js +3 -0
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +5 -0
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js +2 -0
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +20 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.d.ts +7 -0
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +125 -0
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +3 -0
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +5 -0
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/default.vertex.js +6 -0
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/lightProxy.fragment.d.ts +5 -0
- package/Shaders/lightProxy.fragment.js +13 -0
- package/Shaders/lightProxy.fragment.js.map +1 -0
- package/Shaders/lightProxy.vertex.d.ts +8 -0
- package/Shaders/lightProxy.vertex.js +19 -0
- package/Shaders/lightProxy.vertex.js.map +1 -0
- package/Shaders/pbr.fragment.d.ts +1 -0
- package/Shaders/pbr.fragment.js +4 -0
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.js +6 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clusteredLightingFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/clusteredLightingFunctions.js +24 -0
- package/ShadersWGSL/ShadersInclude/clusteredLightingFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +33 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +6 -0
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +22 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +2 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +115 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentExtraDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +5 -0
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +6 -0
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/lightProxy.fragment.d.ts +5 -0
- package/ShadersWGSL/lightProxy.fragment.js +13 -0
- package/ShadersWGSL/lightProxy.fragment.js.map +1 -0
- package/ShadersWGSL/lightProxy.vertex.d.ts +7 -0
- package/ShadersWGSL/lightProxy.vertex.js +19 -0
- package/ShadersWGSL/lightProxy.vertex.js.map +1 -0
- package/ShadersWGSL/pbr.vertex.js +6 -0
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +5 -0
- package/Sprites/spriteManager.js +6 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +5 -2
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +39 -37
- package/States/alphaCullingState.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +28 -1
- package/scene.js +198 -34
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +2 -0
- package/sceneComponent.js +2 -0
- package/sceneComponent.js.map +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Nullable, Immutable, Camera, Scene, AbstractMesh, SubMesh, Material, IParticleSystem, BoundingBox, UniformBuffer } from "../index.js";
|
|
2
2
|
import { Observable } from "../Misc/observable.js";
|
|
3
3
|
import { RenderingManager } from "../Rendering/renderingManager.js";
|
|
4
|
+
import { SmartArray } from "../Misc/smartArray.js";
|
|
4
5
|
/**
|
|
5
6
|
* Defines the options of the object renderer
|
|
6
7
|
*/
|
|
@@ -112,18 +113,30 @@ export declare class ObjectRenderer {
|
|
|
112
113
|
* An event triggered after the rendering group is processed
|
|
113
114
|
*/
|
|
114
115
|
readonly onAfterRenderingManagerRenderObservable: Observable<number>;
|
|
116
|
+
/**
|
|
117
|
+
* An event triggered when initRender is called
|
|
118
|
+
*/
|
|
119
|
+
readonly onInitRenderingObservable: Observable<ObjectRenderer>;
|
|
120
|
+
/**
|
|
121
|
+
* An event triggered when finishRender is called
|
|
122
|
+
*/
|
|
123
|
+
readonly onFinishRenderingObservable: Observable<ObjectRenderer>;
|
|
115
124
|
/**
|
|
116
125
|
* An event triggered when fast path rendering is used
|
|
117
126
|
*/
|
|
118
127
|
readonly onFastPathRenderObservable: Observable<number>;
|
|
119
128
|
protected _scene: Scene;
|
|
120
|
-
|
|
121
|
-
_renderingManager: RenderingManager;
|
|
129
|
+
protected _renderingManager: RenderingManager;
|
|
122
130
|
/** @internal */
|
|
123
131
|
_waitingRenderList?: string[];
|
|
124
132
|
protected _currentRefreshId: number;
|
|
125
133
|
protected _refreshRate: number;
|
|
126
134
|
protected _currentApplyByPostProcessSetting: boolean;
|
|
135
|
+
protected _activeMeshes: SmartArray<AbstractMesh>;
|
|
136
|
+
protected _activeBoundingBoxes: SmartArray<BoundingBox>;
|
|
137
|
+
protected _useUBO: boolean;
|
|
138
|
+
protected _sceneUBO: UniformBuffer;
|
|
139
|
+
protected _currentSceneUBO: UniformBuffer;
|
|
127
140
|
/**
|
|
128
141
|
* The options used by the object renderer
|
|
129
142
|
*/
|
|
@@ -147,12 +160,25 @@ export declare class ObjectRenderer {
|
|
|
147
160
|
* Gets the current value of the refreshId counter
|
|
148
161
|
*/
|
|
149
162
|
get currentRefreshId(): number;
|
|
163
|
+
/**
|
|
164
|
+
* Gets the array of active meshes
|
|
165
|
+
* @returns an array of AbstractMesh
|
|
166
|
+
*/
|
|
167
|
+
getActiveMeshes(): SmartArray<AbstractMesh>;
|
|
150
168
|
/**
|
|
151
169
|
* Sets a specific material to be used to render a mesh/a list of meshes with this object renderer
|
|
152
170
|
* @param mesh mesh or array of meshes
|
|
153
171
|
* @param material material or array of materials to use for this render pass. If undefined is passed, no specific material will be used but the regular material instead (mesh.material). It's possible to provide an array of materials to use a different material for each rendering pass.
|
|
154
172
|
*/
|
|
155
173
|
setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material | Material[]): void;
|
|
174
|
+
/** @internal */
|
|
175
|
+
_isFrozen: boolean;
|
|
176
|
+
/** @internal */
|
|
177
|
+
_freezeActiveMeshesCancel: Nullable<() => void>;
|
|
178
|
+
/** @internal */
|
|
179
|
+
_freezeActiveMeshes(freezeMeshes: boolean): void;
|
|
180
|
+
/** @internal */
|
|
181
|
+
_unfreezeActiveMeshes(): void;
|
|
156
182
|
/**
|
|
157
183
|
* Instantiates an object renderer.
|
|
158
184
|
* @param name The friendly name of the object renderer
|
|
@@ -212,6 +238,10 @@ export declare class ObjectRenderer {
|
|
|
212
238
|
/** @internal */
|
|
213
239
|
_checkReadiness(): boolean;
|
|
214
240
|
private _prepareRenderingManager;
|
|
241
|
+
/**
|
|
242
|
+
* Gets the rendering manager
|
|
243
|
+
*/
|
|
244
|
+
get renderingManager(): RenderingManager;
|
|
215
245
|
/**
|
|
216
246
|
* Overrides the default sort function applied in the rendering group to prepare the meshes.
|
|
217
247
|
* This allowed control for front to back rendering or reversely depending of the special needs.
|
|
@@ -2,6 +2,9 @@ import { Observable } from "../Misc/observable.js";
|
|
|
2
2
|
import { RenderingManager } from "../Rendering/renderingManager.js";
|
|
3
3
|
|
|
4
4
|
import { _ObserveArray } from "../Misc/arrayTools.js";
|
|
5
|
+
import { _RetryWithInterval } from "../Misc/timingTools.js";
|
|
6
|
+
import { Logger } from "../Misc/logger.js";
|
|
7
|
+
import { SmartArray } from "../Misc/smartArray.js";
|
|
5
8
|
/**
|
|
6
9
|
* A class that renders objects to the currently bound render target.
|
|
7
10
|
* This class only renders objects, and is not concerned with the output texture or post-processing.
|
|
@@ -51,6 +54,9 @@ export class ObjectRenderer {
|
|
|
51
54
|
return;
|
|
52
55
|
}
|
|
53
56
|
this._name = value;
|
|
57
|
+
if (this._sceneUBO) {
|
|
58
|
+
this._sceneUBO.name = `Scene ubo for ${this.name}`;
|
|
59
|
+
}
|
|
54
60
|
if (!this._scene) {
|
|
55
61
|
return;
|
|
56
62
|
}
|
|
@@ -72,6 +78,13 @@ export class ObjectRenderer {
|
|
|
72
78
|
get currentRefreshId() {
|
|
73
79
|
return this._currentRefreshId;
|
|
74
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Gets the array of active meshes
|
|
83
|
+
* @returns an array of AbstractMesh
|
|
84
|
+
*/
|
|
85
|
+
getActiveMeshes() {
|
|
86
|
+
return this._activeMeshes;
|
|
87
|
+
}
|
|
75
88
|
/**
|
|
76
89
|
* Sets a specific material to be used to render a mesh/a list of meshes with this object renderer
|
|
77
90
|
* @param mesh mesh or array of meshes
|
|
@@ -95,6 +108,47 @@ export class ObjectRenderer {
|
|
|
95
108
|
}
|
|
96
109
|
}
|
|
97
110
|
}
|
|
111
|
+
/** @internal */
|
|
112
|
+
_freezeActiveMeshes(freezeMeshes) {
|
|
113
|
+
this._freezeActiveMeshesCancel = _RetryWithInterval(() => {
|
|
114
|
+
return this._checkReadiness();
|
|
115
|
+
}, () => {
|
|
116
|
+
this._freezeActiveMeshesCancel = null;
|
|
117
|
+
if (freezeMeshes) {
|
|
118
|
+
for (let index = 0; index < this._activeMeshes.length; index++) {
|
|
119
|
+
this._activeMeshes.data[index]._freeze();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
this._prepareRenderingManager(0, true);
|
|
123
|
+
this._isFrozen = true;
|
|
124
|
+
}, (err, isTimeout) => {
|
|
125
|
+
this._freezeActiveMeshesCancel = null;
|
|
126
|
+
if (!isTimeout) {
|
|
127
|
+
Logger.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready.");
|
|
128
|
+
if (err) {
|
|
129
|
+
Logger.Error(err);
|
|
130
|
+
if (err.stack) {
|
|
131
|
+
Logger.Error(err.stack);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
Logger.Error(`ObjectRenderer: Timeout while waiting for the renderer to be ready.`);
|
|
137
|
+
if (err) {
|
|
138
|
+
Logger.Error(err);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/** @internal */
|
|
144
|
+
_unfreezeActiveMeshes() {
|
|
145
|
+
this._freezeActiveMeshesCancel?.();
|
|
146
|
+
this._freezeActiveMeshesCancel = null;
|
|
147
|
+
for (let index = 0; index < this._activeMeshes.length; index++) {
|
|
148
|
+
this._activeMeshes.data[index]._unFreeze();
|
|
149
|
+
}
|
|
150
|
+
this._isFrozen = false;
|
|
151
|
+
}
|
|
98
152
|
/**
|
|
99
153
|
* Instantiates an object renderer.
|
|
100
154
|
* @param name The friendly name of the object renderer
|
|
@@ -159,6 +213,14 @@ export class ObjectRenderer {
|
|
|
159
213
|
* An event triggered after the rendering group is processed
|
|
160
214
|
*/
|
|
161
215
|
this.onAfterRenderingManagerRenderObservable = new Observable();
|
|
216
|
+
/**
|
|
217
|
+
* An event triggered when initRender is called
|
|
218
|
+
*/
|
|
219
|
+
this.onInitRenderingObservable = new Observable();
|
|
220
|
+
/**
|
|
221
|
+
* An event triggered when finishRender is called
|
|
222
|
+
*/
|
|
223
|
+
this.onFinishRenderingObservable = new Observable();
|
|
162
224
|
/**
|
|
163
225
|
* An event triggered when fast path rendering is used
|
|
164
226
|
*/
|
|
@@ -166,9 +228,19 @@ export class ObjectRenderer {
|
|
|
166
228
|
this._currentRefreshId = -1;
|
|
167
229
|
this._refreshRate = 1;
|
|
168
230
|
this._currentApplyByPostProcessSetting = false;
|
|
231
|
+
this._activeMeshes = new SmartArray(256);
|
|
232
|
+
this._activeBoundingBoxes = new SmartArray(32);
|
|
233
|
+
/** @internal */
|
|
234
|
+
this._isFrozen = false;
|
|
235
|
+
/** @internal */
|
|
236
|
+
this._freezeActiveMeshesCancel = null;
|
|
169
237
|
this._currentSceneCamera = null;
|
|
170
238
|
this.name = name;
|
|
171
239
|
this._scene = scene;
|
|
240
|
+
this._useUBO = this._scene.getEngine().supportsUniformBuffers;
|
|
241
|
+
if (this._useUBO) {
|
|
242
|
+
this._sceneUBO = this._scene.createSceneUniformBuffer(`Scene ubo for ${this.name}`, false);
|
|
243
|
+
}
|
|
172
244
|
this.renderList = [];
|
|
173
245
|
this._renderPassIds = [];
|
|
174
246
|
this.options = {
|
|
@@ -181,6 +253,7 @@ export class ObjectRenderer {
|
|
|
181
253
|
// Rendering groups
|
|
182
254
|
this._renderingManager = new RenderingManager(scene);
|
|
183
255
|
this._renderingManager._useSceneAutoClearSetup = true;
|
|
256
|
+
this._scene.addObjectRenderer(this);
|
|
184
257
|
}
|
|
185
258
|
_releaseRenderPassId() {
|
|
186
259
|
const engine = this._scene.getEngine();
|
|
@@ -294,14 +367,21 @@ export class ObjectRenderer {
|
|
|
294
367
|
initRender(viewportWidth, viewportHeight) {
|
|
295
368
|
const engine = this._scene.getEngine();
|
|
296
369
|
const camera = this.activeCamera ?? this._scene.activeCamera;
|
|
370
|
+
this.onInitRenderingObservable.notifyObservers(this);
|
|
297
371
|
this._currentSceneCamera = this._scene.activeCamera;
|
|
372
|
+
if (this._useUBO) {
|
|
373
|
+
this._currentSceneUBO = this._scene.getSceneUniformBuffer();
|
|
374
|
+
this._currentSceneUBO.unbindEffect();
|
|
375
|
+
this._scene.setSceneUniformBuffer(this._sceneUBO);
|
|
376
|
+
}
|
|
298
377
|
if (camera) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
this._scene.activeCamera = camera;
|
|
302
|
-
}
|
|
378
|
+
this._scene.setTransformMatrix(camera.getViewMatrix(), camera.getProjectionMatrix(true));
|
|
379
|
+
this._scene.activeCamera = camera;
|
|
303
380
|
engine.setViewport(camera.rigParent ? camera.rigParent.viewport : camera.viewport, viewportWidth, viewportHeight);
|
|
304
381
|
}
|
|
382
|
+
if (this._useUBO) {
|
|
383
|
+
this._scene.finalizeSceneUbo();
|
|
384
|
+
}
|
|
305
385
|
this._defaultRenderListPrepared = false;
|
|
306
386
|
}
|
|
307
387
|
/**
|
|
@@ -309,6 +389,9 @@ export class ObjectRenderer {
|
|
|
309
389
|
*/
|
|
310
390
|
finishRender() {
|
|
311
391
|
const scene = this._scene;
|
|
392
|
+
if (this._useUBO) {
|
|
393
|
+
this._scene.setSceneUniformBuffer(this._currentSceneUBO);
|
|
394
|
+
}
|
|
312
395
|
if (this._disableImageProcessing) {
|
|
313
396
|
scene.imageProcessingConfiguration._applyByPostProcess = this._currentApplyByPostProcessSetting;
|
|
314
397
|
}
|
|
@@ -320,6 +403,7 @@ export class ObjectRenderer {
|
|
|
320
403
|
scene.getEngine().setViewport(this._currentSceneCamera.viewport);
|
|
321
404
|
}
|
|
322
405
|
scene.resetCachedMaterial();
|
|
406
|
+
this.onFinishRenderingObservable.notifyObservers(this);
|
|
323
407
|
}
|
|
324
408
|
/**
|
|
325
409
|
* Renders all the objects (meshes, particles systems, sprites) to the currently bound render target texture.
|
|
@@ -334,26 +418,7 @@ export class ObjectRenderer {
|
|
|
334
418
|
this.onBeforeRenderObservable.notifyObservers(passIndex);
|
|
335
419
|
const fastPath = engine.snapshotRendering && engine.snapshotRenderingMode === 1;
|
|
336
420
|
if (!fastPath) {
|
|
337
|
-
|
|
338
|
-
let currentRenderList = null;
|
|
339
|
-
const defaultRenderList = this.renderList ? this.renderList : scene.getActiveMeshes().data;
|
|
340
|
-
const defaultRenderListLength = this.renderList ? this.renderList.length : scene.getActiveMeshes().length;
|
|
341
|
-
if (this.getCustomRenderList) {
|
|
342
|
-
currentRenderList = this.getCustomRenderList(passIndex, defaultRenderList, defaultRenderListLength);
|
|
343
|
-
}
|
|
344
|
-
if (!currentRenderList) {
|
|
345
|
-
// No custom render list provided, we prepare the rendering for the default list, but check
|
|
346
|
-
// first if we did not already performed the preparation before so as to avoid re-doing it several times
|
|
347
|
-
if (!this._defaultRenderListPrepared) {
|
|
348
|
-
this._prepareRenderingManager(defaultRenderList, defaultRenderListLength, !this.renderList || this.forceLayerMaskCheck);
|
|
349
|
-
this._defaultRenderListPrepared = true;
|
|
350
|
-
}
|
|
351
|
-
currentRenderList = defaultRenderList;
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
// Prepare the rendering for the custom render list provided
|
|
355
|
-
this._prepareRenderingManager(currentRenderList, currentRenderList.length, this.forceLayerMaskCheck);
|
|
356
|
-
}
|
|
421
|
+
const currentRenderList = this._prepareRenderingManager(passIndex);
|
|
357
422
|
this.onBeforeRenderingManagerRenderObservable.notifyObservers(passIndex);
|
|
358
423
|
this._renderingManager.render(this.customRenderFunction, currentRenderList, this.renderParticles, this.renderSprites);
|
|
359
424
|
this.onAfterRenderingManagerRenderObservable.notifyObservers(passIndex);
|
|
@@ -379,8 +444,8 @@ export class ObjectRenderer {
|
|
|
379
444
|
const numPasses = this.options.numPasses;
|
|
380
445
|
for (let passIndex = 0; passIndex < numPasses && returnValue; passIndex++) {
|
|
381
446
|
let currentRenderList = null;
|
|
382
|
-
const defaultRenderList = this.renderList ? this.renderList : scene.getActiveMeshes().data;
|
|
383
|
-
const defaultRenderListLength = this.renderList ? this.renderList.length : scene.getActiveMeshes().length;
|
|
447
|
+
const defaultRenderList = this.renderList ? this.renderList : scene.frameGraph ? scene.meshes : scene.getActiveMeshes().data;
|
|
448
|
+
const defaultRenderListLength = this.renderList ? this.renderList.length : scene.frameGraph ? scene.meshes.length : scene.getActiveMeshes().length;
|
|
384
449
|
engine.currentRenderPassId = this._renderPassIds[passIndex];
|
|
385
450
|
this.onBeforeRenderObservable.notifyObservers(passIndex);
|
|
386
451
|
if (this.getCustomRenderList) {
|
|
@@ -423,13 +488,52 @@ export class ObjectRenderer {
|
|
|
423
488
|
engine.currentRenderPassId = currentRenderPassId;
|
|
424
489
|
return returnValue;
|
|
425
490
|
}
|
|
426
|
-
_prepareRenderingManager(
|
|
491
|
+
_prepareRenderingManager(passIndex = 0, winterIsComing = false) {
|
|
427
492
|
const scene = this._scene;
|
|
493
|
+
// Get the list of meshes to dispatch to the rendering manager
|
|
494
|
+
let currentRenderList = null;
|
|
495
|
+
let currentRenderListLength = 0;
|
|
496
|
+
let checkLayerMask = false;
|
|
497
|
+
const defaultRenderList = this.renderList ? this.renderList : scene.frameGraph ? scene.meshes : scene.getActiveMeshes().data;
|
|
498
|
+
const defaultRenderListLength = this.renderList ? this.renderList.length : scene.frameGraph ? scene.meshes.length : scene.getActiveMeshes().length;
|
|
499
|
+
if (this.getCustomRenderList) {
|
|
500
|
+
currentRenderList = this.getCustomRenderList(passIndex, defaultRenderList, defaultRenderListLength);
|
|
501
|
+
}
|
|
502
|
+
if (!currentRenderList) {
|
|
503
|
+
// No custom render list provided, we prepare the rendering for the default list, but check
|
|
504
|
+
// first if we did not already performed the preparation (in this frame) before so as to avoid re-doing it several times
|
|
505
|
+
if (this._defaultRenderListPrepared && !winterIsComing) {
|
|
506
|
+
return defaultRenderList;
|
|
507
|
+
}
|
|
508
|
+
this._defaultRenderListPrepared = true;
|
|
509
|
+
currentRenderList = defaultRenderList;
|
|
510
|
+
currentRenderListLength = defaultRenderListLength;
|
|
511
|
+
checkLayerMask = !this.renderList || this.forceLayerMaskCheck;
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
// Prepare the rendering for the custom render list provided
|
|
515
|
+
currentRenderListLength = currentRenderList.length;
|
|
516
|
+
checkLayerMask = this.forceLayerMaskCheck;
|
|
517
|
+
}
|
|
428
518
|
const camera = scene.activeCamera; // note that at this point, scene.activeCamera == this.activeCamera if defined, because initRender() has been called before
|
|
429
519
|
const cameraForLOD = this.cameraForLOD ?? camera;
|
|
520
|
+
// The cast to "any" is to avoid an error in ES6 in case you don't import boundingBoxRenderer
|
|
521
|
+
const boundingBoxRenderer = scene.getBoundingBoxRenderer?.();
|
|
522
|
+
if (scene._activeMeshesFrozen && this._isFrozen) {
|
|
523
|
+
this._renderingManager.resetSprites();
|
|
524
|
+
if (this.enableBoundingBoxRendering && boundingBoxRenderer) {
|
|
525
|
+
boundingBoxRenderer.reset();
|
|
526
|
+
for (let i = 0; i < this._activeBoundingBoxes.length; i++) {
|
|
527
|
+
const boundingBox = this._activeBoundingBoxes.data[i];
|
|
528
|
+
boundingBoxRenderer.renderList.push(boundingBox);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
return currentRenderList;
|
|
532
|
+
}
|
|
430
533
|
this._renderingManager.reset();
|
|
431
|
-
|
|
432
|
-
|
|
534
|
+
this._activeMeshes.reset();
|
|
535
|
+
this._activeBoundingBoxes.reset();
|
|
536
|
+
this.enableBoundingBoxRendering && boundingBoxRenderer && boundingBoxRenderer.reset();
|
|
433
537
|
const sceneRenderId = scene.getRenderId();
|
|
434
538
|
const currentFrameId = scene.getFrameId();
|
|
435
539
|
for (let meshIndex = 0; meshIndex < currentRenderListLength; meshIndex++) {
|
|
@@ -480,10 +584,12 @@ export class ObjectRenderer {
|
|
|
480
584
|
isMasked = false;
|
|
481
585
|
}
|
|
482
586
|
if (mesh.isEnabled() && mesh.isVisible && mesh.subMeshes && !isMasked) {
|
|
587
|
+
this._activeMeshes.push(mesh);
|
|
588
|
+
meshToRender._internalAbstractMeshDataInfo._wasActiveLastFrame = true;
|
|
483
589
|
if (meshToRender !== mesh) {
|
|
484
590
|
meshToRender._activate(sceneRenderId, true);
|
|
485
591
|
}
|
|
486
|
-
this.enableBoundingBoxRendering && boundingBoxRenderer && boundingBoxRenderer._preActiveMesh(
|
|
592
|
+
this.enableBoundingBoxRendering && boundingBoxRenderer && boundingBoxRenderer._preActiveMesh(mesh);
|
|
487
593
|
if (mesh._activate(sceneRenderId, true) && mesh.subMeshes.length) {
|
|
488
594
|
if (!mesh.isAnInstance) {
|
|
489
595
|
meshToRender._internalAbstractMeshDataInfo._onlyForInstancesIntermediate = false;
|
|
@@ -497,7 +603,7 @@ export class ObjectRenderer {
|
|
|
497
603
|
scene._prepareSkeleton(meshToRender);
|
|
498
604
|
for (let subIndex = 0; subIndex < meshToRender.subMeshes.length; subIndex++) {
|
|
499
605
|
const subMesh = meshToRender.subMeshes[subIndex];
|
|
500
|
-
this.enableBoundingBoxRendering && boundingBoxRenderer && boundingBoxRenderer._evaluateSubMesh(
|
|
606
|
+
this.enableBoundingBoxRendering && boundingBoxRenderer && boundingBoxRenderer._evaluateSubMesh(mesh, subMesh);
|
|
501
607
|
this._renderingManager.dispatch(subMesh, meshToRender);
|
|
502
608
|
}
|
|
503
609
|
}
|
|
@@ -505,15 +611,32 @@ export class ObjectRenderer {
|
|
|
505
611
|
}
|
|
506
612
|
}
|
|
507
613
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
614
|
+
if (this.enableBoundingBoxRendering && boundingBoxRenderer && winterIsComing) {
|
|
615
|
+
for (let i = 0; i < boundingBoxRenderer.renderList.length; i++) {
|
|
616
|
+
const boundingBox = boundingBoxRenderer.renderList.data[i];
|
|
617
|
+
this._activeBoundingBoxes.push(boundingBox);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
if (this._scene.particlesEnabled) {
|
|
621
|
+
this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);
|
|
622
|
+
const particleSystems = this.particleSystemList || scene.particleSystems;
|
|
623
|
+
for (let particleIndex = 0; particleIndex < particleSystems.length; particleIndex++) {
|
|
624
|
+
const particleSystem = particleSystems[particleIndex];
|
|
625
|
+
const emitter = particleSystem.emitter;
|
|
626
|
+
if (!particleSystem.isStarted() || !emitter || (emitter.position && !emitter.isEnabled())) {
|
|
627
|
+
continue;
|
|
628
|
+
}
|
|
629
|
+
this._renderingManager.dispatchParticles(particleSystem);
|
|
514
630
|
}
|
|
515
|
-
this.
|
|
631
|
+
this._scene.onAfterParticlesRenderingObservable.notifyObservers(this._scene);
|
|
516
632
|
}
|
|
633
|
+
return currentRenderList;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Gets the rendering manager
|
|
637
|
+
*/
|
|
638
|
+
get renderingManager() {
|
|
639
|
+
return this._renderingManager;
|
|
517
640
|
}
|
|
518
641
|
/**
|
|
519
642
|
* Overrides the default sort function applied in the rendering group to prepare the meshes.
|
|
@@ -569,6 +692,9 @@ export class ObjectRenderer {
|
|
|
569
692
|
this.onFastPathRenderObservable.clear();
|
|
570
693
|
this._releaseRenderPassId();
|
|
571
694
|
this.renderList = null;
|
|
695
|
+
this._sceneUBO?.dispose();
|
|
696
|
+
this._sceneUBO = undefined;
|
|
697
|
+
this._scene.removeObjectRenderer(this);
|
|
572
698
|
}
|
|
573
699
|
/** @internal */
|
|
574
700
|
_rebuild() {
|