@babylonjs/core 5.0.0-alpha.55 → 5.0.0-alpha.59
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/Bones/boneIKController.d.ts +1 -2
- package/Bones/boneIKController.js +12 -37
- package/Bones/boneIKController.js.map +1 -1
- 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 +11 -6
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.d.ts +2 -2
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +7 -15
- package/Engines/Extensions/engine.renderTarget.js +6 -63
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
- package/Engines/Extensions/engine.renderTargetCube.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/WebGL/webGLRenderTargetWrapper.d.ts +24 -2
- package/Engines/WebGL/webGLRenderTargetWrapper.js +53 -0
- package/Engines/WebGL/webGLRenderTargetWrapper.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.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -40
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.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 +46 -8
- package/Engines/constants.js +46 -8
- 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.d.ts +3 -5
- package/Engines/nativeEngine.js +2 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +1 -1
- package/Engines/nullEngine.js +2 -2
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +10 -3
- package/Engines/renderTargetWrapper.js +29 -10
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +16 -1
- package/Engines/thinEngine.js +82 -2
- 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/Dual/lightBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.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 +49 -0
- package/Materials/Node/Blocks/cloudBlock.js +154 -0
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -0
- 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/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.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 +17 -7
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js +5 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/Node/nodeMaterialDecorator.d.ts +4 -2
- package/Materials/Node/nodeMaterialDecorator.js +4 -2
- package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +4 -2
- package/Materials/PBR/pbrBaseMaterial.js +23 -9
- 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/Procedurals/proceduralTexture.d.ts +3 -3
- package/Materials/Textures/Procedurals/proceduralTexture.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/multiRenderTarget.d.ts +6 -4
- package/Materials/Textures/multiRenderTarget.js +28 -12
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +29 -3
- 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/Textures/textureCreationOptions.d.ts +57 -0
- package/Materials/Textures/textureCreationOptions.js +2 -0
- package/Materials/Textures/textureCreationOptions.js.map +1 -0
- package/Materials/Textures/thinRenderTargetTexture.d.ts +3 -4
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +10 -7
- package/Materials/Textures/videoTexture.js +17 -11
- package/Materials/Textures/videoTexture.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/effectRenderer.js +1 -1
- package/Materials/effectRenderer.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.d.ts +7 -0
- package/Materials/materialHelper.js +17 -2
- 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 +1 -1
- package/Materials/shaderMaterial.js +5 -5
- 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 +4 -2
- package/Materials/standardMaterial.js +23 -9
- 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/Builders/capsuleBuilder.d.ts +5 -5
- package/Meshes/Builders/capsuleBuilder.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/buffer.d.ts +5 -0
- package/Meshes/buffer.js +6 -0
- package/Meshes/buffer.js.map +1 -0
- 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 +16 -1
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.lts.d.ts +5 -1
- package/Meshes/mesh.lts.js +1 -2
- package/Meshes/mesh.lts.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/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.d.ts +1 -3
- package/Misc/fileTools.js +12 -13
- package/Misc/fileTools.js.map +1 -1
- package/Misc/fileTools.lts.d.ts +16 -1
- package/Misc/fileTools.lts.js +1 -2
- package/Misc/fileTools.lts.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 +2 -2
- 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 +85 -0
- package/Rendering/depthPeelingRenderer.js +390 -0
- package/Rendering/depthPeelingRenderer.js.map +1 -0
- package/Rendering/depthPeelingSceneComponent.d.ts +51 -0
- package/Rendering/depthPeelingSceneComponent.js +73 -0
- package/Rendering/depthPeelingSceneComponent.js.map +1 -0
- 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/index.d.ts +2 -0
- package/Rendering/index.js +2 -0
- package/Rendering/index.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 +7 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +7 -2
- package/Rendering/renderingGroup.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/oitDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/oitDeclaration.js +7 -0
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/oitFragment.js +7 -0
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -0
- 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/Shaders/default.fragment.d.ts +2 -0
- package/Shaders/default.fragment.js +3 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/oitBackBlend.fragment.d.ts +5 -0
- package/Shaders/oitBackBlend.fragment.js +7 -0
- package/Shaders/oitBackBlend.fragment.js.map +1 -0
- package/Shaders/oitFinal.fragment.d.ts +5 -0
- package/Shaders/oitFinal.fragment.js +7 -0
- package/Shaders/oitFinal.fragment.js.map +1 -0
- package/Shaders/pbr.fragment.d.ts +2 -0
- package/Shaders/pbr.fragment.js +3 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection.fragment.js +1 -1
- package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
- 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 +1 -0
- package/Sprites/spriteRenderer.js +14 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/alphaCullingState.js +1 -1
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +4 -0
- package/XR/features/WebXRControllerPointerSelection.js +23 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRNearInteraction.d.ts +5 -4
- package/XR/features/WebXRNearInteraction.js +15 -13
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/webXRSessionManager.js +1 -3
- package/XR/webXRSessionManager.js.map +1 -1
- package/package.json +43 -7
- package/scene.d.ts +18 -4
- package/scene.js +101 -42
- package/scene.js.map +1 -1
- package/scene.lts.d.ts +6 -1
- package/scene.lts.js +1 -2
- package/scene.lts.js.map +1 -1
- package/sceneComponent.d.ts +1 -0
- package/sceneComponent.js +1 -0
- package/sceneComponent.js.map +1 -1
- package/Engines/depthTextureCreationOptions.d.ts +0 -17
- package/Engines/depthTextureCreationOptions.js +0 -10
- package/Engines/depthTextureCreationOptions.js.map +0 -1
- package/Materials/Textures/renderTargetCreationOptions.d.ts +0 -27
- package/Materials/Textures/renderTargetCreationOptions.js +0 -10
- package/Materials/Textures/renderTargetCreationOptions.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector3, Quaternion, Matrix
|
|
1
|
+
import { Vector3, Quaternion, Matrix } from "../Maths/math.vector.js";
|
|
2
2
|
import { Space } from '../Maths/math.axis.js';
|
|
3
3
|
/**
|
|
4
4
|
* Class used to apply inverse kinematics to bones
|
|
@@ -220,53 +220,28 @@ var BoneIKController = /** @class */ (function () {
|
|
|
220
220
|
Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);
|
|
221
221
|
Quaternion.SlerpToRef(this._bone1Quat, _tmpQuat, this.slerpAmount, this._bone1Quat);
|
|
222
222
|
angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;
|
|
223
|
-
|
|
224
|
-
BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, this._bone1Quat);
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);
|
|
228
|
-
}
|
|
223
|
+
this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);
|
|
229
224
|
this._slerping = true;
|
|
230
225
|
}
|
|
231
226
|
else {
|
|
232
|
-
|
|
233
|
-
Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);
|
|
234
|
-
BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, _tmpQuat);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);
|
|
238
|
-
}
|
|
227
|
+
this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);
|
|
239
228
|
this._bone1Mat.copyFrom(mat1);
|
|
240
229
|
this._slerping = false;
|
|
241
230
|
}
|
|
231
|
+
this._updateLinkedTransformRotation(this._bone1);
|
|
242
232
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
this._bone2._linkedTransformNode.rotationQuaternion = new Quaternion();
|
|
246
|
-
}
|
|
247
|
-
Quaternion.RotationAxisToRef(this._bendAxis, angC, this._bone2._linkedTransformNode.rotationQuaternion);
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);
|
|
251
|
-
}
|
|
233
|
+
this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);
|
|
234
|
+
this._updateLinkedTransformRotation(this._bone2);
|
|
252
235
|
this._bone2Ang = angC;
|
|
253
236
|
};
|
|
254
|
-
BoneIKController.
|
|
255
|
-
if (
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
Quaternion.InverseToRef(transform.parent.absoluteRotationQuaternion, tmpQuat);
|
|
261
|
-
tmpQuat.multiplyToRef(rotation, transform.rotationQuaternion);
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
transform.rotationQuaternion.copyFrom(rotation);
|
|
237
|
+
BoneIKController.prototype._updateLinkedTransformRotation = function (bone) {
|
|
238
|
+
if (bone._linkedTransformNode) {
|
|
239
|
+
if (!bone._linkedTransformNode.rotationQuaternion) {
|
|
240
|
+
bone._linkedTransformNode.rotationQuaternion = new Quaternion();
|
|
241
|
+
}
|
|
242
|
+
bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);
|
|
265
243
|
}
|
|
266
244
|
};
|
|
267
|
-
BoneIKController._IsTransformNode = function (node) {
|
|
268
|
-
return !!node && node.isUsingPivotMatrix !== undefined;
|
|
269
|
-
};
|
|
270
245
|
BoneIKController._tmpVecs = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];
|
|
271
246
|
BoneIKController._tmpQuat = Quaternion.Identity();
|
|
272
247
|
BoneIKController._tmpMats = [Matrix.Identity(), Matrix.Identity()];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Node } from \"../node\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Nullable } from \"../types\";\r\nimport { Space } from '../Maths/math.axis';\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n\r\n private static _tmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _tmpQuat = Quaternion.Identity();\r\n private static _tmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compability\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compability\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Nullable<Bone>;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control\r\n * @param options defines options to set up the controller\r\n */\r\n constructor(mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode,\r\n poleTargetMesh?: TransformNode,\r\n poleTargetBone?: Bone,\r\n poleTargetLocalOffset?: Vector3,\r\n poleAngle?: number,\r\n bendAxis?: Vector3,\r\n maxAngle?: number,\r\n slerpAmount?: number\r\n }) {\r\n\r\n this._bone2 = bone;\r\n this._bone1 = bone.getParent();\r\n\r\n if (!this._bone1) {\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n var bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteTransform().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * .5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length) {\r\n\r\n var boneScale1 = this._bone1.getScale();\r\n var boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n } else if (this._bone1.children[0]) {\r\n\r\n mesh.computeWorldMatrix(true);\r\n\r\n var pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n var pos2 = this._bone2.getAbsolutePosition(mesh);\r\n var pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos1, pos2);\r\n this._bone2Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n var bone1 = this._bone1;\r\n\r\n if (!bone1) {\r\n return;\r\n }\r\n\r\n var target = this.targetPosition;\r\n var poleTarget = this.poleTargetPosition;\r\n\r\n var mat1 = BoneIKController._tmpMats[0];\r\n var mat2 = BoneIKController._tmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n var bonePos = BoneIKController._tmpVecs[0];\r\n var zaxis = BoneIKController._tmpVecs[1];\r\n var xaxis = BoneIKController._tmpVecs[2];\r\n var yaxis = BoneIKController._tmpVecs[3];\r\n var upAxis = BoneIKController._tmpVecs[4];\r\n\r\n var _tmpQuat = BoneIKController._tmpQuat;\r\n\r\n bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n var c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n var acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n var acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n var angA = Math.acos(acosa);\r\n var angB = Math.acos(acosb);\r\n\r\n var angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n } else {\r\n\r\n var _tmpVec = BoneIKController._tmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, _tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n if (this._bone1._linkedTransformNode) {\r\n BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, this._bone1Quat);\r\n }\r\n else {\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n }\r\n this._slerping = true;\r\n } else {\r\n if (this._bone1._linkedTransformNode) {\r\n Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);\r\n BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, _tmpQuat);\r\n }\r\n else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n }\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n }\r\n\r\n if (this._bone2._linkedTransformNode) {\r\n if (!this._bone2._linkedTransformNode.rotationQuaternion) {\r\n this._bone2._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n Quaternion.RotationAxisToRef(this._bendAxis, angC, this._bone2._linkedTransformNode.rotationQuaternion);\r\n }\r\n else {\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n }\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private static _SetAbsoluteRotation(transform: TransformNode, rotation: Quaternion): void {\r\n if (transform.rotationQuaternion == null) {\r\n transform.rotationQuaternion = new Quaternion();\r\n }\r\n if (this._IsTransformNode(transform.parent)) {\r\n const tmpQuat = TmpVectors.Quaternion[0];\r\n Quaternion.InverseToRef(transform.parent.absoluteRotationQuaternion, tmpQuat);\r\n tmpQuat.multiplyToRef(rotation, transform.rotationQuaternion);\r\n } else {\r\n transform.rotationQuaternion.copyFrom(rotation);\r\n }\r\n }\r\n\r\n private static _IsTransformNode(node: Nullable<Node>): node is TransformNode {\r\n return !!node && (node as TransformNode).isUsingPivotMatrix !== undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Nullable } from \"../types\";\r\nimport { Space } from '../Maths/math.axis';\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n\r\n private static _tmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _tmpQuat = Quaternion.Identity();\r\n private static _tmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compability\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compability\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Nullable<Bone>;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control\r\n * @param options defines options to set up the controller\r\n */\r\n constructor(mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode,\r\n poleTargetMesh?: TransformNode,\r\n poleTargetBone?: Bone,\r\n poleTargetLocalOffset?: Vector3,\r\n poleAngle?: number,\r\n bendAxis?: Vector3,\r\n maxAngle?: number,\r\n slerpAmount?: number\r\n }) {\r\n\r\n this._bone2 = bone;\r\n this._bone1 = bone.getParent();\r\n\r\n if (!this._bone1) {\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n var bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteTransform().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * .5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length) {\r\n\r\n var boneScale1 = this._bone1.getScale();\r\n var boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n } else if (this._bone1.children[0]) {\r\n\r\n mesh.computeWorldMatrix(true);\r\n\r\n var pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n var pos2 = this._bone2.getAbsolutePosition(mesh);\r\n var pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos1, pos2);\r\n this._bone2Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n var bone1 = this._bone1;\r\n\r\n if (!bone1) {\r\n return;\r\n }\r\n\r\n var target = this.targetPosition;\r\n var poleTarget = this.poleTargetPosition;\r\n\r\n var mat1 = BoneIKController._tmpMats[0];\r\n var mat2 = BoneIKController._tmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n var bonePos = BoneIKController._tmpVecs[0];\r\n var zaxis = BoneIKController._tmpVecs[1];\r\n var xaxis = BoneIKController._tmpVecs[2];\r\n var yaxis = BoneIKController._tmpVecs[3];\r\n var upAxis = BoneIKController._tmpVecs[4];\r\n\r\n var _tmpQuat = BoneIKController._tmpQuat;\r\n\r\n bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n var c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n var acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n var acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n var angA = Math.acos(acosa);\r\n var angB = Math.acos(acosb);\r\n\r\n var angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n } else {\r\n\r\n var _tmpVec = BoneIKController._tmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, _tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n this._updateLinkedTransformRotation(this._bone1);\r\n }\r\n\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n this._updateLinkedTransformRotation(this._bone2);\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private _updateLinkedTransformRotation(bone: Bone): void {\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
|
package/Buffers/buffer.js
CHANGED
|
@@ -170,6 +170,7 @@ var Buffer = /** @class */ (function () {
|
|
|
170
170
|
}
|
|
171
171
|
if (this._engine._releaseBuffer(this._buffer)) {
|
|
172
172
|
this._buffer = null;
|
|
173
|
+
this._data = null;
|
|
173
174
|
}
|
|
174
175
|
};
|
|
175
176
|
return Buffer;
|
|
@@ -325,8 +326,8 @@ var VertexBuffer = /** @class */ (function () {
|
|
|
325
326
|
var tightlyPackedByteStride = this.getSize() * VertexBuffer.GetTypeByteLength(this.type);
|
|
326
327
|
var count = totalVertices * this.getSize();
|
|
327
328
|
if (this.type !== VertexBuffer.FLOAT || this.byteStride !== tightlyPackedByteStride) {
|
|
328
|
-
var copy_1 =
|
|
329
|
-
this.forEach(count, function (value) { return copy_1
|
|
329
|
+
var copy_1 = new Float32Array(count);
|
|
330
|
+
this.forEach(count, function (value, index) { return copy_1[index] = value; });
|
|
330
331
|
return copy_1;
|
|
331
332
|
}
|
|
332
333
|
if (!(data instanceof Array || data instanceof Float32Array) || this.byteOffset !== 0 || data.length !== count) {
|
package/Buffers/buffer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../sourceES6/core/Buffers/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable, DataArray, FloatArray } from \"../types\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { DataBuffer } from \"./dataBuffer\";\r\nimport { SliceTools } from \"../Misc/sliceTools\";\r\n\r\n/**\r\n * Class used to store data that will be store in GPU memory\r\n */\r\nexport class Buffer {\r\n private _engine: ThinEngine;\r\n private _buffer: Nullable<DataBuffer>;\r\n /** @hidden */\r\n public _data: Nullable<DataArray>;\r\n private _updatable: boolean;\r\n private _instanced: boolean;\r\n private _divisor: number;\r\n private _isAlreadyOwned = false;\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this buffer\r\n * @param updatable whether the data is updatable\r\n * @param stride the stride (optional)\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param useBytes set to true if the stride in in bytes (optional)\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n */\r\n constructor(engine: any, data: DataArray | DataBuffer, updatable: boolean, stride = 0, postponeInternalCreation = false, instanced = false, useBytes = false, divisor?: number) {\r\n if (engine.getScene) { // old versions of VertexBuffer accepted 'mesh' instead of 'engine'\r\n this._engine = engine.getScene().getEngine();\r\n }\r\n else {\r\n this._engine = engine;\r\n }\r\n\r\n this._updatable = updatable;\r\n this._instanced = instanced;\r\n this._divisor = divisor || 1;\r\n\r\n if (data instanceof DataBuffer) {\r\n this._data = null;\r\n this._buffer = data;\r\n } else {\r\n this._data = data;\r\n this._buffer = null;\r\n }\r\n\r\n this.byteStride = useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT;\r\n\r\n if (!postponeInternalCreation) { // by default\r\n this.create();\r\n }\r\n }\r\n\r\n /**\r\n * Create a new VertexBuffer based on the current buffer\r\n * @param kind defines the vertex buffer kind (position, normal, etc.)\r\n * @param offset defines offset in the buffer (0 by default)\r\n * @param size defines the size in floats of attributes (position is 3 for instance)\r\n * @param stride defines the stride size in floats in the buffer (the offset to apply to reach next value when data is interleaved)\r\n * @param instanced defines if the vertex buffer contains indexed data\r\n * @param useBytes defines if the offset and stride are in bytes *\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n * @returns the new vertex buffer\r\n */\r\n public createVertexBuffer(kind: string, offset: number, size: number, stride?: number, instanced?: boolean, useBytes = false, divisor?: number): VertexBuffer {\r\n const byteOffset = useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT;\r\n const byteStride = stride ? (useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT) : this.byteStride;\r\n\r\n // a lot of these parameters are ignored as they are overridden by the buffer\r\n return new VertexBuffer(this._engine, this, kind, this._updatable, true, byteStride, instanced === undefined ? this._instanced : instanced, byteOffset, size, undefined, undefined, true, this._divisor || divisor);\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the Buffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._updatable;\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer;\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / Float32Array.BYTES_PER_ELEMENT;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. Creates the buffer if not used already.\r\n * If the buffer was already used, it will be updated only if it is updatable, otherwise it will do nothing.\r\n * @param data defines the data to store\r\n */\r\n public create(data: Nullable<DataArray> = null): void {\r\n if (!data && this._buffer) {\r\n return; // nothing to do\r\n }\r\n\r\n data = data || this._data;\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n if (!this._buffer) { // create buffer\r\n if (this._updatable) {\r\n this._buffer = this._engine.createDynamicVertexBuffer(data);\r\n this._data = data;\r\n } else {\r\n this._buffer = this._engine.createVertexBuffer(data);\r\n }\r\n } else if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data);\r\n this._data = data;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this._buffer = null;\r\n this.create(this._data);\r\n }\r\n\r\n /**\r\n * Update current buffer data\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this.create(data);\r\n }\r\n\r\n /**\r\n * Updates the data directly.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param vertexCount the vertex count (optional)\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, vertexCount?: number, useBytes: boolean = false): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data, useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT, (vertexCount ? vertexCount * this.byteStride : undefined));\r\n this._data = null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _increaseReferences() {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (!this._isAlreadyOwned) {\r\n this._isAlreadyOwned = true;\r\n return;\r\n }\r\n\r\n this._buffer.references++;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n if (this._engine._releaseBuffer(this._buffer)) {\r\n this._buffer = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Specialized buffer used to store vertex data\r\n */\r\nexport class VertexBuffer {\r\n\r\n private static _Counter = 0;\r\n\r\n /** @hidden */\r\n public _buffer: Buffer;\r\n /** @hidden */\r\n public _validOffsetRange: boolean; // used internally by the engine\r\n private _kind: string;\r\n private _size: number;\r\n private _ownsBuffer: boolean;\r\n private _instanced: boolean;\r\n private _instanceDivisor: number;\r\n\r\n /**\r\n * The byte type.\r\n */\r\n public static readonly BYTE = 5120;\r\n\r\n /**\r\n * The unsigned byte type.\r\n */\r\n public static readonly UNSIGNED_BYTE = 5121;\r\n\r\n /**\r\n * The short type.\r\n */\r\n public static readonly SHORT = 5122;\r\n\r\n /**\r\n * The unsigned short type.\r\n */\r\n public static readonly UNSIGNED_SHORT = 5123;\r\n\r\n /**\r\n * The integer type.\r\n */\r\n public static readonly INT = 5124;\r\n\r\n /**\r\n * The unsigned integer type.\r\n */\r\n public static readonly UNSIGNED_INT = 5125;\r\n\r\n /**\r\n * The float type.\r\n */\r\n public static readonly FLOAT = 5126;\r\n\r\n /**\r\n * Gets or sets the instance divisor when in instanced mode\r\n */\r\n public get instanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n public set instanceDivisor(value: number) {\r\n this._instanceDivisor = value;\r\n if (value == 0) {\r\n this._instanced = false;\r\n } else {\r\n this._instanced = true;\r\n }\r\n this._computeHashCode();\r\n }\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Gets the byte offset.\r\n */\r\n public readonly byteOffset: number;\r\n\r\n /**\r\n * Gets whether integer data values should be normalized into a certain range when being casted to a float.\r\n */\r\n public readonly normalized: boolean;\r\n\r\n /**\r\n * Gets the data type of each component in the array.\r\n */\r\n public readonly type: number;\r\n\r\n /**\r\n * Gets the unique id of this vertex buffer\r\n */\r\n public readonly uniqueId: number;\r\n\r\n /**\r\n * Gets a hash code representing the format (type, normalized, size, instanced, stride) of this buffer\r\n * All buffers with the same format will have the same hash code\r\n */\r\n public readonly hashCode: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this vertex buffer\r\n * @param kind the vertex buffer kind\r\n * @param updatable whether the data is updatable\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param stride the stride (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param offset the offset of the data (optional)\r\n * @param size the number of components (optional)\r\n * @param type the type of the component (optional)\r\n * @param normalized whether the data contains normalized data (optional)\r\n * @param useBytes set to true if stride and offset are in bytes (optional)\r\n * @param divisor defines the instance divisor to use (1 by default)\r\n * @param takeBufferOwnership defines if the buffer should be released when the vertex buffer is disposed\r\n */\r\n constructor(engine: any, data: DataArray | Buffer | DataBuffer, kind: string, updatable: boolean, postponeInternalCreation?: boolean, stride?: number,\r\n instanced?: boolean, offset?: number, size?: number, type?: number, normalized = false, useBytes = false, divisor = 1, takeBufferOwnership = false) {\r\n if (data instanceof Buffer) {\r\n this._buffer = data;\r\n this._ownsBuffer = takeBufferOwnership;\r\n\r\n } else {\r\n this._buffer = new Buffer(engine, data, updatable, stride, postponeInternalCreation, instanced, useBytes);\r\n this._ownsBuffer = true;\r\n }\r\n\r\n this.uniqueId = VertexBuffer._Counter++;\r\n this._kind = kind;\r\n\r\n if (type == undefined) {\r\n const data = this.getData();\r\n this.type = VertexBuffer.FLOAT;\r\n if (data instanceof Int8Array) { this.type = VertexBuffer.BYTE; }\r\n else if (data instanceof Uint8Array) { this.type = VertexBuffer.UNSIGNED_BYTE; }\r\n else if (data instanceof Int16Array) { this.type = VertexBuffer.SHORT; }\r\n else if (data instanceof Uint16Array) { this.type = VertexBuffer.UNSIGNED_SHORT; }\r\n else if (data instanceof Int32Array) { this.type = VertexBuffer.INT; }\r\n else if (data instanceof Uint32Array) { this.type = VertexBuffer.UNSIGNED_INT; }\r\n }\r\n else {\r\n this.type = type;\r\n }\r\n\r\n const typeByteLength = VertexBuffer.GetTypeByteLength(this.type);\r\n\r\n if (useBytes) {\r\n this._size = size || (stride ? (stride / typeByteLength) : VertexBuffer.DeduceStride(kind));\r\n this.byteStride = stride || this._buffer.byteStride || (this._size * typeByteLength);\r\n this.byteOffset = offset || 0;\r\n }\r\n else {\r\n this._size = size || stride || VertexBuffer.DeduceStride(kind);\r\n this.byteStride = stride ? (stride * typeByteLength) : (this._buffer.byteStride || (this._size * typeByteLength));\r\n this.byteOffset = (offset || 0) * typeByteLength;\r\n }\r\n\r\n this.normalized = normalized;\r\n\r\n this._instanced = instanced !== undefined ? instanced : false;\r\n this._instanceDivisor = instanced ? divisor : 0;\r\n\r\n this._computeHashCode();\r\n }\r\n\r\n private _computeHashCode(): void {\r\n // note: cast to any because the property is declared readonly\r\n (this.hashCode as any) =\r\n (((this.type - 5120) << 0) +\r\n ((this.normalized ? 1 : 0) << 3) +\r\n (this._size << 4) +\r\n ((this._instanced ? 1 : 0) << 6) +\r\n /* keep 5 bits free */\r\n (this.byteStride << 12));\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n this._buffer._rebuild();\r\n }\r\n\r\n /**\r\n * Returns the kind of the VertexBuffer (string)\r\n * @returns a string\r\n */\r\n public getKind(): string {\r\n return this._kind;\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the VertexBuffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._buffer.isUpdatable();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._buffer.getData();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data as a float array. Float data is constructed if the vertex buffer data cannot be returned directly.\r\n * @param totalVertices number of vertices in the buffer to take into account\r\n * @param forceCopy defines a boolean indicating that the returned array must be cloned upon returning it\r\n * @returns a float array containing vertex data\r\n */\r\n public getFloatData(totalVertices: number, forceCopy?: boolean): Nullable<FloatArray> {\r\n let data = this.getData();\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n const tightlyPackedByteStride = this.getSize() * VertexBuffer.GetTypeByteLength(this.type);\r\n const count = totalVertices * this.getSize();\r\n\r\n if (this.type !== VertexBuffer.FLOAT || this.byteStride !== tightlyPackedByteStride) {\r\n const copy: number[] = [];\r\n this.forEach(count, (value) => copy.push(value));\r\n return copy;\r\n }\r\n\r\n if (!(data instanceof Array || data instanceof Float32Array) || this.byteOffset !== 0 || data.length !== count) {\r\n if (data instanceof Array) {\r\n const offset = this.byteOffset / 4;\r\n return SliceTools.Slice(data, offset, offset + count);\r\n } else if (data instanceof ArrayBuffer) {\r\n return new Float32Array(data, this.byteOffset, count);\r\n } else {\r\n let offset = data.byteOffset + this.byteOffset;\r\n if (forceCopy) {\r\n let result = new Float32Array(count);\r\n let source = new Float32Array(data.buffer, offset, count);\r\n\r\n result.set(source);\r\n\r\n return result;\r\n }\r\n\r\n // Protect against bad data\r\n let remainder = offset % 4;\r\n\r\n if (remainder) {\r\n offset = Math.max(0, offset - remainder);\r\n }\r\n\r\n return new Float32Array(data.buffer, offset, count);\r\n }\r\n }\r\n\r\n if (forceCopy) {\r\n return SliceTools.Slice(data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer.getBuffer();\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the offset as a multiple of the type byte length.\r\n * @returns the offset in bytes\r\n * @deprecated Please use byteOffset instead.\r\n */\r\n public getOffset(): number {\r\n return this.byteOffset / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the number of components or the byte size per vertex attribute\r\n * @param sizeInBytes If true, returns the size in bytes or else the size in number of components of the vertex attribute (default: false)\r\n * @returns the number of components\r\n */\r\n public getSize(sizeInBytes = false): number {\r\n return sizeInBytes ? this._size * VertexBuffer.GetTypeByteLength(this.type) : this._size;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating is the internal buffer of the VertexBuffer is instanced\r\n * @returns true if this buffer is instanced\r\n */\r\n public getIsInstanced(): boolean {\r\n return this._instanced;\r\n }\r\n\r\n /**\r\n * Returns the instancing divisor, zero for non-instanced (integer).\r\n * @returns a number\r\n */\r\n public getInstanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. If the buffer was already used it will be either recreated or updated depending on isUpdatable property\r\n * @param data defines the data to store\r\n */\r\n public create(data?: DataArray): void {\r\n this._buffer.create(data);\r\n }\r\n\r\n /**\r\n * Updates the underlying buffer according to the passed numeric array or Float32Array.\r\n * This function will create a new buffer if the current one is not updatable\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this._buffer.update(data);\r\n }\r\n\r\n /**\r\n * Updates directly the underlying WebGLBuffer according to the passed numeric array or Float32Array.\r\n * Returns the directly updated WebGLBuffer.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, useBytes: boolean = false): void {\r\n this._buffer.updateDirectly(data, offset, undefined, useBytes);\r\n }\r\n\r\n /**\r\n * Disposes the VertexBuffer and the underlying WebGLBuffer.\r\n */\r\n public dispose(): void {\r\n if (this._ownsBuffer) {\r\n this._buffer.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of this vertex buffer as numbers.\r\n * @param count the number of values to enumerate\r\n * @param callback the callback function called for each value\r\n */\r\n public forEach(count: number, callback: (value: number, index: number) => void): void {\r\n VertexBuffer.ForEach(this._buffer.getData()!, this.byteOffset, this.byteStride, this._size, this.type, count, this.normalized, callback);\r\n }\r\n\r\n // Enums\r\n /**\r\n * Positions\r\n */\r\n public static readonly PositionKind = \"position\";\r\n /**\r\n * Normals\r\n */\r\n public static readonly NormalKind = \"normal\";\r\n /**\r\n * Tangents\r\n */\r\n public static readonly TangentKind = \"tangent\";\r\n /**\r\n * Texture coordinates\r\n */\r\n public static readonly UVKind = \"uv\";\r\n /**\r\n * Texture coordinates 2\r\n */\r\n public static readonly UV2Kind = \"uv2\";\r\n /**\r\n * Texture coordinates 3\r\n */\r\n public static readonly UV3Kind = \"uv3\";\r\n /**\r\n * Texture coordinates 4\r\n */\r\n public static readonly UV4Kind = \"uv4\";\r\n /**\r\n * Texture coordinates 5\r\n */\r\n public static readonly UV5Kind = \"uv5\";\r\n /**\r\n * Texture coordinates 6\r\n */\r\n public static readonly UV6Kind = \"uv6\";\r\n /**\r\n * Colors\r\n */\r\n public static readonly ColorKind = \"color\";\r\n /**\r\n * Matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesKind = \"matricesIndices\";\r\n /**\r\n * Matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsKind = \"matricesWeights\";\r\n /**\r\n * Additional matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesExtraKind = \"matricesIndicesExtra\";\r\n /**\r\n * Additional matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsExtraKind = \"matricesWeightsExtra\";\r\n\r\n /**\r\n * Deduces the stride given a kind.\r\n * @param kind The kind string to deduce\r\n * @returns The deduced stride\r\n */\r\n public static DeduceStride(kind: string): number {\r\n switch (kind) {\r\n case VertexBuffer.UVKind:\r\n case VertexBuffer.UV2Kind:\r\n case VertexBuffer.UV3Kind:\r\n case VertexBuffer.UV4Kind:\r\n case VertexBuffer.UV5Kind:\r\n case VertexBuffer.UV6Kind:\r\n return 2;\r\n case VertexBuffer.NormalKind:\r\n case VertexBuffer.PositionKind:\r\n return 3;\r\n case VertexBuffer.ColorKind:\r\n case VertexBuffer.MatricesIndicesKind:\r\n case VertexBuffer.MatricesIndicesExtraKind:\r\n case VertexBuffer.MatricesWeightsKind:\r\n case VertexBuffer.MatricesWeightsExtraKind:\r\n case VertexBuffer.TangentKind:\r\n return 4;\r\n default:\r\n throw new Error(\"Invalid kind '\" + kind + \"'\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the byte length of the given type.\r\n * @param type the type\r\n * @returns the number of bytes\r\n */\r\n public static GetTypeByteLength(type: number): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE:\r\n case VertexBuffer.UNSIGNED_BYTE:\r\n return 1;\r\n case VertexBuffer.SHORT:\r\n case VertexBuffer.UNSIGNED_SHORT:\r\n return 2;\r\n case VertexBuffer.INT:\r\n case VertexBuffer.UNSIGNED_INT:\r\n case VertexBuffer.FLOAT:\r\n return 4;\r\n default:\r\n throw new Error(`Invalid type '${type}'`);\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of the given parameters as numbers.\r\n * @param data the data to enumerate\r\n * @param byteOffset the byte offset of the data\r\n * @param byteStride the byte stride of the data\r\n * @param componentCount the number of components per element\r\n * @param componentType the type of the component\r\n * @param count the number of values to enumerate\r\n * @param normalized whether the data is normalized\r\n * @param callback the callback function called for each value\r\n */\r\n public static ForEach(data: DataArray, byteOffset: number, byteStride: number, componentCount: number, componentType: number, count: number, normalized: boolean, callback: (value: number, index: number) => void): void {\r\n if (data instanceof Array) {\r\n let offset = byteOffset / 4;\r\n const stride = byteStride / 4;\r\n for (let index = 0; index < count; index += componentCount) {\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n callback(data[offset + componentIndex], index + componentIndex);\r\n }\r\n offset += stride;\r\n }\r\n }\r\n else {\r\n const dataView = data instanceof ArrayBuffer ? new DataView(data) : new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n const componentByteLength = VertexBuffer.GetTypeByteLength(componentType);\r\n for (let index = 0; index < count; index += componentCount) {\r\n let componentByteOffset = byteOffset;\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n const value = VertexBuffer._GetFloatValue(dataView, componentType, componentByteOffset, normalized);\r\n callback(value, index + componentIndex);\r\n componentByteOffset += componentByteLength;\r\n }\r\n byteOffset += byteStride;\r\n }\r\n }\r\n }\r\n\r\n private static _GetFloatValue(dataView: DataView, type: number, byteOffset: number, normalized: boolean): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE: {\r\n let value = dataView.getInt8(byteOffset);\r\n if (normalized) {\r\n value = Math.max(value / 127, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_BYTE: {\r\n let value = dataView.getUint8(byteOffset);\r\n if (normalized) {\r\n value = value / 255;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.SHORT: {\r\n let value = dataView.getInt16(byteOffset, true);\r\n if (normalized) {\r\n value = Math.max(value / 32767, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_SHORT: {\r\n let value = dataView.getUint16(byteOffset, true);\r\n if (normalized) {\r\n value = value / 65535;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.INT: {\r\n return dataView.getInt32(byteOffset, true);\r\n }\r\n case VertexBuffer.UNSIGNED_INT: {\r\n return dataView.getUint32(byteOffset, true);\r\n }\r\n case VertexBuffer.FLOAT: {\r\n return dataView.getFloat32(byteOffset, true);\r\n }\r\n default: {\r\n throw new Error(`Invalid component type ${type}`);\r\n }\r\n }\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../sourceES6/core/Buffers/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable, DataArray, FloatArray } from \"../types\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { DataBuffer } from \"./dataBuffer\";\r\nimport { SliceTools } from \"../Misc/sliceTools\";\r\n\r\n/**\r\n * Class used to store data that will be store in GPU memory\r\n */\r\nexport class Buffer {\r\n private _engine: ThinEngine;\r\n private _buffer: Nullable<DataBuffer>;\r\n /** @hidden */\r\n public _data: Nullable<DataArray>;\r\n private _updatable: boolean;\r\n private _instanced: boolean;\r\n private _divisor: number;\r\n private _isAlreadyOwned = false;\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this buffer\r\n * @param updatable whether the data is updatable\r\n * @param stride the stride (optional)\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param useBytes set to true if the stride in in bytes (optional)\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n */\r\n constructor(engine: any, data: DataArray | DataBuffer, updatable: boolean, stride = 0, postponeInternalCreation = false, instanced = false, useBytes = false, divisor?: number) {\r\n if (engine.getScene) { // old versions of VertexBuffer accepted 'mesh' instead of 'engine'\r\n this._engine = engine.getScene().getEngine();\r\n }\r\n else {\r\n this._engine = engine;\r\n }\r\n\r\n this._updatable = updatable;\r\n this._instanced = instanced;\r\n this._divisor = divisor || 1;\r\n\r\n if (data instanceof DataBuffer) {\r\n this._data = null;\r\n this._buffer = data;\r\n } else {\r\n this._data = data;\r\n this._buffer = null;\r\n }\r\n\r\n this.byteStride = useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT;\r\n\r\n if (!postponeInternalCreation) { // by default\r\n this.create();\r\n }\r\n }\r\n\r\n /**\r\n * Create a new VertexBuffer based on the current buffer\r\n * @param kind defines the vertex buffer kind (position, normal, etc.)\r\n * @param offset defines offset in the buffer (0 by default)\r\n * @param size defines the size in floats of attributes (position is 3 for instance)\r\n * @param stride defines the stride size in floats in the buffer (the offset to apply to reach next value when data is interleaved)\r\n * @param instanced defines if the vertex buffer contains indexed data\r\n * @param useBytes defines if the offset and stride are in bytes *\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n * @returns the new vertex buffer\r\n */\r\n public createVertexBuffer(kind: string, offset: number, size: number, stride?: number, instanced?: boolean, useBytes = false, divisor?: number): VertexBuffer {\r\n const byteOffset = useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT;\r\n const byteStride = stride ? (useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT) : this.byteStride;\r\n\r\n // a lot of these parameters are ignored as they are overridden by the buffer\r\n return new VertexBuffer(this._engine, this, kind, this._updatable, true, byteStride, instanced === undefined ? this._instanced : instanced, byteOffset, size, undefined, undefined, true, this._divisor || divisor);\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the Buffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._updatable;\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer;\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / Float32Array.BYTES_PER_ELEMENT;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. Creates the buffer if not used already.\r\n * If the buffer was already used, it will be updated only if it is updatable, otherwise it will do nothing.\r\n * @param data defines the data to store\r\n */\r\n public create(data: Nullable<DataArray> = null): void {\r\n if (!data && this._buffer) {\r\n return; // nothing to do\r\n }\r\n\r\n data = data || this._data;\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n if (!this._buffer) { // create buffer\r\n if (this._updatable) {\r\n this._buffer = this._engine.createDynamicVertexBuffer(data);\r\n this._data = data;\r\n } else {\r\n this._buffer = this._engine.createVertexBuffer(data);\r\n }\r\n } else if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data);\r\n this._data = data;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this._buffer = null;\r\n this.create(this._data);\r\n }\r\n\r\n /**\r\n * Update current buffer data\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this.create(data);\r\n }\r\n\r\n /**\r\n * Updates the data directly.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param vertexCount the vertex count (optional)\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, vertexCount?: number, useBytes: boolean = false): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data, useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT, (vertexCount ? vertexCount * this.byteStride : undefined));\r\n this._data = null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _increaseReferences() {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (!this._isAlreadyOwned) {\r\n this._isAlreadyOwned = true;\r\n return;\r\n }\r\n\r\n this._buffer.references++;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n if (this._engine._releaseBuffer(this._buffer)) {\r\n this._buffer = null;\r\n this._data = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Specialized buffer used to store vertex data\r\n */\r\nexport class VertexBuffer {\r\n\r\n private static _Counter = 0;\r\n\r\n /** @hidden */\r\n public _buffer: Buffer;\r\n /** @hidden */\r\n public _validOffsetRange: boolean; // used internally by the engine\r\n private _kind: string;\r\n private _size: number;\r\n private _ownsBuffer: boolean;\r\n private _instanced: boolean;\r\n private _instanceDivisor: number;\r\n\r\n /**\r\n * The byte type.\r\n */\r\n public static readonly BYTE = 5120;\r\n\r\n /**\r\n * The unsigned byte type.\r\n */\r\n public static readonly UNSIGNED_BYTE = 5121;\r\n\r\n /**\r\n * The short type.\r\n */\r\n public static readonly SHORT = 5122;\r\n\r\n /**\r\n * The unsigned short type.\r\n */\r\n public static readonly UNSIGNED_SHORT = 5123;\r\n\r\n /**\r\n * The integer type.\r\n */\r\n public static readonly INT = 5124;\r\n\r\n /**\r\n * The unsigned integer type.\r\n */\r\n public static readonly UNSIGNED_INT = 5125;\r\n\r\n /**\r\n * The float type.\r\n */\r\n public static readonly FLOAT = 5126;\r\n\r\n /**\r\n * Gets or sets the instance divisor when in instanced mode\r\n */\r\n public get instanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n public set instanceDivisor(value: number) {\r\n this._instanceDivisor = value;\r\n if (value == 0) {\r\n this._instanced = false;\r\n } else {\r\n this._instanced = true;\r\n }\r\n this._computeHashCode();\r\n }\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Gets the byte offset.\r\n */\r\n public readonly byteOffset: number;\r\n\r\n /**\r\n * Gets whether integer data values should be normalized into a certain range when being casted to a float.\r\n */\r\n public readonly normalized: boolean;\r\n\r\n /**\r\n * Gets the data type of each component in the array.\r\n */\r\n public readonly type: number;\r\n\r\n /**\r\n * Gets the unique id of this vertex buffer\r\n */\r\n public readonly uniqueId: number;\r\n\r\n /**\r\n * Gets a hash code representing the format (type, normalized, size, instanced, stride) of this buffer\r\n * All buffers with the same format will have the same hash code\r\n */\r\n public readonly hashCode: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this vertex buffer\r\n * @param kind the vertex buffer kind\r\n * @param updatable whether the data is updatable\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param stride the stride (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param offset the offset of the data (optional)\r\n * @param size the number of components (optional)\r\n * @param type the type of the component (optional)\r\n * @param normalized whether the data contains normalized data (optional)\r\n * @param useBytes set to true if stride and offset are in bytes (optional)\r\n * @param divisor defines the instance divisor to use (1 by default)\r\n * @param takeBufferOwnership defines if the buffer should be released when the vertex buffer is disposed\r\n */\r\n constructor(engine: any, data: DataArray | Buffer | DataBuffer, kind: string, updatable: boolean, postponeInternalCreation?: boolean, stride?: number,\r\n instanced?: boolean, offset?: number, size?: number, type?: number, normalized = false, useBytes = false, divisor = 1, takeBufferOwnership = false) {\r\n if (data instanceof Buffer) {\r\n this._buffer = data;\r\n this._ownsBuffer = takeBufferOwnership;\r\n\r\n } else {\r\n this._buffer = new Buffer(engine, data, updatable, stride, postponeInternalCreation, instanced, useBytes);\r\n this._ownsBuffer = true;\r\n }\r\n\r\n this.uniqueId = VertexBuffer._Counter++;\r\n this._kind = kind;\r\n\r\n if (type == undefined) {\r\n const data = this.getData();\r\n this.type = VertexBuffer.FLOAT;\r\n if (data instanceof Int8Array) { this.type = VertexBuffer.BYTE; }\r\n else if (data instanceof Uint8Array) { this.type = VertexBuffer.UNSIGNED_BYTE; }\r\n else if (data instanceof Int16Array) { this.type = VertexBuffer.SHORT; }\r\n else if (data instanceof Uint16Array) { this.type = VertexBuffer.UNSIGNED_SHORT; }\r\n else if (data instanceof Int32Array) { this.type = VertexBuffer.INT; }\r\n else if (data instanceof Uint32Array) { this.type = VertexBuffer.UNSIGNED_INT; }\r\n }\r\n else {\r\n this.type = type;\r\n }\r\n\r\n const typeByteLength = VertexBuffer.GetTypeByteLength(this.type);\r\n\r\n if (useBytes) {\r\n this._size = size || (stride ? (stride / typeByteLength) : VertexBuffer.DeduceStride(kind));\r\n this.byteStride = stride || this._buffer.byteStride || (this._size * typeByteLength);\r\n this.byteOffset = offset || 0;\r\n }\r\n else {\r\n this._size = size || stride || VertexBuffer.DeduceStride(kind);\r\n this.byteStride = stride ? (stride * typeByteLength) : (this._buffer.byteStride || (this._size * typeByteLength));\r\n this.byteOffset = (offset || 0) * typeByteLength;\r\n }\r\n\r\n this.normalized = normalized;\r\n\r\n this._instanced = instanced !== undefined ? instanced : false;\r\n this._instanceDivisor = instanced ? divisor : 0;\r\n\r\n this._computeHashCode();\r\n }\r\n\r\n private _computeHashCode(): void {\r\n // note: cast to any because the property is declared readonly\r\n (this.hashCode as any) =\r\n (((this.type - 5120) << 0) +\r\n ((this.normalized ? 1 : 0) << 3) +\r\n (this._size << 4) +\r\n ((this._instanced ? 1 : 0) << 6) +\r\n /* keep 5 bits free */\r\n (this.byteStride << 12));\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n this._buffer._rebuild();\r\n }\r\n\r\n /**\r\n * Returns the kind of the VertexBuffer (string)\r\n * @returns a string\r\n */\r\n public getKind(): string {\r\n return this._kind;\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the VertexBuffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._buffer.isUpdatable();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._buffer.getData();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data as a float array. Float data is constructed if the vertex buffer data cannot be returned directly.\r\n * @param totalVertices number of vertices in the buffer to take into account\r\n * @param forceCopy defines a boolean indicating that the returned array must be cloned upon returning it\r\n * @returns a float array containing vertex data\r\n */\r\n public getFloatData(totalVertices: number, forceCopy?: boolean): Nullable<FloatArray> {\r\n let data = this.getData();\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n const tightlyPackedByteStride = this.getSize() * VertexBuffer.GetTypeByteLength(this.type);\r\n const count = totalVertices * this.getSize();\r\n\r\n if (this.type !== VertexBuffer.FLOAT || this.byteStride !== tightlyPackedByteStride) {\r\n const copy = new Float32Array(count);\r\n this.forEach(count, (value, index) => copy[index] = value);\r\n return copy;\r\n }\r\n\r\n if (!(data instanceof Array || data instanceof Float32Array) || this.byteOffset !== 0 || data.length !== count) {\r\n if (data instanceof Array) {\r\n const offset = this.byteOffset / 4;\r\n return SliceTools.Slice(data, offset, offset + count);\r\n } else if (data instanceof ArrayBuffer) {\r\n return new Float32Array(data, this.byteOffset, count);\r\n } else {\r\n let offset = data.byteOffset + this.byteOffset;\r\n if (forceCopy) {\r\n let result = new Float32Array(count);\r\n let source = new Float32Array(data.buffer, offset, count);\r\n\r\n result.set(source);\r\n\r\n return result;\r\n }\r\n\r\n // Protect against bad data\r\n let remainder = offset % 4;\r\n\r\n if (remainder) {\r\n offset = Math.max(0, offset - remainder);\r\n }\r\n\r\n return new Float32Array(data.buffer, offset, count);\r\n }\r\n }\r\n\r\n if (forceCopy) {\r\n return SliceTools.Slice(data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer.getBuffer();\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the offset as a multiple of the type byte length.\r\n * @returns the offset in bytes\r\n * @deprecated Please use byteOffset instead.\r\n */\r\n public getOffset(): number {\r\n return this.byteOffset / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the number of components or the byte size per vertex attribute\r\n * @param sizeInBytes If true, returns the size in bytes or else the size in number of components of the vertex attribute (default: false)\r\n * @returns the number of components\r\n */\r\n public getSize(sizeInBytes = false): number {\r\n return sizeInBytes ? this._size * VertexBuffer.GetTypeByteLength(this.type) : this._size;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating is the internal buffer of the VertexBuffer is instanced\r\n * @returns true if this buffer is instanced\r\n */\r\n public getIsInstanced(): boolean {\r\n return this._instanced;\r\n }\r\n\r\n /**\r\n * Returns the instancing divisor, zero for non-instanced (integer).\r\n * @returns a number\r\n */\r\n public getInstanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. If the buffer was already used it will be either recreated or updated depending on isUpdatable property\r\n * @param data defines the data to store\r\n */\r\n public create(data?: DataArray): void {\r\n this._buffer.create(data);\r\n }\r\n\r\n /**\r\n * Updates the underlying buffer according to the passed numeric array or Float32Array.\r\n * This function will create a new buffer if the current one is not updatable\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this._buffer.update(data);\r\n }\r\n\r\n /**\r\n * Updates directly the underlying WebGLBuffer according to the passed numeric array or Float32Array.\r\n * Returns the directly updated WebGLBuffer.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, useBytes: boolean = false): void {\r\n this._buffer.updateDirectly(data, offset, undefined, useBytes);\r\n }\r\n\r\n /**\r\n * Disposes the VertexBuffer and the underlying WebGLBuffer.\r\n */\r\n public dispose(): void {\r\n if (this._ownsBuffer) {\r\n this._buffer.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of this vertex buffer as numbers.\r\n * @param count the number of values to enumerate\r\n * @param callback the callback function called for each value\r\n */\r\n public forEach(count: number, callback: (value: number, index: number) => void): void {\r\n VertexBuffer.ForEach(this._buffer.getData()!, this.byteOffset, this.byteStride, this._size, this.type, count, this.normalized, callback);\r\n }\r\n\r\n // Enums\r\n /**\r\n * Positions\r\n */\r\n public static readonly PositionKind = \"position\";\r\n /**\r\n * Normals\r\n */\r\n public static readonly NormalKind = \"normal\";\r\n /**\r\n * Tangents\r\n */\r\n public static readonly TangentKind = \"tangent\";\r\n /**\r\n * Texture coordinates\r\n */\r\n public static readonly UVKind = \"uv\";\r\n /**\r\n * Texture coordinates 2\r\n */\r\n public static readonly UV2Kind = \"uv2\";\r\n /**\r\n * Texture coordinates 3\r\n */\r\n public static readonly UV3Kind = \"uv3\";\r\n /**\r\n * Texture coordinates 4\r\n */\r\n public static readonly UV4Kind = \"uv4\";\r\n /**\r\n * Texture coordinates 5\r\n */\r\n public static readonly UV5Kind = \"uv5\";\r\n /**\r\n * Texture coordinates 6\r\n */\r\n public static readonly UV6Kind = \"uv6\";\r\n /**\r\n * Colors\r\n */\r\n public static readonly ColorKind = \"color\";\r\n /**\r\n * Matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesKind = \"matricesIndices\";\r\n /**\r\n * Matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsKind = \"matricesWeights\";\r\n /**\r\n * Additional matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesExtraKind = \"matricesIndicesExtra\";\r\n /**\r\n * Additional matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsExtraKind = \"matricesWeightsExtra\";\r\n\r\n /**\r\n * Deduces the stride given a kind.\r\n * @param kind The kind string to deduce\r\n * @returns The deduced stride\r\n */\r\n public static DeduceStride(kind: string): number {\r\n switch (kind) {\r\n case VertexBuffer.UVKind:\r\n case VertexBuffer.UV2Kind:\r\n case VertexBuffer.UV3Kind:\r\n case VertexBuffer.UV4Kind:\r\n case VertexBuffer.UV5Kind:\r\n case VertexBuffer.UV6Kind:\r\n return 2;\r\n case VertexBuffer.NormalKind:\r\n case VertexBuffer.PositionKind:\r\n return 3;\r\n case VertexBuffer.ColorKind:\r\n case VertexBuffer.MatricesIndicesKind:\r\n case VertexBuffer.MatricesIndicesExtraKind:\r\n case VertexBuffer.MatricesWeightsKind:\r\n case VertexBuffer.MatricesWeightsExtraKind:\r\n case VertexBuffer.TangentKind:\r\n return 4;\r\n default:\r\n throw new Error(\"Invalid kind '\" + kind + \"'\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the byte length of the given type.\r\n * @param type the type\r\n * @returns the number of bytes\r\n */\r\n public static GetTypeByteLength(type: number): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE:\r\n case VertexBuffer.UNSIGNED_BYTE:\r\n return 1;\r\n case VertexBuffer.SHORT:\r\n case VertexBuffer.UNSIGNED_SHORT:\r\n return 2;\r\n case VertexBuffer.INT:\r\n case VertexBuffer.UNSIGNED_INT:\r\n case VertexBuffer.FLOAT:\r\n return 4;\r\n default:\r\n throw new Error(`Invalid type '${type}'`);\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of the given parameters as numbers.\r\n * @param data the data to enumerate\r\n * @param byteOffset the byte offset of the data\r\n * @param byteStride the byte stride of the data\r\n * @param componentCount the number of components per element\r\n * @param componentType the type of the component\r\n * @param count the number of values to enumerate\r\n * @param normalized whether the data is normalized\r\n * @param callback the callback function called for each value\r\n */\r\n public static ForEach(data: DataArray, byteOffset: number, byteStride: number, componentCount: number, componentType: number, count: number, normalized: boolean, callback: (value: number, index: number) => void): void {\r\n if (data instanceof Array) {\r\n let offset = byteOffset / 4;\r\n const stride = byteStride / 4;\r\n for (let index = 0; index < count; index += componentCount) {\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n callback(data[offset + componentIndex], index + componentIndex);\r\n }\r\n offset += stride;\r\n }\r\n }\r\n else {\r\n const dataView = data instanceof ArrayBuffer ? new DataView(data) : new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n const componentByteLength = VertexBuffer.GetTypeByteLength(componentType);\r\n for (let index = 0; index < count; index += componentCount) {\r\n let componentByteOffset = byteOffset;\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n const value = VertexBuffer._GetFloatValue(dataView, componentType, componentByteOffset, normalized);\r\n callback(value, index + componentIndex);\r\n componentByteOffset += componentByteLength;\r\n }\r\n byteOffset += byteStride;\r\n }\r\n }\r\n }\r\n\r\n private static _GetFloatValue(dataView: DataView, type: number, byteOffset: number, normalized: boolean): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE: {\r\n let value = dataView.getInt8(byteOffset);\r\n if (normalized) {\r\n value = Math.max(value / 127, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_BYTE: {\r\n let value = dataView.getUint8(byteOffset);\r\n if (normalized) {\r\n value = value / 255;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.SHORT: {\r\n let value = dataView.getInt16(byteOffset, true);\r\n if (normalized) {\r\n value = Math.max(value / 32767, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_SHORT: {\r\n let value = dataView.getUint16(byteOffset, true);\r\n if (normalized) {\r\n value = value / 65535;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.INT: {\r\n return dataView.getInt32(byteOffset, true);\r\n }\r\n case VertexBuffer.UNSIGNED_INT: {\r\n return dataView.getUint32(byteOffset, true);\r\n }\r\n case VertexBuffer.FLOAT: {\r\n return dataView.getFloat32(byteOffset, true);\r\n }\r\n default: {\r\n throw new Error(`Invalid component type ${type}`);\r\n }\r\n }\r\n }\r\n}"]}
|
|
@@ -26,7 +26,6 @@ export declare abstract class BaseCameraPointersInput implements ICameraInput<Ca
|
|
|
26
26
|
*/
|
|
27
27
|
protected _buttonsPressed: number;
|
|
28
28
|
private _currentActiveButton;
|
|
29
|
-
private _usingSafari;
|
|
30
29
|
/**
|
|
31
30
|
* Defines the buttons associated with the input to handle camera move.
|
|
32
31
|
*/
|
|
@@ -10,7 +10,6 @@ import { PointerEventTypes } from "../../Events/pointerEvents.js";
|
|
|
10
10
|
var BaseCameraPointersInput = /** @class */ (function () {
|
|
11
11
|
function BaseCameraPointersInput() {
|
|
12
12
|
this._currentActiveButton = -1;
|
|
13
|
-
this._usingSafari = Tools.IsSafari();
|
|
14
13
|
/**
|
|
15
14
|
* Defines the buttons associated with the input to handle camera move.
|
|
16
15
|
*/
|
|
@@ -38,7 +37,6 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
38
37
|
this._pointerInput = function (p, s) {
|
|
39
38
|
var evt = p.event;
|
|
40
39
|
var isTouch = evt.pointerType === "touch";
|
|
41
|
-
var ignoreContext = isTouch || _this._usingSafari;
|
|
42
40
|
if (engine.isInVRExclusivePointerMode) {
|
|
43
41
|
return;
|
|
44
42
|
}
|
|
@@ -67,7 +65,7 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
67
65
|
_this.pointA = null;
|
|
68
66
|
_this.pointB = null;
|
|
69
67
|
}
|
|
70
|
-
else if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {
|
|
68
|
+
else if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (_this._currentActiveButton === -1 || isTouch)) {
|
|
71
69
|
try {
|
|
72
70
|
srcElement.setPointerCapture(evt.pointerId);
|
|
73
71
|
}
|
|
@@ -102,9 +100,11 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
102
100
|
else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {
|
|
103
101
|
_this.onDoubleTap(evt.pointerType);
|
|
104
102
|
}
|
|
105
|
-
else if (srcElement &&
|
|
103
|
+
else if (srcElement && p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
|
|
106
104
|
try {
|
|
107
|
-
|
|
105
|
+
if (evt.buttons === 0) {
|
|
106
|
+
srcElement.releasePointerCapture(evt.pointerId);
|
|
107
|
+
}
|
|
108
108
|
}
|
|
109
109
|
catch (e) {
|
|
110
110
|
//Nothing to do with the error.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCameraPointersInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/BaseCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\nimport { serialize } from \"../../Misc/decorators\";\nimport { EventState, Observer } from \"../../Misc/observable\";\nimport { Tools } from \"../../Misc/tools\";\nimport { Camera } from \"../../Cameras/camera\";\nimport { ICameraInput } from \"../../Cameras/cameraInputsManager\";\nimport { PointerInfo, PointerEventTypes, PointerTouch } from \"../../Events/pointerEvents\";\nimport { IPointerEvent } from \"../../Events/deviceInputEvents\";\n\n/**\n * Base class for Camera Pointer Inputs.\n * See FollowCameraPointersInput in src/Cameras/Inputs/followCameraPointersInput.ts\n * for example usage.\n */\nexport abstract class BaseCameraPointersInput implements ICameraInput<Camera> {\n /**\n * Defines the camera the input is attached to.\n */\n public abstract camera: Camera;\n\n /**\n * Whether keyboard modifier keys are pressed at time of last mouse event.\n */\n protected _altKey: boolean;\n protected _ctrlKey: boolean;\n protected _metaKey: boolean;\n protected _shiftKey: boolean;\n\n /**\n * Which mouse buttons were pressed at time of last mouse event.\n * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n protected _buttonsPressed: number;\n\n private _currentActiveButton: number = -1;\n private _usingSafari = Tools.IsSafari();\n\n /**\n * Defines the buttons associated with the input to handle camera move.\n */\n @serialize()\n public buttons = [0, 1, 2];\n\n /**\n * Attach the input controls to a specific dom element to get the input from.\n * @param element Defines the element the controls should be listened from\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\n */\n public attachControl(noPreventDefault?: boolean): void {\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n var engine = this.camera.getEngine();\n const element = engine.getInputElement();\n var previousPinchSquaredDistance = 0;\n var previousMultiTouchPanPosition: Nullable<PointerTouch> = null;\n\n this.pointA = null;\n this.pointB = null;\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n\n this._pointerInput = (p, s) => {\n var evt = <IPointerEvent>p.event;\n let isTouch = evt.pointerType === \"touch\";\n let ignoreContext = isTouch || this._usingSafari;\n\n if (engine.isInVRExclusivePointerMode) {\n return;\n }\n\n if (p.type !== PointerEventTypes.POINTERMOVE &&\n this.buttons.indexOf(evt.button) === -1) {\n return;\n }\n\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\n\n this._altKey = evt.altKey;\n this._ctrlKey = evt.ctrlKey;\n this._metaKey = evt.metaKey;\n this._shiftKey = evt.shiftKey;\n this._buttonsPressed = evt.buttons;\n\n if (engine.isPointerLock) {\n const offsetX = evt.movementX ||\n evt.mozMovementX ||\n evt.webkitMovementX ||\n evt.msMovementX ||\n 0;\n const offsetY = evt.movementY ||\n evt.mozMovementY ||\n evt.webkitMovementY ||\n evt.msMovementY ||\n 0;\n\n this.onTouch(null, offsetX, offsetY);\n this.pointA = null;\n this.pointB = null;\n } else if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {\n try {\n srcElement.setPointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error. Execution will continue.\n }\n\n if (this.pointA === null) {\n this.pointA = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n } else if (this.pointB === null) {\n this.pointB = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n }\n\n if (this._currentActiveButton === -1 && !isTouch) {\n this._currentActiveButton = evt.button;\n }\n this.onButtonDown(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n element && element.focus();\n }\n } else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {\n this.onDoubleTap(evt.pointerType);\n } else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === this._currentActiveButton && this._currentActiveButton !== -1 && !ignoreContext))) {\n try {\n srcElement.releasePointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error.\n }\n\n if (!isTouch) {\n this.pointB = null; // Mouse and pen are mono pointer\n }\n\n //would be better to use pointers.remove(evt.pointerId) for multitouch gestures,\n //but emptying completely pointers collection is required to fix a bug on iPhone :\n //when changing orientation while pinching camera,\n //one pointer stay pressed forever if we don't release all pointers\n //will be ok to put back pointers.remove(evt.pointerId); when iPhone bug corrected\n if (engine._badOS) {\n this.pointA = this.pointB = null;\n } else {\n //only remove the impacted pointer in case of multitouch allowing on most\n //platforms switching from rotate to zoom and pan seamlessly.\n if (this.pointB && this.pointA && this.pointA.pointerId == evt.pointerId) {\n this.pointA = this.pointB;\n this.pointB = null;\n } else if (this.pointA && this.pointB &&\n this.pointB.pointerId == evt.pointerId) {\n this.pointB = null;\n } else {\n this.pointA = this.pointB = null;\n }\n }\n\n if (previousPinchSquaredDistance !== 0 || previousMultiTouchPanPosition) {\n // Previous pinch data is populated but a button has been lifted\n // so pinch has ended.\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n 0, // pinchSquaredDistance\n previousMultiTouchPanPosition,\n null // multiTouchPanPosition\n );\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n }\n\n this._currentActiveButton = -1;\n this.onButtonUp(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n\n // One button down\n if (this.pointA && this.pointB === null) {\n const offsetX = evt.clientX - this.pointA.x;\n const offsetY = evt.clientY - this.pointA.y;\n this.onTouch(this.pointA, offsetX, offsetY);\n\n this.pointA.x = evt.clientX;\n this.pointA.y = evt.clientY;\n }\n // Two buttons down: pinch\n else if (this.pointA && this.pointB) {\n var ed = (this.pointA.pointerId === evt.pointerId) ?\n this.pointA : this.pointB;\n ed.x = evt.clientX;\n ed.y = evt.clientY;\n var distX = this.pointA.x - this.pointB.x;\n var distY = this.pointA.y - this.pointB.y;\n var pinchSquaredDistance = (distX * distX) + (distY * distY);\n var multiTouchPanPosition = {\n x: (this.pointA.x + this.pointB.x) / 2,\n y: (this.pointA.y + this.pointB.y) / 2,\n pointerId: evt.pointerId,\n type: p.type\n };\n\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n pinchSquaredDistance,\n previousMultiTouchPanPosition,\n multiTouchPanPosition);\n\n previousMultiTouchPanPosition = multiTouchPanPosition;\n previousPinchSquaredDistance = pinchSquaredDistance;\n }\n }\n };\n\n this._observer = this.camera.getScene().onPointerObservable.add(\n this._pointerInput,\n PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP |\n PointerEventTypes.POINTERMOVE | PointerEventTypes.POINTERDOUBLETAP);\n\n this._onLostFocus = () => {\n this.pointA = this.pointB = null;\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n this.onLostFocus();\n };\n\n element && element.addEventListener(\"contextmenu\",\n <EventListener>this.onContextMenu.bind(this), false);\n\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n\n if (hostWindow) {\n Tools.RegisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n /**\n * Detach the current controls from the specified dom element.\n */\n public detachControl(): void;\n\n /**\n * Detach the current controls from the specified dom element.\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\n */\n public detachControl(ignored?: any): void {\n if (this._onLostFocus) {\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n if (hostWindow) {\n Tools.UnregisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n if (this._observer) {\n this.camera.getScene().onPointerObservable.remove(this._observer);\n this._observer = null;\n\n if (this.onContextMenu) {\n const inputElement = this.camera.getScene().getEngine().getInputElement();\n inputElement && inputElement.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\n }\n\n this._onLostFocus = null;\n }\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n }\n\n /**\n * Gets the class name of the current input.\n * @returns the class name\n */\n public getClassName(): string {\n return \"BaseCameraPointersInput\";\n }\n\n /**\n * Get the friendly name associated with the input class.\n * @returns the input friendly name\n */\n public getSimpleName(): string {\n return \"pointers\";\n }\n\n /**\n * Called on pointer POINTERDOUBLETAP event.\n * Override this method to provide functionality on POINTERDOUBLETAP event.\n */\n protected onDoubleTap(type: string) {\n }\n\n /**\n * Called on pointer POINTERMOVE event if only a single touch is active.\n * Override this method to provide functionality.\n */\n protected onTouch(point: Nullable<PointerTouch>,\n offsetX: number,\n offsetY: number): void {\n }\n\n /**\n * Called on pointer POINTERMOVE event if multiple touches are active.\n * Override this method to provide functionality.\n */\n protected onMultiTouch(pointA: Nullable<PointerTouch>,\n pointB: Nullable<PointerTouch>,\n previousPinchSquaredDistance: number,\n pinchSquaredDistance: number,\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\n multiTouchPanPosition: Nullable<PointerTouch>): void {\n }\n\n /**\n * Called on JS contextmenu event.\n * Override this method to provide functionality.\n */\n protected onContextMenu(evt: PointerEvent): void {\n evt.preventDefault();\n }\n\n /**\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\n * press.\n * Override this method to provide functionality.\n */\n protected onButtonDown(evt: IPointerEvent): void {\n }\n\n /**\n * Called each time a new POINTERUP event occurs. Ie, for each button\n * release.\n * Override this method to provide functionality.\n */\n protected onButtonUp(evt: IPointerEvent): void {\n }\n\n /**\n * Called when window becomes inactive.\n * Override this method to provide functionality.\n */\n protected onLostFocus(): void {\n }\n\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\n private _observer: Nullable<Observer<PointerInfo>>;\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\n private pointA: Nullable<PointerTouch>;\n private pointB: Nullable<PointerTouch>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BaseCameraPointersInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/BaseCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\nimport { serialize } from \"../../Misc/decorators\";\nimport { EventState, Observer } from \"../../Misc/observable\";\nimport { Tools } from \"../../Misc/tools\";\nimport { Camera } from \"../../Cameras/camera\";\nimport { ICameraInput } from \"../../Cameras/cameraInputsManager\";\nimport { PointerInfo, PointerEventTypes, PointerTouch } from \"../../Events/pointerEvents\";\nimport { IPointerEvent } from \"../../Events/deviceInputEvents\";\n\n/**\n * Base class for Camera Pointer Inputs.\n * See FollowCameraPointersInput in src/Cameras/Inputs/followCameraPointersInput.ts\n * for example usage.\n */\nexport abstract class BaseCameraPointersInput implements ICameraInput<Camera> {\n /**\n * Defines the camera the input is attached to.\n */\n public abstract camera: Camera;\n\n /**\n * Whether keyboard modifier keys are pressed at time of last mouse event.\n */\n protected _altKey: boolean;\n protected _ctrlKey: boolean;\n protected _metaKey: boolean;\n protected _shiftKey: boolean;\n\n /**\n * Which mouse buttons were pressed at time of last mouse event.\n * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n protected _buttonsPressed: number;\n\n private _currentActiveButton: number = -1;\n\n /**\n * Defines the buttons associated with the input to handle camera move.\n */\n @serialize()\n public buttons = [0, 1, 2];\n\n /**\n * Attach the input controls to a specific dom element to get the input from.\n * @param element Defines the element the controls should be listened from\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\n */\n public attachControl(noPreventDefault?: boolean): void {\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n var engine = this.camera.getEngine();\n const element = engine.getInputElement();\n var previousPinchSquaredDistance = 0;\n var previousMultiTouchPanPosition: Nullable<PointerTouch> = null;\n\n this.pointA = null;\n this.pointB = null;\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n\n this._pointerInput = (p, s) => {\n var evt = <IPointerEvent>p.event;\n let isTouch = evt.pointerType === \"touch\";\n\n if (engine.isInVRExclusivePointerMode) {\n return;\n }\n\n if (p.type !== PointerEventTypes.POINTERMOVE &&\n this.buttons.indexOf(evt.button) === -1) {\n return;\n }\n\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\n\n this._altKey = evt.altKey;\n this._ctrlKey = evt.ctrlKey;\n this._metaKey = evt.metaKey;\n this._shiftKey = evt.shiftKey;\n this._buttonsPressed = evt.buttons;\n\n if (engine.isPointerLock) {\n const offsetX = evt.movementX ||\n evt.mozMovementX ||\n evt.webkitMovementX ||\n evt.msMovementX ||\n 0;\n const offsetY = evt.movementY ||\n evt.mozMovementY ||\n evt.webkitMovementY ||\n evt.msMovementY ||\n 0;\n\n this.onTouch(null, offsetX, offsetY);\n this.pointA = null;\n this.pointB = null;\n } else if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (this._currentActiveButton === -1 || isTouch)) {\n try {\n srcElement.setPointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error. Execution will continue.\n }\n\n if (this.pointA === null) {\n this.pointA = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n } else if (this.pointB === null) {\n this.pointB = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n }\n\n if (this._currentActiveButton === -1 && !isTouch) {\n this._currentActiveButton = evt.button;\n }\n this.onButtonDown(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n element && element.focus();\n }\n } else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {\n this.onDoubleTap(evt.pointerType);\n } else if (srcElement && p.type === PointerEventTypes.POINTERUP && (this._currentActiveButton === evt.button || isTouch)) {\n try {\n if (evt.buttons === 0) {\n srcElement.releasePointerCapture(evt.pointerId);\n }\n } catch (e) {\n //Nothing to do with the error.\n }\n\n if (!isTouch) {\n this.pointB = null; // Mouse and pen are mono pointer\n }\n\n //would be better to use pointers.remove(evt.pointerId) for multitouch gestures,\n //but emptying completely pointers collection is required to fix a bug on iPhone :\n //when changing orientation while pinching camera,\n //one pointer stay pressed forever if we don't release all pointers\n //will be ok to put back pointers.remove(evt.pointerId); when iPhone bug corrected\n if (engine._badOS) {\n this.pointA = this.pointB = null;\n } else {\n //only remove the impacted pointer in case of multitouch allowing on most\n //platforms switching from rotate to zoom and pan seamlessly.\n if (this.pointB && this.pointA && this.pointA.pointerId == evt.pointerId) {\n this.pointA = this.pointB;\n this.pointB = null;\n } else if (this.pointA && this.pointB &&\n this.pointB.pointerId == evt.pointerId) {\n this.pointB = null;\n } else {\n this.pointA = this.pointB = null;\n }\n }\n\n if (previousPinchSquaredDistance !== 0 || previousMultiTouchPanPosition) {\n // Previous pinch data is populated but a button has been lifted\n // so pinch has ended.\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n 0, // pinchSquaredDistance\n previousMultiTouchPanPosition,\n null // multiTouchPanPosition\n );\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n }\n\n this._currentActiveButton = -1;\n this.onButtonUp(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n\n // One button down\n if (this.pointA && this.pointB === null) {\n const offsetX = evt.clientX - this.pointA.x;\n const offsetY = evt.clientY - this.pointA.y;\n this.onTouch(this.pointA, offsetX, offsetY);\n\n this.pointA.x = evt.clientX;\n this.pointA.y = evt.clientY;\n }\n // Two buttons down: pinch\n else if (this.pointA && this.pointB) {\n var ed = (this.pointA.pointerId === evt.pointerId) ?\n this.pointA : this.pointB;\n ed.x = evt.clientX;\n ed.y = evt.clientY;\n var distX = this.pointA.x - this.pointB.x;\n var distY = this.pointA.y - this.pointB.y;\n var pinchSquaredDistance = (distX * distX) + (distY * distY);\n var multiTouchPanPosition = {\n x: (this.pointA.x + this.pointB.x) / 2,\n y: (this.pointA.y + this.pointB.y) / 2,\n pointerId: evt.pointerId,\n type: p.type\n };\n\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n pinchSquaredDistance,\n previousMultiTouchPanPosition,\n multiTouchPanPosition);\n\n previousMultiTouchPanPosition = multiTouchPanPosition;\n previousPinchSquaredDistance = pinchSquaredDistance;\n }\n }\n };\n\n this._observer = this.camera.getScene().onPointerObservable.add(\n this._pointerInput,\n PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP |\n PointerEventTypes.POINTERMOVE | PointerEventTypes.POINTERDOUBLETAP);\n\n this._onLostFocus = () => {\n this.pointA = this.pointB = null;\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n this.onLostFocus();\n };\n\n element && element.addEventListener(\"contextmenu\",\n <EventListener>this.onContextMenu.bind(this), false);\n\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n\n if (hostWindow) {\n Tools.RegisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n /**\n * Detach the current controls from the specified dom element.\n */\n public detachControl(): void;\n\n /**\n * Detach the current controls from the specified dom element.\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\n */\n public detachControl(ignored?: any): void {\n if (this._onLostFocus) {\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n if (hostWindow) {\n Tools.UnregisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n if (this._observer) {\n this.camera.getScene().onPointerObservable.remove(this._observer);\n this._observer = null;\n\n if (this.onContextMenu) {\n const inputElement = this.camera.getScene().getEngine().getInputElement();\n inputElement && inputElement.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\n }\n\n this._onLostFocus = null;\n }\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n }\n\n /**\n * Gets the class name of the current input.\n * @returns the class name\n */\n public getClassName(): string {\n return \"BaseCameraPointersInput\";\n }\n\n /**\n * Get the friendly name associated with the input class.\n * @returns the input friendly name\n */\n public getSimpleName(): string {\n return \"pointers\";\n }\n\n /**\n * Called on pointer POINTERDOUBLETAP event.\n * Override this method to provide functionality on POINTERDOUBLETAP event.\n */\n protected onDoubleTap(type: string) {\n }\n\n /**\n * Called on pointer POINTERMOVE event if only a single touch is active.\n * Override this method to provide functionality.\n */\n protected onTouch(point: Nullable<PointerTouch>,\n offsetX: number,\n offsetY: number): void {\n }\n\n /**\n * Called on pointer POINTERMOVE event if multiple touches are active.\n * Override this method to provide functionality.\n */\n protected onMultiTouch(pointA: Nullable<PointerTouch>,\n pointB: Nullable<PointerTouch>,\n previousPinchSquaredDistance: number,\n pinchSquaredDistance: number,\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\n multiTouchPanPosition: Nullable<PointerTouch>): void {\n }\n\n /**\n * Called on JS contextmenu event.\n * Override this method to provide functionality.\n */\n protected onContextMenu(evt: PointerEvent): void {\n evt.preventDefault();\n }\n\n /**\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\n * press.\n * Override this method to provide functionality.\n */\n protected onButtonDown(evt: IPointerEvent): void {\n }\n\n /**\n * Called each time a new POINTERUP event occurs. Ie, for each button\n * release.\n * Override this method to provide functionality.\n */\n protected onButtonUp(evt: IPointerEvent): void {\n }\n\n /**\n * Called when window becomes inactive.\n * Override this method to provide functionality.\n */\n protected onLostFocus(): void {\n }\n\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\n private _observer: Nullable<Observer<PointerInfo>>;\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\n private pointA: Nullable<PointerTouch>;\n private pointB: Nullable<PointerTouch>;\n}\n"]}
|
|
@@ -39,7 +39,6 @@ export declare class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
|
|
|
39
39
|
*/
|
|
40
40
|
_allowCameraRotation: boolean;
|
|
41
41
|
private _currentActiveButton;
|
|
42
|
-
private _usingSafari;
|
|
43
42
|
/**
|
|
44
43
|
* Manage the mouse inputs to control the movement of a free camera.
|
|
45
44
|
* @see https://doc.babylonjs.com/how_to/customizing_camera_inputs
|