@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Nullable, DataArray, IndicesArray, Immutable } from "../types";
|
|
2
2
|
import { Engine } from "../Engines/engine";
|
|
3
3
|
import { InstancingAttributeInfo } from "../Engines/instancingAttributeInfo";
|
|
4
|
-
import { InternalTexture } from "../Materials/Textures/internalTexture";
|
|
4
|
+
import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture";
|
|
5
5
|
import { IEffectCreationOptions, Effect } from "../Materials/effect";
|
|
6
6
|
import { EffectFallbacks } from "../Materials/effectFallbacks";
|
|
7
7
|
import { VertexBuffer } from "../Buffers/buffer";
|
|
@@ -29,6 +29,7 @@ import { Observable } from "../Misc/observable";
|
|
|
29
29
|
import { TwgslOptions } from "./WebGPU/webgpuTintWASM";
|
|
30
30
|
import { ExternalTexture } from "../Materials/Textures/externalTexture";
|
|
31
31
|
import { ShaderLanguage } from "../Materials/shaderLanguage";
|
|
32
|
+
import { InternalTextureCreationOptions, TextureSize } from "../Materials/Textures/textureCreationOptions";
|
|
32
33
|
declare type RenderTargetWrapper = import("./renderTargetWrapper").RenderTargetWrapper;
|
|
33
34
|
/**
|
|
34
35
|
* Options to load the associated Glslang library
|
|
@@ -194,6 +195,8 @@ export declare class WebGPUEngine extends Engine {
|
|
|
194
195
|
_counters: {
|
|
195
196
|
numEnableEffects: number;
|
|
196
197
|
numEnableDrawWrapper: number;
|
|
198
|
+
numBundleCreationNonCompatMode: number;
|
|
199
|
+
numBundleReuseNonCompatMode: number;
|
|
197
200
|
};
|
|
198
201
|
/**
|
|
199
202
|
* Counters from last frame
|
|
@@ -201,6 +204,8 @@ export declare class WebGPUEngine extends Engine {
|
|
|
201
204
|
readonly countersLastFrame: {
|
|
202
205
|
numEnableEffects: number;
|
|
203
206
|
numEnableDrawWrapper: number;
|
|
207
|
+
numBundleCreationNonCompatMode: number;
|
|
208
|
+
numBundleReuseNonCompatMode: number;
|
|
204
209
|
};
|
|
205
210
|
/**
|
|
206
211
|
* Max number of uncaptured error messages to log
|
|
@@ -230,12 +235,15 @@ export declare class WebGPUEngine extends Engine {
|
|
|
230
235
|
/** @hidden */
|
|
231
236
|
_pendingDebugCommands: Array<[string, Nullable<string>]>;
|
|
232
237
|
private _bundleList;
|
|
238
|
+
private _bundleListRenderTarget;
|
|
233
239
|
/** @hidden */
|
|
234
240
|
_onAfterUnbindFrameBufferObservable: Observable<WebGPUEngine>;
|
|
241
|
+
private _defaultDrawContext;
|
|
235
242
|
private _defaultMaterialContext;
|
|
236
243
|
/** @hidden */
|
|
244
|
+
_currentDrawContext: WebGPUDrawContext;
|
|
245
|
+
/** @hidden */
|
|
237
246
|
_currentMaterialContext: WebGPUMaterialContext;
|
|
238
|
-
private _currentDrawContext;
|
|
239
247
|
private _currentOverrideVertexBuffers;
|
|
240
248
|
private _currentIndexBuffer;
|
|
241
249
|
private __colorWrite;
|
|
@@ -324,12 +332,12 @@ export declare class WebGPUEngine extends Engine {
|
|
|
324
332
|
version: string;
|
|
325
333
|
};
|
|
326
334
|
/**
|
|
327
|
-
* True to be in compatibility mode, meaning rendering
|
|
328
|
-
* Setting the property to false will improve performances
|
|
329
|
-
* See @TODO WEBGPU DOC PAGE
|
|
330
|
-
* @hidden
|
|
335
|
+
* (WebGPU only) True (default) to be in compatibility mode, meaning rendering all existing scenes without artifacts (same rendering than WebGL).
|
|
336
|
+
* Setting the property to false will improve performances but may not work in some scenes if some precautions are not taken.
|
|
337
|
+
* See @TODO WEBGPU DOC PAGE for more details
|
|
331
338
|
*/
|
|
332
|
-
compatibilityMode: boolean;
|
|
339
|
+
get compatibilityMode(): boolean;
|
|
340
|
+
set compatibilityMode(mode: boolean);
|
|
333
341
|
/** @hidden */
|
|
334
342
|
get currentSampleCount(): number;
|
|
335
343
|
/**
|
|
@@ -544,6 +552,16 @@ export declare class WebGPUEngine extends Engine {
|
|
|
544
552
|
/** @hidden */
|
|
545
553
|
_getRGBABufferInternalSizedFormat(type: number, format?: number): number;
|
|
546
554
|
updateTextureComparisonFunction(texture: InternalTexture, comparisonFunction: number): void;
|
|
555
|
+
/**
|
|
556
|
+
* Creates an internal texture without binding it to a framebuffer
|
|
557
|
+
* @hidden
|
|
558
|
+
* @param size defines the size of the texture
|
|
559
|
+
* @param options defines the options used to create the texture
|
|
560
|
+
* @param delayGPUTextureCreation true to delay the texture creation the first time it is really needed. false to create it right away
|
|
561
|
+
* @param source source type of the texture
|
|
562
|
+
* @returns a new render target texture stored in an InternalTexture
|
|
563
|
+
*/
|
|
564
|
+
_createInternalTexture(size: TextureSize, options: boolean | InternalTextureCreationOptions, delayGPUTextureCreation?: boolean, source?: InternalTextureSource): InternalTexture;
|
|
547
565
|
/**
|
|
548
566
|
* Usually called from Texture.ts.
|
|
549
567
|
* Passed information to create a hardware texture
|
|
@@ -715,6 +733,7 @@ export declare class WebGPUEngine extends Engine {
|
|
|
715
733
|
* @param zOffsetUnits defines the value to apply to zOffsetUnits (0 by default)
|
|
716
734
|
*/
|
|
717
735
|
setState(culling: boolean, zOffset?: number, force?: boolean, reverseSide?: boolean, cullBackFaces?: boolean, stencil?: IStencilState, zOffsetUnits?: number): void;
|
|
736
|
+
private _applyRenderPassChanges;
|
|
718
737
|
private _draw;
|
|
719
738
|
/**
|
|
720
739
|
* Draw a list of indexed primitives
|
|
@@ -776,6 +795,8 @@ export declare class WebGPUEngine extends Engine {
|
|
|
776
795
|
/** @hidden */
|
|
777
796
|
_unpackFlipY(value: boolean): void;
|
|
778
797
|
/** @hidden */
|
|
798
|
+
_bindUnboundFramebuffer(framebuffer: Nullable<WebGLFramebuffer>): void;
|
|
799
|
+
/** @hidden */
|
|
779
800
|
_getSamplingParameters(samplingMode: number, generateMipMaps: boolean): {
|
|
780
801
|
min: number;
|
|
781
802
|
mag: number;
|
package/Engines/webgpuEngine.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Logger } from "../Misc/logger.js";
|
|
|
3
3
|
import { IsWindowObjectExist } from '../Misc/domManagement.js';
|
|
4
4
|
import { Color4 } from "../Maths/math.js";
|
|
5
5
|
import { Engine } from "../Engines/engine.js";
|
|
6
|
-
import { InternalTextureSource } from "../Materials/Textures/internalTexture.js";
|
|
6
|
+
import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture.js";
|
|
7
7
|
import { Effect } from "../Materials/effect.js";
|
|
8
8
|
import * as WebGPUConstants from './WebGPU/webgpuConstants.js';
|
|
9
9
|
import { VertexBuffer } from "../Buffers/buffer.js";
|
|
@@ -68,6 +68,8 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
68
68
|
_this._counters = {
|
|
69
69
|
numEnableEffects: 0,
|
|
70
70
|
numEnableDrawWrapper: 0,
|
|
71
|
+
numBundleCreationNonCompatMode: 0,
|
|
72
|
+
numBundleReuseNonCompatMode: 0,
|
|
71
73
|
};
|
|
72
74
|
/**
|
|
73
75
|
* Counters from last frame
|
|
@@ -75,6 +77,8 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
75
77
|
_this.countersLastFrame = {
|
|
76
78
|
numEnableEffects: 0,
|
|
77
79
|
numEnableDrawWrapper: 0,
|
|
80
|
+
numBundleCreationNonCompatMode: 0,
|
|
81
|
+
numBundleReuseNonCompatMode: 0,
|
|
78
82
|
};
|
|
79
83
|
/**
|
|
80
84
|
* Max number of uncaptured error messages to log
|
|
@@ -113,13 +117,6 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
113
117
|
_this._snapshotRenderingRecordBundles = false;
|
|
114
118
|
_this._snapshotRenderingPlayBundles = false;
|
|
115
119
|
_this._snapshotRenderingMainPassBundleList = [];
|
|
116
|
-
/**
|
|
117
|
-
* True to be in compatibility mode, meaning rendering in the same way than OpenGL.
|
|
118
|
-
* Setting the property to false will improve performances, but can lead to rendering artifacts.
|
|
119
|
-
* See @TODO WEBGPU DOC PAGE
|
|
120
|
-
* @hidden
|
|
121
|
-
*/
|
|
122
|
-
_this.compatibilityMode = true;
|
|
123
120
|
//------------------------------------------------------------------------------
|
|
124
121
|
// Dynamic WebGPU States
|
|
125
122
|
//------------------------------------------------------------------------------
|
|
@@ -356,6 +353,21 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
356
353
|
version: "unknown version",
|
|
357
354
|
};
|
|
358
355
|
};
|
|
356
|
+
Object.defineProperty(WebGPUEngine.prototype, "compatibilityMode", {
|
|
357
|
+
/**
|
|
358
|
+
* (WebGPU only) True (default) to be in compatibility mode, meaning rendering all existing scenes without artifacts (same rendering than WebGL).
|
|
359
|
+
* Setting the property to false will improve performances but may not work in some scenes if some precautions are not taken.
|
|
360
|
+
* See @TODO WEBGPU DOC PAGE for more details
|
|
361
|
+
*/
|
|
362
|
+
get: function () {
|
|
363
|
+
return this._compatibilityMode;
|
|
364
|
+
},
|
|
365
|
+
set: function (mode) {
|
|
366
|
+
this._compatibilityMode = mode;
|
|
367
|
+
},
|
|
368
|
+
enumerable: false,
|
|
369
|
+
configurable: true
|
|
370
|
+
});
|
|
359
371
|
Object.defineProperty(WebGPUEngine.prototype, "currentSampleCount", {
|
|
360
372
|
/** @hidden */
|
|
361
373
|
get: function () {
|
|
@@ -467,6 +479,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
467
479
|
_this._timestampQuery = new WebGPUTimestampQuery(_this._device, _this._bufferManager);
|
|
468
480
|
_this._occlusionQuery = _this._device.createQuerySet ? new WebGPUOcclusionQuery(_this, _this._device, _this._bufferManager) : undefined;
|
|
469
481
|
_this._bundleList = new WebGPUBundleList(_this._device);
|
|
482
|
+
_this._bundleListRenderTarget = new WebGPUBundleList(_this._device);
|
|
470
483
|
if (_this.dbgVerboseLogsForFirstFrames) {
|
|
471
484
|
if (_this._count === undefined) {
|
|
472
485
|
_this._count = 0;
|
|
@@ -487,6 +500,8 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
487
500
|
_this._depthCullingState.depthMask = true;
|
|
488
501
|
_this._textureHelper.setCommandEncoder(_this._uploadEncoder);
|
|
489
502
|
_this._clearQuad = new WebGPUClearQuad(_this._device, _this, _this._emptyVertexBuffer);
|
|
503
|
+
_this._defaultDrawContext = _this.createDrawContext();
|
|
504
|
+
_this._currentDrawContext = _this._defaultDrawContext;
|
|
490
505
|
_this._defaultMaterialContext = _this.createMaterialContext();
|
|
491
506
|
_this._currentMaterialContext = _this._defaultMaterialContext;
|
|
492
507
|
_this._initializeContextAndSwapChain();
|
|
@@ -596,6 +611,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
596
611
|
needsInvertingBitmap: false,
|
|
597
612
|
useUBOBindingCache: false,
|
|
598
613
|
needShaderCodeInlining: true,
|
|
614
|
+
needToAlwaysBindUniformBuffers: true,
|
|
599
615
|
_collectUbosUpdatedInFrame: false,
|
|
600
616
|
};
|
|
601
617
|
};
|
|
@@ -755,6 +771,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
755
771
|
/** @hidden */
|
|
756
772
|
WebGPUEngine.prototype.applyStates = function () {
|
|
757
773
|
this._stencilStateComposer.apply();
|
|
774
|
+
this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState.alphaBlend);
|
|
758
775
|
};
|
|
759
776
|
/**
|
|
760
777
|
* Force the entire cache to be cleared
|
|
@@ -963,7 +980,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
963
980
|
this._startRenderTargetRenderPass(this._currentRenderTarget, false, backBuffer ? color : null, depth, stencil);
|
|
964
981
|
}
|
|
965
982
|
if (!this.compatibilityMode) {
|
|
966
|
-
this.
|
|
983
|
+
this._bundleListRenderTarget.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
|
|
967
984
|
}
|
|
968
985
|
else {
|
|
969
986
|
this._applyScissor(this._currentRenderPass);
|
|
@@ -995,19 +1012,21 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
995
1012
|
WebGPUEngine.prototype._clearFullQuad = function (clearColor, clearDepth, clearStencil) {
|
|
996
1013
|
var _a, _b, _c;
|
|
997
1014
|
var renderPass = !this.compatibilityMode ? null : this._getCurrentRenderPass();
|
|
1015
|
+
var renderPassIndex = this._getCurrentRenderPassIndex();
|
|
1016
|
+
var bundleList = renderPassIndex === 0 ? this._bundleList : this._bundleListRenderTarget;
|
|
998
1017
|
this._clearQuad.setColorFormat(this._colorFormat);
|
|
999
1018
|
this._clearQuad.setDepthStencilFormat(this._depthTextureFormat);
|
|
1000
1019
|
this._clearQuad.setMRTAttachments((_a = this._cacheRenderPipeline.mrtAttachments) !== null && _a !== void 0 ? _a : [], (_b = this._cacheRenderPipeline.mrtTextureArray) !== null && _b !== void 0 ? _b : []);
|
|
1001
1020
|
if (!this.compatibilityMode) {
|
|
1002
|
-
|
|
1021
|
+
bundleList.addItem(new WebGPURenderItemStencilRef(this._clearStencilValue));
|
|
1003
1022
|
}
|
|
1004
1023
|
else {
|
|
1005
1024
|
renderPass.setStencilReference(this._clearStencilValue);
|
|
1006
1025
|
}
|
|
1007
1026
|
var bundle = this._clearQuad.clear(renderPass, clearColor, clearDepth, clearStencil, this.currentSampleCount);
|
|
1008
1027
|
if (!this.compatibilityMode) {
|
|
1009
|
-
|
|
1010
|
-
|
|
1028
|
+
bundleList.addBundle(bundle);
|
|
1029
|
+
bundleList.addItem(new WebGPURenderItemStencilRef((_c = this._stencilStateComposer.funcRef) !== null && _c !== void 0 ? _c : 0));
|
|
1011
1030
|
this._reportDrawCall();
|
|
1012
1031
|
}
|
|
1013
1032
|
else {
|
|
@@ -1259,7 +1278,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
1259
1278
|
* @returns the new context
|
|
1260
1279
|
*/
|
|
1261
1280
|
WebGPUEngine.prototype.createDrawContext = function () {
|
|
1262
|
-
return new WebGPUDrawContext();
|
|
1281
|
+
return new WebGPUDrawContext(this._bufferManager);
|
|
1263
1282
|
};
|
|
1264
1283
|
/** @hidden */
|
|
1265
1284
|
WebGPUEngine.prototype._preparePipelineContext = function (pipelineContext, vertexSourceCode, fragmentSourceCode, createAsRaw, rawVertexSourceCode, rawFragmentSourceCode, rebuildRebind, defines, transformFeedbackVaryings, key) {
|
|
@@ -1317,7 +1336,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
1317
1336
|
isNewEffect = effect !== this._currentEffect;
|
|
1318
1337
|
this._currentEffect = effect;
|
|
1319
1338
|
this._currentMaterialContext = this._defaultMaterialContext;
|
|
1320
|
-
this._currentDrawContext =
|
|
1339
|
+
this._currentDrawContext = this._defaultDrawContext;
|
|
1321
1340
|
this._counters.numEnableEffects++;
|
|
1322
1341
|
if (this.dbgLogIfNotDrawWrapper) {
|
|
1323
1342
|
Logger.Warn("enableEffect has been called with an Effect and not a Wrapper! effect.uniqueId=" + effect.uniqueId + ", effect.name=" + effect.name + ", effect.name.vertex=" + effect.name.vertex + ", effect.name.fragment=" + effect.name.fragment, 10);
|
|
@@ -1407,6 +1426,70 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
1407
1426
|
WebGPUEngine.prototype.updateTextureComparisonFunction = function (texture, comparisonFunction) {
|
|
1408
1427
|
texture._comparisonFunction = comparisonFunction;
|
|
1409
1428
|
};
|
|
1429
|
+
/**
|
|
1430
|
+
* Creates an internal texture without binding it to a framebuffer
|
|
1431
|
+
* @hidden
|
|
1432
|
+
* @param size defines the size of the texture
|
|
1433
|
+
* @param options defines the options used to create the texture
|
|
1434
|
+
* @param delayGPUTextureCreation true to delay the texture creation the first time it is really needed. false to create it right away
|
|
1435
|
+
* @param source source type of the texture
|
|
1436
|
+
* @returns a new render target texture stored in an InternalTexture
|
|
1437
|
+
*/
|
|
1438
|
+
WebGPUEngine.prototype._createInternalTexture = function (size, options, delayGPUTextureCreation, source) {
|
|
1439
|
+
var _a, _b;
|
|
1440
|
+
if (delayGPUTextureCreation === void 0) { delayGPUTextureCreation = true; }
|
|
1441
|
+
if (source === void 0) { source = InternalTextureSource.Unknown; }
|
|
1442
|
+
var fullOptions = {};
|
|
1443
|
+
if (options !== undefined && typeof options === "object") {
|
|
1444
|
+
fullOptions.generateMipMaps = options.generateMipMaps;
|
|
1445
|
+
fullOptions.type = options.type === undefined ? 0 : options.type;
|
|
1446
|
+
fullOptions.samplingMode = options.samplingMode === undefined ? 3 : options.samplingMode;
|
|
1447
|
+
fullOptions.format = options.format === undefined ? 5 : options.format;
|
|
1448
|
+
fullOptions.samples = (_a = options.samples) !== null && _a !== void 0 ? _a : 1;
|
|
1449
|
+
fullOptions.creationFlags = (_b = options.creationFlags) !== null && _b !== void 0 ? _b : 0;
|
|
1450
|
+
}
|
|
1451
|
+
else {
|
|
1452
|
+
fullOptions.generateMipMaps = options;
|
|
1453
|
+
fullOptions.type = 0;
|
|
1454
|
+
fullOptions.samplingMode = 3;
|
|
1455
|
+
fullOptions.format = 5;
|
|
1456
|
+
fullOptions.samples = 1;
|
|
1457
|
+
fullOptions.creationFlags = 0;
|
|
1458
|
+
}
|
|
1459
|
+
if (fullOptions.type === 1 && !this._caps.textureFloatLinearFiltering) {
|
|
1460
|
+
fullOptions.samplingMode = 1;
|
|
1461
|
+
}
|
|
1462
|
+
else if (fullOptions.type === 2 && !this._caps.textureHalfFloatLinearFiltering) {
|
|
1463
|
+
fullOptions.samplingMode = 1;
|
|
1464
|
+
}
|
|
1465
|
+
if (fullOptions.type === 1 && !this._caps.textureFloat) {
|
|
1466
|
+
fullOptions.type = 0;
|
|
1467
|
+
Logger.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE");
|
|
1468
|
+
}
|
|
1469
|
+
var texture = new InternalTexture(this, source);
|
|
1470
|
+
var width = size.width || size;
|
|
1471
|
+
var height = size.height || size;
|
|
1472
|
+
var layers = size.layers || 0;
|
|
1473
|
+
texture.baseWidth = width;
|
|
1474
|
+
texture.baseHeight = height;
|
|
1475
|
+
texture.width = width;
|
|
1476
|
+
texture.height = height;
|
|
1477
|
+
texture.depth = layers;
|
|
1478
|
+
texture.isReady = true;
|
|
1479
|
+
texture.samples = fullOptions.samples;
|
|
1480
|
+
texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;
|
|
1481
|
+
texture.samplingMode = fullOptions.samplingMode;
|
|
1482
|
+
texture.type = fullOptions.type;
|
|
1483
|
+
texture.format = fullOptions.format;
|
|
1484
|
+
texture.is2DArray = layers > 0;
|
|
1485
|
+
texture._cachedWrapU = 0;
|
|
1486
|
+
texture._cachedWrapV = 0;
|
|
1487
|
+
this._internalTexturesCache.push(texture);
|
|
1488
|
+
if (!delayGPUTextureCreation) {
|
|
1489
|
+
this._textureHelper.createGPUTextureForInternalTexture(texture, width, height, layers || 1, fullOptions.creationFlags);
|
|
1490
|
+
}
|
|
1491
|
+
return texture;
|
|
1492
|
+
};
|
|
1410
1493
|
/**
|
|
1411
1494
|
* Usually called from Texture.ts.
|
|
1412
1495
|
* Passed information to create a hardware texture
|
|
@@ -1848,8 +1931,12 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
1848
1931
|
}
|
|
1849
1932
|
this.countersLastFrame.numEnableEffects = this._counters.numEnableEffects;
|
|
1850
1933
|
this.countersLastFrame.numEnableDrawWrapper = this._counters.numEnableDrawWrapper;
|
|
1934
|
+
this.countersLastFrame.numBundleCreationNonCompatMode = this._counters.numBundleCreationNonCompatMode;
|
|
1935
|
+
this.countersLastFrame.numBundleReuseNonCompatMode = this._counters.numBundleReuseNonCompatMode;
|
|
1851
1936
|
this._counters.numEnableEffects = 0;
|
|
1852
1937
|
this._counters.numEnableDrawWrapper = 0;
|
|
1938
|
+
this._counters.numBundleCreationNonCompatMode = 0;
|
|
1939
|
+
this._counters.numBundleReuseNonCompatMode = 0;
|
|
1853
1940
|
this._cacheRenderPipeline.endFrame();
|
|
1854
1941
|
this._cacheBindGroups.endFrame();
|
|
1855
1942
|
this._pendingDebugCommands.length = 0;
|
|
@@ -1896,6 +1983,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
1896
1983
|
this._timestampQuery.startFrame(this._uploadEncoder);
|
|
1897
1984
|
this._textureHelper.setCommandEncoder(this._uploadEncoder);
|
|
1898
1985
|
this._bundleList.reset();
|
|
1986
|
+
this._bundleListRenderTarget.reset();
|
|
1899
1987
|
// restart the render pass
|
|
1900
1988
|
if (reopenPass) {
|
|
1901
1989
|
if (currentPasses & 2) {
|
|
@@ -2023,13 +2111,13 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
2023
2111
|
if (!gpuWrapper._bundleLists) {
|
|
2024
2112
|
gpuWrapper._bundleLists = [];
|
|
2025
2113
|
}
|
|
2026
|
-
gpuWrapper._bundleLists[gpuWrapper._currentLayer] = this.
|
|
2114
|
+
gpuWrapper._bundleLists[gpuWrapper._currentLayer] = this._bundleListRenderTarget.clone();
|
|
2027
2115
|
gpuWrapper._bundleLists[gpuWrapper._currentLayer].run(this._currentRenderPass);
|
|
2028
|
-
this.
|
|
2116
|
+
this._bundleListRenderTarget.reset();
|
|
2029
2117
|
}
|
|
2030
2118
|
else if (!this.compatibilityMode) {
|
|
2031
|
-
this.
|
|
2032
|
-
this.
|
|
2119
|
+
this._bundleListRenderTarget.run(this._currentRenderPass);
|
|
2120
|
+
this._bundleListRenderTarget.reset();
|
|
2033
2121
|
}
|
|
2034
2122
|
this._currentRenderPass.endPass();
|
|
2035
2123
|
if (this.dbgVerboseLogsForFirstFrames) {
|
|
@@ -2339,54 +2427,81 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
2339
2427
|
}
|
|
2340
2428
|
this._stencilStateComposer.stencilMaterial = stencil;
|
|
2341
2429
|
};
|
|
2342
|
-
WebGPUEngine.prototype.
|
|
2343
|
-
var _a
|
|
2344
|
-
var renderPass = this._getCurrentRenderPass();
|
|
2345
|
-
this.applyStates();
|
|
2430
|
+
WebGPUEngine.prototype._applyRenderPassChanges = function (renderPass, bundleList) {
|
|
2431
|
+
var _a;
|
|
2346
2432
|
var mustUpdateViewport = this._mustUpdateViewport(renderPass);
|
|
2347
2433
|
var mustUpdateScissor = this._mustUpdateScissor(renderPass);
|
|
2348
2434
|
var mustUpdateStencilRef = !this._stencilStateComposer.enabled ? false : this._mustUpdateStencilRef(renderPass);
|
|
2349
2435
|
var mustUpdateBlendColor = !this._alphaState.alphaBlend ? false : this._mustUpdateBlendColor(renderPass);
|
|
2436
|
+
if (bundleList) {
|
|
2437
|
+
if (mustUpdateViewport) {
|
|
2438
|
+
bundleList.addItem(new WebGPURenderItemViewport(this._viewportCached.x, this._viewportCached.y, this._viewportCached.z, this._viewportCached.w));
|
|
2439
|
+
}
|
|
2440
|
+
if (mustUpdateScissor) {
|
|
2441
|
+
bundleList.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
|
|
2442
|
+
}
|
|
2443
|
+
if (mustUpdateStencilRef) {
|
|
2444
|
+
bundleList.addItem(new WebGPURenderItemStencilRef((_a = this._stencilStateComposer.funcRef) !== null && _a !== void 0 ? _a : 0));
|
|
2445
|
+
}
|
|
2446
|
+
if (mustUpdateBlendColor) {
|
|
2447
|
+
bundleList.addItem(new WebGPURenderItemBlendColor(this._alphaState._blendConstants.slice()));
|
|
2448
|
+
}
|
|
2449
|
+
}
|
|
2450
|
+
else {
|
|
2451
|
+
if (mustUpdateViewport) {
|
|
2452
|
+
this._applyViewport(renderPass);
|
|
2453
|
+
}
|
|
2454
|
+
if (mustUpdateScissor) {
|
|
2455
|
+
this._applyScissor(renderPass);
|
|
2456
|
+
}
|
|
2457
|
+
if (mustUpdateStencilRef) {
|
|
2458
|
+
this._applyStencilRef(renderPass);
|
|
2459
|
+
}
|
|
2460
|
+
if (mustUpdateBlendColor) {
|
|
2461
|
+
this._applyBlendColor(renderPass);
|
|
2462
|
+
}
|
|
2463
|
+
}
|
|
2464
|
+
};
|
|
2465
|
+
WebGPUEngine.prototype._draw = function (drawType, fillMode, start, count, instancesCount) {
|
|
2466
|
+
var _a;
|
|
2467
|
+
var renderPass = this._getCurrentRenderPass();
|
|
2468
|
+
var renderPassIndex = this._getCurrentRenderPassIndex();
|
|
2469
|
+
var bundleList = renderPassIndex === 0 ? this._bundleList : this._bundleListRenderTarget;
|
|
2470
|
+
this.applyStates();
|
|
2350
2471
|
var webgpuPipelineContext = this._currentEffect._pipelineContext;
|
|
2351
2472
|
if (webgpuPipelineContext.uniformBuffer) {
|
|
2352
2473
|
webgpuPipelineContext.uniformBuffer.update();
|
|
2474
|
+
this.bindUniformBufferBase(webgpuPipelineContext.uniformBuffer.getBuffer(), 0, WebGPUShaderProcessor.LeftOvertUBOName);
|
|
2353
2475
|
}
|
|
2354
2476
|
if (this._snapshotRenderingPlayBundles) {
|
|
2355
2477
|
this._reportDrawCall();
|
|
2356
2478
|
return;
|
|
2357
2479
|
}
|
|
2358
|
-
|
|
2480
|
+
if (!this.compatibilityMode && (this._currentDrawContext.isDirty(this._currentMaterialContext.updateId) || this._currentMaterialContext.isDirty || this._currentMaterialContext.forceBindGroupCreation)) {
|
|
2481
|
+
this._currentDrawContext.fastBundle = undefined;
|
|
2482
|
+
}
|
|
2483
|
+
var useFastPath = !this.compatibilityMode && this._currentDrawContext.fastBundle;
|
|
2359
2484
|
var renderPass2 = renderPass;
|
|
2360
2485
|
if (useFastPath || this._snapshotRenderingRecordBundles) {
|
|
2361
|
-
|
|
2362
|
-
this._bundleList.addItem(new WebGPURenderItemViewport(this._viewportCached.x, this._viewportCached.y, this._viewportCached.z, this._viewportCached.w));
|
|
2363
|
-
}
|
|
2364
|
-
if (mustUpdateScissor) {
|
|
2365
|
-
this._bundleList.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
|
|
2366
|
-
}
|
|
2367
|
-
if (mustUpdateStencilRef) {
|
|
2368
|
-
this._bundleList.addItem(new WebGPURenderItemStencilRef((_b = this._stencilStateComposer.funcRef) !== null && _b !== void 0 ? _b : 0));
|
|
2369
|
-
}
|
|
2370
|
-
if (mustUpdateBlendColor) {
|
|
2371
|
-
this._bundleList.addItem(new WebGPURenderItemBlendColor(this._alphaState._blendConstants.slice()));
|
|
2372
|
-
}
|
|
2486
|
+
this._applyRenderPassChanges(renderPass, bundleList);
|
|
2373
2487
|
if (!this._snapshotRenderingRecordBundles) {
|
|
2374
|
-
this.
|
|
2488
|
+
this._counters.numBundleReuseNonCompatMode++;
|
|
2489
|
+
if (this._currentDrawContext.indirectDrawBuffer) {
|
|
2490
|
+
this._currentDrawContext.setIndirectData(count, instancesCount || 1, start);
|
|
2491
|
+
}
|
|
2492
|
+
bundleList.addBundle(this._currentDrawContext.fastBundle);
|
|
2375
2493
|
this._reportDrawCall();
|
|
2376
2494
|
return;
|
|
2377
2495
|
}
|
|
2378
|
-
renderPass2 =
|
|
2379
|
-
|
|
2380
|
-
}
|
|
2381
|
-
if (webgpuPipelineContext.uniformBuffer) {
|
|
2382
|
-
this.bindUniformBufferBase(webgpuPipelineContext.uniformBuffer.getBuffer(), 0, "LeftOver");
|
|
2496
|
+
renderPass2 = bundleList.getBundleEncoder(this._cacheRenderPipeline.colorFormats, this._depthTextureFormat, this.currentSampleCount); // for snapshot recording mode
|
|
2497
|
+
bundleList.numDrawCalls++;
|
|
2383
2498
|
}
|
|
2384
2499
|
var textureState = 0;
|
|
2385
2500
|
if (!this._caps.textureFloatLinearFiltering && this._currentMaterialContext.hasFloatTextures) {
|
|
2386
2501
|
var bitVal = 1;
|
|
2387
2502
|
for (var i = 0; i < webgpuPipelineContext.shaderProcessingContext.textureNames.length; ++i) {
|
|
2388
2503
|
var textureName = webgpuPipelineContext.shaderProcessingContext.textureNames[i];
|
|
2389
|
-
var texture = (
|
|
2504
|
+
var texture = (_a = this._currentMaterialContext.textures[textureName]) === null || _a === void 0 ? void 0 : _a.texture;
|
|
2390
2505
|
if ((texture === null || texture === void 0 ? void 0 : texture.type) === 1) {
|
|
2391
2506
|
textureState |= bitVal;
|
|
2392
2507
|
}
|
|
@@ -2394,21 +2509,11 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
2394
2509
|
}
|
|
2395
2510
|
}
|
|
2396
2511
|
var pipeline = this._cacheRenderPipeline.getRenderPipeline(fillMode, this._currentEffect, this.currentSampleCount, textureState);
|
|
2397
|
-
var bindGroups = this._cacheBindGroups.getBindGroups(webgpuPipelineContext, this._currentMaterialContext);
|
|
2512
|
+
var bindGroups = this._cacheBindGroups.getBindGroups(webgpuPipelineContext, this._currentDrawContext, this._currentMaterialContext);
|
|
2398
2513
|
if (!this._snapshotRenderingRecordBundles) {
|
|
2399
|
-
|
|
2400
|
-
this._applyViewport(renderPass);
|
|
2401
|
-
}
|
|
2402
|
-
if (mustUpdateScissor) {
|
|
2403
|
-
this._applyScissor(renderPass);
|
|
2404
|
-
}
|
|
2405
|
-
if (mustUpdateStencilRef) {
|
|
2406
|
-
this._applyStencilRef(renderPass);
|
|
2407
|
-
}
|
|
2408
|
-
if (mustUpdateBlendColor) {
|
|
2409
|
-
this._applyBlendColor(renderPass);
|
|
2410
|
-
}
|
|
2514
|
+
this._applyRenderPassChanges(renderPass, !this.compatibilityMode ? bundleList : null);
|
|
2411
2515
|
if (!this.compatibilityMode) {
|
|
2516
|
+
this._counters.numBundleCreationNonCompatMode++;
|
|
2412
2517
|
renderPass2 = this._device.createRenderBundleEncoder({
|
|
2413
2518
|
colorFormats: this._cacheRenderPipeline.colorFormats,
|
|
2414
2519
|
depthStencilFormat: this._depthTextureFormat,
|
|
@@ -2435,15 +2540,25 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
2435
2540
|
renderPass2.setBindGroup(i, bindGroups[i]);
|
|
2436
2541
|
}
|
|
2437
2542
|
// draw
|
|
2438
|
-
|
|
2543
|
+
var nonCompatMode = !this.compatibilityMode && !this._snapshotRenderingRecordBundles;
|
|
2544
|
+
if (nonCompatMode && this._currentDrawContext.indirectDrawBuffer) {
|
|
2545
|
+
this._currentDrawContext.setIndirectData(count, instancesCount || 1, start);
|
|
2546
|
+
if (drawType === 0) {
|
|
2547
|
+
renderPass2.drawIndexedIndirect(this._currentDrawContext.indirectDrawBuffer, 0);
|
|
2548
|
+
}
|
|
2549
|
+
else {
|
|
2550
|
+
renderPass2.drawIndirect(this._currentDrawContext.indirectDrawBuffer, 0);
|
|
2551
|
+
}
|
|
2552
|
+
}
|
|
2553
|
+
else if (drawType === 0) {
|
|
2439
2554
|
renderPass2.drawIndexed(count, instancesCount || 1, start, 0, 0);
|
|
2440
2555
|
}
|
|
2441
2556
|
else {
|
|
2442
2557
|
renderPass2.draw(count, instancesCount || 1, start, 0);
|
|
2443
2558
|
}
|
|
2444
|
-
if (
|
|
2559
|
+
if (nonCompatMode) {
|
|
2445
2560
|
this._currentDrawContext.fastBundle = renderPass2.finish();
|
|
2446
|
-
|
|
2561
|
+
bundleList.addBundle(this._currentDrawContext.fastBundle);
|
|
2447
2562
|
}
|
|
2448
2563
|
this._reportDrawCall();
|
|
2449
2564
|
};
|
|
@@ -2563,6 +2678,10 @@ var WebGPUEngine = /** @class */ (function (_super) {
|
|
|
2563
2678
|
};
|
|
2564
2679
|
/** @hidden */
|
|
2565
2680
|
WebGPUEngine.prototype._unpackFlipY = function (value) { };
|
|
2681
|
+
/** @hidden */
|
|
2682
|
+
WebGPUEngine.prototype._bindUnboundFramebuffer = function (framebuffer) {
|
|
2683
|
+
throw "_bindUnboundFramebuffer is not implementedin WebGPU! You probably want to use restoreDefaultFramebuffer or unBindFramebuffer instead";
|
|
2684
|
+
};
|
|
2566
2685
|
// TODO WEBGPU. All of the below should go once engine split with baseEngine.
|
|
2567
2686
|
/** @hidden */
|
|
2568
2687
|
WebGPUEngine.prototype._getSamplingParameters = function (samplingMode, generateMipMaps) {
|