@onerjs/core 8.55.9 → 8.56.2
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/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
- package/AudioV2/webAudio/webAudioEngine.js +6 -5
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.js +24 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Culling/Helper/boundingInfoHelper.js +8 -4
- package/Culling/Helper/boundingInfoHelper.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.d.ts +5 -1
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.js +7 -3
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.d.ts +6 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js +16 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js.map +1 -0
- package/Engines/AbstractEngine/pure.d.ts +1 -0
- package/Engines/AbstractEngine/pure.js +1 -0
- package/Engines/AbstractEngine/pure.js.map +1 -1
- package/Engines/IDrawContext.d.ts +2 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
- package/Engines/WebGPU/webgpuDrawContext.js +15 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/abstractEngine.pure.js +2 -2
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +5 -0
- package/Engines/constants.js +5 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +11 -3
- package/Engines/webgpuEngine.d.ts +1 -0
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +10 -0
- package/Engines/webgpuEngine.pure.js +15 -1
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +4 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +12 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +2 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +21 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +45 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +2 -5
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +18 -3
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +2 -0
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +5 -21
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/powBlock.pure.js +2 -1
- package/Materials/Node/Blocks/powBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.pure.js +14 -12
- package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +11 -0
- package/Materials/Node/nodeMaterial.pure.js +11 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +4 -3
- package/Materials/Node/nodeMaterialBuildState.js +7 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +4 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +4 -0
- package/Materials/Textures/index.d.ts +1 -0
- package/Materials/Textures/index.js +1 -0
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +29 -6
- package/Materials/Textures/textureProcessor.js +22 -16
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/drawWrapper.js +3 -0
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/imageProcessingConfiguration.defines.d.ts +3 -0
- package/Materials/imageProcessingConfiguration.defines.js +2 -0
- package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
- package/Materials/imageProcessingConfiguration.functions.js +3 -0
- package/Materials/imageProcessingConfiguration.functions.js.map +1 -1
- package/Materials/imageProcessingConfiguration.pure.d.ts +58 -0
- package/Materials/imageProcessingConfiguration.pure.js +123 -2
- package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +19 -0
- package/Materials/materialHelper.geometryrendering.js +29 -1
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +3 -0
- package/Materials/prepass.defines.js +3 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +4 -0
- package/Materials/uniformBuffer.d.ts +29 -0
- package/Materials/uniformBuffer.js +146 -0
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/colorTemperature.functions.d.ts +29 -0
- package/Maths/colorTemperature.functions.js +196 -0
- package/Maths/colorTemperature.functions.js.map +1 -0
- package/Maths/index.d.ts +1 -0
- package/Maths/index.js +1 -0
- package/Maths/index.js.map +1 -1
- package/Maths/math.vector.pure.d.ts +1 -5
- package/Maths/math.vector.pure.js.map +1 -1
- package/Maths/pure.d.ts +1 -0
- package/Maths/pure.js +1 -0
- package/Maths/pure.js.map +1 -1
- package/Misc/filesInput.d.ts +15 -0
- package/Misc/filesInput.js +156 -74
- package/Misc/filesInput.js.map +1 -1
- package/Misc/observable.pure.js +1 -3
- package/Misc/observable.pure.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +41 -1
- package/PostProcesses/imageProcessingPostProcess.js +41 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +50 -0
- package/PostProcesses/thinImageProcessingPostProcess.js +65 -0
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js +22 -0
- package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +39 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +2 -4
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/pure.d.ts +1 -0
- package/Rendering/IBLShadows/pure.js +1 -0
- package/Rendering/IBLShadows/pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +11 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +36 -14
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +5 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +16 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +5 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +12 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +30 -0
- package/Rendering/geometryBufferRenderer.pure.js +84 -0
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/iblCdfGenerator.js +10 -1
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +2 -2
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js +3 -0
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js +3 -0
- package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/objectIdFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/objectIdFunctions.js +22 -0
- package/Shaders/ShadersInclude/objectIdFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +34 -4
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -2
- package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js +5 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +5 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +7 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleDiffuse.vertex.js +7 -1
- package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +7 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +9 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/openpbr.fragment.js +2 -1
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.js +2 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +3 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.js +22 -0
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +35 -5
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +8 -2
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +5 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +5 -1
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +16 -4
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +15 -3
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -3
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +9 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/XR/features/Layers/WebXRCompositionLayer.d.ts +52 -0
- package/XR/features/Layers/WebXRCompositionLayer.js +80 -0
- package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.pure.js +2 -1
- package/XR/features/WebXRControllerPointerSelection.pure.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.pure.js +2 -1
- package/XR/features/WebXRControllerTeleportation.pure.js.map +1 -1
- package/XR/features/WebXRDepthSensing.pure.d.ts +21 -0
- package/XR/features/WebXRDepthSensing.pure.js +42 -0
- package/XR/features/WebXRDepthSensing.pure.js.map +1 -1
- package/XR/features/WebXRHandTracking.pure.js +2 -0
- package/XR/features/WebXRHandTracking.pure.js.map +1 -1
- package/XR/features/WebXRLayers.pure.d.ts +12 -0
- package/XR/features/WebXRLayers.pure.js +31 -1
- package/XR/features/WebXRLayers.pure.js.map +1 -1
- package/XR/features/WebXRTrackedSources.d.ts +5 -0
- package/XR/features/WebXRTrackedSources.js +8 -0
- package/XR/features/WebXRTrackedSources.js.map +1 -0
- package/XR/features/WebXRTrackedSources.pure.d.ts +70 -0
- package/XR/features/WebXRTrackedSources.pure.js +153 -0
- package/XR/features/WebXRTrackedSources.pure.js.map +1 -0
- package/XR/features/index.d.ts +1 -0
- package/XR/features/index.js +1 -0
- package/XR/features/index.js.map +1 -1
- package/XR/features/pure.d.ts +1 -0
- package/XR/features/pure.js +1 -0
- package/XR/features/pure.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +53 -1
- package/XR/motionController/webXRAbstractMotionController.js +61 -0
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/webXRDefaultExperience.js +8 -4
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +86 -44
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +9 -0
- package/XR/webXRFeaturesManager.js +4 -0
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRGraphicsBinding.d.ts +29 -0
- package/XR/webXRGraphicsBinding.js +40 -0
- package/XR/webXRGraphicsBinding.js.map +1 -1
- package/XR/webXRInputSource.js +1 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +7 -5
- package/XR/webXRLayerWrapper.js +10 -7
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +45 -0
- package/XR/webXRSessionManager.js +174 -29
- package/XR/webXRSessionManager.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialHelper.geometryrendering.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.geometryrendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Matrix } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * Type of clear operation to perform on a geometry texture.\r\n */\r\nexport const enum GeometryRenderingTextureClearType {\r\n /**\r\n * Clear the texture with zero.\r\n */\r\n Zero = 0,\r\n\r\n /**\r\n * Clear the texture with one.\r\n */\r\n One = 1,\r\n\r\n /**\r\n * Clear the texture with the maximum view Z value.\r\n */\r\n MaxViewZ = 2,\r\n\r\n /**\r\n * Do not clear the texture.\r\n */\r\n NoClear = 3,\r\n}\r\n\r\n/**\r\n * Configuration for geometry rendering.\r\n * A configuration is created for each rendering pass a geometry rendering is used in.\r\n */\r\nexport type GeometryRenderingConfiguration = {\r\n /**\r\n * Defines used for the geometry rendering.\r\n */\r\n defines: { [name: string]: number };\r\n\r\n /**\r\n * Previous world matrices for meshes.\r\n */\r\n previousWorldMatrices: { [index: number]: Matrix };\r\n\r\n /**\r\n * Previous view projection matrix.\r\n */\r\n previousViewProjection: Matrix;\r\n\r\n /**\r\n * Current view projection matrix.\r\n */\r\n currentViewProjection: Matrix;\r\n\r\n /**\r\n * Previous bones for skinned meshes.\r\n */\r\n previousBones: { [index: number]: Float32Array };\r\n\r\n /**\r\n * Last frame id the configuration was updated.\r\n */\r\n lastUpdateFrameId: number;\r\n\r\n /**\r\n * List of excluded skinned meshes.\r\n */\r\n excludedSkinnedMesh: AbstractMesh[];\r\n\r\n /**\r\n * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).\r\n */\r\n reverseCulling: boolean;\r\n};\r\n\r\n/**\r\n * Helper class to manage geometry rendering.\r\n */\r\nexport class MaterialHelperGeometryRendering {\r\n /**\r\n * Descriptions of the geometry textures.\r\n */\r\n public static readonly GeometryTextureDescriptions = [\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE,\r\n name: \"IrradianceLegacy\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE_LEGACY\",\r\n defineIndex: \"PREPASS_IRRADIANCE_LEGACY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n name: \"WorldPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_POSITION\",\r\n defineIndex: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n name: \"Velocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY\",\r\n defineIndex: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n name: \"Reflectivity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n defineIndex: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n name: \"ViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.MaxViewZ,\r\n define: \"PREPASS_DEPTH\",\r\n defineIndex: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n name: \"ViewNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_NORMAL\",\r\n defineIndex: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n name: \"AlbedoSqrt\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n defineIndex: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n name: \"WorldNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n defineIndex: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n name: \"LocalPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n defineIndex: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n name: \"ScreenDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n defineIndex: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n name: \"LinearVelocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n defineIndex: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_TEXTURE_TYPE,\r\n name: \"Albedo\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO\",\r\n defineIndex: \"PREPASS_ALBEDO_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE,\r\n name: \"NormalizedViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_NORMALIZED_VIEW_DEPTH\",\r\n defineIndex: \"PREPASS_NORMALIZED_VIEW_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n name: \"Color\",\r\n clearType: GeometryRenderingTextureClearType.NoClear,\r\n define: \"PREPASS_COLOR\",\r\n defineIndex: \"PREPASS_COLOR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n name: \"Irradiance\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE\",\r\n defineIndex: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n ];\r\n\r\n private static _Configurations: { [renderPassId: number]: GeometryRenderingConfiguration } = {};\r\n\r\n /**\r\n * Creates a new geometry rendering configuration.\r\n * @param renderPassId Render pass id the configuration is created for.\r\n * @returns The created configuration.\r\n */\r\n public static CreateConfiguration(renderPassId: number) {\r\n MaterialHelperGeometryRendering._Configurations[renderPassId] = {\r\n defines: {},\r\n previousWorldMatrices: {},\r\n previousViewProjection: Matrix.Zero(),\r\n currentViewProjection: Matrix.Zero(),\r\n previousBones: {},\r\n lastUpdateFrameId: -1,\r\n excludedSkinnedMesh: [],\r\n reverseCulling: false,\r\n };\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Deletes a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to delete.\r\n */\r\n public static DeleteConfiguration(renderPassId: number) {\r\n delete MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Gets a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to get.\r\n * @returns The configuration.\r\n */\r\n public static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration {\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Adds uniforms and samplers for geometry rendering.\r\n * @param uniforms The array of uniforms to add to.\r\n * @param _samplers The array of samplers to add to.\r\n */\r\n public static AddUniformsAndSamplers(uniforms: string[], _samplers: string[]) {\r\n uniforms.push(\"previousWorld\", \"previousViewProjection\", \"mPreviousBones\");\r\n }\r\n\r\n /**\r\n * Marks a list of meshes as dirty for geometry rendering.\r\n * @param renderPassId The render pass id the meshes are marked as dirty for.\r\n * @param meshes The list of meshes to mark as dirty.\r\n */\r\n public static MarkAsDirty(renderPassId: number, meshes: AbstractMesh[]) {\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh._removeDrawWrapper(renderPassId);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares defines for geometry rendering.\r\n * @param renderPassId The render pass id the defines are prepared for.\r\n * @param mesh The mesh the defines are prepared for.\r\n * @param defines The defines to update according to the geometry rendering configuration.\r\n */\r\n public static PrepareDefines(renderPassId: number, mesh: AbstractMesh, defines: MaterialDefines) {\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n defines[\"PREPASS\"] = true;\r\n\r\n let numMRT = 0;\r\n\r\n for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {\r\n const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];\r\n const defineName = geometryTextureDescription.define;\r\n const defineIndex = geometryTextureDescription.defineIndex;\r\n const index = configuration.defines[defineIndex];\r\n\r\n if (index !== undefined) {\r\n defines[defineName] = true;\r\n defines[defineIndex] = index;\r\n numMRT++;\r\n } else {\r\n defines[defineName] = false;\r\n delete defines[defineIndex];\r\n }\r\n }\r\n\r\n defines[\"SCENE_MRT_COUNT\"] = numMRT;\r\n\r\n defines[\"BONES_VELOCITY_ENABLED\"] =\r\n mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n }\r\n\r\n /**\r\n * Binds geometry rendering data for a mesh.\r\n * @param renderPassId The render pass id the geometry rendering data is bound for.\r\n * @param effect The effect to bind the geometry rendering data to.\r\n * @param mesh The mesh to bind the geometry rendering data for.\r\n * @param world The world matrix of the mesh.\r\n * @param material The material of the mesh.\r\n */\r\n public static Bind(renderPassId: number, effect: Effect, mesh: Mesh, world: Matrix, material: Material) {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (configuration.reverseCulling) {\r\n engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_VELOCITY_INDEX\"] !== undefined || configuration.defines[\"PREPASS_VELOCITY_LINEAR_INDEX\"] !== undefined) {\r\n if (!configuration.previousWorldMatrices[mesh.uniqueId]) {\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n }\r\n\r\n if (!configuration.previousViewProjection) {\r\n configuration.previousViewProjection = scene.getTransformMatrix().clone();\r\n configuration.currentViewProjection = scene.getTransformMatrix().clone();\r\n }\r\n\r\n if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {\r\n // First update of the prepass configuration for this rendering pass\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.lastUpdateFrameId !== engine.frameId) {\r\n // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n }\r\n\r\n effect.setMatrix(\"previousWorld\", configuration.previousWorldMatrices[mesh.uniqueId]);\r\n effect.setMatrix(\"previousViewProjection\", configuration.previousViewProjection);\r\n\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex(\"boneTextureInfo\") === -1) {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n if (!configuration.previousBones[mesh.uniqueId]) {\r\n configuration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", configuration.previousBones[mesh.uniqueId]);\r\n configuration.previousBones[mesh.uniqueId].set(matrices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"materialHelper.geometryrendering.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.geometryrendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Matrix } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * Provides the object ID written by geometry rendering for a mesh.\r\n *\r\n * IDs must be unsigned integers supported by the object ID texture format. ID 0 is reserved for background or excluded meshes.\r\n * RGBA textures support IDs up to 0xFFFFFF, while RED textures support IDs up to 0xFF.\r\n * This callback runs in the render hot path and may be called multiple times for the same mesh in a frame.\r\n * It should avoid allocations and return a consistent value for a mesh during a render.\r\n */\r\nexport type GeometryRenderingObjectIdProvider = (mesh: AbstractMesh) => number;\r\n\r\n/** @internal */\r\nexport function _GetGeometryRenderingObjectId(mesh: AbstractMesh, provider: GeometryRenderingObjectIdProvider, maxObjectId = 0xffffff): number {\r\n const objectId = provider(mesh);\r\n\r\n if (!Number.isInteger(objectId) || objectId < 0 || objectId > maxObjectId) {\r\n throw new Error(`Invalid geometry object ID ${objectId} for mesh \"${mesh.name}\". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`);\r\n }\r\n\r\n return objectId;\r\n}\r\n\r\n/**\r\n * Type of clear operation to perform on a geometry texture.\r\n */\r\nexport const enum GeometryRenderingTextureClearType {\r\n /**\r\n * Clear the texture with zero.\r\n */\r\n Zero = 0,\r\n\r\n /**\r\n * Clear the texture with one.\r\n */\r\n One = 1,\r\n\r\n /**\r\n * Clear the texture with the maximum view Z value.\r\n */\r\n MaxViewZ = 2,\r\n\r\n /**\r\n * Do not clear the texture.\r\n */\r\n NoClear = 3,\r\n}\r\n\r\n/**\r\n * Configuration for geometry rendering.\r\n * A configuration is created for each rendering pass a geometry rendering is used in.\r\n */\r\nexport type GeometryRenderingConfiguration = {\r\n /**\r\n * Defines used for the geometry rendering.\r\n */\r\n defines: { [name: string]: number };\r\n\r\n /**\r\n * Previous world matrices for meshes.\r\n */\r\n previousWorldMatrices: { [index: number]: Matrix };\r\n\r\n /**\r\n * Previous view projection matrix.\r\n */\r\n previousViewProjection: Matrix;\r\n\r\n /**\r\n * Current view projection matrix.\r\n */\r\n currentViewProjection: Matrix;\r\n\r\n /**\r\n * Previous bones for skinned meshes.\r\n */\r\n previousBones: { [index: number]: Float32Array };\r\n\r\n /**\r\n * Last frame id the configuration was updated.\r\n */\r\n lastUpdateFrameId: number;\r\n\r\n /**\r\n * List of excluded skinned meshes.\r\n */\r\n excludedSkinnedMesh: AbstractMesh[];\r\n\r\n /**\r\n * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).\r\n */\r\n reverseCulling: boolean;\r\n\r\n /**\r\n * Provides the object ID written for each rendered mesh.\r\n */\r\n objectIdProvider?: GeometryRenderingObjectIdProvider;\r\n\r\n /**\r\n * Whether the object ID texture uses the RED format.\r\n */\r\n objectIdIsRedFormat: boolean;\r\n};\r\n\r\n/**\r\n * Helper class to manage geometry rendering.\r\n */\r\nexport class MaterialHelperGeometryRendering {\r\n /**\r\n * Descriptions of the geometry textures.\r\n */\r\n public static readonly GeometryTextureDescriptions = [\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE,\r\n name: \"IrradianceLegacy\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE_LEGACY\",\r\n defineIndex: \"PREPASS_IRRADIANCE_LEGACY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n name: \"WorldPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_POSITION\",\r\n defineIndex: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n name: \"Velocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY\",\r\n defineIndex: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n name: \"Reflectivity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n defineIndex: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n name: \"ViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.MaxViewZ,\r\n define: \"PREPASS_DEPTH\",\r\n defineIndex: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n name: \"ViewNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_NORMAL\",\r\n defineIndex: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n name: \"AlbedoSqrt\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n defineIndex: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n name: \"WorldNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n defineIndex: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n name: \"LocalPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n defineIndex: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n name: \"ScreenDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n defineIndex: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n name: \"LinearVelocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n defineIndex: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_TEXTURE_TYPE,\r\n name: \"Albedo\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO\",\r\n defineIndex: \"PREPASS_ALBEDO_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE,\r\n name: \"NormalizedViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_NORMALIZED_VIEW_DEPTH\",\r\n defineIndex: \"PREPASS_NORMALIZED_VIEW_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n name: \"Color\",\r\n clearType: GeometryRenderingTextureClearType.NoClear,\r\n define: \"PREPASS_COLOR\",\r\n defineIndex: \"PREPASS_COLOR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n name: \"Irradiance\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE\",\r\n defineIndex: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_OBJECT_ID_TEXTURE_TYPE,\r\n name: \"ObjectId\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_OBJECT_ID\",\r\n defineIndex: \"PREPASS_OBJECT_ID_INDEX\",\r\n },\r\n ];\r\n\r\n private static _Configurations: { [renderPassId: number]: GeometryRenderingConfiguration } = {};\r\n\r\n /**\r\n * Creates a new geometry rendering configuration.\r\n * @param renderPassId Render pass id the configuration is created for.\r\n * @returns The created configuration.\r\n */\r\n public static CreateConfiguration(renderPassId: number) {\r\n MaterialHelperGeometryRendering._Configurations[renderPassId] = {\r\n defines: {},\r\n previousWorldMatrices: {},\r\n previousViewProjection: Matrix.Zero(),\r\n currentViewProjection: Matrix.Zero(),\r\n previousBones: {},\r\n lastUpdateFrameId: -1,\r\n excludedSkinnedMesh: [],\r\n reverseCulling: false,\r\n objectIdIsRedFormat: false,\r\n };\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Deletes a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to delete.\r\n */\r\n public static DeleteConfiguration(renderPassId: number) {\r\n delete MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Gets a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to get.\r\n * @returns The configuration.\r\n */\r\n public static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration {\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Adds uniforms and samplers for geometry rendering.\r\n * @param uniforms The array of uniforms to add to.\r\n * @param _samplers The array of samplers to add to.\r\n */\r\n public static AddUniformsAndSamplers(uniforms: string[], _samplers: string[]) {\r\n uniforms.push(\"previousWorld\", \"previousViewProjection\", \"mPreviousBones\", \"objectId\");\r\n }\r\n\r\n /**\r\n * Marks a list of meshes as dirty for geometry rendering.\r\n * @param renderPassId The render pass id the meshes are marked as dirty for.\r\n * @param meshes The list of meshes to mark as dirty.\r\n */\r\n public static MarkAsDirty(renderPassId: number, meshes: AbstractMesh[]) {\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh._removeDrawWrapper(renderPassId);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares defines for geometry rendering.\r\n * @param renderPassId The render pass id the defines are prepared for.\r\n * @param mesh The mesh the defines are prepared for.\r\n * @param defines The defines to update according to the geometry rendering configuration.\r\n */\r\n public static PrepareDefines(renderPassId: number, mesh: AbstractMesh, defines: MaterialDefines) {\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n defines[\"PREPASS\"] = true;\r\n\r\n let numMRT = 0;\r\n\r\n for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {\r\n const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];\r\n const defineName = geometryTextureDescription.define;\r\n const defineIndex = geometryTextureDescription.defineIndex;\r\n const index = configuration.defines[defineIndex];\r\n\r\n if (index !== undefined) {\r\n defines[defineName] = true;\r\n defines[defineIndex] = index;\r\n numMRT++;\r\n } else {\r\n defines[defineName] = false;\r\n delete defines[defineIndex];\r\n }\r\n }\r\n\r\n defines[\"PREPASS_OBJECT_ID_R8\"] = configuration.objectIdIsRedFormat;\r\n defines[\"SCENE_MRT_COUNT\"] = numMRT;\r\n\r\n defines[\"BONES_VELOCITY_ENABLED\"] =\r\n mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n }\r\n\r\n /**\r\n * Binds geometry rendering data for a mesh.\r\n * @param renderPassId The render pass id the geometry rendering data is bound for.\r\n * @param effect The effect to bind the geometry rendering data to.\r\n * @param mesh The mesh to bind the geometry rendering data for.\r\n * @param world The world matrix of the mesh.\r\n * @param material The material of the mesh.\r\n */\r\n public static Bind(renderPassId: number, effect: Effect, mesh: Mesh, world: Matrix, material: Material) {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (configuration.reverseCulling) {\r\n engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_OBJECT_ID_INDEX\"] !== undefined) {\r\n const maxObjectId = configuration.objectIdIsRedFormat ? 0xff : 0xffffff;\r\n let objectId = mesh.uniqueId;\r\n if (configuration.objectIdProvider) {\r\n objectId = _GetGeometryRenderingObjectId(mesh, configuration.objectIdProvider, maxObjectId);\r\n } else if (objectId > maxObjectId) {\r\n throw new Error(\r\n `Invalid geometry object ID ${objectId} for mesh \"${mesh.name}\". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`\r\n );\r\n }\r\n effect.setFloat(\"objectId\", objectId);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_VELOCITY_INDEX\"] !== undefined || configuration.defines[\"PREPASS_VELOCITY_LINEAR_INDEX\"] !== undefined) {\r\n if (!configuration.previousWorldMatrices[mesh.uniqueId]) {\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n }\r\n\r\n if (!configuration.previousViewProjection) {\r\n configuration.previousViewProjection = scene.getTransformMatrix().clone();\r\n configuration.currentViewProjection = scene.getTransformMatrix().clone();\r\n }\r\n\r\n if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {\r\n // First update of the prepass configuration for this rendering pass\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.lastUpdateFrameId !== engine.frameId) {\r\n // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n }\r\n\r\n effect.setMatrix(\"previousWorld\", configuration.previousWorldMatrices[mesh.uniqueId]);\r\n effect.setMatrix(\"previousViewProjection\", configuration.previousViewProjection);\r\n\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex(\"boneTextureInfo\") === -1) {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n if (!configuration.previousBones[mesh.uniqueId]) {\r\n configuration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", configuration.previousBones[mesh.uniqueId]);\r\n configuration.previousBones[mesh.uniqueId].set(matrices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -37,6 +37,9 @@ export declare function PrepassDefinesMixin<Tbase extends PrepassDefinesMixinCon
|
|
|
37
37
|
PREPASS_VELOCITY_LINEAR_INDEX: number;
|
|
38
38
|
PREPASS_REFLECTIVITY: boolean;
|
|
39
39
|
PREPASS_REFLECTIVITY_INDEX: number;
|
|
40
|
+
PREPASS_OBJECT_ID: boolean;
|
|
41
|
+
PREPASS_OBJECT_ID_INDEX: number;
|
|
42
|
+
PREPASS_OBJECT_ID_R8: boolean;
|
|
40
43
|
SCENE_MRT_COUNT: number;
|
|
41
44
|
};
|
|
42
45
|
} & Tbase;
|
|
@@ -38,6 +38,9 @@ export function PrepassDefinesMixin(base) {
|
|
|
38
38
|
this.PREPASS_VELOCITY_LINEAR_INDEX = -1;
|
|
39
39
|
this.PREPASS_REFLECTIVITY = false;
|
|
40
40
|
this.PREPASS_REFLECTIVITY_INDEX = -1;
|
|
41
|
+
this.PREPASS_OBJECT_ID = false;
|
|
42
|
+
this.PREPASS_OBJECT_ID_INDEX = -1;
|
|
43
|
+
this.PREPASS_OBJECT_ID_R8 = false;
|
|
41
44
|
this.SCENE_MRT_COUNT = 0;
|
|
42
45
|
}
|
|
43
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepass.defines.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/prepass.defines.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAA+C,IAAW;IACzF,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACI,YAAO,GAAG,KAAK,CAAC;YAChB,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,uBAAkB,GAAG,KAAK,CAAC;YAC3B,6BAAwB,GAAG,CAAC,CAAC,CAAC;YAC9B,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,wBAAmB,GAAG,KAAK,CAAC;YAC5B,8BAAyB,GAAG,CAAC,CAAC,CAAC;YAC/B,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,kCAA6B,GAAG,KAAK,CAAC;YACtC,wCAAmC,GAAG,CAAC,CAAC,CAAC;YACzC,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,8BAAyB,GAAG,KAAK,CAAC;YAClC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,2BAAsB,GAAG,KAAK,CAAC;YAC/B,iCAA4B,GAAG,CAAC,CAAC,CAAC;YAClC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,4BAAuB,GAAG,KAAK,CAAC;YAChC,kCAA6B,GAAG,CAAC,CAAC,CAAC;YACnC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,oBAAe,GAAG,CAAC,CAAC;QAC/B,CAAC;KAAA,CAAC;AACN,CAAC","sourcesContent":["type PrepassDefinesMixinConstructor<T = {}> = new (...args: any[]) => T;\r\n\r\n/**\r\n * Mixin to add prepass defines to your material defines\r\n * @internal\r\n */\r\nexport function PrepassDefinesMixin<Tbase extends PrepassDefinesMixinConstructor>(base: Tbase) {\r\n return class extends base {\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE_LEGACY = false;\r\n public PREPASS_IRRADIANCE_LEGACY_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public SCENE_MRT_COUNT = 0;\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"prepass.defines.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/prepass.defines.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAA+C,IAAW;IACzF,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACI,YAAO,GAAG,KAAK,CAAC;YAChB,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,uBAAkB,GAAG,KAAK,CAAC;YAC3B,6BAAwB,GAAG,CAAC,CAAC,CAAC;YAC9B,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,wBAAmB,GAAG,KAAK,CAAC;YAC5B,8BAAyB,GAAG,CAAC,CAAC,CAAC;YAC/B,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,kCAA6B,GAAG,KAAK,CAAC;YACtC,wCAAmC,GAAG,CAAC,CAAC,CAAC;YACzC,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,8BAAyB,GAAG,KAAK,CAAC;YAClC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,2BAAsB,GAAG,KAAK,CAAC;YAC/B,iCAA4B,GAAG,CAAC,CAAC,CAAC;YAClC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,4BAAuB,GAAG,KAAK,CAAC;YAChC,kCAA6B,GAAG,CAAC,CAAC,CAAC;YACnC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,sBAAiB,GAAG,KAAK,CAAC;YAC1B,4BAAuB,GAAG,CAAC,CAAC,CAAC;YAC7B,yBAAoB,GAAG,KAAK,CAAC;YAC7B,oBAAe,GAAG,CAAC,CAAC;QAC/B,CAAC;KAAA,CAAC;AACN,CAAC","sourcesContent":["type PrepassDefinesMixinConstructor<T = {}> = new (...args: any[]) => T;\r\n\r\n/**\r\n * Mixin to add prepass defines to your material defines\r\n * @internal\r\n */\r\nexport function PrepassDefinesMixin<Tbase extends PrepassDefinesMixinConstructor>(base: Tbase) {\r\n return class extends base {\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE_LEGACY = false;\r\n public PREPASS_IRRADIANCE_LEGACY_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public PREPASS_OBJECT_ID = false;\r\n public PREPASS_OBJECT_ID_INDEX = -1;\r\n public PREPASS_OBJECT_ID_R8 = false;\r\n public SCENE_MRT_COUNT = 0;\r\n };\r\n}\r\n"]}
|
|
@@ -50,6 +50,9 @@ declare const StandardMaterialDefinesBase_base: {
|
|
|
50
50
|
PREPASS_VELOCITY_LINEAR_INDEX: number;
|
|
51
51
|
PREPASS_REFLECTIVITY: boolean;
|
|
52
52
|
PREPASS_REFLECTIVITY_INDEX: number;
|
|
53
|
+
PREPASS_OBJECT_ID: boolean;
|
|
54
|
+
PREPASS_OBJECT_ID_INDEX: number;
|
|
55
|
+
PREPASS_OBJECT_ID_R8: boolean;
|
|
53
56
|
SCENE_MRT_COUNT: number;
|
|
54
57
|
};
|
|
55
58
|
} & {
|
|
@@ -73,6 +76,7 @@ declare class StandardMaterialDefinesBase extends StandardMaterialDefinesBase_ba
|
|
|
73
76
|
declare const StandardMaterialDefines_base: {
|
|
74
77
|
new (...args: any[]): {
|
|
75
78
|
IMAGEPROCESSING: boolean;
|
|
79
|
+
WHITEBALANCE: boolean;
|
|
76
80
|
VIGNETTE: boolean;
|
|
77
81
|
VIGNETTEBLENDMODEMULTIPLY: boolean;
|
|
78
82
|
VIGNETTEBLENDMODEOPAQUE: boolean;
|
|
@@ -5,6 +5,7 @@ import { type ThinTexture } from "../Materials/Textures/thinTexture.js";
|
|
|
5
5
|
import { type DataBuffer } from "../Buffers/dataBuffer.js";
|
|
6
6
|
import { type InternalTexture } from "./Textures/internalTexture.js";
|
|
7
7
|
import { type AbstractEngine } from "../Engines/abstractEngine.js";
|
|
8
|
+
import { type WebGPUDrawContext } from "../Engines/WebGPU/webgpuDrawContext.js";
|
|
8
9
|
/**
|
|
9
10
|
* Uniform buffer objects.
|
|
10
11
|
*
|
|
@@ -37,6 +38,13 @@ export declare class UniformBuffer {
|
|
|
37
38
|
private _name;
|
|
38
39
|
private _currentFrameId;
|
|
39
40
|
private _trackUBOsInFrame;
|
|
41
|
+
private _slotByOwner;
|
|
42
|
+
private _ownerListsBySlot;
|
|
43
|
+
private _slotFrameId;
|
|
44
|
+
private _ownerCount;
|
|
45
|
+
private _freeSlots;
|
|
46
|
+
private _dataGeneration;
|
|
47
|
+
private _slotGeneration;
|
|
40
48
|
private static _MAX_UNIFORM_SIZE;
|
|
41
49
|
private static _TempBuffer;
|
|
42
50
|
private static _TempBufferInt32View;
|
|
@@ -316,6 +324,7 @@ export declare class UniformBuffer {
|
|
|
316
324
|
_rebuild(): void;
|
|
317
325
|
/** @internal */
|
|
318
326
|
_rebuildAfterContextLost(): void;
|
|
327
|
+
private _resetOwnerSlots;
|
|
319
328
|
/** @internal */
|
|
320
329
|
get _numBuffers(): number;
|
|
321
330
|
/** @internal */
|
|
@@ -333,6 +342,26 @@ export declare class UniformBuffer {
|
|
|
333
342
|
* Otherwise, the buffer will be updated only if the cache differs.
|
|
334
343
|
*/
|
|
335
344
|
update(): void;
|
|
345
|
+
/**
|
|
346
|
+
* Flushes the current uniform values into the GPU buffer owned by the draw context.
|
|
347
|
+
* Invariant: `_buffers[i][1]` (the CPU shadow) always holds what the GPU buffer of slot i contains.
|
|
348
|
+
* @param owner the draw context on behalf of which the update is done
|
|
349
|
+
* @internal
|
|
350
|
+
*/
|
|
351
|
+
_updateOwnerKeyed(owner: WebGPUDrawContext): void;
|
|
352
|
+
/**
|
|
353
|
+
* Gets a slot that is not owned by any draw context and has not been flushed in the current frame, creating one if needed.
|
|
354
|
+
* @param takeOwnership true to remove the slot from the free list (it is going to be owned by a context)
|
|
355
|
+
* @returns the slot index
|
|
356
|
+
*/
|
|
357
|
+
private _takeFreeSlot;
|
|
358
|
+
/**
|
|
359
|
+
* Releases the slot owned by a draw context (called when the context is disposed), so that another context can reuse it.
|
|
360
|
+
* @param owner the draw context
|
|
361
|
+
* @internal
|
|
362
|
+
*/
|
|
363
|
+
_releaseOwnerSlot(owner: WebGPUDrawContext): void;
|
|
364
|
+
private _removeOwnerBacklink;
|
|
336
365
|
private _createNewBuffer;
|
|
337
366
|
private _checkNewFrame;
|
|
338
367
|
/**
|
|
@@ -41,6 +41,7 @@ export class UniformBuffer {
|
|
|
41
41
|
this._uniformArraySizes = {};
|
|
42
42
|
this._uniformLocationPointer = 0;
|
|
43
43
|
this._needSync = false;
|
|
44
|
+
this._dataGeneration = 0;
|
|
44
45
|
this._trackUBOsInFrame = false;
|
|
45
46
|
if ((trackUBOsInFrame === undefined && this._engine._features.trackUbosInFrame) || trackUBOsInFrame === true) {
|
|
46
47
|
this._buffers = [];
|
|
@@ -49,6 +50,7 @@ export class UniformBuffer {
|
|
|
49
50
|
this._createBufferOnWrite = false;
|
|
50
51
|
this._currentFrameId = 0;
|
|
51
52
|
this._trackUBOsInFrame = true;
|
|
53
|
+
this._resetOwnerSlots();
|
|
52
54
|
}
|
|
53
55
|
if (this._noUBO) {
|
|
54
56
|
this.updateMatrix3x3 = this._updateMatrix3x3ForEffect;
|
|
@@ -328,6 +330,7 @@ export class UniformBuffer {
|
|
|
328
330
|
// See spec, alignment must be filled as a vec4
|
|
329
331
|
this._fillAlignment(4);
|
|
330
332
|
this._bufferData = new Float32Array(this._data);
|
|
333
|
+
this._dataGeneration++;
|
|
331
334
|
this._rebuild();
|
|
332
335
|
this._needSync = true;
|
|
333
336
|
}
|
|
@@ -368,9 +371,23 @@ export class UniformBuffer {
|
|
|
368
371
|
if (this._trackUBOsInFrame) {
|
|
369
372
|
this._buffers = [];
|
|
370
373
|
this._currentFrameId = 0;
|
|
374
|
+
this._resetOwnerSlots();
|
|
371
375
|
}
|
|
372
376
|
this._rebuild();
|
|
373
377
|
}
|
|
378
|
+
_resetOwnerSlots() {
|
|
379
|
+
if (this._ownerListsBySlot) {
|
|
380
|
+
for (const list of this._ownerListsBySlot.values()) {
|
|
381
|
+
this._removeOwnerBacklink(list);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
this._ownerListsBySlot = new Map();
|
|
385
|
+
this._slotByOwner = new WeakMap();
|
|
386
|
+
this._slotFrameId = [];
|
|
387
|
+
this._ownerCount = 0;
|
|
388
|
+
this._freeSlots = [];
|
|
389
|
+
this._slotGeneration = [];
|
|
390
|
+
}
|
|
374
391
|
/** @internal */
|
|
375
392
|
get _numBuffers() {
|
|
376
393
|
return this._buffers.length;
|
|
@@ -436,6 +453,122 @@ export class UniformBuffer {
|
|
|
436
453
|
this._needSync = false;
|
|
437
454
|
this._createBufferOnWrite = this._trackUBOsInFrame;
|
|
438
455
|
}
|
|
456
|
+
/**
|
|
457
|
+
* Flushes the current uniform values into the GPU buffer owned by the draw context.
|
|
458
|
+
* Invariant: `_buffers[i][1]` (the CPU shadow) always holds what the GPU buffer of slot i contains.
|
|
459
|
+
* @param owner the draw context on behalf of which the update is done
|
|
460
|
+
* @internal
|
|
461
|
+
*/
|
|
462
|
+
_updateOwnerKeyed(owner) {
|
|
463
|
+
if (this._noUBO || !this._trackUBOsInFrame) {
|
|
464
|
+
this.update();
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
if (!this._buffer) {
|
|
468
|
+
this.create(); // _rebuild pushes slot 0, created from _bufferData, with a shadow copy of it
|
|
469
|
+
}
|
|
470
|
+
this._checkNewFrame();
|
|
471
|
+
let idx = this._slotByOwner.get(owner);
|
|
472
|
+
if (idx === undefined) {
|
|
473
|
+
if (this._ownerCount === 0 && this._buffers.length === 1 && this._freeSlots.length === 0) {
|
|
474
|
+
// the slot create() made and nobody has owned yet: hand it to the first owner instead of leaving it unused.
|
|
475
|
+
// (Once an owner has released it, it is in _freeSlots and must be taken from there, or two owners could share it.)
|
|
476
|
+
idx = 0;
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
idx = this._takeFreeSlot(true);
|
|
480
|
+
}
|
|
481
|
+
this._slotByOwner.set(owner, idx);
|
|
482
|
+
this._ownerCount++;
|
|
483
|
+
if (!owner._uniformBuffersWithOwnedSlot) {
|
|
484
|
+
owner._uniformBuffersWithOwnedSlot = [];
|
|
485
|
+
}
|
|
486
|
+
owner._uniformBuffersWithOwnedSlot.push(this);
|
|
487
|
+
this._ownerListsBySlot.set(idx, owner._uniformBuffersWithOwnedSlot);
|
|
488
|
+
}
|
|
489
|
+
if (this._slotGeneration[idx] === this._dataGeneration) {
|
|
490
|
+
// The slot was last flushed with exactly the current data and nothing has been written since: nothing to
|
|
491
|
+
// compare, nothing to upload, and no same-frame conflict is possible either (same bytes).
|
|
492
|
+
this._bufferIndex = idx;
|
|
493
|
+
this._buffer = this._buffers[idx][0];
|
|
494
|
+
this.bindUniformBuffer();
|
|
495
|
+
this._slotFrameId[idx] = this._currentFrameId;
|
|
496
|
+
this._needSync = false;
|
|
497
|
+
this._createBufferOnWrite = false;
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
const owned = this._buffers[idx][1];
|
|
501
|
+
if (this._slotFrameId[idx] === this._currentFrameId && owned && !this._buffersEqual(this._bufferData, owned)) {
|
|
502
|
+
// The same context flushes a second time in the same frame with different values: the GPU has not consumed the
|
|
503
|
+
// first values yet, so they must not be overwritten. Use a slot nobody owns for this flush.
|
|
504
|
+
idx = this._takeFreeSlot(false);
|
|
505
|
+
}
|
|
506
|
+
this._bufferIndex = idx;
|
|
507
|
+
this._buffer = this._buffers[idx][0];
|
|
508
|
+
this.bindUniformBuffer();
|
|
509
|
+
const shadow = this._buffers[idx][1];
|
|
510
|
+
if (!shadow || !this._buffersEqual(this._bufferData, shadow)) {
|
|
511
|
+
if (shadow) {
|
|
512
|
+
this._copyBuffer(this._bufferData, shadow);
|
|
513
|
+
}
|
|
514
|
+
this._bufferUpdatedLastFrame = true;
|
|
515
|
+
this._engine.updateUniformBuffer(this._buffer, this._bufferData);
|
|
516
|
+
}
|
|
517
|
+
this._slotFrameId[idx] = this._currentFrameId;
|
|
518
|
+
this._slotGeneration[idx] = this._dataGeneration;
|
|
519
|
+
this._needSync = false;
|
|
520
|
+
this._createBufferOnWrite = false; // slots are keyed on the owner, the updateXXX methods must never switch buffer
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Gets a slot that is not owned by any draw context and has not been flushed in the current frame, creating one if needed.
|
|
524
|
+
* @param takeOwnership true to remove the slot from the free list (it is going to be owned by a context)
|
|
525
|
+
* @returns the slot index
|
|
526
|
+
*/
|
|
527
|
+
_takeFreeSlot(takeOwnership) {
|
|
528
|
+
for (let i = 0; i < this._freeSlots.length; ++i) {
|
|
529
|
+
const idx = this._freeSlots[i];
|
|
530
|
+
if (this._slotFrameId[idx] !== this._currentFrameId) {
|
|
531
|
+
if (takeOwnership) {
|
|
532
|
+
this._freeSlots[i] = this._freeSlots[this._freeSlots.length - 1];
|
|
533
|
+
this._freeSlots.pop();
|
|
534
|
+
}
|
|
535
|
+
return idx;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
this._rebuild();
|
|
539
|
+
const idx = this._buffers.length - 1;
|
|
540
|
+
if (!takeOwnership) {
|
|
541
|
+
this._freeSlots.push(idx);
|
|
542
|
+
}
|
|
543
|
+
return idx;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Releases the slot owned by a draw context (called when the context is disposed), so that another context can reuse it.
|
|
547
|
+
* @param owner the draw context
|
|
548
|
+
* @internal
|
|
549
|
+
*/
|
|
550
|
+
_releaseOwnerSlot(owner) {
|
|
551
|
+
const idx = this._slotByOwner?.get(owner);
|
|
552
|
+
if (idx === undefined) {
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
555
|
+
this._slotByOwner.delete(owner);
|
|
556
|
+
const list = this._ownerListsBySlot.get(idx);
|
|
557
|
+
if (list) {
|
|
558
|
+
this._removeOwnerBacklink(list);
|
|
559
|
+
this._ownerListsBySlot.delete(idx);
|
|
560
|
+
}
|
|
561
|
+
this._ownerCount--;
|
|
562
|
+
// Keep _slotFrameId: a draw encoded earlier this frame may still need these bytes.
|
|
563
|
+
this._freeSlots.push(idx);
|
|
564
|
+
}
|
|
565
|
+
_removeOwnerBacklink(list) {
|
|
566
|
+
const index = list.indexOf(this);
|
|
567
|
+
if (index !== -1) {
|
|
568
|
+
list[index] = list[list.length - 1];
|
|
569
|
+
list.pop();
|
|
570
|
+
}
|
|
571
|
+
}
|
|
439
572
|
_createNewBuffer() {
|
|
440
573
|
if (this._bufferIndex + 1 < this._buffers.length) {
|
|
441
574
|
this._bufferIndex++;
|
|
@@ -502,12 +635,16 @@ export class UniformBuffer {
|
|
|
502
635
|
}
|
|
503
636
|
}
|
|
504
637
|
this._needSync = this._needSync || changed;
|
|
638
|
+
if (changed) {
|
|
639
|
+
this._dataGeneration++;
|
|
640
|
+
}
|
|
505
641
|
}
|
|
506
642
|
else {
|
|
507
643
|
// No cache for dynamic
|
|
508
644
|
for (let i = 0; i < size; i++) {
|
|
509
645
|
this._bufferData[location + i] = data[i];
|
|
510
646
|
}
|
|
647
|
+
this._dataGeneration++;
|
|
511
648
|
}
|
|
512
649
|
}
|
|
513
650
|
/**
|
|
@@ -550,12 +687,16 @@ export class UniformBuffer {
|
|
|
550
687
|
}
|
|
551
688
|
}
|
|
552
689
|
this._needSync = this._needSync || changed;
|
|
690
|
+
if (changed) {
|
|
691
|
+
this._dataGeneration++;
|
|
692
|
+
}
|
|
553
693
|
}
|
|
554
694
|
else {
|
|
555
695
|
// No cache for dynamic
|
|
556
696
|
for (let i = 0; i < size; i++) {
|
|
557
697
|
this._bufferData[location + i] = data[i];
|
|
558
698
|
}
|
|
699
|
+
this._dataGeneration++;
|
|
559
700
|
}
|
|
560
701
|
}
|
|
561
702
|
_cacheMatrix(name, matrix) {
|
|
@@ -875,6 +1016,7 @@ export class UniformBuffer {
|
|
|
875
1016
|
// Note that if _buffers.length == 1, we don't copy _bufferData into _buffers[_bufferIndex][1] (see the update() method), and _bufferData already contains the right data
|
|
876
1017
|
if (this._buffers.length > 1 && this._buffers[b][1]) {
|
|
877
1018
|
this._bufferData.set(this._buffers[b][1]);
|
|
1019
|
+
this._dataGeneration++;
|
|
878
1020
|
}
|
|
879
1021
|
this._valueCache = {};
|
|
880
1022
|
// The following line prevents the current buffer (_buffer / _bufferIndex) from being updated during subsequent calls to updateXXX() due to a call to _checkNewFrame()
|
|
@@ -910,10 +1052,14 @@ export class UniformBuffer {
|
|
|
910
1052
|
uniformBuffers.pop();
|
|
911
1053
|
}
|
|
912
1054
|
if (this._trackUBOsInFrame && this._buffers) {
|
|
1055
|
+
this._resetOwnerSlots();
|
|
913
1056
|
for (let i = 0; i < this._buffers.length; ++i) {
|
|
914
1057
|
const buffer = this._buffers[i][0];
|
|
915
1058
|
this._engine._releaseBuffer(buffer);
|
|
916
1059
|
}
|
|
1060
|
+
this._buffers = [];
|
|
1061
|
+
this._buffer = null;
|
|
1062
|
+
this._bufferIndex = -1;
|
|
917
1063
|
}
|
|
918
1064
|
else if (this._buffer && this._engine._releaseBuffer(this._buffer)) {
|
|
919
1065
|
this._buffer = null;
|