@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60
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/Buffers/buffer.js +3 -2
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +2 -0
- package/Cameras/camera.js.map +1 -1
- package/Culling/boundingBox.d.ts +7 -1
- package/Culling/boundingBox.js +4 -0
- package/Culling/boundingBox.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -2
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
- package/DeviceInput/InputDevices/deviceEnums.js +0 -2
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/Engines/Extensions/engine.alpha.js +6 -6
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/IDrawContext.d.ts +4 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -0
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuBufferManager.js +3 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
- package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
- package/Engines/WebGPU/webgpuDrawContext.js +75 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
- package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +40 -7
- package/Engines/constants.js +40 -7
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +37 -2
- package/Engines/engine.js +68 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.js +19 -13
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +8 -2
- package/Engines/thinEngine.js +10 -5
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +28 -7
- package/Engines/webgpuEngine.js +177 -58
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -3
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +0 -2
- package/Layers/effectLayer.js +12 -11
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +5 -0
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.js +2 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -0
- package/LensFlares/lensFlare.js +5 -0
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -1
- package/LensFlares/lensFlareSystem.js +15 -12
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +0 -3
- package/Lights/Shadows/shadowGenerator.js +8 -14
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -0
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +8 -11
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
- package/Materials/Node/Blocks/cloudBlock.js +27 -8
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
- package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
- package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +4 -4
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +10 -5
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -0
- package/Materials/Textures/baseTexture.js +2 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +27 -0
- package/Materials/Textures/renderTargetTexture.js +127 -14
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +11 -4
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +2 -1
- package/Materials/drawWrapper.js +10 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.detailMapConfiguration.d.ts +1 -1
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +18 -9
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +3 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +0 -1
- package/Materials/shaderMaterial.js +3 -4
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -4
- package/Materials/shadowDepthWrapper.js +16 -15
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +10 -5
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +10 -2
- package/Materials/uniformBuffer.js +17 -11
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +13 -0
- package/Meshes/abstractMesh.js +22 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +7 -0
- package/Meshes/geometry.js +16 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +15 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +10 -9
- package/Meshes/subMesh.js +44 -43
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/basis.d.ts +3 -2
- package/Misc/basis.js +16 -15
- package/Misc/basis.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -0
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneSerializer.js +17 -17
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/textureTools.js +2 -0
- package/Misc/textureTools.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +5 -1
- package/Particles/gpuParticleSystem.js +31 -5
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +5 -1
- package/Particles/particleSystem.js +35 -5
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
- package/Physics/Plugins/ammoJSPlugin.js +10 -0
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +1 -0
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +1 -0
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +6 -0
- package/PostProcesses/postProcess.js +9 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js +3 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -3
- package/Rendering/boundingBoxRenderer.js +46 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +20 -1
- package/Rendering/depthPeelingRenderer.js +125 -32
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
- package/Rendering/depthPeelingSceneComponent.js +16 -0
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +9 -2
- package/Rendering/depthRenderer.js +77 -43
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +0 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -0
- package/Rendering/edgesRenderer.js +11 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +4 -4
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +5 -4
- package/Rendering/outlineRenderer.js +24 -19
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitFragment.js +1 -1
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.fragment.js +9 -0
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js +9 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
- package/Sprites/spriteManager.d.ts +3 -1
- package/Sprites/spriteManager.js +16 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +2 -0
- package/Sprites/spriteRenderer.js +26 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/package.json +16 -1
- package/scene.d.ts +18 -4
- package/scene.js +100 -41
- package/scene.js.map +1 -1
|
@@ -6,12 +6,13 @@ import { SmartArray } from "../Misc/smartArray.js";
|
|
|
6
6
|
import { SceneComponentConstants } from "../sceneComponent.js";
|
|
7
7
|
import { Material } from "../Materials/material.js";
|
|
8
8
|
import { ShaderMaterial } from "../Materials/shaderMaterial.js";
|
|
9
|
-
import "../Meshes/Builders/boxBuilder.js";
|
|
10
|
-
import "../Shaders/color.fragment.js";
|
|
11
|
-
import "../Shaders/color.vertex.js";
|
|
12
9
|
import { Color3 } from '../Maths/math.color.js';
|
|
13
10
|
import { Observable } from '../Misc/observable.js';
|
|
11
|
+
import { DrawWrapper } from "../Materials/drawWrapper.js";
|
|
12
|
+
import { UniformBuffer } from "../Materials/uniformBuffer.js";
|
|
14
13
|
import { CreateBoxVertexData } from "../Meshes/Builders/boxBuilder.js";
|
|
14
|
+
import "../Shaders/boundingBoxRenderer.fragment.js";
|
|
15
|
+
import "../Shaders/boundingBoxRenderer.vertex.js";
|
|
15
16
|
Object.defineProperty(Scene.prototype, "forceShowBoundingBoxes", {
|
|
16
17
|
get: function () {
|
|
17
18
|
return this._forceShowBoundingBoxes || false;
|
|
@@ -97,7 +98,18 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
97
98
|
this._fillIndexData = null;
|
|
98
99
|
this.scene = scene;
|
|
99
100
|
scene._addComponent(this);
|
|
101
|
+
this._uniformBufferFront = new UniformBuffer(this.scene.getEngine(), undefined, undefined, "BoundingBoxRendererFront");
|
|
102
|
+
this._buildUniformLayout(this._uniformBufferFront);
|
|
103
|
+
this._uniformBufferBack = new UniformBuffer(this.scene.getEngine(), undefined, undefined, "BoundingBoxRendererBack");
|
|
104
|
+
this._buildUniformLayout(this._uniformBufferBack);
|
|
100
105
|
}
|
|
106
|
+
BoundingBoxRenderer.prototype._buildUniformLayout = function (ubo) {
|
|
107
|
+
ubo.addUniform("color", 4);
|
|
108
|
+
ubo.addUniform("world", 16);
|
|
109
|
+
ubo.addUniform("viewProjection", 16);
|
|
110
|
+
ubo.addUniform("viewProjectionR", 16);
|
|
111
|
+
ubo.create();
|
|
112
|
+
};
|
|
101
113
|
/**
|
|
102
114
|
* Registers the component in a given scene
|
|
103
115
|
*/
|
|
@@ -127,9 +139,10 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
127
139
|
if (this._colorShader) {
|
|
128
140
|
return;
|
|
129
141
|
}
|
|
130
|
-
this._colorShader = new ShaderMaterial("colorShader", this.scene, "
|
|
142
|
+
this._colorShader = new ShaderMaterial("colorShader", this.scene, "boundingBoxRenderer", {
|
|
131
143
|
attributes: [VertexBuffer.PositionKind],
|
|
132
|
-
uniforms: ["world", "viewProjection", "color"]
|
|
144
|
+
uniforms: ["world", "viewProjection", "color"],
|
|
145
|
+
uniformBuffers: ["BoundingBoxRenderer"]
|
|
133
146
|
});
|
|
134
147
|
this._colorShader.reservedDataStore = {
|
|
135
148
|
hidden: true
|
|
@@ -167,6 +180,7 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
167
180
|
* @param renderingGroupId defines the rendering group to render
|
|
168
181
|
*/
|
|
169
182
|
BoundingBoxRenderer.prototype.render = function (renderingGroupId) {
|
|
183
|
+
var _a, _b;
|
|
170
184
|
if (this.renderList.length === 0 || !this.enabled) {
|
|
171
185
|
return;
|
|
172
186
|
}
|
|
@@ -176,12 +190,20 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
176
190
|
}
|
|
177
191
|
var engine = this.scene.getEngine();
|
|
178
192
|
engine.setDepthWrite(false);
|
|
179
|
-
this.
|
|
193
|
+
var frontColor = this.frontColor.toColor4();
|
|
194
|
+
var backColor = this.backColor.toColor4();
|
|
195
|
+
var transformMatrix = this.scene.getTransformMatrix();
|
|
180
196
|
for (var boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {
|
|
181
197
|
var boundingBox = this.renderList.data[boundingBoxIndex];
|
|
182
198
|
if (boundingBox._tag !== renderingGroupId) {
|
|
183
199
|
continue;
|
|
184
200
|
}
|
|
201
|
+
if (!boundingBox._drawWrapperFront) {
|
|
202
|
+
boundingBox._drawWrapperFront = new DrawWrapper(engine);
|
|
203
|
+
boundingBox._drawWrapperBack = new DrawWrapper(engine);
|
|
204
|
+
boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());
|
|
205
|
+
boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());
|
|
206
|
+
}
|
|
185
207
|
this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);
|
|
186
208
|
var min = boundingBox.minimum;
|
|
187
209
|
var max = boundingBox.maximum;
|
|
@@ -190,10 +212,11 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
190
212
|
var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)
|
|
191
213
|
.multiply(Matrix.Translation(median.x, median.y, median.z))
|
|
192
214
|
.multiply(boundingBox.getWorldMatrix());
|
|
193
|
-
// VBOs
|
|
194
|
-
engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());
|
|
195
215
|
var useReverseDepthBuffer = engine.useReverseDepthBuffer;
|
|
196
216
|
if (this.showBackLines) {
|
|
217
|
+
var drawWrapperBack = (_a = boundingBox._drawWrapperBack) !== null && _a !== void 0 ? _a : this._colorShader._getDrawWrapper();
|
|
218
|
+
this._colorShader._preBind(drawWrapperBack);
|
|
219
|
+
engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());
|
|
197
220
|
// Back
|
|
198
221
|
if (useReverseDepthBuffer) {
|
|
199
222
|
engine.setDepthFunctionToLessOrEqual();
|
|
@@ -201,12 +224,17 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
201
224
|
else {
|
|
202
225
|
engine.setDepthFunctionToGreaterOrEqual();
|
|
203
226
|
}
|
|
204
|
-
this.
|
|
205
|
-
this.
|
|
206
|
-
this.
|
|
227
|
+
this._uniformBufferBack.bindToEffect(drawWrapperBack.effect, "BoundingBoxRenderer");
|
|
228
|
+
this._uniformBufferBack.updateDirectColor4("color", backColor);
|
|
229
|
+
this._uniformBufferBack.updateMatrix("world", worldMatrix);
|
|
230
|
+
this._uniformBufferBack.updateMatrix("viewProjection", transformMatrix);
|
|
231
|
+
this._uniformBufferBack.update();
|
|
207
232
|
// Draw order
|
|
208
233
|
engine.drawElementsType(Material.LineListDrawMode, 0, 24);
|
|
209
234
|
}
|
|
235
|
+
var drawWrapperFront = (_b = boundingBox._drawWrapperFront) !== null && _b !== void 0 ? _b : this._colorShader._getDrawWrapper();
|
|
236
|
+
this._colorShader._preBind(drawWrapperFront);
|
|
237
|
+
engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());
|
|
210
238
|
// Front
|
|
211
239
|
if (useReverseDepthBuffer) {
|
|
212
240
|
engine.setDepthFunctionToGreater();
|
|
@@ -214,9 +242,11 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
214
242
|
else {
|
|
215
243
|
engine.setDepthFunctionToLess();
|
|
216
244
|
}
|
|
217
|
-
this.
|
|
218
|
-
this.
|
|
219
|
-
this.
|
|
245
|
+
this._uniformBufferFront.bindToEffect(drawWrapperFront.effect, "BoundingBoxRenderer");
|
|
246
|
+
this._uniformBufferFront.updateDirectColor4("color", frontColor);
|
|
247
|
+
this._uniformBufferFront.updateMatrix("world", worldMatrix);
|
|
248
|
+
this._uniformBufferFront.updateMatrix("viewProjection", transformMatrix);
|
|
249
|
+
this._uniformBufferFront.update();
|
|
220
250
|
// Draw order
|
|
221
251
|
engine.drawElementsType(Material.LineListDrawMode, 0, 24);
|
|
222
252
|
this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);
|
|
@@ -271,6 +301,8 @@ var BoundingBoxRenderer = /** @class */ (function () {
|
|
|
271
301
|
this.onResourcesReadyObservable.clear();
|
|
272
302
|
this.renderList.dispose();
|
|
273
303
|
this._colorShader.dispose();
|
|
304
|
+
this._uniformBufferFront.dispose();
|
|
305
|
+
this._uniformBufferBack.dispose();
|
|
274
306
|
var buffer = this._vertexBuffers[VertexBuffer.PositionKind];
|
|
275
307
|
if (buffer) {
|
|
276
308
|
buffer.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundingBoxRenderer.js","sourceRoot":"","sources":["../../../sourceES6/core/Rendering/boundingBoxRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Matrix } from \"../Maths/math.vector\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Nullable, FloatArray, IndicesArray } from \"../types\";\r\nimport { ISceneComponent, SceneComponentConstants } from \"../sceneComponent\";\r\nimport { BoundingBox } from \"../Culling/boundingBox\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\n\r\nimport \"../Meshes/Builders/boxBuilder\";\r\n\r\nimport \"../Shaders/color.fragment\";\r\nimport \"../Shaders/color.vertex\";\r\nimport { DataBuffer } from '../Buffers/dataBuffer';\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { Observable } from '../Misc/observable';\r\nimport { CreateBoxVertexData } from \"../Meshes/Builders/boxBuilder\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @hidden (Backing field) */\r\n _boundingBoxRenderer: BoundingBoxRenderer;\r\n\r\n /** @hidden (Backing field) */\r\n _forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if all bounding boxes must be rendered\r\n */\r\n forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets the bounding box renderer associated with the scene\r\n * @returns a BoundingBoxRenderer\r\n */\r\n getBoundingBoxRenderer(): BoundingBoxRenderer;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"forceShowBoundingBoxes\", {\r\n get: function (this: Scene) {\r\n return this._forceShowBoundingBoxes || false;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n this._forceShowBoundingBoxes = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nScene.prototype.getBoundingBoxRenderer = function (): BoundingBoxRenderer {\r\n\r\n if (!this._boundingBoxRenderer) {\r\n this._boundingBoxRenderer = new BoundingBoxRenderer(this);\r\n }\r\n\r\n return this._boundingBoxRenderer;\r\n};\r\n\r\ndeclare module \"../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /** @hidden (Backing field) */\r\n _showBoundingBox: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the bounding box must be rendered as well (false by default)\r\n */\r\n showBoundingBox: boolean;\r\n }\r\n}\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"showBoundingBox\", {\r\n get: function (this: AbstractMesh) {\r\n return this._showBoundingBox || false;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._showBoundingBox = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getScene().getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\n/**\r\n * Component responsible of rendering the bounding box of the meshes in a scene.\r\n * This is usually used through the mesh.showBoundingBox or the scene.forceShowBoundingBoxes properties\r\n */\r\nexport class BoundingBoxRenderer implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_BOUNDINGBOXRENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Color of the bounding box lines placed in front of an object\r\n */\r\n public frontColor = new Color3(1, 1, 1);\r\n /**\r\n * Color of the bounding box lines placed behind an object\r\n */\r\n public backColor = new Color3(0.1, 0.1, 0.1);\r\n /**\r\n * Defines if the renderer should show the back lines or not\r\n */\r\n public showBackLines = true;\r\n\r\n /**\r\n * Observable raised before rendering a bounding box\r\n */\r\n public onBeforeBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after rendering a bounding box\r\n */\r\n public onAfterBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after resources are created\r\n */\r\n public onResourcesReadyObservable = new Observable<BoundingBoxRenderer>();\r\n\r\n /**\r\n * When false, no bounding boxes will be rendered\r\n */\r\n public enabled = true;\r\n\r\n /**\r\n * @hidden\r\n */\r\n public renderList = new SmartArray<BoundingBox>(32);\r\n\r\n private _colorShader: ShaderMaterial;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: DataBuffer;\r\n private _fillIndexBuffer: Nullable<DataBuffer> = null;\r\n private _fillIndexData: Nullable<IndicesArray> = null;\r\n\r\n /**\r\n * Instantiates a new bounding box renderer in a scene.\r\n * @param scene the scene the renderer renders in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n scene._addComponent(this);\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._beforeEvaluateActiveMeshStage.registerStep(SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset);\r\n\r\n this.scene._preActiveMeshStage.registerStep(SceneComponentConstants.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER, this, this._preActiveMesh);\r\n\r\n this.scene._evaluateSubMeshStage.registerStep(SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh);\r\n\r\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render);\r\n }\r\n\r\n private _evaluateSubMesh(mesh: AbstractMesh, subMesh: SubMesh): void {\r\n if (mesh.showSubMeshesBoundingBox) {\r\n const boundingInfo = subMesh.getBoundingInfo();\r\n if (boundingInfo !== null && boundingInfo !== undefined) {\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n }\r\n\r\n private _preActiveMesh(mesh: AbstractMesh): void {\r\n if (mesh.showBoundingBox || this.scene.forceShowBoundingBoxes) {\r\n let boundingInfo = mesh.getBoundingInfo();\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n\r\n private _prepareResources(): void {\r\n if (this._colorShader) {\r\n return;\r\n }\r\n\r\n this._colorShader = new ShaderMaterial(\"colorShader\", this.scene, \"color\",\r\n {\r\n attributes: [VertexBuffer.PositionKind],\r\n uniforms: [\"world\", \"viewProjection\", \"color\"]\r\n });\r\n\r\n this._colorShader.reservedDataStore = {\r\n hidden: true\r\n };\r\n var engine = this.scene.getEngine();\r\n var boxdata = CreateBoxVertexData({ size: 1.0 });\r\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, <FloatArray>boxdata.positions, VertexBuffer.PositionKind, false);\r\n this._createIndexBuffer();\r\n this._fillIndexData = boxdata.indices;\r\n this.onResourcesReadyObservable.notifyObservers(this);\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n var engine = this.scene.getEngine();\r\n this._indexBuffer = engine.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4]);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n let vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public reset(): void {\r\n this.renderList.reset();\r\n }\r\n\r\n /**\r\n * Render the bounding boxes of a specific rendering group\r\n * @param renderingGroupId defines the rendering group to render\r\n */\r\n public render(renderingGroupId: number): void {\r\n if (this.renderList.length === 0 || !this.enabled) {\r\n return;\r\n }\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady()) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n engine.setDepthWrite(false);\r\n this._colorShader._preBind();\r\n\r\n for (var boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {\r\n var boundingBox = this.renderList.data[boundingBoxIndex];\r\n if (boundingBox._tag !== renderingGroupId) {\r\n continue;\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);\r\n\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\r\n\r\n if (this.showBackLines) {\r\n // Back\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToLessOrEqual();\r\n } else {\r\n engine.setDepthFunctionToGreaterOrEqual();\r\n }\r\n this.scene.resetCachedMaterial();\r\n this._colorShader.setColor4(\"color\", this.backColor.toColor4());\r\n this._colorShader.bind(worldMatrix);\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n }\r\n\r\n // Front\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToGreater();\r\n } else {\r\n engine.setDepthFunctionToLess();\r\n }\r\n this.scene.resetCachedMaterial();\r\n this._colorShader.setColor4(\"color\", this.frontColor.toColor4());\r\n this._colorShader.bind(worldMatrix);\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n\r\n this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);\r\n }\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n }\r\n\r\n /**\r\n * In case of occlusion queries, we can render the occlusion bounding box through this method\r\n * @param mesh Define the mesh to render the occlusion bounding box for\r\n */\r\n public renderOcclusionBoundingBox(mesh: AbstractMesh): void {\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady() || !mesh.hasBoundingInfo) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n if (!this._fillIndexBuffer) {\r\n this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData!);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n engine.setColorWrite(false);\r\n this._colorShader._preBind();\r\n\r\n var boundingBox = mesh.getBoundingInfo().boundingBox;\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n engine.setDepthFunctionToLess();\r\n this.scene.resetCachedMaterial();\r\n this._colorShader.bind(worldMatrix);\r\n\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 36);\r\n\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n engine.setColorWrite(true);\r\n }\r\n\r\n /**\r\n * Dispose and release the resources attached to this renderer.\r\n */\r\n public dispose(): void {\r\n if (!this._colorShader) {\r\n return;\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.clear();\r\n this.onAfterBoxRenderingObservable.clear();\r\n this.onResourcesReadyObservable.clear();\r\n\r\n this.renderList.dispose();\r\n\r\n this._colorShader.dispose();\r\n\r\n var buffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (buffer) {\r\n buffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n this.scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n\r\n if (this._fillIndexBuffer) {\r\n this.scene.getEngine()._releaseBuffer(this._fillIndexBuffer);\r\n this._fillIndexBuffer = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"boundingBoxRenderer.js","sourceRoot":"","sources":["../../../sourceES6/core/Rendering/boundingBoxRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAmB,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,yCAAyC,CAAC;AACjD,OAAO,uCAAuC,CAAC;AAuB/C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,wBAAwB,EAAE;IAC7D,GAAG,EAAE;QACD,OAAO,IAAI,CAAC,uBAAuB,IAAI,KAAK,CAAC;IACjD,CAAC;IACD,GAAG,EAAE,UAAuB,KAAc;QACtC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,0CAA0C;QAC1C,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,sBAAsB,EAAE,CAAC;SACjC;IACL,CAAC;IACD,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH,KAAK,CAAC,SAAS,CAAC,sBAAsB,GAAG;IAErC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAC7D;IAED,OAAO,IAAI,CAAC,oBAAoB,CAAC;AACrC,CAAC,CAAC;AAcF,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,EAAE;IAC7D,GAAG,EAAE;QACD,OAAO,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC1C,CAAC;IACD,GAAG,EAAE,UAA8B,KAAc;QAC7C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,0CAA0C;QAC1C,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,CAAC;SAC5C;IACL,CAAC;IACD,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH;;;GAGG;AACH;IAyDI;;;OAGG;IACH,6BAAY,KAAY;QA5DxB;;WAEG;QACa,SAAI,GAAG,uBAAuB,CAAC,wBAAwB,CAAC;QAOxE;;WAEG;QACI,eAAU,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC;;WAEG;QACI,cAAS,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7C;;WAEG;QACI,kBAAa,GAAG,IAAI,CAAC;QAE5B;;WAEG;QACI,mCAA8B,GAAG,IAAI,UAAU,EAAe,CAAC;QAEtE;;WAEG;QACI,kCAA6B,GAAG,IAAI,UAAU,EAAe,CAAC;QAErE;;WAEG;QACI,+BAA0B,GAAG,IAAI,UAAU,EAAuB,CAAC;QAE1E;;WAEG;QACI,YAAO,GAAG,IAAI,CAAC;QAEtB;;WAEG;QACI,eAAU,GAAG,IAAI,UAAU,CAAc,EAAE,CAAC,CAAC;QAG5C,mBAAc,GAA8C,EAAE,CAAC;QAE/D,qBAAgB,GAAyB,IAAI,CAAC;QAC9C,mBAAc,GAA2B,IAAI,CAAC;QASlD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;QACvH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;QACrH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtD,CAAC;IAEO,iDAAmB,GAA3B,UAA4B,GAAkB;QAC1C,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3B,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACrC,GAAG,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,sCAAQ,GAAf;QACI,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,YAAY,CAAC,uBAAuB,CAAC,iDAAiD,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEpJ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,uBAAuB,CAAC,sCAAsC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEvI,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,uBAAuB,CAAC,wCAAwC,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE7I,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,YAAY,CAAC,uBAAuB,CAAC,gDAAgD,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvJ,CAAC;IAEO,8CAAgB,GAAxB,UAAyB,IAAkB,EAAE,OAAgB;QACzD,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;gBACrD,YAAY,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;aAClD;SACJ;IACL,CAAC;IAEO,4CAAc,GAAtB,UAAuB,IAAkB;QACrC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;YAC3D,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,YAAY,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;SAClD;IACL,CAAC;IAEO,+CAAiB,GAAzB;QACI,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO;SACV;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,qBAAqB,EACnF;YACI,UAAU,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;YACvC,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC;YAC9C,cAAc,EAAE,CAAC,qBAAqB,CAAC;SAC1C,CAAC,CAAC;QAEP,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG;YAClC,MAAM,EAAE,IAAI;SACf,CAAC;QACF,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM,EAAc,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3I,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAEO,gDAAkB,GAA1B;QACI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3H,CAAC;IAED;;;OAGG;IACI,qCAAO,GAAd;QACI,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,EAAE,EAAE;YACJ,EAAE,CAAC,QAAQ,EAAE,CAAC;SACjB;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACI,mCAAK,GAAZ;QACI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,oCAAM,GAAb,UAAc,gBAAwB;;QAClC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/C,OAAO;SACV;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE;YAC9B,OAAO;SACV;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAExD,KAAK,IAAI,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE;YAC1F,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzD,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,EAAE;gBACvC,SAAS;aACZ;YACD,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;gBAChC,WAAW,CAAC,iBAAiB,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;gBACxD,WAAW,CAAC,gBAAgB,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;gBAEvD,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;gBACvE,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;aACzE;YAED,IAAI,CAAC,8BAA8B,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAEjE,IAAI,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;YAC9B,IAAI,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;YAC9B,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAEtC,IAAI,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;iBACnD,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;iBAC1D,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;YAE5C,IAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;YAE3D,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAM,eAAe,GAAG,MAAA,WAAW,CAAC,gBAAgB,mCAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gBAE5F,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAU,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;gBAElG,OAAO;gBACP,IAAI,qBAAqB,EAAE;oBACvB,MAAM,CAAC,6BAA6B,EAAE,CAAC;iBAC1C;qBAAM;oBACH,MAAM,CAAC,gCAAgC,EAAE,CAAC;iBAC7C;gBACD,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,eAAe,CAAC,MAAO,EAAE,qBAAqB,CAAC,CAAC;gBACrF,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC/D,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC3D,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;gBACxE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;gBAEjC,aAAa;gBACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;aAC7D;YAED,IAAM,gBAAgB,GAAG,MAAA,WAAW,CAAC,iBAAiB,mCAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;YAE9F,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAE7C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAU,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;YAElG,QAAQ;YACR,IAAI,qBAAqB,EAAE;gBACvB,MAAM,CAAC,yBAAyB,EAAE,CAAC;aACtC;iBAAM;gBACH,MAAM,CAAC,sBAAsB,EAAE,CAAC;aACnC;YACD,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAO,EAAE,qBAAqB,CAAC,CAAC;YACvF,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACjE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;YACzE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAElC,aAAa;YACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAE1D,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;SACnE;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,6BAA6B,EAAE,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,wDAA0B,GAAjC,UAAkC,IAAkB;QAEhD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvD,OAAO;SACV;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;SAC1E;QAED,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAE7B,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC;QACrD,IAAI,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;QAC9B,IAAI,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;QAC9B,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtC,IAAI,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;aACnD,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAC1D,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAU,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;QAEtG,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,6BAA6B,EAAE,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,qCAAO,GAAd;QACI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,OAAO;SACV;QAED,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC;QAExC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAE1B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAE5B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAElC,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC5D,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;SACzD;QACD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;IACL,CAAC;IACL,0BAAC;AAAD,CAAC,AA3UD,IA2UC","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Matrix } from \"../Maths/math.vector\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Nullable, FloatArray, IndicesArray } from \"../types\";\r\nimport { ISceneComponent, SceneComponentConstants } from \"../sceneComponent\";\r\nimport { BoundingBox } from \"../Culling/boundingBox\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { DataBuffer } from '../Buffers/dataBuffer';\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { Observable } from '../Misc/observable';\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { CreateBoxVertexData } from \"../Meshes/Builders/boxBuilder\";\r\n\r\nimport \"../Shaders/boundingBoxRenderer.fragment\";\r\nimport \"../Shaders/boundingBoxRenderer.vertex\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @hidden (Backing field) */\r\n _boundingBoxRenderer: BoundingBoxRenderer;\r\n\r\n /** @hidden (Backing field) */\r\n _forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if all bounding boxes must be rendered\r\n */\r\n forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets the bounding box renderer associated with the scene\r\n * @returns a BoundingBoxRenderer\r\n */\r\n getBoundingBoxRenderer(): BoundingBoxRenderer;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"forceShowBoundingBoxes\", {\r\n get: function (this: Scene) {\r\n return this._forceShowBoundingBoxes || false;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n this._forceShowBoundingBoxes = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nScene.prototype.getBoundingBoxRenderer = function (): BoundingBoxRenderer {\r\n\r\n if (!this._boundingBoxRenderer) {\r\n this._boundingBoxRenderer = new BoundingBoxRenderer(this);\r\n }\r\n\r\n return this._boundingBoxRenderer;\r\n};\r\n\r\ndeclare module \"../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /** @hidden (Backing field) */\r\n _showBoundingBox: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the bounding box must be rendered as well (false by default)\r\n */\r\n showBoundingBox: boolean;\r\n }\r\n}\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"showBoundingBox\", {\r\n get: function (this: AbstractMesh) {\r\n return this._showBoundingBox || false;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._showBoundingBox = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getScene().getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\n/**\r\n * Component responsible of rendering the bounding box of the meshes in a scene.\r\n * This is usually used through the mesh.showBoundingBox or the scene.forceShowBoundingBoxes properties\r\n */\r\nexport class BoundingBoxRenderer implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_BOUNDINGBOXRENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Color of the bounding box lines placed in front of an object\r\n */\r\n public frontColor = new Color3(1, 1, 1);\r\n /**\r\n * Color of the bounding box lines placed behind an object\r\n */\r\n public backColor = new Color3(0.1, 0.1, 0.1);\r\n /**\r\n * Defines if the renderer should show the back lines or not\r\n */\r\n public showBackLines = true;\r\n\r\n /**\r\n * Observable raised before rendering a bounding box\r\n */\r\n public onBeforeBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after rendering a bounding box\r\n */\r\n public onAfterBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after resources are created\r\n */\r\n public onResourcesReadyObservable = new Observable<BoundingBoxRenderer>();\r\n\r\n /**\r\n * When false, no bounding boxes will be rendered\r\n */\r\n public enabled = true;\r\n\r\n /**\r\n * @hidden\r\n */\r\n public renderList = new SmartArray<BoundingBox>(32);\r\n\r\n private _colorShader: ShaderMaterial;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: DataBuffer;\r\n private _fillIndexBuffer: Nullable<DataBuffer> = null;\r\n private _fillIndexData: Nullable<IndicesArray> = null;\r\n private _uniformBufferFront: UniformBuffer;\r\n private _uniformBufferBack: UniformBuffer;\r\n\r\n /**\r\n * Instantiates a new bounding box renderer in a scene.\r\n * @param scene the scene the renderer renders in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n scene._addComponent(this);\r\n this._uniformBufferFront = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererFront\");\r\n this._buildUniformLayout(this._uniformBufferFront);\r\n this._uniformBufferBack = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererBack\");\r\n this._buildUniformLayout(this._uniformBufferBack);\r\n }\r\n\r\n private _buildUniformLayout(ubo: UniformBuffer): void {\r\n ubo.addUniform(\"color\", 4);\r\n ubo.addUniform(\"world\", 16);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.create();\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._beforeEvaluateActiveMeshStage.registerStep(SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset);\r\n\r\n this.scene._preActiveMeshStage.registerStep(SceneComponentConstants.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER, this, this._preActiveMesh);\r\n\r\n this.scene._evaluateSubMeshStage.registerStep(SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh);\r\n\r\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render);\r\n }\r\n\r\n private _evaluateSubMesh(mesh: AbstractMesh, subMesh: SubMesh): void {\r\n if (mesh.showSubMeshesBoundingBox) {\r\n const boundingInfo = subMesh.getBoundingInfo();\r\n if (boundingInfo !== null && boundingInfo !== undefined) {\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n }\r\n\r\n private _preActiveMesh(mesh: AbstractMesh): void {\r\n if (mesh.showBoundingBox || this.scene.forceShowBoundingBoxes) {\r\n let boundingInfo = mesh.getBoundingInfo();\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n\r\n private _prepareResources(): void {\r\n if (this._colorShader) {\r\n return;\r\n }\r\n\r\n this._colorShader = new ShaderMaterial(\"colorShader\", this.scene, \"boundingBoxRenderer\",\r\n {\r\n attributes: [VertexBuffer.PositionKind],\r\n uniforms: [\"world\", \"viewProjection\", \"color\"],\r\n uniformBuffers: [\"BoundingBoxRenderer\"]\r\n });\r\n\r\n this._colorShader.reservedDataStore = {\r\n hidden: true\r\n };\r\n var engine = this.scene.getEngine();\r\n var boxdata = CreateBoxVertexData({ size: 1.0 });\r\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, <FloatArray>boxdata.positions, VertexBuffer.PositionKind, false);\r\n this._createIndexBuffer();\r\n this._fillIndexData = boxdata.indices;\r\n this.onResourcesReadyObservable.notifyObservers(this);\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n var engine = this.scene.getEngine();\r\n this._indexBuffer = engine.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4]);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n let vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public reset(): void {\r\n this.renderList.reset();\r\n }\r\n\r\n /**\r\n * Render the bounding boxes of a specific rendering group\r\n * @param renderingGroupId defines the rendering group to render\r\n */\r\n public render(renderingGroupId: number): void {\r\n if (this.renderList.length === 0 || !this.enabled) {\r\n return;\r\n }\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady()) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n engine.setDepthWrite(false);\r\n\r\n const frontColor = this.frontColor.toColor4();\r\n const backColor = this.backColor.toColor4();\r\n const transformMatrix = this.scene.getTransformMatrix();\r\n\r\n for (var boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {\r\n var boundingBox = this.renderList.data[boundingBoxIndex];\r\n if (boundingBox._tag !== renderingGroupId) {\r\n continue;\r\n }\r\n if (!boundingBox._drawWrapperFront) {\r\n boundingBox._drawWrapperFront = new DrawWrapper(engine);\r\n boundingBox._drawWrapperBack = new DrawWrapper(engine);\r\n\r\n boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());\r\n boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);\r\n\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\r\n\r\n if (this.showBackLines) {\r\n const drawWrapperBack = boundingBox._drawWrapperBack ?? this._colorShader._getDrawWrapper();\r\n\r\n this._colorShader._preBind(drawWrapperBack);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n // Back\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToLessOrEqual();\r\n } else {\r\n engine.setDepthFunctionToGreaterOrEqual();\r\n }\r\n this._uniformBufferBack.bindToEffect(drawWrapperBack.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferBack.updateDirectColor4(\"color\", backColor);\r\n this._uniformBufferBack.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferBack.updateMatrix(\"viewProjection\", transformMatrix);\r\n this._uniformBufferBack.update();\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n }\r\n\r\n const drawWrapperFront = boundingBox._drawWrapperFront ?? this._colorShader._getDrawWrapper();\r\n\r\n this._colorShader._preBind(drawWrapperFront);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n // Front\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToGreater();\r\n } else {\r\n engine.setDepthFunctionToLess();\r\n }\r\n this._uniformBufferFront.bindToEffect(drawWrapperFront.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferFront.updateDirectColor4(\"color\", frontColor);\r\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferFront.updateMatrix(\"viewProjection\", transformMatrix);\r\n this._uniformBufferFront.update();\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n\r\n this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);\r\n }\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n }\r\n\r\n /**\r\n * In case of occlusion queries, we can render the occlusion bounding box through this method\r\n * @param mesh Define the mesh to render the occlusion bounding box for\r\n */\r\n public renderOcclusionBoundingBox(mesh: AbstractMesh): void {\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady() || !mesh.hasBoundingInfo) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n if (!this._fillIndexBuffer) {\r\n this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData!);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n engine.setColorWrite(false);\r\n this._colorShader._preBind();\r\n\r\n var boundingBox = mesh.getBoundingInfo().boundingBox;\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n engine.setDepthFunctionToLess();\r\n this.scene.resetCachedMaterial();\r\n this._colorShader.bind(worldMatrix);\r\n\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 36);\r\n\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n engine.setColorWrite(true);\r\n }\r\n\r\n /**\r\n * Dispose and release the resources attached to this renderer.\r\n */\r\n public dispose(): void {\r\n if (!this._colorShader) {\r\n return;\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.clear();\r\n this.onAfterBoxRenderingObservable.clear();\r\n this.onResourcesReadyObservable.clear();\r\n\r\n this.renderList.dispose();\r\n\r\n this._colorShader.dispose();\r\n\r\n this._uniformBufferFront.dispose();\r\n this._uniformBufferBack.dispose();\r\n\r\n var buffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (buffer) {\r\n buffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n this.scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n\r\n if (this._fillIndexBuffer) {\r\n this.scene.getEngine()._releaseBuffer(this._fillIndexBuffer);\r\n this._fillIndexBuffer = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementation based on https://medium.com/@shrekshao_71662/dual-depth-peeling-implementation-in-webgl-11baa061ba4b
|
|
3
|
+
*/
|
|
1
4
|
import { Effect } from "../Materials/effect";
|
|
2
5
|
import { SubMesh } from "../Meshes/subMesh";
|
|
3
6
|
import { SmartArray } from "../Misc/smartArray";
|
|
@@ -19,17 +22,31 @@ export declare class DepthPeelingRenderer {
|
|
|
19
22
|
private _colorMrts;
|
|
20
23
|
private _blendBackMrt;
|
|
21
24
|
private _blendBackEffectWrapper;
|
|
25
|
+
private _blendBackEffectWrapperPingPong;
|
|
22
26
|
private _finalEffectWrapper;
|
|
23
27
|
private _effectRenderer;
|
|
24
|
-
private _passCount;
|
|
25
28
|
private _currentPingPongState;
|
|
26
29
|
private _prePassEffectConfiguration;
|
|
27
30
|
private _blendBackTexture;
|
|
31
|
+
private _layoutCacheFormat;
|
|
28
32
|
private _layoutCache;
|
|
33
|
+
private _renderPassIds;
|
|
29
34
|
private static _DEPTH_CLEAR_VALUE;
|
|
30
35
|
private static _MIN_DEPTH;
|
|
31
36
|
private static _MAX_DEPTH;
|
|
32
37
|
private _colorCache;
|
|
38
|
+
private _passCount;
|
|
39
|
+
/**
|
|
40
|
+
* Number of depth peeling passes. As we are using dual depth peeling, each pass two levels of transparency are processed.
|
|
41
|
+
*/
|
|
42
|
+
get passCount(): number;
|
|
43
|
+
set passCount(count: number);
|
|
44
|
+
private _useRenderPasses;
|
|
45
|
+
/**
|
|
46
|
+
* Instructs the renderer to use render passes. It is an optimization that makes the rendering faster for some engines (like WebGPU) but that consumes more memory, so it is disabled by default.
|
|
47
|
+
*/
|
|
48
|
+
get useRenderPasses(): boolean;
|
|
49
|
+
set useRenderPasses(usePasses: boolean);
|
|
33
50
|
/**
|
|
34
51
|
* Instanciates the depth peeling renderer
|
|
35
52
|
* @param scene Scene to attach to
|
|
@@ -37,6 +54,8 @@ export declare class DepthPeelingRenderer {
|
|
|
37
54
|
* @returns The depth peeling renderer
|
|
38
55
|
*/
|
|
39
56
|
constructor(scene: Scene, passCount?: number);
|
|
57
|
+
private _createRenderPassIds;
|
|
58
|
+
private _releaseRenderPassIds;
|
|
40
59
|
private _createTextures;
|
|
41
60
|
private _disposeTextures;
|
|
42
61
|
private _updateTextures;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementation based on https://medium.com/@shrekshao_71662/dual-depth-peeling-implementation-in-webgl-11baa061ba4b
|
|
3
|
+
*/
|
|
1
4
|
import { MultiRenderTarget } from "../Materials/Textures/multiRenderTarget.js";
|
|
2
5
|
import { Color4 } from "../Maths/math.color.js";
|
|
3
6
|
import { ThinTexture } from "../Materials/Textures/thinTexture.js";
|
|
@@ -39,7 +42,8 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
39
42
|
if (passCount === void 0) { passCount = 5; }
|
|
40
43
|
this._thinTextures = [];
|
|
41
44
|
this._currentPingPongState = 0;
|
|
42
|
-
this.
|
|
45
|
+
this._layoutCacheFormat = [[true], [true, true], [true, true, true]];
|
|
46
|
+
this._layoutCache = [];
|
|
43
47
|
this._colorCache = [
|
|
44
48
|
new Color4(DepthPeelingRenderer._DEPTH_CLEAR_VALUE, DepthPeelingRenderer._DEPTH_CLEAR_VALUE, 0, 0),
|
|
45
49
|
new Color4(-DepthPeelingRenderer._MIN_DEPTH, DepthPeelingRenderer._MAX_DEPTH, 0, 0),
|
|
@@ -53,10 +57,65 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
53
57
|
Logger.Warn("Depth peeling for order independant transparency could not enable PrePass, aborting.");
|
|
54
58
|
return;
|
|
55
59
|
}
|
|
60
|
+
for (var i = 0; i < this._layoutCacheFormat.length; ++i) {
|
|
61
|
+
this._layoutCache[i] = this._engine.buildTextureLayout(this._layoutCacheFormat[i]);
|
|
62
|
+
}
|
|
63
|
+
this._renderPassIds = [];
|
|
64
|
+
this.useRenderPasses = false;
|
|
56
65
|
this._prePassEffectConfiguration = new DepthPeelingEffectConfiguration();
|
|
57
66
|
this._createTextures();
|
|
58
67
|
this._createEffects();
|
|
59
68
|
}
|
|
69
|
+
Object.defineProperty(DepthPeelingRenderer.prototype, "passCount", {
|
|
70
|
+
/**
|
|
71
|
+
* Number of depth peeling passes. As we are using dual depth peeling, each pass two levels of transparency are processed.
|
|
72
|
+
*/
|
|
73
|
+
get: function () {
|
|
74
|
+
return this._passCount;
|
|
75
|
+
},
|
|
76
|
+
set: function (count) {
|
|
77
|
+
if (this._passCount === count) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this._passCount = count;
|
|
81
|
+
this._createRenderPassIds();
|
|
82
|
+
},
|
|
83
|
+
enumerable: false,
|
|
84
|
+
configurable: true
|
|
85
|
+
});
|
|
86
|
+
Object.defineProperty(DepthPeelingRenderer.prototype, "useRenderPasses", {
|
|
87
|
+
/**
|
|
88
|
+
* Instructs the renderer to use render passes. It is an optimization that makes the rendering faster for some engines (like WebGPU) but that consumes more memory, so it is disabled by default.
|
|
89
|
+
*/
|
|
90
|
+
get: function () {
|
|
91
|
+
return this._useRenderPasses;
|
|
92
|
+
},
|
|
93
|
+
set: function (usePasses) {
|
|
94
|
+
if (this._useRenderPasses === usePasses) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this._useRenderPasses = usePasses;
|
|
98
|
+
this._createRenderPassIds();
|
|
99
|
+
},
|
|
100
|
+
enumerable: false,
|
|
101
|
+
configurable: true
|
|
102
|
+
});
|
|
103
|
+
DepthPeelingRenderer.prototype._createRenderPassIds = function () {
|
|
104
|
+
this._releaseRenderPassIds();
|
|
105
|
+
if (this._useRenderPasses) {
|
|
106
|
+
for (var i = 0; i < this._passCount + 1; ++i) {
|
|
107
|
+
if (!this._renderPassIds[i]) {
|
|
108
|
+
this._renderPassIds[i] = this._engine.createRenderPassId("DepthPeelingRenderer - pass #" + i);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
DepthPeelingRenderer.prototype._releaseRenderPassIds = function () {
|
|
114
|
+
for (var i = 0; i < this._renderPassIds.length; ++i) {
|
|
115
|
+
this._engine.releaseRenderPassId(this._renderPassIds[i]);
|
|
116
|
+
}
|
|
117
|
+
this._renderPassIds = [];
|
|
118
|
+
};
|
|
60
119
|
DepthPeelingRenderer.prototype._createTextures = function () {
|
|
61
120
|
var size = {
|
|
62
121
|
width: this._engine.getRenderWidth(),
|
|
@@ -64,15 +123,15 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
64
123
|
};
|
|
65
124
|
// 2 for ping pong
|
|
66
125
|
this._depthMrts = [new MultiRenderTarget("depthPeelingDepth0", size, 1, this._scene), new MultiRenderTarget("depthPeelingDepth1", size, 1, this._scene)];
|
|
67
|
-
this._colorMrts = [new MultiRenderTarget("depthPeelingColor0", size, 1, this._scene), new MultiRenderTarget("depthPeelingColor1", size, 1, this._scene)];
|
|
68
|
-
this._blendBackMrt = new MultiRenderTarget("depthPeelingBack", size, 1, this._scene);
|
|
126
|
+
this._colorMrts = [new MultiRenderTarget("depthPeelingColor0", size, 1, this._scene, { generateDepthBuffer: false }), new MultiRenderTarget("depthPeelingColor1", size, 1, this._scene, { generateDepthBuffer: false })];
|
|
127
|
+
this._blendBackMrt = new MultiRenderTarget("depthPeelingBack", size, 1, this._scene, { generateDepthBuffer: false });
|
|
69
128
|
// 0 is a depth texture
|
|
70
129
|
// 1 is a color texture
|
|
71
130
|
var optionsArray = [
|
|
72
131
|
{
|
|
73
132
|
format: 7,
|
|
74
133
|
samplingMode: 1,
|
|
75
|
-
type: 1,
|
|
134
|
+
type: this._engine.getCaps().textureFloatLinearFiltering ? 1 : 2,
|
|
76
135
|
},
|
|
77
136
|
{
|
|
78
137
|
format: 5,
|
|
@@ -81,9 +140,9 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
81
140
|
},
|
|
82
141
|
];
|
|
83
142
|
for (var i = 0; i < 2; i++) {
|
|
84
|
-
var depthTexture = this._engine._createInternalTexture(size, optionsArray[0]);
|
|
85
|
-
var frontColorTexture = this._engine._createInternalTexture(size, optionsArray[1]);
|
|
86
|
-
var backColorTexture = this._engine._createInternalTexture(size, optionsArray[1]);
|
|
143
|
+
var depthTexture = this._engine._createInternalTexture(size, optionsArray[0], false);
|
|
144
|
+
var frontColorTexture = this._engine._createInternalTexture(size, optionsArray[1], false);
|
|
145
|
+
var backColorTexture = this._engine._createInternalTexture(size, optionsArray[1], false);
|
|
87
146
|
this._depthMrts[i].setInternalTexture(depthTexture, 0);
|
|
88
147
|
this._depthMrts[i].setInternalTexture(frontColorTexture, 1);
|
|
89
148
|
this._depthMrts[i].setInternalTexture(backColorTexture, 2);
|
|
@@ -147,6 +206,13 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
147
206
|
samplerNames: ["uBackColor"],
|
|
148
207
|
uniformNames: [],
|
|
149
208
|
});
|
|
209
|
+
this._blendBackEffectWrapperPingPong = new EffectWrapper({
|
|
210
|
+
fragmentShader: "oitBackBlend",
|
|
211
|
+
useShaderStore: true,
|
|
212
|
+
engine: this._engine,
|
|
213
|
+
samplerNames: ["uBackColor"],
|
|
214
|
+
uniformNames: [],
|
|
215
|
+
});
|
|
150
216
|
this._finalEffectWrapper = new EffectWrapper({
|
|
151
217
|
fragmentShader: "oitFinal",
|
|
152
218
|
useShaderStore: true,
|
|
@@ -172,17 +238,38 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
172
238
|
effect.setTexture("oitFrontColorSampler", this._thinTextures[this._currentPingPongState * 3 + 1]);
|
|
173
239
|
};
|
|
174
240
|
DepthPeelingRenderer.prototype._renderSubMeshes = function (transparentSubMeshes) {
|
|
241
|
+
var mapMaterialContext;
|
|
242
|
+
if (this._useRenderPasses) {
|
|
243
|
+
mapMaterialContext = {};
|
|
244
|
+
}
|
|
175
245
|
for (var j = 0; j < transparentSubMeshes.length; j++) {
|
|
176
246
|
var material = transparentSubMeshes.data[j].getMaterial();
|
|
177
247
|
var previousShaderHotSwapping = true;
|
|
178
248
|
var previousBFC = false;
|
|
249
|
+
var subMesh = transparentSubMeshes.data[j];
|
|
250
|
+
var drawWrapper = void 0;
|
|
251
|
+
var firstDraw = false;
|
|
252
|
+
if (this._useRenderPasses) {
|
|
253
|
+
drawWrapper = subMesh._getDrawWrapper();
|
|
254
|
+
firstDraw = !drawWrapper;
|
|
255
|
+
}
|
|
179
256
|
if (material) {
|
|
180
257
|
previousShaderHotSwapping = material.allowShaderHotSwapping;
|
|
181
258
|
previousBFC = material.backFaceCulling;
|
|
182
259
|
material.allowShaderHotSwapping = false;
|
|
183
260
|
material.backFaceCulling = false;
|
|
184
261
|
}
|
|
185
|
-
|
|
262
|
+
subMesh.render(false);
|
|
263
|
+
if (firstDraw) { // first time we draw this submesh: we replace the material context
|
|
264
|
+
drawWrapper = subMesh._getDrawWrapper(); // we are sure it is now non empty as we just rendered the submesh
|
|
265
|
+
if (drawWrapper.materialContext) {
|
|
266
|
+
var newMaterialContext = mapMaterialContext[drawWrapper.materialContext.uniqueId];
|
|
267
|
+
if (!newMaterialContext) {
|
|
268
|
+
newMaterialContext = mapMaterialContext[drawWrapper.materialContext.uniqueId] = this._engine.createMaterialContext();
|
|
269
|
+
}
|
|
270
|
+
subMesh._getDrawWrapper().materialContext = newMaterialContext;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
186
273
|
if (material) {
|
|
187
274
|
material.allowShaderHotSwapping = previousShaderHotSwapping;
|
|
188
275
|
material.backFaceCulling = previousBFC;
|
|
@@ -190,9 +277,8 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
190
277
|
}
|
|
191
278
|
};
|
|
192
279
|
DepthPeelingRenderer.prototype._finalCompose = function (writeId) {
|
|
193
|
-
this._engine.
|
|
194
|
-
this._engine.setAlphaMode(
|
|
195
|
-
this._engine._alphaState.alphaBlend = false;
|
|
280
|
+
this._engine.restoreDefaultFramebuffer();
|
|
281
|
+
this._engine.setAlphaMode(0);
|
|
196
282
|
this._engine.applyStates();
|
|
197
283
|
this._engine.enableEffect(this._finalEffectWrapper._drawWrapper);
|
|
198
284
|
this._finalEffectWrapper.effect.setTexture("uFrontColor", this._thinTextures[writeId * 3 + 1]);
|
|
@@ -204,40 +290,43 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
204
290
|
* @param transparentSubMeshes List of transparent meshes to render
|
|
205
291
|
*/
|
|
206
292
|
DepthPeelingRenderer.prototype.render = function (transparentSubMeshes) {
|
|
207
|
-
if (!this._blendBackEffectWrapper.effect.isReady() || !this._finalEffectWrapper.effect.isReady() || !this._updateTextures()) {
|
|
293
|
+
if (!this._blendBackEffectWrapper.effect.isReady() || !this._blendBackEffectWrapperPingPong.effect.isReady() || !this._finalEffectWrapper.effect.isReady() || !this._updateTextures()) {
|
|
208
294
|
return;
|
|
209
295
|
}
|
|
210
296
|
if (!transparentSubMeshes.length) {
|
|
211
297
|
this._finalCompose(1);
|
|
212
298
|
return;
|
|
213
299
|
}
|
|
300
|
+
var currentRenderPassId = this._engine.currentRenderPassId;
|
|
214
301
|
this._scene.prePassRenderer._enabled = false;
|
|
302
|
+
if (this._useRenderPasses) {
|
|
303
|
+
this._engine.currentRenderPassId = this._renderPassIds[0];
|
|
304
|
+
}
|
|
215
305
|
// Clears
|
|
216
306
|
this._engine.bindFramebuffer(this._depthMrts[0].renderTarget);
|
|
217
|
-
|
|
218
|
-
this._engine.bindAttachments(attachments);
|
|
307
|
+
this._engine.bindAttachments(this._layoutCache[0]);
|
|
219
308
|
this._engine.clear(this._colorCache[0], true, false, false);
|
|
220
309
|
this._engine.bindFramebuffer(this._depthMrts[1].renderTarget);
|
|
310
|
+
this._engine.bindAttachments(this._layoutCache[0]);
|
|
221
311
|
this._engine.clear(this._colorCache[1], true, false, false);
|
|
222
312
|
this._engine.bindFramebuffer(this._colorMrts[0].renderTarget);
|
|
223
|
-
|
|
224
|
-
this._engine.bindAttachments(attachments);
|
|
313
|
+
this._engine.bindAttachments(this._layoutCache[1]);
|
|
225
314
|
this._engine.clear(this._colorCache[2], true, false, false);
|
|
226
315
|
this._engine.bindFramebuffer(this._colorMrts[1].renderTarget);
|
|
316
|
+
this._engine.bindAttachments(this._layoutCache[1]);
|
|
227
317
|
this._engine.clear(this._colorCache[2], true, false, false);
|
|
228
318
|
// Draw depth for first pass
|
|
229
319
|
this._engine.bindFramebuffer(this._depthMrts[0].renderTarget);
|
|
230
|
-
|
|
231
|
-
this._engine.
|
|
320
|
+
this._engine.bindAttachments(this._layoutCache[0]);
|
|
321
|
+
this._engine.setAlphaMode(6); // the value does not matter (as MAX operation does not use them) but the src and dst color factors should not use SRC_ALPHA else WebGPU will throw a validation error
|
|
232
322
|
this._engine.setAlphaEquation(3);
|
|
233
|
-
this._engine._alphaState.alphaBlend = true;
|
|
234
323
|
this._engine.depthCullingState.depthMask = false;
|
|
235
324
|
this._engine.depthCullingState.depthTest = true;
|
|
236
|
-
this._engine.depthCullingState.cull = false;
|
|
237
325
|
this._engine.applyStates();
|
|
238
326
|
this._currentPingPongState = 1;
|
|
239
327
|
// Render
|
|
240
328
|
this._renderSubMeshes(transparentSubMeshes);
|
|
329
|
+
this._scene.resetCachedMaterial();
|
|
241
330
|
// depth peeling ping-pong
|
|
242
331
|
var readId = 0;
|
|
243
332
|
var writeId = 0;
|
|
@@ -245,39 +334,42 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
245
334
|
readId = i % 2;
|
|
246
335
|
writeId = 1 - readId;
|
|
247
336
|
this._currentPingPongState = readId;
|
|
337
|
+
if (this._useRenderPasses) {
|
|
338
|
+
this._engine.currentRenderPassId = this._renderPassIds[i + 1];
|
|
339
|
+
}
|
|
248
340
|
// Clears
|
|
249
341
|
this._engine.bindFramebuffer(this._depthMrts[writeId].renderTarget);
|
|
250
|
-
|
|
251
|
-
this._engine.bindAttachments(attachments);
|
|
342
|
+
this._engine.bindAttachments(this._layoutCache[0]);
|
|
252
343
|
this._engine.clear(this._colorCache[0], true, false, false);
|
|
253
344
|
this._engine.bindFramebuffer(this._colorMrts[writeId].renderTarget);
|
|
254
|
-
|
|
255
|
-
this._engine.bindAttachments(attachments);
|
|
345
|
+
this._engine.bindAttachments(this._layoutCache[1]);
|
|
256
346
|
this._engine.clear(this._colorCache[2], true, false, false);
|
|
257
347
|
this._engine.bindFramebuffer(this._depthMrts[writeId].renderTarget);
|
|
258
|
-
|
|
259
|
-
this._engine.
|
|
348
|
+
this._engine.bindAttachments(this._layoutCache[2]);
|
|
349
|
+
this._engine.setAlphaMode(6); // the value does not matter (as MAX operation does not use them) but the src and dst color factors should not use SRC_ALPHA else WebGPU will throw a validation error
|
|
260
350
|
this._engine.setAlphaEquation(3);
|
|
261
|
-
this._engine._alphaState.alphaBlend = true;
|
|
262
351
|
this._engine.depthCullingState.depthTest = false;
|
|
263
352
|
this._engine.applyStates();
|
|
264
353
|
// Render
|
|
265
354
|
this._renderSubMeshes(transparentSubMeshes);
|
|
355
|
+
this._scene.resetCachedMaterial();
|
|
266
356
|
// Back color
|
|
267
357
|
this._engine.bindFramebuffer(this._blendBackMrt.renderTarget);
|
|
268
|
-
|
|
269
|
-
this._engine.bindAttachments(attachments);
|
|
358
|
+
this._engine.bindAttachments(this._layoutCache[0]);
|
|
270
359
|
this._engine.setAlphaEquation(0);
|
|
271
360
|
this._engine.setAlphaMode(17);
|
|
272
361
|
this._engine.applyStates();
|
|
273
|
-
this.
|
|
274
|
-
this.
|
|
275
|
-
|
|
362
|
+
var blendBackEffectWrapper = writeId === 0 || !this._useRenderPasses ? this._blendBackEffectWrapper : this._blendBackEffectWrapperPingPong;
|
|
363
|
+
this._engine.enableEffect(blendBackEffectWrapper._drawWrapper);
|
|
364
|
+
blendBackEffectWrapper.effect.setTexture("uBackColor", this._thinTextures[writeId * 3 + 2]);
|
|
365
|
+
this._effectRenderer.render(blendBackEffectWrapper);
|
|
276
366
|
}
|
|
367
|
+
this._engine.currentRenderPassId = currentRenderPassId;
|
|
277
368
|
// Final composition on default FB
|
|
278
369
|
this._finalCompose(writeId);
|
|
279
370
|
this._scene.prePassRenderer._enabled = true;
|
|
280
371
|
this._engine.depthCullingState.depthMask = true;
|
|
372
|
+
this._engine.depthCullingState.depthTest = true;
|
|
281
373
|
};
|
|
282
374
|
/**
|
|
283
375
|
* Disposes the depth peeling renderer and associated ressources
|
|
@@ -287,6 +379,7 @@ var DepthPeelingRenderer = /** @class */ (function () {
|
|
|
287
379
|
this._blendBackEffectWrapper.dispose();
|
|
288
380
|
this._finalEffectWrapper.dispose();
|
|
289
381
|
this._effectRenderer.dispose();
|
|
382
|
+
this._releaseRenderPassIds();
|
|
290
383
|
};
|
|
291
384
|
DepthPeelingRenderer._DEPTH_CLEAR_VALUE = -99999.0;
|
|
292
385
|
DepthPeelingRenderer._MIN_DEPTH = 0;
|