@onerjs/core 8.27.12 → 8.27.13
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/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.d.ts +39 -0
- package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js +86 -0
- package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.d.ts +34 -0
- package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js +74 -0
- package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/index.d.ts +2 -0
- package/FrameGraph/Node/Blocks/index.js +2 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.d.ts +21 -0
- package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js +18 -0
- package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.d.ts +22 -0
- package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js +27 -0
- package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/sharpenTask.d.ts +17 -0
- package/FrameGraph/Tasks/PostProcesses/sharpenTask.js +23 -0
- package/FrameGraph/Tasks/PostProcesses/sharpenTask.js.map +1 -0
- package/FrameGraph/frameGraphTextureManager.d.ts +6 -2
- package/FrameGraph/frameGraphTextureManager.js +22 -8
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/index.d.ts +3 -0
- package/FrameGraph/index.js +3 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/PBR/openPbrMaterial.d.ts +39 -0
- package/Materials/PBR/openPbrMaterial.js +46 -0
- package/Materials/PBR/openPbrMaterial.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +1 -7
- package/Materials/materialHelper.functions.js +2 -15
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.functions.pure.d.ts +10 -0
- package/Materials/materialHelper.functions.pure.js +21 -0
- package/Materials/materialHelper.functions.pure.js.map +1 -0
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +6 -2
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +37 -13
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.d.ts +6 -3
- package/PostProcesses/sharpenPostProcess.js +39 -24
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/thinCustomPostProcess.d.ts +20 -0
- package/PostProcesses/thinCustomPostProcess.js +32 -0
- package/PostProcesses/thinCustomPostProcess.js.map +1 -0
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +36 -0
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +61 -0
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -0
- package/PostProcesses/thinSharpenPostProcess.d.ts +40 -0
- package/PostProcesses/thinSharpenPostProcess.js +64 -0
- package/PostProcesses/thinSharpenPostProcess.js.map +1 -0
- package/Rendering/objectRenderer.js +3 -1
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDielectricReflectance.js +8 -9
- package/Shaders/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +13 -6
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +10 -2
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +7 -1
- package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js +2 -0
- package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrThinFilmLayerData.d.ts +5 -0
- package/Shaders/ShadersInclude/openpbrThinFilmLayerData.js +27 -0
- package/Shaders/ShadersInclude/openpbrThinFilmLayerData.js.map +1 -0
- package/Shaders/ShadersInclude/openpbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +6 -0
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
- package/Shaders/openpbr.fragment.d.ts +1 -0
- package/Shaders/openpbr.fragment.js +7 -1
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/Shaders/openpbr.vertex.js +4 -0
- package/Shaders/openpbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +2 -2
- package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +13 -6
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +10 -2
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js +2 -0
- package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrThinFilmLayerData.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/openpbrThinFilmLayerData.js +27 -0
- package/ShadersWGSL/ShadersInclude/openpbrThinFilmLayerData.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +3 -3
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.d.ts +1 -0
- package/ShadersWGSL/openpbr.fragment.js +7 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.vertex.js +4 -0
- package/ShadersWGSL/openpbr.vertex.js.map +1 -1
- package/ShadersWGSL/screenSpaceCurvature.fragment.d.ts +5 -0
- package/ShadersWGSL/screenSpaceCurvature.fragment.js +25 -0
- package/ShadersWGSL/screenSpaceCurvature.fragment.js.map +1 -0
- package/Sprites/spriteRenderer.js +1 -1
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/motionController/index.d.ts +1 -0
- package/XR/motionController/index.js +1 -0
- package/XR/motionController/index.js.map +1 -1
- package/XR/motionController/webXRMotionControllerManager.js +1 -0
- package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
- package/XR/motionController/webXROculusHandController.d.ts +25 -0
- package/XR/motionController/webXROculusHandController.js +246 -0
- package/XR/motionController/webXROculusHandController.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { IMatrixLike } from \"../Maths/math.like\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport type { ThinSprite } from \"./thinSprite\";\r\nimport type { ISize } from \"../Maths/math.size\";\r\n\r\nimport type { ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BindLogDepth } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Options for the SpriteRenderer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SpriteRendererOptions {\r\n /**\r\n * Sets a boolean indicating if the renderer must render sprites with pixel perfect rendering.\r\n * In this mode, sprites are rendered as \"pixel art\", which means that they appear as pixelated but remain stable when moving or when rotated or scaled.\r\n * Note that for this mode to work as expected, the sprite texture must use the BILINEAR sampling mode, not NEAREST!\r\n * Default is false.\r\n */\r\n pixelPerfect?: boolean;\r\n}\r\n\r\n/**\r\n * Class used to render sprites.\r\n *\r\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\r\n */\r\nexport class SpriteRenderer {\r\n /**\r\n * Force all the sprites to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Defines the texture of the spritesheet\r\n */\r\n public texture: Nullable<ThinTexture>;\r\n\r\n /**\r\n * Defines the default width of a cell in the spritesheet\r\n */\r\n public cellWidth: number;\r\n\r\n /**\r\n * Defines the default height of a cell in the spritesheet\r\n */\r\n public cellHeight: number;\r\n\r\n /**\r\n * Blend mode use to render the particle, it can be any of\r\n * the static Constants.ALPHA_x properties provided in this class.\r\n * Default value is Constants.ALPHA_COMBINE\r\n */\r\n public blendMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if alpha mode is automatically\r\n * reset.\r\n */\r\n public autoResetAlpha = true;\r\n\r\n /**\r\n * Disables writing to the depth buffer when rendering the sprites.\r\n * It can be handy to disable depth writing when using textures without alpha channel\r\n * and setting some specific blend modes.\r\n */\r\n public disableDepthWrite: boolean = false;\r\n\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\r\n */\r\n public get fogEnabled() {\r\n return this._fogEnabled;\r\n }\r\n\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fogEnabled = value;\r\n this._createEffects();\r\n }\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Gets the capacity of the manager\r\n */\r\n public get capacity() {\r\n return this._capacity;\r\n }\r\n\r\n private _pixelPerfect = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\r\n * Note that pixel perfect mode is not supported in WebGL 1\r\n */\r\n public get pixelPerfect() {\r\n return this._pixelPerfect;\r\n }\r\n\r\n public set pixelPerfect(value: boolean) {\r\n if (this._pixelPerfect === value) {\r\n return;\r\n }\r\n\r\n this._pixelPerfect = value;\r\n this._createEffects();\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _useVAO: boolean = false;\r\n private readonly _useInstancing: boolean = false;\r\n private readonly _scene: Nullable<Scene>;\r\n\r\n private readonly _capacity: number;\r\n private readonly _epsilon: number;\r\n\r\n private _vertexBufferSize: number;\r\n private _vertexData: Float32Array;\r\n private _buffer: Buffer;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: DataBuffer;\r\n /** @internal */\r\n public _drawWrapperBase: DrawWrapper;\r\n /** @internal */\r\n public _drawWrapperDepth: DrawWrapper;\r\n private _vertexArrayObject: WebGLVertexArrayObject;\r\n private _isDisposed = false;\r\n\r\n /**\r\n * Creates a new sprite renderer\r\n * @param engine defines the engine the renderer works with\r\n * @param capacity defines the maximum allowed number of sprites\r\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\r\n * @param scene defines the hosting scene\r\n * @param rendererOptions options for the sprite renderer\r\n */\r\n constructor(engine: AbstractEngine, capacity: number, epsilon: number = 0.01, scene: Nullable<Scene> = null, rendererOptions?: SpriteRendererOptions) {\r\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\r\n this._capacity = capacity;\r\n this._epsilon = epsilon;\r\n\r\n this._engine = engine;\r\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\r\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\r\n this._scene = scene;\r\n\r\n if (!this._useInstancing) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n // VBO\r\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\r\n // 16 when using instances\r\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\r\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\r\n\r\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\r\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\r\n\r\n let offset = 6;\r\n let offsets: VertexBuffer;\r\n\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n ]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\r\n } else {\r\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n offset += 2;\r\n }\r\n\r\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\r\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n this._vertexBuffers[\"options\"] = options;\r\n this._vertexBuffers[\"offsets\"] = offsets;\r\n this._vertexBuffers[\"inverts\"] = inverts;\r\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._engine;\r\n\r\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex\"), import(\"../ShadersWGSL/sprites.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/sprites.vertex\"), import(\"../Shaders/sprites.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n this._createEffects();\r\n }\r\n\r\n private _createEffects() {\r\n if (this._isDisposed || !this._shadersLoaded) {\r\n return;\r\n }\r\n\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n\r\n this._drawWrapperBase = new DrawWrapper(this._engine);\r\n this._drawWrapperDepth = new DrawWrapper(this._engine, false);\r\n\r\n if (this._drawWrapperBase.drawContext) {\r\n this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;\r\n }\r\n if (this._drawWrapperDepth.drawContext) {\r\n this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\r\n }\r\n\r\n let defines = \"\";\r\n\r\n if (this._pixelPerfect) {\r\n defines += \"#define PIXEL_PERFECT\\n\";\r\n }\r\n if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {\r\n defines += \"#define FOG\\n\";\r\n }\r\n if (this._useLogarithmicDepth) {\r\n defines += \"#define LOGARITHMICDEPTH\\n\";\r\n }\r\n\r\n this._drawWrapperBase.effect = this._engine.createEffect(\r\n \"sprites\",\r\n [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind],\r\n [\"view\", \"projection\", \"textureInfos\", \"alphaTest\", \"vFogInfos\", \"vFogColor\", \"logarithmicDepthConstant\"],\r\n [\"diffuseSampler\"],\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage\r\n );\r\n\r\n this._drawWrapperDepth.effect = this._drawWrapperBase.effect;\r\n this._drawWrapperBase.effect._refCount++;\r\n this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;\r\n }\r\n\r\n /**\r\n * Render all child sprites\r\n * @param sprites defines the list of sprites to render\r\n * @param deltaTime defines the time since last frame\r\n * @param viewMatrix defines the viewMatrix to use to render the sprites\r\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\r\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\r\n */\r\n public render(\r\n sprites: ThinSprite[],\r\n deltaTime: number,\r\n viewMatrix: IMatrixLike,\r\n projectionMatrix: IMatrixLike,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void> = null\r\n ): void {\r\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\r\n return;\r\n }\r\n\r\n const drawWrapper = this._drawWrapperBase;\r\n const drawWrapperDepth = this._drawWrapperDepth;\r\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n // Check\r\n if (!effect.isReady()) {\r\n return;\r\n }\r\n\r\n const engine = this._engine;\r\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\r\n\r\n // Sprites\r\n const max = Math.min(this._capacity, sprites.length);\r\n\r\n let offset = 0;\r\n let noSprite = true;\r\n for (let index = 0; index < max; index++) {\r\n const sprite = sprites[index];\r\n if (!sprite || !sprite.isVisible) {\r\n continue;\r\n }\r\n\r\n noSprite = false;\r\n sprite._animate(deltaTime);\r\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\r\n\r\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n if (!this._useInstancing) {\r\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n }\r\n }\r\n\r\n if (noSprite) {\r\n return;\r\n }\r\n\r\n this._buffer.update(this._vertexData);\r\n\r\n const culling = !!engine.depthCullingState.cull;\r\n const zOffset = engine.depthCullingState.zOffset;\r\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\r\n\r\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n effect.setTexture(\"diffuseSampler\", this.texture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n // Scene Info\r\n if (shouldRenderFog) {\r\n const scene = this._scene;\r\n\r\n // Fog\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n BindLogDepth(drawWrapper.defines, effect, this._scene);\r\n }\r\n\r\n if (this._useVAO) {\r\n if (!this._vertexArrayObject) {\r\n this._vertexArrayObject = (engine as ThinEngine).recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n (engine as ThinEngine).bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\r\n } else {\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n // Draw order\r\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? Constants.GEQUAL : Constants.LEQUAL;\r\n if (!this.disableDepthWrite) {\r\n effect.setBool(\"alphaTest\", true);\r\n engine.setColorWrite(false);\r\n engine.enableEffect(drawWrapperDepth);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n engine.enableEffect(drawWrapper);\r\n engine.setColorWrite(true);\r\n effect.setBool(\"alphaTest\", false);\r\n }\r\n\r\n engine.setAlphaMode(this.blendMode);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n\r\n if (this.autoResetAlpha) {\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n // Restore Right Handed\r\n if (useRightHandedSystem) {\r\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\r\n }\r\n\r\n engine.unbindInstanceAttributes();\r\n }\r\n\r\n private _appendSpriteVertex(\r\n index: number,\r\n sprite: ThinSprite,\r\n offsetX: number,\r\n offsetY: number,\r\n baseSize: ISize,\r\n useRightHandedSystem: boolean,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void>\r\n ): void {\r\n let arrayOffset = index * this._vertexBufferSize;\r\n\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n\r\n if (customSpriteUpdate) {\r\n customSpriteUpdate(sprite, baseSize);\r\n } else {\r\n if (!sprite.cellIndex) {\r\n sprite.cellIndex = 0;\r\n }\r\n\r\n const rowSize = baseSize.width / this.cellWidth;\r\n const offset = (sprite.cellIndex / rowSize) >> 0;\r\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\r\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\r\n sprite._xSize = this.cellWidth;\r\n sprite._ySize = this.cellHeight;\r\n }\r\n\r\n // Positions\r\n this._vertexData[arrayOffset] = sprite.position.x;\r\n this._vertexData[arrayOffset + 1] = sprite.position.y;\r\n this._vertexData[arrayOffset + 2] = sprite.position.z;\r\n this._vertexData[arrayOffset + 3] = sprite.angle;\r\n // Options\r\n this._vertexData[arrayOffset + 4] = sprite.width;\r\n this._vertexData[arrayOffset + 5] = sprite.height;\r\n\r\n if (!this._useInstancing) {\r\n this._vertexData[arrayOffset + 6] = offsetX;\r\n this._vertexData[arrayOffset + 7] = offsetY;\r\n } else {\r\n arrayOffset -= 2;\r\n }\r\n\r\n // Inverts according to Right Handed\r\n if (useRightHandedSystem) {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\r\n } else {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\r\n }\r\n\r\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\r\n\r\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\r\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\r\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\r\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\r\n\r\n // Color\r\n this._vertexData[arrayOffset + 14] = sprite.color.r;\r\n this._vertexData[arrayOffset + 15] = sprite.color.g;\r\n this._vertexData[arrayOffset + 16] = sprite.color.b;\r\n this._vertexData[arrayOffset + 17] = sprite.color.a;\r\n }\r\n\r\n private _buildIndexBuffer(): void {\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Rebuilds the renderer (after a context lost, for eg)\r\n */\r\n public rebuild(): void {\r\n if (this._indexBuffer) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n if (this._useVAO) {\r\n this._vertexArrayObject = undefined as any;\r\n }\r\n\r\n this._buffer._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n\r\n this._spriteBuffer?._rebuild();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n if (this._buffer) {\r\n this._buffer.dispose();\r\n (<any>this._buffer) = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n (<any>this._spriteBuffer) = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n (<any>this._indexBuffer) = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObject);\r\n (<any>this._vertexArrayObject) = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n (<any>this.texture) = null;\r\n }\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"spriteRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { IMatrixLike } from \"../Maths/math.like\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport type { ThinSprite } from \"./thinSprite\";\r\nimport type { ISize } from \"../Maths/math.size\";\r\n\r\nimport type { ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BindLogDepth } from \"../Materials/materialHelper.functions.pure\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Options for the SpriteRenderer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SpriteRendererOptions {\r\n /**\r\n * Sets a boolean indicating if the renderer must render sprites with pixel perfect rendering.\r\n * In this mode, sprites are rendered as \"pixel art\", which means that they appear as pixelated but remain stable when moving or when rotated or scaled.\r\n * Note that for this mode to work as expected, the sprite texture must use the BILINEAR sampling mode, not NEAREST!\r\n * Default is false.\r\n */\r\n pixelPerfect?: boolean;\r\n}\r\n\r\n/**\r\n * Class used to render sprites.\r\n *\r\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\r\n */\r\nexport class SpriteRenderer {\r\n /**\r\n * Force all the sprites to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Defines the texture of the spritesheet\r\n */\r\n public texture: Nullable<ThinTexture>;\r\n\r\n /**\r\n * Defines the default width of a cell in the spritesheet\r\n */\r\n public cellWidth: number;\r\n\r\n /**\r\n * Defines the default height of a cell in the spritesheet\r\n */\r\n public cellHeight: number;\r\n\r\n /**\r\n * Blend mode use to render the particle, it can be any of\r\n * the static Constants.ALPHA_x properties provided in this class.\r\n * Default value is Constants.ALPHA_COMBINE\r\n */\r\n public blendMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if alpha mode is automatically\r\n * reset.\r\n */\r\n public autoResetAlpha = true;\r\n\r\n /**\r\n * Disables writing to the depth buffer when rendering the sprites.\r\n * It can be handy to disable depth writing when using textures without alpha channel\r\n * and setting some specific blend modes.\r\n */\r\n public disableDepthWrite: boolean = false;\r\n\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\r\n */\r\n public get fogEnabled() {\r\n return this._fogEnabled;\r\n }\r\n\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fogEnabled = value;\r\n this._createEffects();\r\n }\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Gets the capacity of the manager\r\n */\r\n public get capacity() {\r\n return this._capacity;\r\n }\r\n\r\n private _pixelPerfect = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\r\n * Note that pixel perfect mode is not supported in WebGL 1\r\n */\r\n public get pixelPerfect() {\r\n return this._pixelPerfect;\r\n }\r\n\r\n public set pixelPerfect(value: boolean) {\r\n if (this._pixelPerfect === value) {\r\n return;\r\n }\r\n\r\n this._pixelPerfect = value;\r\n this._createEffects();\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _useVAO: boolean = false;\r\n private readonly _useInstancing: boolean = false;\r\n private readonly _scene: Nullable<Scene>;\r\n\r\n private readonly _capacity: number;\r\n private readonly _epsilon: number;\r\n\r\n private _vertexBufferSize: number;\r\n private _vertexData: Float32Array;\r\n private _buffer: Buffer;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: DataBuffer;\r\n /** @internal */\r\n public _drawWrapperBase: DrawWrapper;\r\n /** @internal */\r\n public _drawWrapperDepth: DrawWrapper;\r\n private _vertexArrayObject: WebGLVertexArrayObject;\r\n private _isDisposed = false;\r\n\r\n /**\r\n * Creates a new sprite renderer\r\n * @param engine defines the engine the renderer works with\r\n * @param capacity defines the maximum allowed number of sprites\r\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\r\n * @param scene defines the hosting scene\r\n * @param rendererOptions options for the sprite renderer\r\n */\r\n constructor(engine: AbstractEngine, capacity: number, epsilon: number = 0.01, scene: Nullable<Scene> = null, rendererOptions?: SpriteRendererOptions) {\r\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\r\n this._capacity = capacity;\r\n this._epsilon = epsilon;\r\n\r\n this._engine = engine;\r\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\r\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\r\n this._scene = scene;\r\n\r\n if (!this._useInstancing) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n // VBO\r\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\r\n // 16 when using instances\r\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\r\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\r\n\r\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\r\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\r\n\r\n let offset = 6;\r\n let offsets: VertexBuffer;\r\n\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n ]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\r\n } else {\r\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n offset += 2;\r\n }\r\n\r\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\r\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n this._vertexBuffers[\"options\"] = options;\r\n this._vertexBuffers[\"offsets\"] = offsets;\r\n this._vertexBuffers[\"inverts\"] = inverts;\r\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._engine;\r\n\r\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex\"), import(\"../ShadersWGSL/sprites.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/sprites.vertex\"), import(\"../Shaders/sprites.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n this._createEffects();\r\n }\r\n\r\n private _createEffects() {\r\n if (this._isDisposed || !this._shadersLoaded) {\r\n return;\r\n }\r\n\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n\r\n this._drawWrapperBase = new DrawWrapper(this._engine);\r\n this._drawWrapperDepth = new DrawWrapper(this._engine, false);\r\n\r\n if (this._drawWrapperBase.drawContext) {\r\n this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;\r\n }\r\n if (this._drawWrapperDepth.drawContext) {\r\n this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\r\n }\r\n\r\n let defines = \"\";\r\n\r\n if (this._pixelPerfect) {\r\n defines += \"#define PIXEL_PERFECT\\n\";\r\n }\r\n if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {\r\n defines += \"#define FOG\\n\";\r\n }\r\n if (this._useLogarithmicDepth) {\r\n defines += \"#define LOGARITHMICDEPTH\\n\";\r\n }\r\n\r\n this._drawWrapperBase.effect = this._engine.createEffect(\r\n \"sprites\",\r\n [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind],\r\n [\"view\", \"projection\", \"textureInfos\", \"alphaTest\", \"vFogInfos\", \"vFogColor\", \"logarithmicDepthConstant\"],\r\n [\"diffuseSampler\"],\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage\r\n );\r\n\r\n this._drawWrapperDepth.effect = this._drawWrapperBase.effect;\r\n this._drawWrapperBase.effect._refCount++;\r\n this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;\r\n }\r\n\r\n /**\r\n * Render all child sprites\r\n * @param sprites defines the list of sprites to render\r\n * @param deltaTime defines the time since last frame\r\n * @param viewMatrix defines the viewMatrix to use to render the sprites\r\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\r\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\r\n */\r\n public render(\r\n sprites: ThinSprite[],\r\n deltaTime: number,\r\n viewMatrix: IMatrixLike,\r\n projectionMatrix: IMatrixLike,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void> = null\r\n ): void {\r\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\r\n return;\r\n }\r\n\r\n const drawWrapper = this._drawWrapperBase;\r\n const drawWrapperDepth = this._drawWrapperDepth;\r\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n // Check\r\n if (!effect.isReady()) {\r\n return;\r\n }\r\n\r\n const engine = this._engine;\r\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\r\n\r\n // Sprites\r\n const max = Math.min(this._capacity, sprites.length);\r\n\r\n let offset = 0;\r\n let noSprite = true;\r\n for (let index = 0; index < max; index++) {\r\n const sprite = sprites[index];\r\n if (!sprite || !sprite.isVisible) {\r\n continue;\r\n }\r\n\r\n noSprite = false;\r\n sprite._animate(deltaTime);\r\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\r\n\r\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n if (!this._useInstancing) {\r\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate);\r\n }\r\n }\r\n\r\n if (noSprite) {\r\n return;\r\n }\r\n\r\n this._buffer.update(this._vertexData);\r\n\r\n const culling = !!engine.depthCullingState.cull;\r\n const zOffset = engine.depthCullingState.zOffset;\r\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\r\n\r\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n effect.setTexture(\"diffuseSampler\", this.texture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n // Scene Info\r\n if (shouldRenderFog) {\r\n const scene = this._scene;\r\n\r\n // Fog\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n BindLogDepth(drawWrapper.defines, effect, this._scene);\r\n }\r\n\r\n if (this._useVAO) {\r\n if (!this._vertexArrayObject) {\r\n this._vertexArrayObject = (engine as ThinEngine).recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n (engine as ThinEngine).bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\r\n } else {\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n // Draw order\r\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? Constants.GEQUAL : Constants.LEQUAL;\r\n if (!this.disableDepthWrite) {\r\n effect.setBool(\"alphaTest\", true);\r\n engine.setColorWrite(false);\r\n engine.enableEffect(drawWrapperDepth);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n engine.enableEffect(drawWrapper);\r\n engine.setColorWrite(true);\r\n effect.setBool(\"alphaTest\", false);\r\n }\r\n\r\n engine.setAlphaMode(this.blendMode);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n\r\n if (this.autoResetAlpha) {\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n // Restore Right Handed\r\n if (useRightHandedSystem) {\r\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\r\n }\r\n\r\n engine.unbindInstanceAttributes();\r\n }\r\n\r\n private _appendSpriteVertex(\r\n index: number,\r\n sprite: ThinSprite,\r\n offsetX: number,\r\n offsetY: number,\r\n baseSize: ISize,\r\n useRightHandedSystem: boolean,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void>\r\n ): void {\r\n let arrayOffset = index * this._vertexBufferSize;\r\n\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n\r\n if (customSpriteUpdate) {\r\n customSpriteUpdate(sprite, baseSize);\r\n } else {\r\n if (!sprite.cellIndex) {\r\n sprite.cellIndex = 0;\r\n }\r\n\r\n const rowSize = baseSize.width / this.cellWidth;\r\n const offset = (sprite.cellIndex / rowSize) >> 0;\r\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\r\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\r\n sprite._xSize = this.cellWidth;\r\n sprite._ySize = this.cellHeight;\r\n }\r\n\r\n // Positions\r\n this._vertexData[arrayOffset] = sprite.position.x;\r\n this._vertexData[arrayOffset + 1] = sprite.position.y;\r\n this._vertexData[arrayOffset + 2] = sprite.position.z;\r\n this._vertexData[arrayOffset + 3] = sprite.angle;\r\n // Options\r\n this._vertexData[arrayOffset + 4] = sprite.width;\r\n this._vertexData[arrayOffset + 5] = sprite.height;\r\n\r\n if (!this._useInstancing) {\r\n this._vertexData[arrayOffset + 6] = offsetX;\r\n this._vertexData[arrayOffset + 7] = offsetY;\r\n } else {\r\n arrayOffset -= 2;\r\n }\r\n\r\n // Inverts according to Right Handed\r\n if (useRightHandedSystem) {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\r\n } else {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\r\n }\r\n\r\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\r\n\r\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\r\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\r\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\r\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\r\n\r\n // Color\r\n this._vertexData[arrayOffset + 14] = sprite.color.r;\r\n this._vertexData[arrayOffset + 15] = sprite.color.g;\r\n this._vertexData[arrayOffset + 16] = sprite.color.b;\r\n this._vertexData[arrayOffset + 17] = sprite.color.a;\r\n }\r\n\r\n private _buildIndexBuffer(): void {\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Rebuilds the renderer (after a context lost, for eg)\r\n */\r\n public rebuild(): void {\r\n if (this._indexBuffer) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n if (this._useVAO) {\r\n this._vertexArrayObject = undefined as any;\r\n }\r\n\r\n this._buffer._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n\r\n this._spriteBuffer?._rebuild();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n if (this._buffer) {\r\n this._buffer.dispose();\r\n (<any>this._buffer) = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n (<any>this._spriteBuffer) = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n (<any>this._indexBuffer) = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObject);\r\n (<any>this._vertexArrayObject) = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n (<any>this.texture) = null;\r\n }\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
|
|
@@ -5,5 +5,6 @@ export * from "./webXRGenericMotionController.js";
|
|
|
5
5
|
export * from "./webXRMicrosoftMixedRealityController.js";
|
|
6
6
|
export * from "./webXRMotionControllerManager.js";
|
|
7
7
|
export * from "./webXROculusTouchMotionController.js";
|
|
8
|
+
export * from "./webXROculusHandController.js";
|
|
8
9
|
export * from "./webXRHTCViveMotionController.js";
|
|
9
10
|
export * from "./webXRProfiledMotionController.js";
|
|
@@ -5,6 +5,7 @@ export * from "./webXRGenericMotionController.js";
|
|
|
5
5
|
export * from "./webXRMicrosoftMixedRealityController.js";
|
|
6
6
|
export * from "./webXRMotionControllerManager.js";
|
|
7
7
|
export * from "./webXROculusTouchMotionController.js";
|
|
8
|
+
export * from "./webXROculusHandController.js";
|
|
8
9
|
export * from "./webXRHTCViveMotionController.js";
|
|
9
10
|
export * from "./webXRProfiledMotionController.js";
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC","sourcesContent":["export * from \"./webXRAbstractMotionController\";\r\nexport * from \"./webXRControllerComponent\";\r\nexport * from \"./webXRGenericHandController\";\r\nexport * from \"./webXRGenericMotionController\";\r\nexport * from \"./webXRMicrosoftMixedRealityController\";\r\nexport * from \"./webXRMotionControllerManager\";\r\nexport * from \"./webXROculusTouchMotionController\";\r\nexport * from \"./webXRHTCViveMotionController\";\r\nexport * from \"./webXRProfiledMotionController\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC","sourcesContent":["export * from \"./webXRAbstractMotionController\";\r\nexport * from \"./webXRControllerComponent\";\r\nexport * from \"./webXRGenericHandController\";\r\nexport * from \"./webXRGenericMotionController\";\r\nexport * from \"./webXRMicrosoftMixedRealityController\";\r\nexport * from \"./webXRMotionControllerManager\";\r\nexport * from \"./webXROculusTouchMotionController\";\r\nexport * from \"./webXROculusHandController\";\r\nexport * from \"./webXRHTCViveMotionController\";\r\nexport * from \"./webXRProfiledMotionController\";\r\n"]}
|
|
@@ -40,6 +40,7 @@ export class WebXRMotionControllerManager {
|
|
|
40
40
|
this.RegisterFallbacksForProfileId("samsung-odyssey", ["generic-touchpad"]);
|
|
41
41
|
this.RegisterFallbacksForProfileId("valve-index", ["generic-trigger-squeeze-touchpad-thumbstick"]);
|
|
42
42
|
this.RegisterFallbacksForProfileId("generic-hand-select", ["generic-trigger"]);
|
|
43
|
+
this.RegisterFallbacksForProfileId("oculus-hand", ["generic-trigger"]);
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
45
46
|
* Find a fallback profile if the profile was not found. There are a few predefined generic profiles.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webXRMotionControllerManager.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRMotionControllerManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAShF;;;;;;;GAOG;AAEH,MAAM,eAAe,GAIhB,EAAE,CAAC;AAER;;;GAGG;AACH,MAAM,OAAO,4BAA4B;IA0BrC;;OAEG;IACI,MAAM,CAAC,kBAAkB;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,gBAAgB;QAC1B,IAAI,CAAC,6BAA6B,CAAC,iBAAiB,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,6BAA6B,CAAC,eAAe,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,6BAA6B,CAAC,uBAAuB,EAAE,CAAC,6CAA6C,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,6BAA6B,CAAC,yBAAyB,EAAE,CAAC,uBAAuB,EAAE,6CAA6C,CAAC,CAAC,CAAC;QACxI,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,6BAA6B,CAAC,iBAAiB,EAAE,CAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,6BAA6B,CAAC,cAAc,EAAE,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,6CAA6C,CAAC,CAAC,CAAC;QAC/H,IAAI,CAAC,6BAA6B,CAAC,iBAAiB,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,6BAA6B,CAAC,aAAa,EAAE,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,yBAAyB,CAAC,SAAiB;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAErD,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,OAAsB,EAAE,KAAY,EAAE,YAAqB;QAC1G,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,YAAY,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAE/C,mBAAmB;QACnB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,2DAA2D;YAC3D,YAAY,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACxC,QAAQ,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBACzB,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;oBAC5E,uBAAuB;oBACvB,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACrC,MAAM;YACd,CAAC;QACL,CAAC;QAED,4DAA4D;QAC5D,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACnE,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC;YAC/I,MAAM,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC;YAEhJ,0CAA0C;YAC1C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACrE,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,+BAA+B;YAC/B,OAAO,MAAM,IAAI,CAAC,0CAA0C,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,kBAAkB,CAAC,IAAY,EAAE,iBAA8C;QACzF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,6BAA6B,CAAC,SAAiB,EAAE,SAAmB;QAC9E,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;QAC3C,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,gEAAgE;IACzD,MAAM,CAAC,KAAK,CAAC,kBAAkB;QAGlC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,GAAG,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,MAAM,IAAI,CAAC,aAAc,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,oBAAoB;QAC9B,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,YAAsB,EAAE,OAAsB,EAAE,KAAY;QAC7G,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE;YAC1B,0CAA0C;aACzC,IAAI,CAAC,KAAK,IAAI,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACtB,OAAO,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACJ,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC;YACpC,CAAC;QACL,CAAC,CAAC;YACF,0CAA0C;aACzC,IAAI,CAAC,CAAC,YAA2C,EAAE,EAAE;YAClD,yBAAyB;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC3C,YAAY;gBACZ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnB,SAAS;gBACb,CAAC;gBACD,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC;QAC7G,CAAC,CAAC;YACF,0CAA0C;aACzC,IAAI,CAAC,KAAK,EAAE,aAAqB,EAAE,EAAE;YAClC,mBAAmB;YACnB,kEAAkE;YAClE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/C,0CAA0C;gBAC1C,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,iBAAiB,aAAa,aAAa,eAAe,EAAE,KAAK,CAAC,CAAC,IAAI,CAC7I,CAAC,IAAI,EAAE,EAAE,CAA2B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CACvD,CAAC;YACN,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC7D,CAAC,CAAC;YACF,0CAA0C;aACzC,IAAI,CAAC,CAAC,OAAiC,EAAE,EAAE;YACxC,OAAO,IAAI,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACzJ,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,YAAsB,EAAE,OAAsB,EAAE,KAAY;QACxH,kBAAkB;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3C,YAAY;YACZ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,IAAI,oBAAoB,EAAE,CAAC;oBACvB,OAAO,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAChD,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC3F,CAAC;;AA5Oc,kDAAqB,GAAoD,EAAE,CAAC;AAC5E,uCAAU,GAAsC,EAAE,CAAC;AAClE,oBAAoB;AACL,oDAAuB,GAAiE,EAAE,CAAC;AAG1G;;GAEG;AACW,8CAAiB,GAAG,2EAA2E,CAAC;AAC9G;;GAEG;AACW,uDAA0B,GAAY,IAAI,CAAC;AACzD;;GAEG;AACW,gDAAmB,GAAY,IAAI,CAAC;AAElD;;;GAGG;AACW,mDAAsB,GAAY,IAAI,CAAC;AAwNzD,qEAAqE;AACrE,4BAA4B,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,SAAS,EAAE,CAAC,OAAsB,EAAE,KAAY,EAAE,EAAE;IACpI,OAAO,IAAI,mCAAmC,CAAC,KAAK,EAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC;AAEH,qBAAqB;AACrB,4BAA4B,CAAC,gBAAgB,EAAE,CAAC","sourcesContent":["import type { WebXRAbstractMotionController, IMotionControllerProfile } from \"./webXRAbstractMotionController\";\r\nimport { WebXRGenericTriggerMotionController } from \"./webXRGenericMotionController\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { WebXRProfiledMotionController } from \"./webXRProfiledMotionController\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\n\r\n/**\r\n * A construction function type to create a new controller based on an xrInput object\r\n */\r\nexport type MotionControllerConstructor = (xrInput: XRInputSource, scene: Scene) => WebXRAbstractMotionController;\r\n\r\n/**\r\n * The MotionController Manager manages all registered motion controllers and loads the right one when needed.\r\n *\r\n * When this repository is complete: https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/assets\r\n * it should be replaced with auto-loaded controllers.\r\n *\r\n * When using a model try to stay as generic as possible. Eventually there will be no need in any of the controller classes\r\n */\r\n\r\nconst ControllerCache: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n}> = [];\r\n\r\n/**\r\n * Motion controller manager is managing the different webxr profiles and makes sure the right\r\n * controller is being loaded.\r\n */\r\nexport class WebXRMotionControllerManager {\r\n private static _AvailableControllers: { [type: string]: MotionControllerConstructor } = {};\r\n private static _Fallbacks: { [profileId: string]: string[] } = {};\r\n // cache for loading\r\n private static _ProfileLoadingPromises: { [profileName: string]: Promise<IMotionControllerProfile> } = {};\r\n private static _ProfilesList: Nullable<Promise<{ [profile: string]: string }>>;\r\n\r\n /**\r\n * The base URL of the online controller repository. Can be changed at any time.\r\n */\r\n public static BaseRepositoryUrl = \"https://immersive-web.github.io/webxr-input-profiles/packages/viewer/dist\";\r\n /**\r\n * Which repository gets priority - local or online\r\n */\r\n public static PrioritizeOnlineRepository: boolean = true;\r\n /**\r\n * Use the online repository, or use only locally-defined controllers\r\n */\r\n public static UseOnlineRepository: boolean = true;\r\n\r\n /**\r\n * Disable the controller cache and load the models each time a new WebXRProfileMotionController is loaded.\r\n * Defaults to true.\r\n */\r\n public static DisableControllerCache: boolean = true;\r\n\r\n /**\r\n * Clear the cache used for profile loading and reload when requested again\r\n */\r\n public static ClearProfilesCache() {\r\n this._ProfilesList = null;\r\n this._ProfileLoadingPromises = {};\r\n }\r\n\r\n /**\r\n * Register the default fallbacks.\r\n * This function is called automatically when this file is imported.\r\n */\r\n public static DefaultFallbacks() {\r\n this.RegisterFallbacksForProfileId(\"google-daydream\", [\"generic-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"htc-vive-focus\", [\"generic-trigger-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"htc-vive\", [\"generic-trigger-squeeze-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"magicleap-one\", [\"generic-trigger-squeeze-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"windows-mixed-reality\", [\"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"microsoft-mixed-reality\", [\"windows-mixed-reality\", \"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-go\", [\"generic-trigger-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-touch-v2\", [\"oculus-touch\", \"generic-trigger-squeeze-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-touch\", [\"generic-trigger-squeeze-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"samsung-gearvr\", [\"windows-mixed-reality\", \"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"samsung-odyssey\", [\"generic-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"valve-index\", [\"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"generic-hand-select\", [\"generic-trigger\"]);\r\n }\r\n\r\n /**\r\n * Find a fallback profile if the profile was not found. There are a few predefined generic profiles.\r\n * @param profileId the profile to which a fallback needs to be found\r\n * @returns an array with corresponding fallback profiles\r\n */\r\n public static FindFallbackWithProfileId(profileId: string): string[] {\r\n const returnArray = this._Fallbacks[profileId] || [];\r\n\r\n returnArray.unshift(profileId);\r\n return returnArray;\r\n }\r\n\r\n /**\r\n * When acquiring a new xrInput object (usually by the WebXRInput class), match it with the correct profile.\r\n * The order of search:\r\n *\r\n * 1) Iterate the profiles array of the xr input and try finding a corresponding motion controller\r\n * 2) (If not found) search in the gamepad id and try using it (legacy versions only)\r\n * 3) search for registered fallbacks (should be redundant, nonetheless it makes sense to check)\r\n * 4) return the generic trigger controller if none were found\r\n *\r\n * @param xrInput the xrInput to which a new controller is initialized\r\n * @param scene the scene to which the model will be added\r\n * @param forceProfile force a certain profile for this controller\r\n * @returns A promise that fulfils with the motion controller class for this profile id or the generic standard class if none was found\r\n */\r\n public static async GetMotionControllerWithXRInput(xrInput: XRInputSource, scene: Scene, forceProfile?: string): Promise<WebXRAbstractMotionController> {\r\n const profileArray: string[] = [];\r\n if (forceProfile) {\r\n profileArray.push(forceProfile);\r\n }\r\n profileArray.push(...(xrInput.profiles || []));\r\n\r\n // emulator support\r\n if (profileArray.length && !profileArray[0]) {\r\n // remove the first \"undefined\" that the emulator is adding\r\n profileArray.pop();\r\n }\r\n\r\n // legacy support - try using the gamepad id\r\n if (xrInput.gamepad && xrInput.gamepad.id) {\r\n switch (xrInput.gamepad.id) {\r\n case xrInput.gamepad.id.match(/oculus touch/gi) ? xrInput.gamepad.id : undefined:\r\n // oculus in gamepad id\r\n profileArray.push(\"oculus-touch-v2\");\r\n break;\r\n }\r\n }\r\n\r\n // make sure microsoft/windows mixed reality works correctly\r\n const windowsMRIdx = profileArray.indexOf(\"windows-mixed-reality\");\r\n if (windowsMRIdx !== -1) {\r\n profileArray.splice(windowsMRIdx, 0, \"microsoft-mixed-reality\");\r\n }\r\n\r\n if (!profileArray.length) {\r\n profileArray.push(\"generic-trigger\");\r\n }\r\n\r\n if (this.UseOnlineRepository) {\r\n const firstFunction = this.PrioritizeOnlineRepository ? this._LoadProfileFromRepositoryAsync : this._LoadProfilesFromAvailableControllersAsync;\r\n const secondFunction = this.PrioritizeOnlineRepository ? this._LoadProfilesFromAvailableControllersAsync : this._LoadProfileFromRepositoryAsync;\r\n\r\n // eslint-disable-next-line github/no-then\r\n return firstFunction.call(this, profileArray, xrInput, scene).catch(() => {\r\n return secondFunction.call(this, profileArray, xrInput, scene);\r\n });\r\n } else {\r\n // use only available functions\r\n return await this._LoadProfilesFromAvailableControllersAsync(profileArray, xrInput, scene);\r\n }\r\n }\r\n\r\n /**\r\n * Register a new controller based on its profile. This function will be called by the controller classes themselves.\r\n *\r\n * If you are missing a profile, make sure it is imported in your source, otherwise it will not register.\r\n *\r\n * @param type the profile type to register\r\n * @param constructFunction the function to be called when loading this profile\r\n */\r\n public static RegisterController(type: string, constructFunction: MotionControllerConstructor) {\r\n this._AvailableControllers[type] = constructFunction;\r\n }\r\n\r\n /**\r\n * Register a fallback to a specific profile.\r\n * @param profileId the profileId that will receive the fallbacks\r\n * @param fallbacks A list of fallback profiles\r\n */\r\n public static RegisterFallbacksForProfileId(profileId: string, fallbacks: string[]): void {\r\n if (this._Fallbacks[profileId]) {\r\n this._Fallbacks[profileId].push(...fallbacks);\r\n } else {\r\n this._Fallbacks[profileId] = fallbacks;\r\n }\r\n }\r\n\r\n /**\r\n * Will update the list of profiles available in the repository\r\n * @returns a promise that resolves to a map of profiles available online\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static async UpdateProfilesList(): Promise<{\r\n [profile: string]: string;\r\n }> {\r\n const data = await Tools.LoadFileAsync(this.BaseRepositoryUrl + \"/profiles/profilesList.json\", false);\r\n this._ProfilesList = JSON.parse(data);\r\n return await this._ProfilesList!;\r\n }\r\n\r\n /**\r\n * Clear the controller's cache (usually happens at the end of a session)\r\n */\r\n public static ClearControllerCache() {\r\n for (const cacheItem of ControllerCache) {\r\n for (const mesh of cacheItem.meshes) {\r\n mesh.dispose(false, true);\r\n }\r\n }\r\n ControllerCache.length = 0;\r\n }\r\n\r\n private static async _LoadProfileFromRepositoryAsync(profileArray: string[], xrInput: XRInputSource, scene: Scene): Promise<WebXRAbstractMotionController> {\r\n return await Promise.resolve()\r\n // eslint-disable-next-line github/no-then\r\n .then(async () => {\r\n if (!this._ProfilesList) {\r\n return await this.UpdateProfilesList();\r\n } else {\r\n return await this._ProfilesList;\r\n }\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .then((profilesList: { [profile: string]: string }) => {\r\n // load the right profile\r\n for (let i = 0; i < profileArray.length; ++i) {\r\n // defensive\r\n if (!profileArray[i]) {\r\n continue;\r\n }\r\n if (profilesList[profileArray[i]]) {\r\n return profileArray[i];\r\n }\r\n }\r\n\r\n throw new Error(`neither controller ${profileArray[0]} nor all fallbacks were found in the repository,`);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .then(async (profileToLoad: string) => {\r\n // load the profile\r\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n if (!this._ProfileLoadingPromises[profileToLoad]) {\r\n // eslint-disable-next-line github/no-then\r\n this._ProfileLoadingPromises[profileToLoad] = Tools.LoadFileAsync(`${this.BaseRepositoryUrl}/profiles/${profileToLoad}/profile.json`, false).then(\r\n (data) => <IMotionControllerProfile>JSON.parse(data)\r\n );\r\n }\r\n return await this._ProfileLoadingPromises[profileToLoad];\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .then((profile: IMotionControllerProfile) => {\r\n return new WebXRProfiledMotionController(scene, xrInput, profile, this.BaseRepositoryUrl, this.DisableControllerCache ? undefined : ControllerCache);\r\n });\r\n }\r\n\r\n private static async _LoadProfilesFromAvailableControllersAsync(profileArray: string[], xrInput: XRInputSource, scene: Scene) {\r\n // check fallbacks\r\n for (let i = 0; i < profileArray.length; ++i) {\r\n // defensive\r\n if (!profileArray[i]) {\r\n continue;\r\n }\r\n const fallbacks = this.FindFallbackWithProfileId(profileArray[i]);\r\n for (let j = 0; j < fallbacks.length; ++j) {\r\n const constructionFunction = this._AvailableControllers[fallbacks[j]];\r\n if (constructionFunction) {\r\n return constructionFunction(xrInput, scene);\r\n }\r\n }\r\n }\r\n\r\n throw new Error(`no controller requested was found in the available controllers list`);\r\n }\r\n}\r\n\r\n// register the generic profile(s) here so we will at least have them\r\nWebXRMotionControllerManager.RegisterController(WebXRGenericTriggerMotionController.ProfileId, (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXRGenericTriggerMotionController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\n// register fallbacks\r\nWebXRMotionControllerManager.DefaultFallbacks();\r\n"]}
|
|
1
|
+
{"version":3,"file":"webXRMotionControllerManager.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRMotionControllerManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WebXRAbstractMotionController, IMotionControllerProfile } from \"./webXRAbstractMotionController\";\r\nimport { WebXRGenericTriggerMotionController } from \"./webXRGenericMotionController\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { WebXRProfiledMotionController } from \"./webXRProfiledMotionController\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\n\r\n/**\r\n * A construction function type to create a new controller based on an xrInput object\r\n */\r\nexport type MotionControllerConstructor = (xrInput: XRInputSource, scene: Scene) => WebXRAbstractMotionController;\r\n\r\n/**\r\n * The MotionController Manager manages all registered motion controllers and loads the right one when needed.\r\n *\r\n * When this repository is complete: https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/assets\r\n * it should be replaced with auto-loaded controllers.\r\n *\r\n * When using a model try to stay as generic as possible. Eventually there will be no need in any of the controller classes\r\n */\r\n\r\nconst ControllerCache: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n}> = [];\r\n\r\n/**\r\n * Motion controller manager is managing the different webxr profiles and makes sure the right\r\n * controller is being loaded.\r\n */\r\nexport class WebXRMotionControllerManager {\r\n private static _AvailableControllers: { [type: string]: MotionControllerConstructor } = {};\r\n private static _Fallbacks: { [profileId: string]: string[] } = {};\r\n // cache for loading\r\n private static _ProfileLoadingPromises: { [profileName: string]: Promise<IMotionControllerProfile> } = {};\r\n private static _ProfilesList: Nullable<Promise<{ [profile: string]: string }>>;\r\n\r\n /**\r\n * The base URL of the online controller repository. Can be changed at any time.\r\n */\r\n public static BaseRepositoryUrl = \"https://immersive-web.github.io/webxr-input-profiles/packages/viewer/dist\";\r\n /**\r\n * Which repository gets priority - local or online\r\n */\r\n public static PrioritizeOnlineRepository: boolean = true;\r\n /**\r\n * Use the online repository, or use only locally-defined controllers\r\n */\r\n public static UseOnlineRepository: boolean = true;\r\n\r\n /**\r\n * Disable the controller cache and load the models each time a new WebXRProfileMotionController is loaded.\r\n * Defaults to true.\r\n */\r\n public static DisableControllerCache: boolean = true;\r\n\r\n /**\r\n * Clear the cache used for profile loading and reload when requested again\r\n */\r\n public static ClearProfilesCache() {\r\n this._ProfilesList = null;\r\n this._ProfileLoadingPromises = {};\r\n }\r\n\r\n /**\r\n * Register the default fallbacks.\r\n * This function is called automatically when this file is imported.\r\n */\r\n public static DefaultFallbacks() {\r\n this.RegisterFallbacksForProfileId(\"google-daydream\", [\"generic-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"htc-vive-focus\", [\"generic-trigger-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"htc-vive\", [\"generic-trigger-squeeze-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"magicleap-one\", [\"generic-trigger-squeeze-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"windows-mixed-reality\", [\"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"microsoft-mixed-reality\", [\"windows-mixed-reality\", \"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-go\", [\"generic-trigger-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-touch-v2\", [\"oculus-touch\", \"generic-trigger-squeeze-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-touch\", [\"generic-trigger-squeeze-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"samsung-gearvr\", [\"windows-mixed-reality\", \"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"samsung-odyssey\", [\"generic-touchpad\"]);\r\n this.RegisterFallbacksForProfileId(\"valve-index\", [\"generic-trigger-squeeze-touchpad-thumbstick\"]);\r\n this.RegisterFallbacksForProfileId(\"generic-hand-select\", [\"generic-trigger\"]);\r\n this.RegisterFallbacksForProfileId(\"oculus-hand\", [\"generic-trigger\"]);\r\n }\r\n\r\n /**\r\n * Find a fallback profile if the profile was not found. There are a few predefined generic profiles.\r\n * @param profileId the profile to which a fallback needs to be found\r\n * @returns an array with corresponding fallback profiles\r\n */\r\n public static FindFallbackWithProfileId(profileId: string): string[] {\r\n const returnArray = this._Fallbacks[profileId] || [];\r\n\r\n returnArray.unshift(profileId);\r\n return returnArray;\r\n }\r\n\r\n /**\r\n * When acquiring a new xrInput object (usually by the WebXRInput class), match it with the correct profile.\r\n * The order of search:\r\n *\r\n * 1) Iterate the profiles array of the xr input and try finding a corresponding motion controller\r\n * 2) (If not found) search in the gamepad id and try using it (legacy versions only)\r\n * 3) search for registered fallbacks (should be redundant, nonetheless it makes sense to check)\r\n * 4) return the generic trigger controller if none were found\r\n *\r\n * @param xrInput the xrInput to which a new controller is initialized\r\n * @param scene the scene to which the model will be added\r\n * @param forceProfile force a certain profile for this controller\r\n * @returns A promise that fulfils with the motion controller class for this profile id or the generic standard class if none was found\r\n */\r\n public static async GetMotionControllerWithXRInput(xrInput: XRInputSource, scene: Scene, forceProfile?: string): Promise<WebXRAbstractMotionController> {\r\n const profileArray: string[] = [];\r\n if (forceProfile) {\r\n profileArray.push(forceProfile);\r\n }\r\n profileArray.push(...(xrInput.profiles || []));\r\n\r\n // emulator support\r\n if (profileArray.length && !profileArray[0]) {\r\n // remove the first \"undefined\" that the emulator is adding\r\n profileArray.pop();\r\n }\r\n\r\n // legacy support - try using the gamepad id\r\n if (xrInput.gamepad && xrInput.gamepad.id) {\r\n switch (xrInput.gamepad.id) {\r\n case xrInput.gamepad.id.match(/oculus touch/gi) ? xrInput.gamepad.id : undefined:\r\n // oculus in gamepad id\r\n profileArray.push(\"oculus-touch-v2\");\r\n break;\r\n }\r\n }\r\n\r\n // make sure microsoft/windows mixed reality works correctly\r\n const windowsMRIdx = profileArray.indexOf(\"windows-mixed-reality\");\r\n if (windowsMRIdx !== -1) {\r\n profileArray.splice(windowsMRIdx, 0, \"microsoft-mixed-reality\");\r\n }\r\n\r\n if (!profileArray.length) {\r\n profileArray.push(\"generic-trigger\");\r\n }\r\n\r\n if (this.UseOnlineRepository) {\r\n const firstFunction = this.PrioritizeOnlineRepository ? this._LoadProfileFromRepositoryAsync : this._LoadProfilesFromAvailableControllersAsync;\r\n const secondFunction = this.PrioritizeOnlineRepository ? this._LoadProfilesFromAvailableControllersAsync : this._LoadProfileFromRepositoryAsync;\r\n\r\n // eslint-disable-next-line github/no-then\r\n return firstFunction.call(this, profileArray, xrInput, scene).catch(() => {\r\n return secondFunction.call(this, profileArray, xrInput, scene);\r\n });\r\n } else {\r\n // use only available functions\r\n return await this._LoadProfilesFromAvailableControllersAsync(profileArray, xrInput, scene);\r\n }\r\n }\r\n\r\n /**\r\n * Register a new controller based on its profile. This function will be called by the controller classes themselves.\r\n *\r\n * If you are missing a profile, make sure it is imported in your source, otherwise it will not register.\r\n *\r\n * @param type the profile type to register\r\n * @param constructFunction the function to be called when loading this profile\r\n */\r\n public static RegisterController(type: string, constructFunction: MotionControllerConstructor) {\r\n this._AvailableControllers[type] = constructFunction;\r\n }\r\n\r\n /**\r\n * Register a fallback to a specific profile.\r\n * @param profileId the profileId that will receive the fallbacks\r\n * @param fallbacks A list of fallback profiles\r\n */\r\n public static RegisterFallbacksForProfileId(profileId: string, fallbacks: string[]): void {\r\n if (this._Fallbacks[profileId]) {\r\n this._Fallbacks[profileId].push(...fallbacks);\r\n } else {\r\n this._Fallbacks[profileId] = fallbacks;\r\n }\r\n }\r\n\r\n /**\r\n * Will update the list of profiles available in the repository\r\n * @returns a promise that resolves to a map of profiles available online\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static async UpdateProfilesList(): Promise<{\r\n [profile: string]: string;\r\n }> {\r\n const data = await Tools.LoadFileAsync(this.BaseRepositoryUrl + \"/profiles/profilesList.json\", false);\r\n this._ProfilesList = JSON.parse(data);\r\n return await this._ProfilesList!;\r\n }\r\n\r\n /**\r\n * Clear the controller's cache (usually happens at the end of a session)\r\n */\r\n public static ClearControllerCache() {\r\n for (const cacheItem of ControllerCache) {\r\n for (const mesh of cacheItem.meshes) {\r\n mesh.dispose(false, true);\r\n }\r\n }\r\n ControllerCache.length = 0;\r\n }\r\n\r\n private static async _LoadProfileFromRepositoryAsync(profileArray: string[], xrInput: XRInputSource, scene: Scene): Promise<WebXRAbstractMotionController> {\r\n return await Promise.resolve()\r\n // eslint-disable-next-line github/no-then\r\n .then(async () => {\r\n if (!this._ProfilesList) {\r\n return await this.UpdateProfilesList();\r\n } else {\r\n return await this._ProfilesList;\r\n }\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .then((profilesList: { [profile: string]: string }) => {\r\n // load the right profile\r\n for (let i = 0; i < profileArray.length; ++i) {\r\n // defensive\r\n if (!profileArray[i]) {\r\n continue;\r\n }\r\n if (profilesList[profileArray[i]]) {\r\n return profileArray[i];\r\n }\r\n }\r\n\r\n throw new Error(`neither controller ${profileArray[0]} nor all fallbacks were found in the repository,`);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .then(async (profileToLoad: string) => {\r\n // load the profile\r\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n if (!this._ProfileLoadingPromises[profileToLoad]) {\r\n // eslint-disable-next-line github/no-then\r\n this._ProfileLoadingPromises[profileToLoad] = Tools.LoadFileAsync(`${this.BaseRepositoryUrl}/profiles/${profileToLoad}/profile.json`, false).then(\r\n (data) => <IMotionControllerProfile>JSON.parse(data)\r\n );\r\n }\r\n return await this._ProfileLoadingPromises[profileToLoad];\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .then((profile: IMotionControllerProfile) => {\r\n return new WebXRProfiledMotionController(scene, xrInput, profile, this.BaseRepositoryUrl, this.DisableControllerCache ? undefined : ControllerCache);\r\n });\r\n }\r\n\r\n private static async _LoadProfilesFromAvailableControllersAsync(profileArray: string[], xrInput: XRInputSource, scene: Scene) {\r\n // check fallbacks\r\n for (let i = 0; i < profileArray.length; ++i) {\r\n // defensive\r\n if (!profileArray[i]) {\r\n continue;\r\n }\r\n const fallbacks = this.FindFallbackWithProfileId(profileArray[i]);\r\n for (let j = 0; j < fallbacks.length; ++j) {\r\n const constructionFunction = this._AvailableControllers[fallbacks[j]];\r\n if (constructionFunction) {\r\n return constructionFunction(xrInput, scene);\r\n }\r\n }\r\n }\r\n\r\n throw new Error(`no controller requested was found in the available controllers list`);\r\n }\r\n}\r\n\r\n// register the generic profile(s) here so we will at least have them\r\nWebXRMotionControllerManager.RegisterController(WebXRGenericTriggerMotionController.ProfileId, (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXRGenericTriggerMotionController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\n// register fallbacks\r\nWebXRMotionControllerManager.DefaultFallbacks();\r\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IMinimalMotionControllerObject, MotionControllerHandedness } from "./webXRAbstractMotionController.js";
|
|
2
|
+
import { WebXRAbstractMotionController } from "./webXRAbstractMotionController.js";
|
|
3
|
+
import type { Scene } from "../../scene.js";
|
|
4
|
+
import type { AbstractMesh } from "../../Meshes/abstractMesh.js";
|
|
5
|
+
/**
|
|
6
|
+
* Oculus hand controller class that supports microgestures
|
|
7
|
+
*/
|
|
8
|
+
export declare class WebXROculusHandController extends WebXRAbstractMotionController {
|
|
9
|
+
profileId: string;
|
|
10
|
+
/**
|
|
11
|
+
* Create a new hand controller object, without loading a controller model
|
|
12
|
+
* @param scene the scene to use to create this controller
|
|
13
|
+
* @param gamepadObject the corresponding gamepad object
|
|
14
|
+
* @param handedness the handedness of the controller
|
|
15
|
+
*/
|
|
16
|
+
constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness);
|
|
17
|
+
protected _getFilenameAndPath(): {
|
|
18
|
+
filename: string;
|
|
19
|
+
path: string;
|
|
20
|
+
};
|
|
21
|
+
protected _getModelLoadingConstraints(): boolean;
|
|
22
|
+
protected _processLoadedModel(_meshes: AbstractMesh[]): void;
|
|
23
|
+
protected _setRootMesh(meshes: AbstractMesh[]): void;
|
|
24
|
+
protected _updateModel(): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { WebXRAbstractMotionController } from "./webXRAbstractMotionController.js";
|
|
2
|
+
import { WebXRMotionControllerManager } from "./webXRMotionControllerManager.js";
|
|
3
|
+
/**
|
|
4
|
+
* Oculus hand controller class that supports microgestures
|
|
5
|
+
*/
|
|
6
|
+
export class WebXROculusHandController extends WebXRAbstractMotionController {
|
|
7
|
+
/**
|
|
8
|
+
* Create a new hand controller object, without loading a controller model
|
|
9
|
+
* @param scene the scene to use to create this controller
|
|
10
|
+
* @param gamepadObject the corresponding gamepad object
|
|
11
|
+
* @param handedness the handedness of the controller
|
|
12
|
+
*/
|
|
13
|
+
constructor(scene, gamepadObject, handedness) {
|
|
14
|
+
// Don't load the controller model - for now, hands have no real model.
|
|
15
|
+
super(scene, OculusHandProfile[handedness], gamepadObject, handedness, true);
|
|
16
|
+
this.profileId = "oculus-hand";
|
|
17
|
+
}
|
|
18
|
+
_getFilenameAndPath() {
|
|
19
|
+
return {
|
|
20
|
+
filename: "generic.babylon",
|
|
21
|
+
path: "https://controllers.babylonjs.com/generic/",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
_getModelLoadingConstraints() {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
_processLoadedModel(_meshes) {
|
|
28
|
+
// no-op
|
|
29
|
+
}
|
|
30
|
+
_setRootMesh(meshes) {
|
|
31
|
+
// no-op
|
|
32
|
+
}
|
|
33
|
+
_updateModel() {
|
|
34
|
+
// no-op
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// register the profiles
|
|
38
|
+
WebXRMotionControllerManager.RegisterController("oculus-hand", (xrInput, scene) => {
|
|
39
|
+
return new WebXROculusHandController(scene, xrInput.gamepad, xrInput.handedness);
|
|
40
|
+
});
|
|
41
|
+
// https://github.com/immersive-web/webxr-input-profiles/blob/main/packages/registry/profiles/oculus/oculus-hand.json
|
|
42
|
+
const OculusHandProfile = {
|
|
43
|
+
left: {
|
|
44
|
+
selectComponentId: "xr-standard-trigger",
|
|
45
|
+
components: {
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
47
|
+
"xr-standard-trigger": {
|
|
48
|
+
type: "trigger",
|
|
49
|
+
gamepadIndices: {
|
|
50
|
+
button: 0,
|
|
51
|
+
},
|
|
52
|
+
rootNodeName: "xr-standard-trigger",
|
|
53
|
+
visualResponses: {},
|
|
54
|
+
},
|
|
55
|
+
menu: {
|
|
56
|
+
type: "button",
|
|
57
|
+
gamepadIndices: {
|
|
58
|
+
button: 4,
|
|
59
|
+
},
|
|
60
|
+
rootNodeName: "menu",
|
|
61
|
+
visualResponses: {},
|
|
62
|
+
},
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
64
|
+
"swipe-left": {
|
|
65
|
+
type: "button",
|
|
66
|
+
gamepadIndices: {
|
|
67
|
+
button: 5,
|
|
68
|
+
},
|
|
69
|
+
rootNodeName: "swipe-left",
|
|
70
|
+
visualResponses: {},
|
|
71
|
+
},
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
73
|
+
"swipe-right": {
|
|
74
|
+
type: "button",
|
|
75
|
+
gamepadIndices: {
|
|
76
|
+
button: 6,
|
|
77
|
+
},
|
|
78
|
+
rootNodeName: "swipe-right",
|
|
79
|
+
visualResponses: {},
|
|
80
|
+
},
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
82
|
+
"swipe-forward": {
|
|
83
|
+
type: "button",
|
|
84
|
+
gamepadIndices: {
|
|
85
|
+
button: 7,
|
|
86
|
+
},
|
|
87
|
+
rootNodeName: "swipe-forward",
|
|
88
|
+
visualResponses: {},
|
|
89
|
+
},
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
91
|
+
"swipe-backward": {
|
|
92
|
+
type: "button",
|
|
93
|
+
gamepadIndices: {
|
|
94
|
+
button: 8,
|
|
95
|
+
},
|
|
96
|
+
rootNodeName: "swipe-backward",
|
|
97
|
+
visualResponses: {},
|
|
98
|
+
},
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
100
|
+
"tap-thumb": {
|
|
101
|
+
type: "button",
|
|
102
|
+
gamepadIndices: {
|
|
103
|
+
button: 9,
|
|
104
|
+
},
|
|
105
|
+
rootNodeName: "tap-thumb",
|
|
106
|
+
visualResponses: {},
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
gamepadMapping: "xr-standard",
|
|
110
|
+
rootNodeName: "oculus-hand-left",
|
|
111
|
+
assetPath: "left.glb",
|
|
112
|
+
},
|
|
113
|
+
right: {
|
|
114
|
+
selectComponentId: "xr-standard-trigger",
|
|
115
|
+
components: {
|
|
116
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
117
|
+
"xr-standard-trigger": {
|
|
118
|
+
type: "trigger",
|
|
119
|
+
gamepadIndices: {
|
|
120
|
+
button: 0,
|
|
121
|
+
},
|
|
122
|
+
rootNodeName: "xr-standard-trigger",
|
|
123
|
+
visualResponses: {},
|
|
124
|
+
},
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
126
|
+
"swipe-left": {
|
|
127
|
+
type: "button",
|
|
128
|
+
gamepadIndices: {
|
|
129
|
+
button: 5,
|
|
130
|
+
},
|
|
131
|
+
rootNodeName: "swipe-left",
|
|
132
|
+
visualResponses: {},
|
|
133
|
+
},
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
135
|
+
"swipe-right": {
|
|
136
|
+
type: "button",
|
|
137
|
+
gamepadIndices: {
|
|
138
|
+
button: 6,
|
|
139
|
+
},
|
|
140
|
+
rootNodeName: "swipe-right",
|
|
141
|
+
visualResponses: {},
|
|
142
|
+
},
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
144
|
+
"swipe-forward": {
|
|
145
|
+
type: "button",
|
|
146
|
+
gamepadIndices: {
|
|
147
|
+
button: 7,
|
|
148
|
+
},
|
|
149
|
+
rootNodeName: "swipe-forward",
|
|
150
|
+
visualResponses: {},
|
|
151
|
+
},
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
153
|
+
"swipe-backward": {
|
|
154
|
+
type: "button",
|
|
155
|
+
gamepadIndices: {
|
|
156
|
+
button: 8,
|
|
157
|
+
},
|
|
158
|
+
rootNodeName: "swipe-backward",
|
|
159
|
+
visualResponses: {},
|
|
160
|
+
},
|
|
161
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
162
|
+
"tap-thumb": {
|
|
163
|
+
type: "button",
|
|
164
|
+
gamepadIndices: {
|
|
165
|
+
button: 9,
|
|
166
|
+
},
|
|
167
|
+
rootNodeName: "tap-thumb",
|
|
168
|
+
visualResponses: {},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
gamepadMapping: "xr-standard",
|
|
172
|
+
rootNodeName: "oculus-hand-right",
|
|
173
|
+
assetPath: "right.glb",
|
|
174
|
+
},
|
|
175
|
+
none: {
|
|
176
|
+
selectComponentId: "xr-standard-trigger",
|
|
177
|
+
components: {
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
179
|
+
"xr-standard-trigger": {
|
|
180
|
+
type: "trigger",
|
|
181
|
+
gamepadIndices: {
|
|
182
|
+
button: 0,
|
|
183
|
+
},
|
|
184
|
+
rootNodeName: "xr-standard-trigger",
|
|
185
|
+
visualResponses: {},
|
|
186
|
+
},
|
|
187
|
+
menu: {
|
|
188
|
+
type: "button",
|
|
189
|
+
gamepadIndices: {
|
|
190
|
+
button: 4,
|
|
191
|
+
},
|
|
192
|
+
rootNodeName: "menu",
|
|
193
|
+
visualResponses: {},
|
|
194
|
+
},
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
196
|
+
"swipe-left": {
|
|
197
|
+
type: "button",
|
|
198
|
+
gamepadIndices: {
|
|
199
|
+
button: 5,
|
|
200
|
+
},
|
|
201
|
+
rootNodeName: "swipe-left",
|
|
202
|
+
visualResponses: {},
|
|
203
|
+
},
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
205
|
+
"swipe-right": {
|
|
206
|
+
type: "button",
|
|
207
|
+
gamepadIndices: {
|
|
208
|
+
button: 6,
|
|
209
|
+
},
|
|
210
|
+
rootNodeName: "swipe-right",
|
|
211
|
+
visualResponses: {},
|
|
212
|
+
},
|
|
213
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
214
|
+
"swipe-forward": {
|
|
215
|
+
type: "button",
|
|
216
|
+
gamepadIndices: {
|
|
217
|
+
button: 7,
|
|
218
|
+
},
|
|
219
|
+
rootNodeName: "swipe-forward",
|
|
220
|
+
visualResponses: {},
|
|
221
|
+
},
|
|
222
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
223
|
+
"swipe-backward": {
|
|
224
|
+
type: "button",
|
|
225
|
+
gamepadIndices: {
|
|
226
|
+
button: 8,
|
|
227
|
+
},
|
|
228
|
+
rootNodeName: "swipe-backward",
|
|
229
|
+
visualResponses: {},
|
|
230
|
+
},
|
|
231
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
232
|
+
"tap-thumb": {
|
|
233
|
+
type: "button",
|
|
234
|
+
gamepadIndices: {
|
|
235
|
+
button: 9,
|
|
236
|
+
},
|
|
237
|
+
rootNodeName: "tap-thumb",
|
|
238
|
+
visualResponses: {},
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
gamepadMapping: "xr-standard",
|
|
242
|
+
rootNodeName: "oculus-hand-none",
|
|
243
|
+
assetPath: "none.glb",
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
//# sourceMappingURL=webXROculusHandController.js.map
|