@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Buffers/buffer.js +3 -2
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +2 -0
- package/Cameras/camera.js.map +1 -1
- package/Culling/boundingBox.d.ts +7 -1
- package/Culling/boundingBox.js +4 -0
- package/Culling/boundingBox.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -2
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
- package/DeviceInput/InputDevices/deviceEnums.js +0 -2
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/Engines/Extensions/engine.alpha.js +6 -6
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/IDrawContext.d.ts +4 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -0
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuBufferManager.js +3 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
- package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
- package/Engines/WebGPU/webgpuDrawContext.js +75 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
- package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +40 -7
- package/Engines/constants.js +40 -7
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +37 -2
- package/Engines/engine.js +68 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.js +19 -13
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +8 -2
- package/Engines/thinEngine.js +10 -5
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +28 -7
- package/Engines/webgpuEngine.js +177 -58
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -3
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +0 -2
- package/Layers/effectLayer.js +12 -11
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +5 -0
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.js +2 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -0
- package/LensFlares/lensFlare.js +5 -0
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -1
- package/LensFlares/lensFlareSystem.js +15 -12
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +0 -3
- package/Lights/Shadows/shadowGenerator.js +8 -14
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -0
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +8 -11
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
- package/Materials/Node/Blocks/cloudBlock.js +27 -8
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
- package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
- package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +4 -4
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +10 -5
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -0
- package/Materials/Textures/baseTexture.js +2 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +27 -0
- package/Materials/Textures/renderTargetTexture.js +127 -14
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +11 -4
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +2 -1
- package/Materials/drawWrapper.js +10 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.detailMapConfiguration.d.ts +1 -1
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +18 -9
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +3 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +0 -1
- package/Materials/shaderMaterial.js +3 -4
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -4
- package/Materials/shadowDepthWrapper.js +16 -15
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +10 -5
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +10 -2
- package/Materials/uniformBuffer.js +17 -11
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +13 -0
- package/Meshes/abstractMesh.js +22 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +7 -0
- package/Meshes/geometry.js +16 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +15 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +10 -9
- package/Meshes/subMesh.js +44 -43
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/basis.d.ts +3 -2
- package/Misc/basis.js +16 -15
- package/Misc/basis.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -0
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneSerializer.js +17 -17
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/textureTools.js +2 -0
- package/Misc/textureTools.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +5 -1
- package/Particles/gpuParticleSystem.js +31 -5
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +5 -1
- package/Particles/particleSystem.js +35 -5
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
- package/Physics/Plugins/ammoJSPlugin.js +10 -0
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +1 -0
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +1 -0
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +6 -0
- package/PostProcesses/postProcess.js +9 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js +3 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -3
- package/Rendering/boundingBoxRenderer.js +46 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +20 -1
- package/Rendering/depthPeelingRenderer.js +125 -32
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
- package/Rendering/depthPeelingSceneComponent.js +16 -0
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +9 -2
- package/Rendering/depthRenderer.js +77 -43
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +0 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -0
- package/Rendering/edgesRenderer.js +11 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +4 -4
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +5 -4
- package/Rendering/outlineRenderer.js +24 -19
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitFragment.js +1 -1
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.fragment.js +9 -0
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js +9 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
- package/Sprites/spriteManager.d.ts +3 -1
- package/Sprites/spriteManager.js +16 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +2 -0
- package/Sprites/spriteRenderer.js +26 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/package.json +16 -1
- package/scene.d.ts +18 -4
- package/scene.js +100 -41
- package/scene.js.map +1 -1
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
|
|
@@ -40,7 +40,6 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
40
40
|
*/
|
|
41
41
|
this._allowCameraRotation = true;
|
|
42
42
|
this._currentActiveButton = -1;
|
|
43
|
-
this._usingSafari = Tools.IsSafari();
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
45
|
* Attach the input controls to a specific dom element to get the input from.
|
|
@@ -54,17 +53,18 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
54
53
|
if (!this._pointerInput) {
|
|
55
54
|
this._pointerInput = function (p) {
|
|
56
55
|
var evt = p.event;
|
|
56
|
+
var isTouch = evt.pointerType === "touch";
|
|
57
57
|
if (engine.isInVRExclusivePointerMode) {
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
if (!_this.touchEnabled &&
|
|
60
|
+
if (!_this.touchEnabled && isTouch) {
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
63
|
if (p.type !== PointerEventTypes.POINTERMOVE && _this.buttons.indexOf(evt.button) === -1) {
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
66
|
var srcElement = (evt.srcElement || evt.target);
|
|
67
|
-
if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {
|
|
67
|
+
if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (_this._currentActiveButton === -1 || isTouch)) {
|
|
68
68
|
try {
|
|
69
69
|
srcElement.setPointerCapture(evt.pointerId);
|
|
70
70
|
}
|
|
@@ -87,7 +87,7 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
87
87
|
_this._onMouseMove(p.event);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
else if (srcElement &&
|
|
90
|
+
else if (srcElement && p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
|
|
91
91
|
try {
|
|
92
92
|
srcElement.releasePointerCapture(evt.pointerId);
|
|
93
93
|
}
|
|
@@ -101,31 +101,30 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
else if (p.type === PointerEventTypes.POINTERMOVE) {
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
_this._onMouseMove(p.event);
|
|
107
|
-
}
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
var offsetX = evt.clientX - _this.previousPosition.x;
|
|
111
|
-
var offsetY = evt.clientY - _this.previousPosition.y;
|
|
112
|
-
if (_this.camera.getScene().useRightHandedSystem) {
|
|
113
|
-
offsetX *= -1;
|
|
114
|
-
}
|
|
115
|
-
if (_this.camera.parent && _this.camera.parent._getWorldMatrixDeterminant() < 0) {
|
|
116
|
-
offsetX *= -1;
|
|
117
|
-
}
|
|
118
|
-
if (_this._allowCameraRotation) {
|
|
119
|
-
_this.camera.cameraRotation.y += offsetX / _this.angularSensibility;
|
|
120
|
-
_this.camera.cameraRotation.x += offsetY / _this.angularSensibility;
|
|
104
|
+
if (engine.isPointerLock && _this._onMouseMove) {
|
|
105
|
+
_this._onMouseMove(p.event);
|
|
121
106
|
}
|
|
122
|
-
_this.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
107
|
+
else if (_this.previousPosition) {
|
|
108
|
+
var offsetX = evt.clientX - _this.previousPosition.x;
|
|
109
|
+
var offsetY = evt.clientY - _this.previousPosition.y;
|
|
110
|
+
if (_this.camera.getScene().useRightHandedSystem) {
|
|
111
|
+
offsetX *= -1;
|
|
112
|
+
}
|
|
113
|
+
if (_this.camera.parent && _this.camera.parent._getWorldMatrixDeterminant() < 0) {
|
|
114
|
+
offsetX *= -1;
|
|
115
|
+
}
|
|
116
|
+
if (_this._allowCameraRotation) {
|
|
117
|
+
_this.camera.cameraRotation.y += offsetX / _this.angularSensibility;
|
|
118
|
+
_this.camera.cameraRotation.x += offsetY / _this.angularSensibility;
|
|
119
|
+
}
|
|
120
|
+
_this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });
|
|
121
|
+
_this.previousPosition = {
|
|
122
|
+
x: evt.clientX,
|
|
123
|
+
y: evt.clientY,
|
|
124
|
+
};
|
|
125
|
+
if (!noPreventDefault) {
|
|
126
|
+
evt.preventDefault();
|
|
127
|
+
}
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
130
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeCameraMouseInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/freeCameraMouseInput.ts"],"names":[],"mappings":";AAAA,OAAO,EAAwB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAgB,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAe,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;GAGG;AACH;IAoCI;;;;OAIG;IACH;IACI;;OAEG;IACI,YAAmB;QAAnB,6BAAA,EAAA,mBAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;QAvC9B;;WAEG;QAEI,YAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3B;;WAEG;QAEI,uBAAkB,GAAG,MAAM,CAAC;QAK3B,qBAAgB,GAAuC,IAAI,CAAC;QAEpE;;WAEG;QACI,6BAAwB,GAAG,IAAI,UAAU,EAAwC,CAAC;QACzF;;;WAGG;QACI,yBAAoB,GAAG,IAAI,CAAC;QAE3B,yBAAoB,GAAW,CAAC,CAAC,CAAC;QAClC,iBAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAYpC,CAAC;IAEL;;;OAGG;IACI,4CAAa,GAApB,UAAqB,gBAA0B;QAA/C,iBA+HC;QA9HG,gBAAgB,GAAG,KAAK,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACrC,IAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,UAAC,CAAC;gBACnB,IAAI,GAAG,GAAkB,CAAC,CAAC,KAAK,CAAC;gBAEjC,IAAI,MAAM,CAAC,0BAA0B,EAAE;oBACnC,OAAO;iBACV;gBAED,IAAI,CAAC,KAAI,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,KAAK,OAAO,EAAE;oBACnD,OAAO;iBACV;gBAED,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;oBACrF,OAAO;iBACV;gBAED,IAAI,UAAU,GAAgB,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE7D,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,IAAI,UAAU,EAAE;oBACxD,IAAI;wBACA,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;qBAC/C;oBAAC,OAAO,CAAC,EAAE;wBACR,wDAAwD;qBAC3D;oBAED,IAAI,KAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,EAAE;wBAClC,KAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC;qBAC1C;oBAED,KAAI,CAAC,gBAAgB,GAAG;wBACpB,CAAC,EAAE,GAAG,CAAC,OAAO;wBACd,CAAC,EAAE,GAAG,CAAC,OAAO;qBACjB,CAAC;oBAEF,IAAI,CAAC,gBAAgB,EAAE;wBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;wBACrB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;qBAC9B;oBAED,wDAAwD;oBACxD,IAAI,MAAM,CAAC,aAAa,IAAI,KAAI,CAAC,YAAY,EAAE;wBAC3C,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;qBAC9B;iBACJ;qBAAM,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,KAAI,CAAC,oBAAoB,IAAI,KAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,CAAC,EAAE;oBACvN,IAAI;wBACA,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;qBACnD;oBAAC,OAAO,CAAC,EAAE;wBACR,+BAA+B;qBAClC;oBACD,KAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;oBAE/B,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC7B,IAAI,CAAC,gBAAgB,EAAE;wBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;qBACxB;iBACJ;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,EAAE;oBACjD,IAAI,CAAC,KAAI,CAAC,gBAAgB,EAAE;wBACxB,IAAI,MAAM,CAAC,aAAa,IAAI,KAAI,CAAC,YAAY,EAAE;4BAC3C,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;yBAC9B;wBAED,OAAO;qBACV;oBAED,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACpD,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACpD,IAAI,KAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE;wBAC7C,OAAO,IAAI,CAAC,CAAC,CAAC;qBACjB;oBACD,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE;wBAC3E,OAAO,IAAI,CAAC,CAAC,CAAC;qBACjB;oBAED,IAAI,KAAI,CAAC,oBAAoB,EAAE;wBAC3B,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;wBAClE,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;qBACrE;oBACD,KAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAEtF,KAAI,CAAC,gBAAgB,GAAG;wBACpB,CAAC,EAAE,GAAG,CAAC,OAAO;wBACd,CAAC,EAAE,GAAG,CAAC,OAAO;qBACjB,CAAC;oBAEF,IAAI,CAAC,gBAAgB,EAAE;wBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;qBACxB;iBACJ;YACL,CAAC,CAAC;SACL;QAED,IAAI,CAAC,YAAY,GAAG,UAAC,GAAG;YACpB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACvB,OAAO;aACV;YAED,IAAI,MAAM,CAAC,0BAA0B,EAAE;gBACnC,OAAO;aACV;YAED,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE;gBAC7C,OAAO,IAAI,CAAC,CAAC,CAAC;aACjB;YACD,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE;gBAC3E,OAAO,IAAI,CAAC,CAAC,CAAC;aACjB;YACD,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;YAElE,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/F,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;YAElE,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAE7B,IAAI,CAAC,gBAAgB,EAAE;gBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;aACxB;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,WAAW,GAAG,iBAAiB,CAAC,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEjL,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAiB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,4DAA4D;IACzK,CAAC;IAED;;;OAGG;IACO,4CAAa,GAAvB,UAAwB,GAAiB;QACrC,GAAG,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAOD;;;OAGG;IACI,4CAAa,GAApB,UAAqB,OAAa;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAElE,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzC,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAiB,IAAI,CAAC,aAAa,CAAC,CAAC;aAC5F;YAED,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;aACzC;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;IACL,CAAC;IAED;;;OAGG;IACI,2CAAY,GAAnB;QACI,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,4CAAa,GAApB;QACI,OAAO,OAAO,CAAC;IACnB,CAAC;IA9ND;QADC,SAAS,EAAE;yDACe;IAM3B;QADC,SAAS,EAAE;oEACuB;IAyNvC,2BAAC;CAAA,AAzOD,IAyOC;SAzOY,oBAAoB;AA2O3B,gBAAiB,CAAC,sBAAsB,CAAC,GAAG,oBAAoB,CAAC","sourcesContent":["import { Observer, EventState, Observable } from \"../../Misc/observable\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { IMouseEvent, IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class FreeCameraMouseInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the buttons associated with the input to handle camera move.\r\n */\r\n @serialize()\r\n public buttons = [0, 1, 2];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public angularSensibility = 2000.0;\r\n\r\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\r\n private _onMouseMove: Nullable<(e: IMouseEvent) => any>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n /**\r\n * Observable for when a pointer move event occurs containing the move offset\r\n */\r\n public onPointerMovedObservable = new Observable<{ offsetX: number; offsetY: number }>();\r\n /**\r\n * @hidden\r\n * If the camera should be rotated automatically based on pointer movement\r\n */\r\n public _allowCameraRotation = true;\r\n\r\n private _currentActiveButton: number = -1;\r\n private _usingSafari = Tools.IsSafari();\r\n\r\n /**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n * @param touchEnabled Defines if touch is enabled or not\r\n */\r\n constructor(\r\n /**\r\n * Define if touch is enabled in the mouse input\r\n */\r\n public touchEnabled = true\r\n ) { }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n var engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n\r\n if (!this._pointerInput) {\r\n this._pointerInput = (p) => {\r\n var evt = <IPointerEvent>p.event;\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n if (!this.touchEnabled && evt.pointerType === \"touch\") {\r\n return;\r\n }\r\n\r\n if (p.type !== PointerEventTypes.POINTERMOVE && this.buttons.indexOf(evt.button) === -1) {\r\n return;\r\n }\r\n\r\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {\r\n try {\r\n srcElement.setPointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error. Execution will continue.\r\n }\r\n\r\n if (this._currentActiveButton === -1) {\r\n this._currentActiveButton = evt.button;\r\n }\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n element && element.focus();\r\n }\r\n\r\n // This is required to move while pointer button is down\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n } else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === this._currentActiveButton && this._currentActiveButton !== -1 && !this._usingSafari))) {\r\n try {\r\n srcElement.releasePointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error.\r\n }\r\n this._currentActiveButton = -1;\r\n\r\n this.previousPosition = null;\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n if (!this.previousPosition) {\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n\r\n return;\r\n }\r\n\r\n var offsetX = evt.clientX - this.previousPosition.x;\r\n var offsetY = evt.clientY - this.previousPosition.y;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n\r\n if (this._allowCameraRotation) {\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n }\r\n this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n };\r\n }\r\n\r\n this._onMouseMove = (evt) => {\r\n if (!engine.isPointerLock) {\r\n return;\r\n }\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n var offsetX = evt.movementX || evt.mozMovementX || evt.webkitMovementX || evt.msMovementX || 0;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n\r\n var offsetY = evt.movementY || evt.mozMovementY || evt.webkitMovementY || evt.msMovementY || 0;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n\r\n this.previousPosition = null;\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n element && element.addEventListener(\"contextmenu\", <EventListener>this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native\r\n }\r\n\r\n /**\r\n * Called on JS contextmenu event.\r\n * Override this method to provide functionality.\r\n */\r\n protected onContextMenu(evt: PointerEvent): void {\r\n evt.preventDefault();\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void;\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\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\r\n */\r\n public detachControl(ignored?: any): void {\r\n if (this._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n\r\n if (this.onContextMenu) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n element && element.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\r\n }\r\n\r\n if (this.onPointerMovedObservable) {\r\n this.onPointerMovedObservable.clear();\r\n }\r\n\r\n this._observer = null;\r\n this._onMouseMove = null;\r\n this.previousPosition = null;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraMouseInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"mouse\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseInput\"] = FreeCameraMouseInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"freeCameraMouseInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/freeCameraMouseInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer, EventState, Observable } from \"../../Misc/observable\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { IMouseEvent, IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class FreeCameraMouseInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the buttons associated with the input to handle camera move.\r\n */\r\n @serialize()\r\n public buttons = [0, 1, 2];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public angularSensibility = 2000.0;\r\n\r\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\r\n private _onMouseMove: Nullable<(e: IMouseEvent) => any>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n /**\r\n * Observable for when a pointer move event occurs containing the move offset\r\n */\r\n public onPointerMovedObservable = new Observable<{ offsetX: number; offsetY: number }>();\r\n /**\r\n * @hidden\r\n * If the camera should be rotated automatically based on pointer movement\r\n */\r\n public _allowCameraRotation = true;\r\n\r\n private _currentActiveButton: number = -1;\r\n\r\n /**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n * @param touchEnabled Defines if touch is enabled or not\r\n */\r\n constructor(\r\n /**\r\n * Define if touch is enabled in the mouse input\r\n */\r\n public touchEnabled = true\r\n ) { }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n var engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n\r\n if (!this._pointerInput) {\r\n this._pointerInput = (p) => {\r\n var evt = <IPointerEvent>p.event;\r\n let isTouch = evt.pointerType === \"touch\";\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n if (!this.touchEnabled && isTouch) {\r\n return;\r\n }\r\n\r\n if (p.type !== PointerEventTypes.POINTERMOVE && this.buttons.indexOf(evt.button) === -1) {\r\n return;\r\n }\r\n\r\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (this._currentActiveButton === -1 || isTouch)) {\r\n try {\r\n srcElement.setPointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error. Execution will continue.\r\n }\r\n\r\n if (this._currentActiveButton === -1) {\r\n this._currentActiveButton = evt.button;\r\n }\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n element && element.focus();\r\n }\r\n\r\n // This is required to move while pointer button is down\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n } else if (srcElement && p.type === PointerEventTypes.POINTERUP && (this._currentActiveButton === evt.button || isTouch)) {\r\n try {\r\n srcElement.releasePointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error.\r\n }\r\n this._currentActiveButton = -1;\r\n\r\n this.previousPosition = null;\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n else if (this.previousPosition) {\r\n var offsetX = evt.clientX - this.previousPosition.x;\r\n var offsetY = evt.clientY - this.previousPosition.y;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n\r\n if (this._allowCameraRotation) {\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n }\r\n this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n this._onMouseMove = (evt) => {\r\n if (!engine.isPointerLock) {\r\n return;\r\n }\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n var offsetX = evt.movementX || evt.mozMovementX || evt.webkitMovementX || evt.msMovementX || 0;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n\r\n var offsetY = evt.movementY || evt.mozMovementY || evt.webkitMovementY || evt.msMovementY || 0;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n\r\n this.previousPosition = null;\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n element && element.addEventListener(\"contextmenu\", <EventListener>this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native\r\n }\r\n\r\n /**\r\n * Called on JS contextmenu event.\r\n * Override this method to provide functionality.\r\n */\r\n protected onContextMenu(evt: PointerEvent): void {\r\n evt.preventDefault();\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void;\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\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\r\n */\r\n public detachControl(ignored?: any): void {\r\n if (this._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n\r\n if (this.onContextMenu) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n element && element.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\r\n }\r\n\r\n if (this.onPointerMovedObservable) {\r\n this.onPointerMovedObservable.clear();\r\n }\r\n\r\n this._observer = null;\r\n this._onMouseMove = null;\r\n this.previousPosition = null;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraMouseInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"mouse\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseInput\"] = FreeCameraMouseInput;\r\n"]}
|
package/Cameras/camera.d.ts
CHANGED
|
@@ -227,6 +227,10 @@ export declare class Camera extends Node {
|
|
|
227
227
|
* The parent camera is not (!) necessarily the .parent of this camera (like in the case of XR)
|
|
228
228
|
*/
|
|
229
229
|
rigParent?: Camera;
|
|
230
|
+
/**
|
|
231
|
+
* Render pass id used by the camera to render into the main framebuffer
|
|
232
|
+
*/
|
|
233
|
+
renderPassId: number;
|
|
230
234
|
/** @hidden */
|
|
231
235
|
_cameraRigParams: any;
|
|
232
236
|
/** @hidden */
|
package/Cameras/camera.js
CHANGED
|
@@ -170,6 +170,7 @@ var Camera = /** @class */ (function (_super) {
|
|
|
170
170
|
_this.getScene().activeCamera = _this;
|
|
171
171
|
}
|
|
172
172
|
_this.position = position;
|
|
173
|
+
_this.renderPassId = _this.getScene().getEngine().createRenderPassId("Camera " + name);
|
|
173
174
|
return _this;
|
|
174
175
|
}
|
|
175
176
|
Object.defineProperty(Camera.prototype, "position", {
|
|
@@ -770,6 +771,7 @@ var Camera = /** @class */ (function (_super) {
|
|
|
770
771
|
this.customRenderTargets = [];
|
|
771
772
|
// Active Meshes
|
|
772
773
|
this._activeMeshes.dispose();
|
|
774
|
+
this.getScene().getEngine().releaseRenderPassId(this.renderPassId);
|
|
773
775
|
_super.prototype.dispose.call(this, doNotRecurse, disposeMaterialAndTextures);
|
|
774
776
|
};
|
|
775
777
|
Object.defineProperty(Camera.prototype, "isLeftCamera", {
|