@onerjs/core 8.36.8 → 8.36.9

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.
Files changed (96) hide show
  1. package/Audio/analyser.js.map +1 -1
  2. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -1
  3. package/Buffers/buffer.align.js +3 -3
  4. package/Buffers/buffer.align.js.map +1 -1
  5. package/Buffers/bufferUtils.d.ts +7 -0
  6. package/Buffers/bufferUtils.js +31 -13
  7. package/Buffers/bufferUtils.js.map +1 -1
  8. package/Engines/Extensions/engine.dynamicBuffer.js +3 -3
  9. package/Engines/Extensions/engine.dynamicBuffer.js.map +1 -1
  10. package/Engines/Native/nativeDataStream.d.ts +1 -1
  11. package/Engines/Native/nativeDataStream.js.map +1 -1
  12. package/Engines/Native/nativeInterfaces.d.ts +4 -4
  13. package/Engines/Native/nativeInterfaces.js.map +1 -1
  14. package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +13 -1
  15. package/Engines/WebGPU/Extensions/engine.rawTexture.js +26 -8
  16. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  17. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -1
  18. package/Engines/WebGPU/webgpuTextureManager.js +19 -6
  19. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  20. package/Engines/abstractEngine.d.ts +4 -2
  21. package/Engines/abstractEngine.functions.d.ts +1 -1
  22. package/Engines/abstractEngine.functions.js +8 -8
  23. package/Engines/abstractEngine.functions.js.map +1 -1
  24. package/Engines/abstractEngine.js +6 -4
  25. package/Engines/abstractEngine.js.map +1 -1
  26. package/Engines/engine.d.ts +12 -0
  27. package/Engines/thinNativeEngine.js +1 -1
  28. package/Engines/thinNativeEngine.js.map +1 -1
  29. package/Engines/thinWebGPUEngine.js +3 -0
  30. package/Engines/thinWebGPUEngine.js.map +1 -1
  31. package/Engines/webgpuEngine.js +18 -18
  32. package/Engines/webgpuEngine.js.map +1 -1
  33. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  34. package/Materials/Background/backgroundMaterial.d.ts +16 -8
  35. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +14 -1
  36. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  37. package/Materials/Node/Blocks/Input/inputBlock.js +14 -0
  38. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/debugBlock.d.ts +2 -0
  40. package/Materials/Node/Blocks/debugBlock.js +6 -2
  41. package/Materials/Node/Blocks/debugBlock.js.map +1 -1
  42. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  43. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  44. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  45. package/Materials/Node/nodeMaterial.d.ts +16 -8
  46. package/Materials/Node/nodeMaterialBlock.js +2 -2
  47. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  48. package/Materials/PBR/openpbrMaterial.d.ts +16 -8
  49. package/Materials/PBR/pbrBaseMaterial.d.ts +16 -8
  50. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.d.ts +1 -1
  51. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js.map +1 -1
  52. package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
  53. package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
  54. package/Materials/Textures/internalTexture.d.ts +6 -0
  55. package/Materials/Textures/internalTexture.js +24 -2
  56. package/Materials/Textures/internalTexture.js.map +1 -1
  57. package/Materials/Textures/rawTexture.d.ts +8 -1
  58. package/Materials/Textures/rawTexture.js +12 -3
  59. package/Materials/Textures/rawTexture.js.map +1 -1
  60. package/Materials/Textures/rawTexture2DArray.d.ts +8 -1
  61. package/Materials/Textures/rawTexture2DArray.js +14 -3
  62. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  63. package/Materials/imageProcessing.d.ts +47 -8
  64. package/Materials/standardMaterial.d.ts +16 -8
  65. package/Meshes/Builders/shapeBuilder.d.ts +4 -0
  66. package/Meshes/Builders/shapeBuilder.js +12 -9
  67. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  68. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +68 -4
  69. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +349 -30
  70. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  71. package/Meshes/geometry.js +15 -2
  72. package/Meshes/geometry.js.map +1 -1
  73. package/Meshes/mesh.js +23 -21
  74. package/Meshes/mesh.js.map +1 -1
  75. package/Misc/dds.js.map +1 -1
  76. package/Misc/environmentTextureTools.js +3 -1
  77. package/Misc/environmentTextureTools.js.map +1 -1
  78. package/Misc/fileTools.js +9 -1
  79. package/Misc/fileTools.js.map +1 -1
  80. package/Particles/Node/nodeParticleSystemSet.helper.js +2 -2
  81. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  82. package/Physics/v1/physicsImpostor.d.ts +2 -2
  83. package/Physics/v1/physicsImpostor.js.map +1 -1
  84. package/Shaders/ShadersInclude/gaussianSplatting.js +16 -3
  85. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  86. package/Shaders/gaussianSplatting.vertex.js +17 -4
  87. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  88. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +11 -1
  89. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  90. package/ShadersWGSL/gaussianSplatting.vertex.js +17 -4
  91. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  92. package/XR/native/nativeXRFrame.d.ts +1 -1
  93. package/XR/native/nativeXRFrame.js.map +1 -1
  94. package/package.json +1 -1
  95. package/types.d.ts +1 -1
  96. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nodeMaterialBlock.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Node/nodeMaterialBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"./Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"./nodeMaterialBuildState\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"./nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"./Enums/nodeMaterialBlockTargets\";\r\nimport type { Effect } from \"../effect\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"./nodeMaterial\";\r\nimport type { InputBlock } from \"./Blocks/Input/inputBlock\";\r\nimport { UniqueIdGenerator } from \"../../Misc/uniqueIdGenerator\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { NodeMaterialTeleportOutBlock } from \"./Blocks/Teleport/teleportOutBlock\";\r\n\r\n/**\r\n * Defines a block that can be used inside a node based material\r\n */\r\nexport class NodeMaterialBlock {\r\n private _buildId: number;\r\n private _buildTarget: NodeMaterialBlockTargets;\r\n protected _target: NodeMaterialBlockTargets;\r\n private _isFinalMerger = false;\r\n private _isInput = false;\r\n private _isLoop = false;\r\n private _isTeleportOut = false;\r\n private _isTeleportIn = false;\r\n private _name = \"\";\r\n protected _isUnique = false;\r\n protected _codeIsReady = true;\r\n /** @internal */\r\n public _isFinalOutput = false;\r\n\r\n /** @internal */\r\n public get _isFinalOutputAndActive() {\r\n return this._isFinalOutput;\r\n }\r\n\r\n /** @internal */\r\n public get _hasPrecedence() {\r\n return false;\r\n }\r\n\r\n /**\r\n * Observable raised when the block code is ready (if the code loading is async)\r\n */\r\n public onCodeIsReadyObservable = new Observable<NodeMaterialBlock>();\r\n\r\n /** Gets or sets a boolean indicating that only one input can be connected at a time */\r\n public inputsAreExclusive = false;\r\n\r\n /** @internal */\r\n public _codeVariableName = \"\";\r\n\r\n /** @internal */\r\n public _inputs = new Array<NodeMaterialConnectionPoint>();\r\n /** @internal */\r\n public _outputs = new Array<NodeMaterialConnectionPoint>();\r\n\r\n /** @internal */\r\n public _preparationId: number;\r\n\r\n /** @internal */\r\n public readonly _originalTargetIsNeutral: boolean;\r\n\r\n /**\r\n * Gets the name of the block\r\n */\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block has is code ready to be used\r\n */\r\n public get codeIsReady() {\r\n return this._codeIsReady;\r\n }\r\n\r\n /**\r\n * Sets the name of the block. Will check if the name is valid.\r\n */\r\n public set name(newName: string) {\r\n if (!this.validateBlockName(newName)) {\r\n return;\r\n }\r\n\r\n this._name = newName;\r\n }\r\n\r\n /**\r\n * Gets or sets the unique id of the node\r\n */\r\n public uniqueId: number;\r\n\r\n /**\r\n * Gets or sets the comments associated with this block\r\n */\r\n public comments: string = \"\";\r\n\r\n /**\r\n * Gets a boolean indicating that this block can only be used once per NodeMaterial\r\n */\r\n public get isUnique() {\r\n return this._isUnique;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is an end block (e.g. it is generating a system value)\r\n */\r\n public get isFinalMerger(): boolean {\r\n return this._isFinalMerger;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is an input (e.g. it sends data to the shader)\r\n */\r\n public get isInput(): boolean {\r\n return this._isInput;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this block is a teleport out\r\n */\r\n public get isTeleportOut(): boolean {\r\n return this._isTeleportOut;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this block is a teleport in\r\n */\r\n public get isTeleportIn(): boolean {\r\n return this._isTeleportIn;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this block is a loop\r\n */\r\n public get isLoop(): boolean {\r\n return this._isLoop;\r\n }\r\n\r\n /**\r\n * Gets or sets the build Id\r\n */\r\n public get buildId(): number {\r\n return this._buildId;\r\n }\r\n\r\n public set buildId(value: number) {\r\n this._buildId = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the target of the block\r\n */\r\n public get target() {\r\n return this._target;\r\n }\r\n\r\n public set target(value: NodeMaterialBlockTargets) {\r\n if ((this._target & value) !== 0) {\r\n return;\r\n }\r\n this._target = value;\r\n }\r\n\r\n /**\r\n * Gets the list of input points\r\n */\r\n public get inputs(): NodeMaterialConnectionPoint[] {\r\n return this._inputs;\r\n }\r\n\r\n /** Gets the list of output points */\r\n public get outputs(): NodeMaterialConnectionPoint[] {\r\n return this._outputs;\r\n }\r\n\r\n /**\r\n * Find an input by its name\r\n * @param name defines the name of the input to look for\r\n * @returns the input or null if not found\r\n */\r\n public getInputByName(name: string) {\r\n const filter = this._inputs.filter((e) => e.name === name);\r\n\r\n if (filter.length) {\r\n return filter[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Find an output by its name\r\n * @param name defines the name of the output to look for\r\n * @returns the output or null if not found\r\n */\r\n public getOutputByName(name: string) {\r\n const filter = this._outputs.filter((e) => e.name === name);\r\n\r\n if (filter.length) {\r\n return filter[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets a boolean indicating that this input can be edited in the Inspector (false by default) */\r\n public visibleInInspector = false;\r\n\r\n /** Gets or sets a boolean indicating that this input can be edited from a collapsed frame */\r\n public visibleOnFrame = false;\r\n\r\n /**\r\n * Creates a new NodeMaterialBlock\r\n * @param name defines the block name\r\n * @param target defines the target of that block (Vertex by default)\r\n * @param isFinalMerger defines a boolean indicating that this block is an end block (e.g. it is generating a system value). Default is false\r\n * @param isFinalOutput defines a boolean indicating that this block is generating a final output and no other block should be generated after\r\n */\r\n public constructor(name: string, target = NodeMaterialBlockTargets.Vertex, isFinalMerger = false, isFinalOutput = false) {\r\n this._target = target;\r\n this._originalTargetIsNeutral = target === NodeMaterialBlockTargets.Neutral;\r\n this._isFinalMerger = isFinalMerger;\r\n this._isFinalOutput = isFinalOutput;\r\n switch (this.getClassName()) {\r\n case \"InputBlock\":\r\n this._isInput = true;\r\n break;\r\n case \"NodeMaterialTeleportOutBlock\":\r\n this._isTeleportOut = true;\r\n break;\r\n case \"NodeMaterialTeleportInBlock\":\r\n this._isTeleportIn = true;\r\n break;\r\n case \"LoopBlock\":\r\n this._isLoop = true;\r\n break;\r\n }\r\n\r\n this._name = name;\r\n this.uniqueId = UniqueIdGenerator.UniqueId;\r\n }\r\n\r\n /** @internal */\r\n public _setInitialTarget(target: NodeMaterialBlockTargets): void {\r\n this._target = target;\r\n // marked as read only\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (this._originalTargetIsNeutral as boolean) = target === NodeMaterialBlockTargets.Neutral;\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public initialize(state: NodeMaterialBuildState) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Bind data to effect. Will only be called for blocks with isBindable === true\r\n * @param effect defines the effect to bind data to\r\n * @param nodeMaterial defines the hosting NodeMaterial\r\n * @param mesh defines the mesh that will be rendered\r\n * @param subMesh defines the submesh that will be rendered\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n // Do nothing\r\n }\r\n\r\n protected _writeVariable(currentPoint: NodeMaterialConnectionPoint): string {\r\n const connectionPoint = currentPoint.connectedPoint;\r\n\r\n if (connectionPoint) {\r\n return `${currentPoint.associatedVariableName}`;\r\n }\r\n\r\n return `0.`;\r\n }\r\n\r\n protected _writeFloat(value: number) {\r\n let stringVersion = value.toString();\r\n\r\n if (stringVersion.indexOf(\".\") === -1) {\r\n stringVersion += \".0\";\r\n }\r\n return `${stringVersion}`;\r\n }\r\n\r\n /**\r\n * Gets the current class name e.g. \"NodeMaterialBlock\"\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"NodeMaterialBlock\";\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the fragment shader\r\n * @returns true if connected in fragment shader\r\n */\r\n public isConnectedInFragmentShader() {\r\n return this.outputs.some((o) => o.isConnectedInFragmentShader);\r\n }\r\n\r\n /**\r\n * Register a new input. Must be called inside a block constructor\r\n * @param name defines the connection point name\r\n * @param type defines the connection point type\r\n * @param isOptional defines a boolean indicating that this input can be omitted\r\n * @param target defines the target to use to limit the connection point (will be VertexAndFragment by default)\r\n * @param point an already created connection point. If not provided, create a new one\r\n * @returns the current block\r\n */\r\n public registerInput(\r\n name: string,\r\n type: NodeMaterialBlockConnectionPointTypes,\r\n isOptional: boolean = false,\r\n target?: NodeMaterialBlockTargets,\r\n point?: NodeMaterialConnectionPoint\r\n ) {\r\n point = point ?? new NodeMaterialConnectionPoint(name, this, NodeMaterialConnectionPointDirection.Input);\r\n point.type = type;\r\n point.isOptional = isOptional;\r\n if (target) {\r\n point.target = target;\r\n }\r\n\r\n this._inputs.push(point);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Register a new output. Must be called inside a block constructor\r\n * @param name defines the connection point name\r\n * @param type defines the connection point type\r\n * @param target defines the target to use to limit the connection point (will be VertexAndFragment by default)\r\n * @param point an already created connection point. If not provided, create a new one\r\n * @returns the current block\r\n */\r\n public registerOutput(name: string, type: NodeMaterialBlockConnectionPointTypes, target?: NodeMaterialBlockTargets, point?: NodeMaterialConnectionPoint) {\r\n point = point ?? new NodeMaterialConnectionPoint(name, this, NodeMaterialConnectionPointDirection.Output);\r\n point.type = type;\r\n if (target) {\r\n point.target = target;\r\n }\r\n\r\n this._outputs.push(point);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Will return the first available input e.g. the first one which is not an uniform or an attribute\r\n * @param forOutput defines an optional connection point to check compatibility with\r\n * @returns the first available input or null\r\n */\r\n public getFirstAvailableInput(forOutput: Nullable<NodeMaterialConnectionPoint> = null) {\r\n for (const input of this._inputs) {\r\n if (!input.connectedPoint) {\r\n if (\r\n !forOutput ||\r\n forOutput.type === input.type ||\r\n input.type === NodeMaterialBlockConnectionPointTypes.AutoDetect ||\r\n input.acceptedConnectionPointTypes.indexOf(forOutput.type) !== -1\r\n ) {\r\n return input;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Will return the first available output e.g. the first one which is not yet connected and not a varying\r\n * @param forBlock defines an optional block to check compatibility with\r\n * @returns the first available input or null\r\n */\r\n public getFirstAvailableOutput(forBlock: Nullable<NodeMaterialBlock> = null) {\r\n for (const output of this._outputs) {\r\n if (!forBlock || !forBlock.target || forBlock.target === NodeMaterialBlockTargets.Neutral || (forBlock.target & output.target) !== 0) {\r\n return output;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the sibling of the given output\r\n * @param current defines the current output\r\n * @returns the next output in the list or null\r\n */\r\n public getSiblingOutput(current: NodeMaterialConnectionPoint) {\r\n const index = this._outputs.indexOf(current);\r\n\r\n if (index === -1 || index >= this._outputs.length) {\r\n return null;\r\n }\r\n\r\n return this._outputs[index + 1];\r\n }\r\n\r\n /**\r\n * Checks if the current block is an ancestor of a given block\r\n * @param block defines the potential descendant block to check\r\n * @returns true if block is a descendant\r\n */\r\n public isAnAncestorOf(block: NodeMaterialBlock): boolean {\r\n for (const output of this._outputs) {\r\n if (!output.hasEndpoints) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n if (endpoint.ownerBlock === block) {\r\n return true;\r\n }\r\n if (endpoint.ownerBlock.isAnAncestorOf(block)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Connect current block with another block\r\n * @param other defines the block to connect with\r\n * @param options define the various options to help pick the right connections\r\n * @param options.input\r\n * @param options.output\r\n * @param options.outputSwizzle\r\n * @returns the current block\r\n */\r\n public connectTo(\r\n other: NodeMaterialBlock,\r\n options?: {\r\n input?: string;\r\n output?: string;\r\n outputSwizzle?: string;\r\n }\r\n ) {\r\n if (this._outputs.length === 0) {\r\n return;\r\n }\r\n\r\n let output = options && options.output ? this.getOutputByName(options.output) : this.getFirstAvailableOutput(other);\r\n\r\n let notFound = true;\r\n while (notFound) {\r\n const input = options && options.input ? other.getInputByName(options.input) : other.getFirstAvailableInput(output);\r\n\r\n if (output && input && output.canConnectTo(input)) {\r\n output.connectTo(input);\r\n notFound = false;\r\n } else if (!output) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Unable to find a compatible match\";\r\n } else {\r\n output = this.getSiblingOutput(output);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n // Empty. Must be defined by child nodes\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _postBuildBlock(state: NodeMaterialBuildState) {\r\n // Empty. Must be defined by child nodes\r\n }\r\n\r\n /**\r\n * Add uniforms, samplers and uniform buffers at compilation time\r\n * @param state defines the state to update\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n * @param uniformBuffers defines the list of uniform buffer names\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public updateUniformsAndSamples(state: NodeMaterialBuildState, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, uniformBuffers: string[]) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Add potential fallbacks if shader compilation fails\r\n * @param fallbacks defines the current prioritized list of fallbacks\r\n * @param mesh defines the mesh to be rendered\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public provideFallbacks(fallbacks: EffectFallbacks, mesh?: AbstractMesh) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Initialize defines for shader compilation\r\n * @param defines defines the material defines to update\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public initializeDefines(defines: NodeMaterialDefines) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Update defines for shader compilation\r\n * @param defines defines the material defines to update\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param mesh defines the mesh to be rendered\r\n * @param useInstances specifies that instances should be used\r\n * @param subMesh defines which submesh to render\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh, useInstances: boolean = false, subMesh?: SubMesh) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Lets the block try to connect some inputs automatically\r\n * @param material defines the hosting NodeMaterial\r\n * @param additionalFilteringInfo optional additional filtering condition when looking for compatible blocks\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Function called when a block is declared as repeatable content generator\r\n * @param vertexShaderState defines the current compilation state for the vertex shader\r\n * @param defines defines the material defines to update\r\n * @param mesh defines the mesh to be rendered\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public replaceRepeatableContent(vertexShaderState: NodeMaterialBuildState, defines: NodeMaterialDefines, mesh?: AbstractMesh) {\r\n // Do nothing\r\n }\r\n\r\n /** Gets a boolean indicating that the code of this block will be promoted to vertex shader even if connected to fragment output */\r\n public get willBeGeneratedIntoVertexShaderFromFragmentShader(): boolean {\r\n if (this.isInput || this.isFinalMerger) {\r\n return false;\r\n }\r\n\r\n if (this._outputs.some((o) => o.isDirectlyConnectedToVertexOutput)) {\r\n return false;\r\n }\r\n\r\n if (this.target === NodeMaterialBlockTargets.Vertex) {\r\n return false;\r\n }\r\n\r\n if (this.target === NodeMaterialBlockTargets.VertexAndFragment || this.target === NodeMaterialBlockTargets.Neutral) {\r\n if (this._outputs.some((o) => o.isConnectedInVertexShader)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n * @param useInstances specifies that instances should be used\r\n * @returns true if the block is ready\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isReady(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, useInstances: boolean = false) {\r\n return true;\r\n }\r\n\r\n protected _linkConnectionTypes(inputIndex0: number, inputIndex1: number, looseCoupling = false) {\r\n if (looseCoupling) {\r\n this._inputs[inputIndex1]._acceptedConnectionPointType = this._inputs[inputIndex0];\r\n } else {\r\n this._inputs[inputIndex0]._linkedConnectionSource = this._inputs[inputIndex1];\r\n this._inputs[inputIndex0]._isMainLinkSource = true;\r\n }\r\n this._inputs[inputIndex1]._linkedConnectionSource = this._inputs[inputIndex0];\r\n }\r\n\r\n private _processBuild(block: NodeMaterialBlock, state: NodeMaterialBuildState, input: NodeMaterialConnectionPoint, activeBlocks: NodeMaterialBlock[]) {\r\n block.build(state, activeBlocks);\r\n\r\n const localBlockIsFragment = state._vertexState != null;\r\n const otherBlockWasGeneratedInVertexShader = block._buildTarget === NodeMaterialBlockTargets.Vertex && block.target !== NodeMaterialBlockTargets.VertexAndFragment;\r\n\r\n if (block.isTeleportOut && (block as NodeMaterialTeleportOutBlock).entryPoint?.isConnectedToUniform) {\r\n // In that case, we skip the context switch as the teleport out block is connected to a uniform\r\n return;\r\n }\r\n\r\n if (\r\n localBlockIsFragment &&\r\n ((block.target & block._buildTarget) === 0 ||\r\n (block.target & input.target) === 0 ||\r\n (this.target !== NodeMaterialBlockTargets.VertexAndFragment && otherBlockWasGeneratedInVertexShader))\r\n ) {\r\n // context switch! We need a varying\r\n if (\r\n (!block.isInput && state.target !== block._buildTarget) || // block was already emitted by vertex shader\r\n (block.isInput && (block as InputBlock).isAttribute && !(block as InputBlock)._noContextSwitch) // block is an attribute\r\n ) {\r\n const connectedPoint = input.connectedPoint!;\r\n if (state._vertexState._emitVaryingFromString(\"v_\" + connectedPoint.declarationVariableName, connectedPoint.type)) {\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL && connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Matrix) {\r\n // We can't pass a matrix as a varying in WGSL, so we need to split it into 4 vectors\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r0 = ${connectedPoint.associatedVariableName}[0];\\n`;\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r1 = ${connectedPoint.associatedVariableName}[1];\\n`;\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r2 = ${connectedPoint.associatedVariableName}[2];\\n`;\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r3 = ${connectedPoint.associatedVariableName}[3];\\n`;\r\n } else {\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName} = ${connectedPoint.associatedVariableName};\\n`;\r\n }\r\n }\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL && connectedPoint.type !== NodeMaterialBlockConnectionPointTypes.Matrix ? \"fragmentInputs.\" : \"\";\r\n input.associatedVariableName = prefix + \"v_\" + connectedPoint.declarationVariableName;\r\n input._enforceAssociatedVariableName = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Validates the new name for the block node.\r\n * @param newName the new name to be given to the node.\r\n * @returns false if the name is a reserve word, else true.\r\n */\r\n public validateBlockName(newName: string) {\r\n const reservedNames: Array<string> = [\r\n \"position\",\r\n \"normal\",\r\n \"tangent\",\r\n \"particle_positionw\",\r\n \"uv\",\r\n \"uv2\",\r\n \"uv3\",\r\n \"uv4\",\r\n \"uv5\",\r\n \"uv6\",\r\n \"position2d\",\r\n \"particle_uv\",\r\n \"postprocess_uv\",\r\n \"matricesIndices\",\r\n \"matricesWeights\",\r\n \"world0\",\r\n \"world1\",\r\n \"world2\",\r\n \"world3\",\r\n \"particle_color\",\r\n \"particle_texturemask\",\r\n ];\r\n for (const reservedName of reservedNames) {\r\n if (newName === reservedName) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _customBuildStep(state: NodeMaterialBuildState, activeBlocks: NodeMaterialBlock[]): void {\r\n // Must be implemented by children\r\n }\r\n\r\n /**\r\n * Compile the current node and generate the shader code\r\n * @param state defines the current compilation state (uniforms, samplers, current string)\r\n * @param activeBlocks defines the list of active blocks (i.e. blocks to compile)\r\n * @returns true if already built\r\n */\r\n public build(state: NodeMaterialBuildState, activeBlocks: NodeMaterialBlock[]): boolean {\r\n if (this._buildId === state.sharedData.buildId) {\r\n return true;\r\n }\r\n\r\n if (!this.isInput) {\r\n /** Prepare outputs */\r\n for (const output of this._outputs) {\r\n if (!output.associatedVariableName) {\r\n output.associatedVariableName = state._getFreeVariableName(output.name);\r\n }\r\n }\r\n }\r\n\r\n // Check if \"parent\" blocks are compiled\r\n for (const input of this._inputs) {\r\n if (!input.connectedPoint) {\r\n if (!input.isOptional) {\r\n // Emit a warning\r\n state.sharedData.checks.notConnectedNonOptionalInputs.push(input);\r\n }\r\n continue;\r\n }\r\n\r\n if (this.target !== NodeMaterialBlockTargets.Neutral) {\r\n if ((input.target & this.target) === 0) {\r\n continue;\r\n }\r\n\r\n if ((input.target & state.target) === 0) {\r\n continue;\r\n }\r\n }\r\n\r\n const block = input.connectedPoint.ownerBlock;\r\n if (block && block !== this) {\r\n this._processBuild(block, state, input, activeBlocks);\r\n }\r\n }\r\n\r\n this._customBuildStep(state, activeBlocks);\r\n\r\n if (this._buildId === state.sharedData.buildId) {\r\n return true; // Need to check again as inputs can be connected multiple time to this endpoint\r\n }\r\n\r\n // Logs\r\n if (state.sharedData.verbose) {\r\n Logger.Log(`${state.target === NodeMaterialBlockTargets.Vertex ? \"Vertex shader\" : \"Fragment shader\"}: Building ${this.name} [${this.getClassName()}]`);\r\n }\r\n\r\n // Checks final outputs\r\n if (this.isFinalMerger) {\r\n switch (state.target) {\r\n case NodeMaterialBlockTargets.Vertex:\r\n state.sharedData.checks.emitVertex = true;\r\n break;\r\n case NodeMaterialBlockTargets.Fragment:\r\n state.sharedData.checks.emitFragment = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!this.isInput && state.sharedData.emitComments) {\r\n state.compilationString += `\\n//${this.name}\\n`;\r\n }\r\n\r\n this._buildBlock(state);\r\n\r\n this._buildId = state.sharedData.buildId;\r\n this._buildTarget = state.target;\r\n\r\n // Compile connected blocks\r\n for (const output of this._outputs) {\r\n if (output._forPostBuild) {\r\n continue;\r\n }\r\n if ((output.target & state.target) === 0) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n const block = endpoint.ownerBlock;\r\n\r\n if (block) {\r\n if (((block.target & state.target) !== 0 && activeBlocks.indexOf(block) !== -1) || state._terminalBlocks.has(block)) {\r\n this._processBuild(block, state, endpoint, activeBlocks);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._postBuildBlock(state);\r\n\r\n // Compile post build connected blocks\r\n for (const output of this._outputs) {\r\n if (!output._forPostBuild) {\r\n continue;\r\n }\r\n if ((output.target & state.target) === 0) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n const block = endpoint.ownerBlock;\r\n\r\n if (block && (block.target & state.target) !== 0 && activeBlocks.indexOf(block) !== -1) {\r\n this._processBuild(block, state, endpoint, activeBlocks);\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected _inputRename(name: string) {\r\n return name;\r\n }\r\n\r\n protected _outputRename(name: string) {\r\n return name;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n const variableName = this._codeVariableName;\r\n return `${variableName}.visibleInInspector = ${this.visibleInInspector};\\n${variableName}.visibleOnFrame = ${this.visibleOnFrame};\\n${variableName}.target = ${this.target};\\n`;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _dumpCode(uniqueNames: string[], alreadyDumped: NodeMaterialBlock[]) {\r\n alreadyDumped.push(this);\r\n\r\n // Get unique name\r\n const nameAsVariableName = this.name.replace(/[^A-Za-z_]+/g, \"\");\r\n this._codeVariableName = nameAsVariableName || `${this.getClassName()}_${this.uniqueId}`;\r\n\r\n if (uniqueNames.indexOf(this._codeVariableName) !== -1) {\r\n let index = 0;\r\n do {\r\n index++;\r\n this._codeVariableName = nameAsVariableName + index;\r\n } while (uniqueNames.indexOf(this._codeVariableName) !== -1);\r\n }\r\n\r\n uniqueNames.push(this._codeVariableName);\r\n\r\n // Declaration\r\n let codeString = `\\n// ${this.getClassName()}\\n`;\r\n if (this.comments) {\r\n codeString += `// ${this.comments}\\n`;\r\n }\r\n codeString += `var ${this._codeVariableName} = new BABYLON.${this.getClassName()}(\"${this.name}\");\\n`;\r\n\r\n // Properties\r\n codeString += this._dumpPropertiesCode();\r\n\r\n // Inputs\r\n for (const input of this.inputs) {\r\n if (!input.isConnected) {\r\n continue;\r\n }\r\n\r\n const connectedOutput = input.connectedPoint!;\r\n const connectedBlock = connectedOutput.ownerBlock;\r\n\r\n if (alreadyDumped.indexOf(connectedBlock) === -1) {\r\n codeString += connectedBlock._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n // Outputs\r\n for (const output of this.outputs) {\r\n if (!output.hasEndpoints) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n const connectedBlock = endpoint.ownerBlock;\r\n if (connectedBlock && alreadyDumped.indexOf(connectedBlock) === -1) {\r\n codeString += connectedBlock._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _dumpCodeForOutputConnections(alreadyDumped: NodeMaterialBlock[]) {\r\n let codeString = \"\";\r\n\r\n if (alreadyDumped.indexOf(this) !== -1) {\r\n return codeString;\r\n }\r\n\r\n alreadyDumped.push(this);\r\n\r\n for (const input of this.inputs) {\r\n if (!input.isConnected) {\r\n continue;\r\n }\r\n\r\n const connectedOutput = input.connectedPoint!;\r\n const connectedBlock = connectedOutput.ownerBlock;\r\n\r\n codeString += connectedBlock._dumpCodeForOutputConnections(alreadyDumped);\r\n codeString += `${connectedBlock._codeVariableName}.${connectedBlock._outputRename(connectedOutput.name)}.connectTo(${this._codeVariableName}.${this._inputRename(\r\n input.name\r\n )});\\n`;\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Clone the current block to a new identical block\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a copy of the current block\r\n */\r\n public clone(scene: Scene, rootUrl: string = \"\") {\r\n const serializationObject = this.serialize();\r\n\r\n const blockType = GetClass(serializationObject.customType);\r\n if (blockType) {\r\n const block: NodeMaterialBlock = new blockType();\r\n block._deserialize(serializationObject, scene, rootUrl);\r\n\r\n return block;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n serializationObject.customType = \"BABYLON.\" + this.getClassName();\r\n serializationObject.id = this.uniqueId;\r\n serializationObject.name = this.name;\r\n serializationObject.comments = this.comments;\r\n serializationObject.visibleInInspector = this.visibleInInspector;\r\n serializationObject.visibleOnFrame = this.visibleOnFrame;\r\n serializationObject.target = this.target;\r\n\r\n serializationObject.inputs = [];\r\n serializationObject.outputs = [];\r\n\r\n for (const input of this.inputs) {\r\n serializationObject.inputs.push(input.serialize());\r\n }\r\n\r\n for (const output of this.outputs) {\r\n serializationObject.outputs.push(output.serialize(false));\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n this.name = serializationObject.name;\r\n this.comments = serializationObject.comments;\r\n this.visibleInInspector = !!serializationObject.visibleInInspector;\r\n this.visibleOnFrame = !!serializationObject.visibleOnFrame;\r\n this._target = serializationObject.target ?? this.target;\r\n this._deserializePortDisplayNamesAndExposedOnFrame(serializationObject);\r\n }\r\n\r\n private _deserializePortDisplayNamesAndExposedOnFrame(serializationObject: any) {\r\n const serializedInputs = serializationObject.inputs;\r\n const serializedOutputs = serializationObject.outputs;\r\n if (serializedInputs) {\r\n for (let i = 0; i < serializedInputs.length; i++) {\r\n const port = serializedInputs[i];\r\n\r\n if (port.displayName) {\r\n this.inputs[i].displayName = port.displayName;\r\n }\r\n if (port.isExposedOnFrame) {\r\n this.inputs[i].isExposedOnFrame = port.isExposedOnFrame;\r\n this.inputs[i].exposedPortPosition = port.exposedPortPosition;\r\n }\r\n }\r\n }\r\n if (serializedOutputs) {\r\n for (let i = 0; i < serializedOutputs.length; i++) {\r\n const port = serializedOutputs[i];\r\n if (port.displayName) {\r\n this.outputs[i].displayName = port.displayName;\r\n }\r\n if (port.isExposedOnFrame) {\r\n this.outputs[i].isExposedOnFrame = port.isExposedOnFrame;\r\n this.outputs[i].exposedPortPosition = port.exposedPortPosition;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Release resources\r\n */\r\n public dispose() {\r\n this.onCodeIsReadyObservable.clear();\r\n\r\n for (const input of this.inputs) {\r\n input.dispose();\r\n }\r\n\r\n for (const output of this.outputs) {\r\n output.dispose();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeMaterialBlock.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Node/nodeMaterialBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"./Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"./nodeMaterialBuildState\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"./nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"./Enums/nodeMaterialBlockTargets\";\r\nimport type { Effect } from \"../effect\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"./nodeMaterial\";\r\nimport type { InputBlock } from \"./Blocks/Input/inputBlock\";\r\nimport { UniqueIdGenerator } from \"../../Misc/uniqueIdGenerator\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { NodeMaterialTeleportOutBlock } from \"./Blocks/Teleport/teleportOutBlock\";\r\n\r\n/**\r\n * Defines a block that can be used inside a node based material\r\n */\r\nexport class NodeMaterialBlock {\r\n private _buildId: number;\r\n private _buildTarget: NodeMaterialBlockTargets;\r\n protected _target: NodeMaterialBlockTargets;\r\n private _isFinalMerger = false;\r\n private _isInput = false;\r\n private _isLoop = false;\r\n private _isTeleportOut = false;\r\n private _isTeleportIn = false;\r\n private _name = \"\";\r\n protected _isUnique = false;\r\n protected _codeIsReady = true;\r\n /** @internal */\r\n public _isFinalOutput = false;\r\n\r\n /** @internal */\r\n public get _isFinalOutputAndActive() {\r\n return this._isFinalOutput;\r\n }\r\n\r\n /** @internal */\r\n public get _hasPrecedence() {\r\n return false;\r\n }\r\n\r\n /**\r\n * Observable raised when the block code is ready (if the code loading is async)\r\n */\r\n public onCodeIsReadyObservable = new Observable<NodeMaterialBlock>();\r\n\r\n /** Gets or sets a boolean indicating that only one input can be connected at a time */\r\n public inputsAreExclusive = false;\r\n\r\n /** @internal */\r\n public _codeVariableName = \"\";\r\n\r\n /** @internal */\r\n public _inputs = new Array<NodeMaterialConnectionPoint>();\r\n /** @internal */\r\n public _outputs = new Array<NodeMaterialConnectionPoint>();\r\n\r\n /** @internal */\r\n public _preparationId: number;\r\n\r\n /** @internal */\r\n public readonly _originalTargetIsNeutral: boolean;\r\n\r\n /**\r\n * Gets the name of the block\r\n */\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block has is code ready to be used\r\n */\r\n public get codeIsReady() {\r\n return this._codeIsReady;\r\n }\r\n\r\n /**\r\n * Sets the name of the block. Will check if the name is valid.\r\n */\r\n public set name(newName: string) {\r\n if (!this.validateBlockName(newName)) {\r\n return;\r\n }\r\n\r\n this._name = newName;\r\n }\r\n\r\n /**\r\n * Gets or sets the unique id of the node\r\n */\r\n public uniqueId: number;\r\n\r\n /**\r\n * Gets or sets the comments associated with this block\r\n */\r\n public comments: string = \"\";\r\n\r\n /**\r\n * Gets a boolean indicating that this block can only be used once per NodeMaterial\r\n */\r\n public get isUnique() {\r\n return this._isUnique;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is an end block (e.g. it is generating a system value)\r\n */\r\n public get isFinalMerger(): boolean {\r\n return this._isFinalMerger;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is an input (e.g. it sends data to the shader)\r\n */\r\n public get isInput(): boolean {\r\n return this._isInput;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this block is a teleport out\r\n */\r\n public get isTeleportOut(): boolean {\r\n return this._isTeleportOut;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this block is a teleport in\r\n */\r\n public get isTeleportIn(): boolean {\r\n return this._isTeleportIn;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this block is a loop\r\n */\r\n public get isLoop(): boolean {\r\n return this._isLoop;\r\n }\r\n\r\n /**\r\n * Gets or sets the build Id\r\n */\r\n public get buildId(): number {\r\n return this._buildId;\r\n }\r\n\r\n public set buildId(value: number) {\r\n this._buildId = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the target of the block\r\n */\r\n public get target() {\r\n return this._target;\r\n }\r\n\r\n public set target(value: NodeMaterialBlockTargets) {\r\n if ((this._target & value) !== 0) {\r\n return;\r\n }\r\n this._target = value;\r\n }\r\n\r\n /**\r\n * Gets the list of input points\r\n */\r\n public get inputs(): NodeMaterialConnectionPoint[] {\r\n return this._inputs;\r\n }\r\n\r\n /** Gets the list of output points */\r\n public get outputs(): NodeMaterialConnectionPoint[] {\r\n return this._outputs;\r\n }\r\n\r\n /**\r\n * Find an input by its name\r\n * @param name defines the name of the input to look for\r\n * @returns the input or null if not found\r\n */\r\n public getInputByName(name: string) {\r\n const filter = this._inputs.filter((e) => e.name === name);\r\n\r\n if (filter.length) {\r\n return filter[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Find an output by its name\r\n * @param name defines the name of the output to look for\r\n * @returns the output or null if not found\r\n */\r\n public getOutputByName(name: string) {\r\n const filter = this._outputs.filter((e) => e.name === name);\r\n\r\n if (filter.length) {\r\n return filter[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets a boolean indicating that this input can be edited in the Inspector (false by default) */\r\n public visibleInInspector = false;\r\n\r\n /** Gets or sets a boolean indicating that this input can be edited from a collapsed frame */\r\n public visibleOnFrame = false;\r\n\r\n /**\r\n * Creates a new NodeMaterialBlock\r\n * @param name defines the block name\r\n * @param target defines the target of that block (Vertex by default)\r\n * @param isFinalMerger defines a boolean indicating that this block is an end block (e.g. it is generating a system value). Default is false\r\n * @param isFinalOutput defines a boolean indicating that this block is generating a final output and no other block should be generated after\r\n */\r\n public constructor(name: string, target = NodeMaterialBlockTargets.Vertex, isFinalMerger = false, isFinalOutput = false) {\r\n this._target = target;\r\n this._originalTargetIsNeutral = target === NodeMaterialBlockTargets.Neutral;\r\n this._isFinalMerger = isFinalMerger;\r\n this._isFinalOutput = isFinalOutput;\r\n switch (this.getClassName()) {\r\n case \"InputBlock\":\r\n this._isInput = true;\r\n break;\r\n case \"NodeMaterialTeleportOutBlock\":\r\n this._isTeleportOut = true;\r\n break;\r\n case \"NodeMaterialTeleportInBlock\":\r\n this._isTeleportIn = true;\r\n break;\r\n case \"LoopBlock\":\r\n this._isLoop = true;\r\n break;\r\n }\r\n\r\n this._name = name;\r\n this.uniqueId = UniqueIdGenerator.UniqueId;\r\n }\r\n\r\n /** @internal */\r\n public _setInitialTarget(target: NodeMaterialBlockTargets): void {\r\n this._target = target;\r\n // marked as read only\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (this._originalTargetIsNeutral as boolean) = target === NodeMaterialBlockTargets.Neutral;\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public initialize(state: NodeMaterialBuildState) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Bind data to effect. Will only be called for blocks with isBindable === true\r\n * @param effect defines the effect to bind data to\r\n * @param nodeMaterial defines the hosting NodeMaterial\r\n * @param mesh defines the mesh that will be rendered\r\n * @param subMesh defines the submesh that will be rendered\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n // Do nothing\r\n }\r\n\r\n protected _writeVariable(currentPoint: NodeMaterialConnectionPoint): string {\r\n const connectionPoint = currentPoint.connectedPoint;\r\n\r\n if (connectionPoint) {\r\n return `${currentPoint.associatedVariableName}`;\r\n }\r\n\r\n return `0.`;\r\n }\r\n\r\n protected _writeFloat(value: number) {\r\n let stringVersion = value.toString();\r\n\r\n if (stringVersion.indexOf(\".\") === -1) {\r\n stringVersion += \".0\";\r\n }\r\n return `${stringVersion}`;\r\n }\r\n\r\n /**\r\n * Gets the current class name e.g. \"NodeMaterialBlock\"\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"NodeMaterialBlock\";\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the fragment shader\r\n * @returns true if connected in fragment shader\r\n */\r\n public isConnectedInFragmentShader() {\r\n return this.outputs.some((o) => o.isConnectedInFragmentShader);\r\n }\r\n\r\n /**\r\n * Register a new input. Must be called inside a block constructor\r\n * @param name defines the connection point name\r\n * @param type defines the connection point type\r\n * @param isOptional defines a boolean indicating that this input can be omitted\r\n * @param target defines the target to use to limit the connection point (will be VertexAndFragment by default)\r\n * @param point an already created connection point. If not provided, create a new one\r\n * @returns the current block\r\n */\r\n public registerInput(\r\n name: string,\r\n type: NodeMaterialBlockConnectionPointTypes,\r\n isOptional: boolean = false,\r\n target?: NodeMaterialBlockTargets,\r\n point?: NodeMaterialConnectionPoint\r\n ) {\r\n point = point ?? new NodeMaterialConnectionPoint(name, this, NodeMaterialConnectionPointDirection.Input);\r\n point.type = type;\r\n point.isOptional = isOptional;\r\n if (target) {\r\n point.target = target;\r\n }\r\n\r\n this._inputs.push(point);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Register a new output. Must be called inside a block constructor\r\n * @param name defines the connection point name\r\n * @param type defines the connection point type\r\n * @param target defines the target to use to limit the connection point (will be VertexAndFragment by default)\r\n * @param point an already created connection point. If not provided, create a new one\r\n * @returns the current block\r\n */\r\n public registerOutput(name: string, type: NodeMaterialBlockConnectionPointTypes, target?: NodeMaterialBlockTargets, point?: NodeMaterialConnectionPoint) {\r\n point = point ?? new NodeMaterialConnectionPoint(name, this, NodeMaterialConnectionPointDirection.Output);\r\n point.type = type;\r\n if (target) {\r\n point.target = target;\r\n }\r\n\r\n this._outputs.push(point);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Will return the first available input e.g. the first one which is not an uniform or an attribute\r\n * @param forOutput defines an optional connection point to check compatibility with\r\n * @returns the first available input or null\r\n */\r\n public getFirstAvailableInput(forOutput: Nullable<NodeMaterialConnectionPoint> = null) {\r\n for (const input of this._inputs) {\r\n if (!input.connectedPoint) {\r\n if (\r\n !forOutput ||\r\n forOutput.type === input.type ||\r\n input.type === NodeMaterialBlockConnectionPointTypes.AutoDetect ||\r\n input.acceptedConnectionPointTypes.indexOf(forOutput.type) !== -1\r\n ) {\r\n return input;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Will return the first available output e.g. the first one which is not yet connected and not a varying\r\n * @param forBlock defines an optional block to check compatibility with\r\n * @returns the first available input or null\r\n */\r\n public getFirstAvailableOutput(forBlock: Nullable<NodeMaterialBlock> = null) {\r\n for (const output of this._outputs) {\r\n if (!forBlock || !forBlock.target || forBlock.target === NodeMaterialBlockTargets.Neutral || (forBlock.target & output.target) !== 0) {\r\n return output;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the sibling of the given output\r\n * @param current defines the current output\r\n * @returns the next output in the list or null\r\n */\r\n public getSiblingOutput(current: NodeMaterialConnectionPoint) {\r\n const index = this._outputs.indexOf(current);\r\n\r\n if (index === -1 || index >= this._outputs.length) {\r\n return null;\r\n }\r\n\r\n return this._outputs[index + 1];\r\n }\r\n\r\n /**\r\n * Checks if the current block is an ancestor of a given block\r\n * @param block defines the potential descendant block to check\r\n * @returns true if block is a descendant\r\n */\r\n public isAnAncestorOf(block: NodeMaterialBlock): boolean {\r\n for (const output of this._outputs) {\r\n if (!output.hasEndpoints) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n if (endpoint.ownerBlock === block) {\r\n return true;\r\n }\r\n if (endpoint.ownerBlock.isAnAncestorOf(block)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Connect current block with another block\r\n * @param other defines the block to connect with\r\n * @param options define the various options to help pick the right connections\r\n * @param options.input\r\n * @param options.output\r\n * @param options.outputSwizzle\r\n * @returns the current block\r\n */\r\n public connectTo(\r\n other: NodeMaterialBlock,\r\n options?: {\r\n input?: string;\r\n output?: string;\r\n outputSwizzle?: string;\r\n }\r\n ) {\r\n if (this._outputs.length === 0) {\r\n return;\r\n }\r\n\r\n let output = options && options.output ? this.getOutputByName(options.output) : this.getFirstAvailableOutput(other);\r\n\r\n let notFound = true;\r\n while (notFound) {\r\n const input = options && options.input ? other.getInputByName(options.input) : other.getFirstAvailableInput(output);\r\n\r\n if (output && input && output.canConnectTo(input)) {\r\n output.connectTo(input);\r\n notFound = false;\r\n } else if (!output) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Unable to find a compatible match\";\r\n } else {\r\n output = this.getSiblingOutput(output);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n // Empty. Must be defined by child nodes\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _postBuildBlock(state: NodeMaterialBuildState) {\r\n // Empty. Must be defined by child nodes\r\n }\r\n\r\n /**\r\n * Add uniforms, samplers and uniform buffers at compilation time\r\n * @param state defines the state to update\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n * @param uniformBuffers defines the list of uniform buffer names\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public updateUniformsAndSamples(state: NodeMaterialBuildState, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, uniformBuffers: string[]) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Add potential fallbacks if shader compilation fails\r\n * @param fallbacks defines the current prioritized list of fallbacks\r\n * @param mesh defines the mesh to be rendered\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public provideFallbacks(fallbacks: EffectFallbacks, mesh?: AbstractMesh) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Initialize defines for shader compilation\r\n * @param defines defines the material defines to update\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public initializeDefines(defines: NodeMaterialDefines) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Update defines for shader compilation\r\n * @param defines defines the material defines to update\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param mesh defines the mesh to be rendered\r\n * @param useInstances specifies that instances should be used\r\n * @param subMesh defines which submesh to render\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh, useInstances: boolean = false, subMesh?: SubMesh) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Lets the block try to connect some inputs automatically\r\n * @param material defines the hosting NodeMaterial\r\n * @param additionalFilteringInfo optional additional filtering condition when looking for compatible blocks\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Function called when a block is declared as repeatable content generator\r\n * @param vertexShaderState defines the current compilation state for the vertex shader\r\n * @param defines defines the material defines to update\r\n * @param mesh defines the mesh to be rendered\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public replaceRepeatableContent(vertexShaderState: NodeMaterialBuildState, defines: NodeMaterialDefines, mesh?: AbstractMesh) {\r\n // Do nothing\r\n }\r\n\r\n /** Gets a boolean indicating that the code of this block will be promoted to vertex shader even if connected to fragment output */\r\n public get willBeGeneratedIntoVertexShaderFromFragmentShader(): boolean {\r\n if (this.isInput || this.isFinalMerger) {\r\n return false;\r\n }\r\n\r\n if (this._outputs.some((o) => o.isDirectlyConnectedToVertexOutput)) {\r\n return false;\r\n }\r\n\r\n if (this.target === NodeMaterialBlockTargets.Vertex) {\r\n return false;\r\n }\r\n\r\n if (this.target === NodeMaterialBlockTargets.VertexAndFragment || this.target === NodeMaterialBlockTargets.Neutral) {\r\n if (this._outputs.some((o) => o.isConnectedInVertexShader)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n * @param useInstances specifies that instances should be used\r\n * @returns true if the block is ready\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isReady(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, useInstances: boolean = false) {\r\n return true;\r\n }\r\n\r\n protected _linkConnectionTypes(inputIndex0: number, inputIndex1: number, looseCoupling = false) {\r\n if (looseCoupling) {\r\n this._inputs[inputIndex1]._acceptedConnectionPointType = this._inputs[inputIndex0];\r\n } else {\r\n this._inputs[inputIndex0]._linkedConnectionSource = this._inputs[inputIndex1];\r\n this._inputs[inputIndex0]._isMainLinkSource = true;\r\n }\r\n this._inputs[inputIndex1]._linkedConnectionSource = this._inputs[inputIndex0];\r\n }\r\n\r\n private _processBuild(block: NodeMaterialBlock, state: NodeMaterialBuildState, input: NodeMaterialConnectionPoint, activeBlocks: NodeMaterialBlock[]) {\r\n block.build(state, activeBlocks);\r\n\r\n const localBlockIsFragment = state._vertexState != null;\r\n const otherBlockWasGeneratedInVertexShader = block._buildTarget === NodeMaterialBlockTargets.Vertex && block.target !== NodeMaterialBlockTargets.VertexAndFragment;\r\n\r\n if (block.isTeleportOut && (block as NodeMaterialTeleportOutBlock).entryPoint?.isConnectedToUniform) {\r\n // In that case, we skip the context switch as the teleport out block is connected to a uniform\r\n return;\r\n }\r\n\r\n if (\r\n localBlockIsFragment &&\r\n ((block.target & block._buildTarget) === 0 ||\r\n (block.target & input.target) === 0 ||\r\n (this.target !== NodeMaterialBlockTargets.VertexAndFragment && otherBlockWasGeneratedInVertexShader))\r\n ) {\r\n // context switch! We need a varying\r\n if (\r\n (!block.isInput && state.target !== block._buildTarget) || // block was already emitted by vertex shader\r\n (block.isInput && (block as InputBlock).isAttribute && !(block as InputBlock)._noContextSwitch) // block is an attribute\r\n ) {\r\n const connectedPoint = input.connectedPoint!;\r\n if (state._vertexState._emitVaryingFromString(\"v_\" + connectedPoint.declarationVariableName, connectedPoint.type)) {\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL && connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Matrix) {\r\n // We can't pass a matrix as a varying in WGSL, so we need to split it into 4 vectors\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r0 = ${connectedPoint.associatedVariableName}[0];\\n`;\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r1 = ${connectedPoint.associatedVariableName}[1];\\n`;\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r2 = ${connectedPoint.associatedVariableName}[2];\\n`;\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName}_r3 = ${connectedPoint.associatedVariableName}[3];\\n`;\r\n } else {\r\n state._vertexState.compilationString += `${prefix}${\"v_\" + connectedPoint.declarationVariableName} = ${connectedPoint.associatedVariableName};\\n`;\r\n }\r\n }\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL && connectedPoint.type !== NodeMaterialBlockConnectionPointTypes.Matrix ? \"fragmentInputs.\" : \"\";\r\n input.associatedVariableName = prefix + \"v_\" + connectedPoint.declarationVariableName;\r\n input._enforceAssociatedVariableName = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Validates the new name for the block node.\r\n * @param newName the new name to be given to the node.\r\n * @returns false if the name is a reserve word, else true.\r\n */\r\n public validateBlockName(newName: string) {\r\n const reservedNames: Array<string> = [\r\n \"position\",\r\n \"normal\",\r\n \"tangent\",\r\n \"particle_positionw\",\r\n \"uv\",\r\n \"uv2\",\r\n \"uv3\",\r\n \"uv4\",\r\n \"uv5\",\r\n \"uv6\",\r\n \"position2d\",\r\n \"particle_uv\",\r\n \"postprocess_uv\",\r\n \"matricesIndices\",\r\n \"matricesWeights\",\r\n \"world0\",\r\n \"world1\",\r\n \"world2\",\r\n \"world3\",\r\n \"particle_color\",\r\n \"particle_texturemask\",\r\n ];\r\n for (const reservedName of reservedNames) {\r\n if (newName === reservedName) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _customBuildStep(state: NodeMaterialBuildState, activeBlocks: NodeMaterialBlock[]): void {\r\n // Must be implemented by children\r\n }\r\n\r\n /**\r\n * Compile the current node and generate the shader code\r\n * @param state defines the current compilation state (uniforms, samplers, current string)\r\n * @param activeBlocks defines the list of active blocks (i.e. blocks to compile)\r\n * @returns true if already built\r\n */\r\n public build(state: NodeMaterialBuildState, activeBlocks: NodeMaterialBlock[]): boolean {\r\n if (this._buildId === state.sharedData.buildId) {\r\n return true;\r\n }\r\n\r\n if (!this.isInput) {\r\n /** Prepare outputs */\r\n for (const output of this._outputs) {\r\n if (!output.associatedVariableName) {\r\n output.associatedVariableName = state._getFreeVariableName(output.name);\r\n }\r\n }\r\n }\r\n\r\n // Check if \"parent\" blocks are compiled\r\n for (const input of this._inputs) {\r\n if (!input.connectedPoint) {\r\n if (!input.isOptional) {\r\n // Emit a warning\r\n state.sharedData.checks.notConnectedNonOptionalInputs.push(input);\r\n }\r\n continue;\r\n }\r\n\r\n if (this.target !== NodeMaterialBlockTargets.Neutral) {\r\n if ((input.target & this.target) === 0) {\r\n continue;\r\n }\r\n\r\n if ((input.target & state.target) === 0) {\r\n continue;\r\n }\r\n }\r\n\r\n const block = input.connectedPoint.ownerBlock;\r\n if (block && block !== this) {\r\n this._processBuild(block, state, input, activeBlocks);\r\n }\r\n }\r\n\r\n this._customBuildStep(state, activeBlocks);\r\n\r\n if (this._buildId === state.sharedData.buildId) {\r\n return true; // Need to check again as inputs can be connected multiple time to this endpoint\r\n }\r\n\r\n // Logs\r\n if (state.sharedData.verbose) {\r\n Logger.Log(`${state.target === NodeMaterialBlockTargets.Vertex ? \"Vertex shader\" : \"Fragment shader\"}: Building ${this.name} [${this.getClassName()}]`);\r\n }\r\n\r\n // Checks final outputs\r\n if (this.isFinalMerger) {\r\n switch (state.target) {\r\n case NodeMaterialBlockTargets.Vertex:\r\n state.sharedData.checks.emitVertex = true;\r\n break;\r\n case NodeMaterialBlockTargets.Fragment:\r\n state.sharedData.checks.emitFragment = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!this.isInput && state.sharedData.emitComments) {\r\n state.compilationString += `\\n//${this.name}\\n`;\r\n }\r\n\r\n this._buildBlock(state);\r\n\r\n this._buildId = state.sharedData.buildId;\r\n this._buildTarget = state.target;\r\n\r\n // Compile connected blocks\r\n for (const output of this._outputs) {\r\n if (output._forPostBuild) {\r\n continue;\r\n }\r\n if ((output.target & state.target) === 0) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n const block = endpoint.ownerBlock;\r\n\r\n if (block) {\r\n if (((block.target & state.target) !== 0 && activeBlocks.indexOf(block) !== -1) || state._terminalBlocks.has(block)) {\r\n this._processBuild(block, state, endpoint, activeBlocks);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._postBuildBlock(state);\r\n\r\n // Compile post build connected blocks\r\n for (const output of this._outputs) {\r\n if (!output._forPostBuild) {\r\n continue;\r\n }\r\n if ((output.target & state.target) === 0) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n const block = endpoint.ownerBlock;\r\n\r\n if (block && (block.target & state.target) !== 0 && activeBlocks.indexOf(block) !== -1) {\r\n this._processBuild(block, state, endpoint, activeBlocks);\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected _inputRename(name: string) {\r\n return name;\r\n }\r\n\r\n protected _outputRename(name: string) {\r\n return name;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n const variableName = this._codeVariableName;\r\n return `${variableName}.visibleInInspector = ${this.visibleInInspector};\\n${variableName}.visibleOnFrame = ${this.visibleOnFrame};\\n${variableName}.target = ${this.target};\\n`;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _dumpCode(uniqueNames: string[], alreadyDumped: NodeMaterialBlock[]) {\r\n alreadyDumped.push(this);\r\n\r\n // Get unique name\r\n const nameAsVariableName = this.name.replace(/[^A-Za-z_]+/g, \"\");\r\n this._codeVariableName = nameAsVariableName || `${this.getClassName()}_${this.uniqueId}`;\r\n\r\n if (uniqueNames.indexOf(this._codeVariableName) !== -1) {\r\n let index = 0;\r\n do {\r\n index++;\r\n this._codeVariableName = nameAsVariableName + index;\r\n } while (uniqueNames.indexOf(this._codeVariableName) !== -1);\r\n }\r\n\r\n uniqueNames.push(this._codeVariableName);\r\n\r\n // Declaration\r\n let codeString = `\\n// ${this.getClassName()}\\n`;\r\n if (this.comments) {\r\n codeString += `// ${this.comments}\\n`;\r\n }\r\n codeString += `var ${this._codeVariableName} = new BABYLON.${this.getClassName()}(\"${this.name}\");\\n`;\r\n\r\n // Properties\r\n codeString += this._dumpPropertiesCode();\r\n\r\n // Inputs\r\n for (const input of this.inputs) {\r\n if (!input.isConnected) {\r\n continue;\r\n }\r\n\r\n const connectedOutput = input.connectedPoint!;\r\n const connectedBlock = connectedOutput.ownerBlock;\r\n\r\n if (alreadyDumped.indexOf(connectedBlock) === -1) {\r\n codeString += connectedBlock._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n // Outputs\r\n for (const output of this.outputs) {\r\n if (!output.hasEndpoints) {\r\n continue;\r\n }\r\n\r\n for (const endpoint of output.endpoints) {\r\n const connectedBlock = endpoint.ownerBlock;\r\n if (connectedBlock && alreadyDumped.indexOf(connectedBlock) === -1) {\r\n codeString += connectedBlock._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _dumpCodeForOutputConnections(alreadyDumped: NodeMaterialBlock[]) {\r\n let codeString = \"\";\r\n\r\n if (alreadyDumped.indexOf(this) !== -1) {\r\n return codeString;\r\n }\r\n\r\n alreadyDumped.push(this);\r\n\r\n for (const input of this.inputs) {\r\n if (!input.isConnected) {\r\n continue;\r\n }\r\n\r\n const connectedOutput = input.connectedPoint!;\r\n const connectedBlock = connectedOutput.ownerBlock;\r\n\r\n codeString += connectedBlock._dumpCodeForOutputConnections(alreadyDumped);\r\n codeString += `${connectedBlock._codeVariableName}.${connectedBlock._outputRename(connectedOutput.name)}.connectTo(${this._codeVariableName}.${this._inputRename(\r\n input.name\r\n )});\\n`;\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Clone the current block to a new identical block\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a copy of the current block\r\n */\r\n public clone(scene: Scene, rootUrl: string = \"\") {\r\n const serializationObject = this.serialize();\r\n\r\n const blockType = GetClass(serializationObject.customType);\r\n if (blockType) {\r\n const block: NodeMaterialBlock = new blockType();\r\n block._deserialize(serializationObject, scene, rootUrl);\r\n\r\n return block;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n serializationObject.customType = \"BABYLON.\" + this.getClassName();\r\n serializationObject.id = this.uniqueId;\r\n serializationObject.name = this.name;\r\n serializationObject.comments = this.comments;\r\n serializationObject.visibleInInspector = this.visibleInInspector;\r\n serializationObject.visibleOnFrame = this.visibleOnFrame;\r\n serializationObject.target = this.target;\r\n\r\n serializationObject.inputs = [];\r\n serializationObject.outputs = [];\r\n\r\n for (const input of this.inputs) {\r\n serializationObject.inputs.push(input.serialize());\r\n }\r\n\r\n for (const output of this.outputs) {\r\n serializationObject.outputs.push(output.serialize(false));\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n this.name = serializationObject.name;\r\n this.comments = serializationObject.comments;\r\n this.visibleInInspector = !!serializationObject.visibleInInspector;\r\n this.visibleOnFrame = !!serializationObject.visibleOnFrame;\r\n this._target = serializationObject.target ?? this.target;\r\n this._deserializePortDisplayNamesAndExposedOnFrame(serializationObject);\r\n }\r\n\r\n private _deserializePortDisplayNamesAndExposedOnFrame(serializationObject: any) {\r\n const serializedInputs = serializationObject.inputs;\r\n const serializedOutputs = serializationObject.outputs;\r\n if (serializedInputs) {\r\n for (let i = 0; i < Math.min(serializedInputs.length, this.inputs.length); i++) {\r\n const port = serializedInputs[i];\r\n\r\n if (port.displayName) {\r\n this.inputs[i].displayName = port.displayName;\r\n }\r\n if (port.isExposedOnFrame) {\r\n this.inputs[i].isExposedOnFrame = port.isExposedOnFrame;\r\n this.inputs[i].exposedPortPosition = port.exposedPortPosition;\r\n }\r\n }\r\n }\r\n if (serializedOutputs) {\r\n for (let i = 0; i < Math.min(serializedOutputs.length, this.outputs.length); i++) {\r\n const port = serializedOutputs[i];\r\n if (port.displayName) {\r\n this.outputs[i].displayName = port.displayName;\r\n }\r\n if (port.isExposedOnFrame) {\r\n this.outputs[i].isExposedOnFrame = port.isExposedOnFrame;\r\n this.outputs[i].exposedPortPosition = port.exposedPortPosition;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Release resources\r\n */\r\n public dispose() {\r\n this.onCodeIsReadyObservable.clear();\r\n\r\n for (const input of this.inputs) {\r\n input.dispose();\r\n }\r\n\r\n for (const output of this.outputs) {\r\n output.dispose();\r\n }\r\n }\r\n}\r\n"]}
@@ -279,16 +279,24 @@ export declare class OpenPBRMaterialDefines extends OpenPBRMaterialDefines_base
279
279
  declare const OpenPBRMaterialBase_base: {
280
280
  new (...args: any[]): {
281
281
  _imageProcessingConfiguration: ImageProcessingConfiguration;
282
- imageProcessingConfiguration: ImageProcessingConfiguration;
282
+ get imageProcessingConfiguration(): ImageProcessingConfiguration;
283
+ set imageProcessingConfiguration(value: ImageProcessingConfiguration);
283
284
  _imageProcessingObserver: Nullable<import("../../index.js").Observer<ImageProcessingConfiguration>>;
284
285
  _attachImageProcessingConfiguration(configuration: Nullable<ImageProcessingConfiguration>): void;
285
- cameraColorCurvesEnabled: boolean;
286
- cameraColorGradingEnabled: boolean;
287
- cameraToneMappingEnabled: boolean;
288
- cameraExposure: number;
289
- cameraContrast: number;
290
- cameraColorGradingTexture: Nullable<BaseTexture>;
291
- cameraColorCurves: Nullable<import("../index.js").ColorCurves>;
286
+ get cameraColorCurvesEnabled(): boolean;
287
+ set cameraColorCurvesEnabled(value: boolean);
288
+ get cameraColorGradingEnabled(): boolean;
289
+ set cameraColorGradingEnabled(value: boolean);
290
+ get cameraToneMappingEnabled(): boolean;
291
+ set cameraToneMappingEnabled(value: boolean);
292
+ get cameraExposure(): number;
293
+ set cameraExposure(value: number);
294
+ get cameraContrast(): number;
295
+ set cameraContrast(value: number);
296
+ get cameraColorGradingTexture(): Nullable<BaseTexture>;
297
+ set cameraColorGradingTexture(value: Nullable<BaseTexture>);
298
+ get cameraColorCurves(): Nullable<import("../index.js").ColorCurves>;
299
+ set cameraColorCurves(value: Nullable<import("../index.js").ColorCurves>);
292
300
  };
293
301
  } & typeof PushMaterial;
294
302
  declare class OpenPBRMaterialBase extends OpenPBRMaterialBase_base {
@@ -258,16 +258,24 @@ export declare class PBRMaterialDefines extends PBRMaterialDefines_base {
258
258
  declare const PBRBaseMaterialBase_base: {
259
259
  new (...args: any[]): {
260
260
  _imageProcessingConfiguration: ImageProcessingConfiguration;
261
- imageProcessingConfiguration: ImageProcessingConfiguration;
261
+ get imageProcessingConfiguration(): ImageProcessingConfiguration;
262
+ set imageProcessingConfiguration(value: ImageProcessingConfiguration);
262
263
  _imageProcessingObserver: Nullable<import("../../index.js").Observer<ImageProcessingConfiguration>>;
263
264
  _attachImageProcessingConfiguration(configuration: Nullable<ImageProcessingConfiguration>): void;
264
- cameraColorCurvesEnabled: boolean;
265
- cameraColorGradingEnabled: boolean;
266
- cameraToneMappingEnabled: boolean;
267
- cameraExposure: number;
268
- cameraContrast: number;
269
- cameraColorGradingTexture: Nullable<BaseTexture>;
270
- cameraColorCurves: Nullable<import("../index.js").ColorCurves>;
265
+ get cameraColorCurvesEnabled(): boolean;
266
+ set cameraColorCurvesEnabled(value: boolean);
267
+ get cameraColorGradingEnabled(): boolean;
268
+ set cameraColorGradingEnabled(value: boolean);
269
+ get cameraToneMappingEnabled(): boolean;
270
+ set cameraToneMappingEnabled(value: boolean);
271
+ get cameraExposure(): number;
272
+ set cameraExposure(value: number);
273
+ get cameraContrast(): number;
274
+ set cameraContrast(value: number);
275
+ get cameraColorGradingTexture(): Nullable<BaseTexture>;
276
+ set cameraColorGradingTexture(value: Nullable<BaseTexture>);
277
+ get cameraColorCurves(): Nullable<import("../index.js").ColorCurves>;
278
+ set cameraColorCurves(value: Nullable<import("../index.js").ColorCurves>);
271
279
  };
272
280
  } & typeof PushMaterial;
273
281
  declare class PBRBaseMaterialBase extends PBRBaseMaterialBase_base {
@@ -4,4 +4,4 @@
4
4
  * implementation.
5
5
  */
6
6
  /** @internal */
7
- export declare function DecodeRunLength(source: ArrayBuffer): number[];
7
+ export declare function DecodeRunLength(source: ArrayBufferLike): number[];
@@ -1 +1 @@
1
- {"version":3,"file":"exrLoader.compression.rle.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,KAAK;AACL,0CAA0C;AAC1C,uBAAuB;AAEvB,qEAAqE;AACrE,8EAA8E;AAC9E,uEAAuE;AACvE,sEAAsE;AACtE,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,qDAAqD;AACrD,6EAA6E;AAC7E,8EAA8E;AAE9E,kFAAkF;AAClF,gFAAgF;AAChF,yEAAyE;AACzE,qEAAqE;AACrE,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,gFAAgF;AAChF,+DAA+D;AAC/D,KAAK;AAEL,8EAA8E;AAE9E,8EAA8E;AAC9E,KAAK;AACL,uEAAuE;AACvE,sBAAsB;AACtB,KAAK;AACL,0BAA0B;AAC1B,KAAK;AACL,wEAAwE;AACxE,4EAA4E;AAC5E,UAAU;AACV,4EAA4E;AAC5E,mEAAmE;AACnE,qEAAqE;AACrE,4EAA4E;AAC5E,mEAAmE;AACnE,mBAAmB;AACnB,2EAA2E;AAC3E,yEAAyE;AACzE,mEAAmE;AACnE,KAAK;AACL,yEAAyE;AACzE,uEAAuE;AACvE,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,sEAAsE;AACtE,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,KAAK;AACL,8EAA8E;AAE9E,8EAA8E;AAE9E,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,MAAmB;IAC/C,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;YAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,CAAC;YAEV,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["/**\r\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\r\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\r\n * implementation.\r\n */\r\n\r\n// /*\r\n// Copyright (c) 2014 - 2017, Syoyo Fujita\r\n// All rights reserved.\r\n\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n// * Neither the name of the Syoyo Fujita nor the\r\n// names of its contributors may be used to endorse or promote products\r\n// derived from this software without specific prior written permission.\r\n\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// */\r\n\r\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\r\n\r\n// ///////////////////////////////////////////////////////////////////////////\r\n// //\r\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\r\n// // Digital Ltd. LLC\r\n// //\r\n// // All rights reserved.\r\n// //\r\n// // Redistribution and use in source and binary forms, with or without\r\n// // modification, are permitted provided that the following conditions are\r\n// // met:\r\n// // * Redistributions of source code must retain the above copyright\r\n// // notice, this list of conditions and the following disclaimer.\r\n// // * Redistributions in binary form must reproduce the above\r\n// // copyright notice, this list of conditions and the following disclaimer\r\n// // in the documentation and/or other materials provided with the\r\n// // distribution.\r\n// // * Neither the name of Industrial Light & Magic nor the names of\r\n// // its contributors may be used to endorse or promote products derived\r\n// // from this software without specific prior written permission.\r\n// //\r\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// //\r\n// ///////////////////////////////////////////////////////////////////////////\r\n\r\n// // End of OpenEXR license -------------------------------------------------\r\n\r\n/** @internal */\r\nexport function DecodeRunLength(source: ArrayBuffer) {\r\n let size = source.byteLength;\r\n const out = [];\r\n let p = 0;\r\n\r\n const reader = new DataView(source);\r\n\r\n while (size > 0) {\r\n const l = reader.getInt8(p++);\r\n\r\n if (l < 0) {\r\n const count = -l;\r\n size -= count + 1;\r\n\r\n for (let i = 0; i < count; i++) {\r\n out.push(reader.getUint8(p++));\r\n }\r\n } else {\r\n const count = l;\r\n size -= 2;\r\n\r\n const value = reader.getUint8(p++);\r\n\r\n for (let i = 0; i < count + 1; i++) {\r\n out.push(value);\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n"]}
1
+ {"version":3,"file":"exrLoader.compression.rle.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,KAAK;AACL,0CAA0C;AAC1C,uBAAuB;AAEvB,qEAAqE;AACrE,8EAA8E;AAC9E,uEAAuE;AACvE,sEAAsE;AACtE,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,qDAAqD;AACrD,6EAA6E;AAC7E,8EAA8E;AAE9E,kFAAkF;AAClF,gFAAgF;AAChF,yEAAyE;AACzE,qEAAqE;AACrE,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,gFAAgF;AAChF,+DAA+D;AAC/D,KAAK;AAEL,8EAA8E;AAE9E,8EAA8E;AAC9E,KAAK;AACL,uEAAuE;AACvE,sBAAsB;AACtB,KAAK;AACL,0BAA0B;AAC1B,KAAK;AACL,wEAAwE;AACxE,4EAA4E;AAC5E,UAAU;AACV,4EAA4E;AAC5E,mEAAmE;AACnE,qEAAqE;AACrE,4EAA4E;AAC5E,mEAAmE;AACnE,mBAAmB;AACnB,2EAA2E;AAC3E,yEAAyE;AACzE,mEAAmE;AACnE,KAAK;AACL,yEAAyE;AACzE,uEAAuE;AACvE,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,sEAAsE;AACtE,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,KAAK;AACL,8EAA8E;AAE9E,8EAA8E;AAE9E,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,MAAuB;IACnD,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;YAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,CAAC;YAEV,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["/**\r\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\r\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\r\n * implementation.\r\n */\r\n\r\n// /*\r\n// Copyright (c) 2014 - 2017, Syoyo Fujita\r\n// All rights reserved.\r\n\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n// * Neither the name of the Syoyo Fujita nor the\r\n// names of its contributors may be used to endorse or promote products\r\n// derived from this software without specific prior written permission.\r\n\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// */\r\n\r\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\r\n\r\n// ///////////////////////////////////////////////////////////////////////////\r\n// //\r\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\r\n// // Digital Ltd. LLC\r\n// //\r\n// // All rights reserved.\r\n// //\r\n// // Redistribution and use in source and binary forms, with or without\r\n// // modification, are permitted provided that the following conditions are\r\n// // met:\r\n// // * Redistributions of source code must retain the above copyright\r\n// // notice, this list of conditions and the following disclaimer.\r\n// // * Redistributions in binary form must reproduce the above\r\n// // copyright notice, this list of conditions and the following disclaimer\r\n// // in the documentation and/or other materials provided with the\r\n// // distribution.\r\n// // * Neither the name of Industrial Light & Magic nor the names of\r\n// // its contributors may be used to endorse or promote products derived\r\n// // from this software without specific prior written permission.\r\n// //\r\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// //\r\n// ///////////////////////////////////////////////////////////////////////////\r\n\r\n// // End of OpenEXR license -------------------------------------------------\r\n\r\n/** @internal */\r\nexport function DecodeRunLength(source: ArrayBufferLike) {\r\n let size = source.byteLength;\r\n const out = [];\r\n let p = 0;\r\n\r\n const reader = new DataView(source);\r\n\r\n while (size > 0) {\r\n const l = reader.getInt8(p++);\r\n\r\n if (l < 0) {\r\n const count = -l;\r\n size -= count + 1;\r\n\r\n for (let i = 0; i < count; i++) {\r\n out.push(reader.getUint8(p++));\r\n }\r\n } else {\r\n const count = l;\r\n size -= 2;\r\n\r\n const value = reader.getUint8(p++);\r\n\r\n for (let i = 0; i < count + 1; i++) {\r\n out.push(value);\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n"]}
@@ -24,7 +24,7 @@ export interface DataCursor {
24
24
  * @param offset current offset in the buffer
25
25
  * @returns a string
26
26
  */
27
- export declare function ParseNullTerminatedString(buffer: ArrayBuffer, offset: DataCursor): string;
27
+ export declare function ParseNullTerminatedString(buffer: ArrayBufferLike, offset: DataCursor): string;
28
28
  /**
29
29
  * Parse an int32 from the buffer
30
30
  * @param dataView dataview on the data
@@ -1 +1 @@
1
- {"version":3,"file":"exrLoader.core.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Textures/Loaders/EXR/exrLoader.core.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clamp } from \"core/Maths/math.scalar.functions\";\r\nimport { FLOAT32_SIZE, INT16_SIZE, INT32_SIZE, INT8_SIZE, ULONG_SIZE } from \"./exrLoader.interfaces\";\r\n\r\n/**\r\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\r\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\r\n * implementation.\r\n */\r\n\r\n// /*\r\n// Copyright (c) 2014 - 2017, Syoyo Fujita\r\n// All rights reserved.\r\n\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n// * Neither the name of the Syoyo Fujita nor the\r\n// names of its contributors may be used to endorse or promote products\r\n// derived from this software without specific prior written permission.\r\n\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// */\r\n\r\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\r\n\r\n// ///////////////////////////////////////////////////////////////////////////\r\n// //\r\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\r\n// // Digital Ltd. LLC\r\n// //\r\n// // All rights reserved.\r\n// //\r\n// // Redistribution and use in source and binary forms, with or without\r\n// // modification, are permitted provided that the following conditions are\r\n// // met:\r\n// // * Redistributions of source code must retain the above copyright\r\n// // notice, this list of conditions and the following disclaimer.\r\n// // * Redistributions in binary form must reproduce the above\r\n// // copyright notice, this list of conditions and the following disclaimer\r\n// // in the documentation and/or other materials provided with the\r\n// // distribution.\r\n// // * Neither the name of Industrial Light & Magic nor the names of\r\n// // its contributors may be used to endorse or promote products derived\r\n// // from this software without specific prior written permission.\r\n// //\r\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// //\r\n// ///////////////////////////////////////////////////////////////////////////\r\n\r\n// // End of OpenEXR license -------------------------------------------------\r\n\r\nexport enum CompressionCodes {\r\n NO_COMPRESSION,\r\n RLE_COMPRESSION,\r\n ZIPS_COMPRESSION,\r\n ZIP_COMPRESSION,\r\n PIZ_COMPRESSION,\r\n PXR24_COMPRESSION,\r\n}\r\n\r\nenum LineOrders {\r\n INCREASING_Y,\r\n DECREASING_Y,\r\n}\r\n\r\n/**\r\n * Interface used to define the cursor position in the data\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface DataCursor {\r\n /** Curosr position */\r\n value: number;\r\n}\r\n\r\nconst Tables = GenerateTables();\r\n\r\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\r\nfunction GenerateTables() {\r\n // float32 to float16 helpers\r\n\r\n const buffer = new ArrayBuffer(4);\r\n const floatView = new Float32Array(buffer);\r\n const uint32View = new Uint32Array(buffer);\r\n\r\n const baseTable = new Uint32Array(512);\r\n const shiftTable = new Uint32Array(512);\r\n\r\n for (let i = 0; i < 256; ++i) {\r\n const e = i - 127;\r\n\r\n // very small number (0, -0)\r\n\r\n if (e < -27) {\r\n baseTable[i] = 0x0000;\r\n baseTable[i | 0x100] = 0x8000;\r\n shiftTable[i] = 24;\r\n shiftTable[i | 0x100] = 24;\r\n\r\n // small number (denorm)\r\n } else if (e < -14) {\r\n baseTable[i] = 0x0400 >> (-e - 14);\r\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\r\n shiftTable[i] = -e - 1;\r\n shiftTable[i | 0x100] = -e - 1;\r\n\r\n // normal number\r\n } else if (e <= 15) {\r\n baseTable[i] = (e + 15) << 10;\r\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\r\n shiftTable[i] = 13;\r\n shiftTable[i | 0x100] = 13;\r\n\r\n // large number (Infinity, -Infinity)\r\n } else if (e < 128) {\r\n baseTable[i] = 0x7c00;\r\n baseTable[i | 0x100] = 0xfc00;\r\n shiftTable[i] = 24;\r\n shiftTable[i | 0x100] = 24;\r\n\r\n // stay (NaN, Infinity, -Infinity)\r\n } else {\r\n baseTable[i] = 0x7c00;\r\n baseTable[i | 0x100] = 0xfc00;\r\n shiftTable[i] = 13;\r\n shiftTable[i | 0x100] = 13;\r\n }\r\n }\r\n\r\n // float16 to float32 helpers\r\n const mantissaTable = new Uint32Array(2048);\r\n const exponentTable = new Uint32Array(64);\r\n const offsetTable = new Uint32Array(64);\r\n\r\n for (let i = 1; i < 1024; ++i) {\r\n let m = i << 13; // zero pad mantissa bits\r\n let e = 0; // zero exponent\r\n\r\n // normalized\r\n while ((m & 0x00800000) === 0) {\r\n m <<= 1;\r\n e -= 0x00800000; // decrement exponent\r\n }\r\n\r\n m &= ~0x00800000; // clear leading 1 bit\r\n e += 0x38800000; // adjust bias\r\n\r\n mantissaTable[i] = m | e;\r\n }\r\n\r\n for (let i = 1024; i < 2048; ++i) {\r\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\r\n }\r\n\r\n for (let i = 1; i < 31; ++i) {\r\n exponentTable[i] = i << 23;\r\n }\r\n\r\n exponentTable[31] = 0x47800000;\r\n exponentTable[32] = 0x80000000;\r\n\r\n for (let i = 33; i < 63; ++i) {\r\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\r\n }\r\n\r\n exponentTable[63] = 0xc7800000;\r\n\r\n for (let i = 1; i < 64; ++i) {\r\n if (i !== 32) {\r\n offsetTable[i] = 1024;\r\n }\r\n }\r\n\r\n return {\r\n floatView: floatView,\r\n uint32View: uint32View,\r\n baseTable: baseTable,\r\n shiftTable: shiftTable,\r\n mantissaTable: mantissaTable,\r\n exponentTable: exponentTable,\r\n offsetTable: offsetTable,\r\n };\r\n}\r\n\r\n/**\r\n * Parse a null terminated string from the buffer\r\n * @param buffer buffer to read from\r\n * @param offset current offset in the buffer\r\n * @returns a string\r\n */\r\nexport function ParseNullTerminatedString(buffer: ArrayBuffer, offset: DataCursor) {\r\n const uintBuffer = new Uint8Array(buffer);\r\n let endOffset = 0;\r\n\r\n while (uintBuffer[offset.value + endOffset] != 0) {\r\n endOffset += 1;\r\n }\r\n\r\n const stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));\r\n\r\n offset.value = offset.value + endOffset + 1;\r\n\r\n return stringValue;\r\n}\r\n\r\n/**\r\n * Parse an int32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an int32\r\n */\r\nexport function ParseInt32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getInt32(offset.value, true);\r\n\r\n offset.value += INT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint32 from the buffer\r\n * @param dataView data view to read from\r\n * @param offset offset in the data view\r\n * @returns an uint32\r\n */\r\nexport function ParseUint32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint32(offset.value, true);\r\n\r\n offset.value += INT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint8 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an uint8\r\n */\r\nexport function ParseUint8(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint8(offset.value);\r\n\r\n offset.value += INT8_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint16 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an uint16\r\n */\r\nexport function ParseUint16(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint16(offset.value, true);\r\n\r\n offset.value += INT16_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint8 from an array buffer\r\n * @param array array buffer\r\n * @param offset current offset in the data view\r\n * @returns an uint16\r\n */\r\nexport function ParseUint8Array(array: Uint8Array, offset: DataCursor) {\r\n const value = array[offset.value];\r\n\r\n offset.value += INT8_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an int64 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an int64\r\n */\r\nexport function ParseInt64(dataView: DataView, offset: DataCursor) {\r\n let int;\r\n\r\n if (\"getBigInt64\" in DataView.prototype) {\r\n int = Number(dataView.getBigInt64(offset.value, true));\r\n } else {\r\n int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);\r\n }\r\n\r\n offset.value += ULONG_SIZE;\r\n\r\n return int;\r\n}\r\n\r\n/**\r\n * Parse a float32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float32\r\n */\r\nexport function ParseFloat32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getFloat32(offset.value, true);\r\n\r\n offset.value += FLOAT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse a float16 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float16\r\n */\r\nexport function ParseFloat16(dataView: DataView, offset: DataCursor) {\r\n return DecodeFloat16(ParseUint16(dataView, offset));\r\n}\r\n\r\nfunction DecodeFloat16(binary: number) {\r\n const exponent = (binary & 0x7c00) >> 10;\r\n const fraction = binary & 0x03ff;\r\n\r\n return (\r\n (binary >> 15 ? -1 : 1) *\r\n (exponent ? (exponent === 0x1f ? (fraction ? NaN : Infinity) : Math.pow(2, exponent - 15) * (1 + fraction / 0x400)) : 6.103515625e-5 * (fraction / 0x400))\r\n );\r\n}\r\n\r\nfunction ToHalfFloat(value: number) {\r\n if (Math.abs(value) > 65504) {\r\n throw new Error(\"Value out of range.Consider using float instead of half-float.\");\r\n }\r\n\r\n value = Clamp(value, -65504, 65504);\r\n\r\n Tables.floatView[0] = value;\r\n const f = Tables.uint32View[0];\r\n const e = (f >> 23) & 0x1ff;\r\n return Tables.baseTable[e] + ((f & 0x007fffff) >> Tables.shiftTable[e]);\r\n}\r\n\r\n/**\r\n * Decode a float32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float32\r\n */\r\nexport function DecodeFloat32(dataView: DataView, offset: DataCursor) {\r\n return ToHalfFloat(ParseFloat32(dataView, offset));\r\n}\r\n\r\nfunction ParseFixedLengthString(buffer: ArrayBuffer, offset: DataCursor, size: number) {\r\n const stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));\r\n\r\n offset.value = offset.value + size;\r\n\r\n return stringValue;\r\n}\r\n\r\nfunction ParseRational(dataView: DataView, offset: DataCursor) {\r\n const x = ParseInt32(dataView, offset);\r\n const y = ParseUint32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseTimecode(dataView: DataView, offset: DataCursor) {\r\n const x = ParseUint32(dataView, offset);\r\n const y = ParseUint32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseV2f(dataView: DataView, offset: DataCursor) {\r\n const x = ParseFloat32(dataView, offset);\r\n const y = ParseFloat32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseV3f(dataView: DataView, offset: DataCursor) {\r\n const x = ParseFloat32(dataView, offset);\r\n const y = ParseFloat32(dataView, offset);\r\n const z = ParseFloat32(dataView, offset);\r\n\r\n return [x, y, z];\r\n}\r\n\r\nfunction ParseChlist(dataView: DataView, offset: DataCursor, size: number) {\r\n const startOffset = offset.value;\r\n const channels = [];\r\n\r\n while (offset.value < startOffset + size - 1) {\r\n const name = ParseNullTerminatedString(dataView.buffer, offset);\r\n const pixelType = ParseInt32(dataView, offset);\r\n const pLinear = ParseUint8(dataView, offset);\r\n offset.value += 3; // reserved, three chars\r\n const xSampling = ParseInt32(dataView, offset);\r\n const ySampling = ParseInt32(dataView, offset);\r\n\r\n channels.push({\r\n name: name,\r\n pixelType: pixelType,\r\n pLinear: pLinear,\r\n xSampling: xSampling,\r\n ySampling: ySampling,\r\n });\r\n }\r\n\r\n offset.value += 1;\r\n\r\n return channels;\r\n}\r\n\r\nfunction ParseChromaticities(dataView: DataView, offset: DataCursor) {\r\n const redX = ParseFloat32(dataView, offset);\r\n const redY = ParseFloat32(dataView, offset);\r\n const greenX = ParseFloat32(dataView, offset);\r\n const greenY = ParseFloat32(dataView, offset);\r\n const blueX = ParseFloat32(dataView, offset);\r\n const blueY = ParseFloat32(dataView, offset);\r\n const whiteX = ParseFloat32(dataView, offset);\r\n const whiteY = ParseFloat32(dataView, offset);\r\n\r\n return { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\r\n}\r\n\r\nfunction ParseCompression(dataView: DataView, offset: DataCursor) {\r\n return ParseUint8(dataView, offset);\r\n}\r\n\r\nfunction ParseBox2i(dataView: DataView, offset: DataCursor) {\r\n const xMin = ParseInt32(dataView, offset);\r\n const yMin = ParseInt32(dataView, offset);\r\n const xMax = ParseInt32(dataView, offset);\r\n const yMax = ParseInt32(dataView, offset);\r\n\r\n return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\r\n}\r\n\r\nfunction ParseLineOrder(dataView: DataView, offset: DataCursor) {\r\n const lineOrder = ParseUint8(dataView, offset);\r\n\r\n return LineOrders[lineOrder];\r\n}\r\n\r\n/**\r\n * Parse a value from the data view\r\n * @param dataView defines the data view to read from\r\n * @param offset defines the current offset in the data view\r\n * @param type defines the type of the value to read\r\n * @param size defines the size of the value to read\r\n * @returns the parsed value\r\n */\r\nexport function ParseValue(dataView: DataView, offset: DataCursor, type: string, size: number) {\r\n switch (type) {\r\n case \"string\":\r\n case \"stringvector\":\r\n case \"iccProfile\":\r\n return ParseFixedLengthString(dataView.buffer, offset, size);\r\n case \"chlist\":\r\n return ParseChlist(dataView, offset, size);\r\n case \"chromaticities\":\r\n return ParseChromaticities(dataView, offset);\r\n case \"compression\":\r\n return ParseCompression(dataView, offset);\r\n case \"box2i\":\r\n return ParseBox2i(dataView, offset);\r\n case \"lineOrder\":\r\n return ParseLineOrder(dataView, offset);\r\n case \"float\":\r\n return ParseFloat32(dataView, offset);\r\n case \"v2f\":\r\n return ParseV2f(dataView, offset);\r\n case \"v3f\":\r\n return ParseV3f(dataView, offset);\r\n case \"int\":\r\n return ParseInt32(dataView, offset);\r\n case \"rational\":\r\n return ParseRational(dataView, offset);\r\n case \"timecode\":\r\n return ParseTimecode(dataView, offset);\r\n case \"preview\":\r\n offset.value += size;\r\n return \"skipped\";\r\n default:\r\n offset.value += size;\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Revert the endianness of the data\r\n * @param source defines the source\r\n */\r\nexport function Predictor(source: Uint8Array) {\r\n for (let t = 1; t < source.length; t++) {\r\n const d = source[t - 1] + source[t] - 128;\r\n source[t] = d;\r\n }\r\n}\r\n\r\n/**\r\n * Interleave pixels\r\n * @param source defines the data source\r\n * @param out defines the output\r\n */\r\nexport function InterleaveScalar(source: Uint8Array, out: Uint8Array) {\r\n let t1 = 0;\r\n let t2 = Math.floor((source.length + 1) / 2);\r\n let s = 0;\r\n const stop = source.length - 1;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n if (s > stop) {\r\n break;\r\n }\r\n out[s++] = source[t1++];\r\n\r\n if (s > stop) {\r\n break;\r\n }\r\n out[s++] = source[t2++];\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"exrLoader.core.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Textures/Loaders/EXR/exrLoader.core.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clamp } from \"core/Maths/math.scalar.functions\";\r\nimport { FLOAT32_SIZE, INT16_SIZE, INT32_SIZE, INT8_SIZE, ULONG_SIZE } from \"./exrLoader.interfaces\";\r\n\r\n/**\r\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\r\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\r\n * implementation.\r\n */\r\n\r\n// /*\r\n// Copyright (c) 2014 - 2017, Syoyo Fujita\r\n// All rights reserved.\r\n\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n// * Neither the name of the Syoyo Fujita nor the\r\n// names of its contributors may be used to endorse or promote products\r\n// derived from this software without specific prior written permission.\r\n\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// */\r\n\r\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\r\n\r\n// ///////////////////////////////////////////////////////////////////////////\r\n// //\r\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\r\n// // Digital Ltd. LLC\r\n// //\r\n// // All rights reserved.\r\n// //\r\n// // Redistribution and use in source and binary forms, with or without\r\n// // modification, are permitted provided that the following conditions are\r\n// // met:\r\n// // * Redistributions of source code must retain the above copyright\r\n// // notice, this list of conditions and the following disclaimer.\r\n// // * Redistributions in binary form must reproduce the above\r\n// // copyright notice, this list of conditions and the following disclaimer\r\n// // in the documentation and/or other materials provided with the\r\n// // distribution.\r\n// // * Neither the name of Industrial Light & Magic nor the names of\r\n// // its contributors may be used to endorse or promote products derived\r\n// // from this software without specific prior written permission.\r\n// //\r\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// //\r\n// ///////////////////////////////////////////////////////////////////////////\r\n\r\n// // End of OpenEXR license -------------------------------------------------\r\n\r\nexport enum CompressionCodes {\r\n NO_COMPRESSION,\r\n RLE_COMPRESSION,\r\n ZIPS_COMPRESSION,\r\n ZIP_COMPRESSION,\r\n PIZ_COMPRESSION,\r\n PXR24_COMPRESSION,\r\n}\r\n\r\nenum LineOrders {\r\n INCREASING_Y,\r\n DECREASING_Y,\r\n}\r\n\r\n/**\r\n * Interface used to define the cursor position in the data\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface DataCursor {\r\n /** Curosr position */\r\n value: number;\r\n}\r\n\r\nconst Tables = GenerateTables();\r\n\r\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\r\nfunction GenerateTables() {\r\n // float32 to float16 helpers\r\n\r\n const buffer = new ArrayBuffer(4);\r\n const floatView = new Float32Array(buffer);\r\n const uint32View = new Uint32Array(buffer);\r\n\r\n const baseTable = new Uint32Array(512);\r\n const shiftTable = new Uint32Array(512);\r\n\r\n for (let i = 0; i < 256; ++i) {\r\n const e = i - 127;\r\n\r\n // very small number (0, -0)\r\n\r\n if (e < -27) {\r\n baseTable[i] = 0x0000;\r\n baseTable[i | 0x100] = 0x8000;\r\n shiftTable[i] = 24;\r\n shiftTable[i | 0x100] = 24;\r\n\r\n // small number (denorm)\r\n } else if (e < -14) {\r\n baseTable[i] = 0x0400 >> (-e - 14);\r\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\r\n shiftTable[i] = -e - 1;\r\n shiftTable[i | 0x100] = -e - 1;\r\n\r\n // normal number\r\n } else if (e <= 15) {\r\n baseTable[i] = (e + 15) << 10;\r\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\r\n shiftTable[i] = 13;\r\n shiftTable[i | 0x100] = 13;\r\n\r\n // large number (Infinity, -Infinity)\r\n } else if (e < 128) {\r\n baseTable[i] = 0x7c00;\r\n baseTable[i | 0x100] = 0xfc00;\r\n shiftTable[i] = 24;\r\n shiftTable[i | 0x100] = 24;\r\n\r\n // stay (NaN, Infinity, -Infinity)\r\n } else {\r\n baseTable[i] = 0x7c00;\r\n baseTable[i | 0x100] = 0xfc00;\r\n shiftTable[i] = 13;\r\n shiftTable[i | 0x100] = 13;\r\n }\r\n }\r\n\r\n // float16 to float32 helpers\r\n const mantissaTable = new Uint32Array(2048);\r\n const exponentTable = new Uint32Array(64);\r\n const offsetTable = new Uint32Array(64);\r\n\r\n for (let i = 1; i < 1024; ++i) {\r\n let m = i << 13; // zero pad mantissa bits\r\n let e = 0; // zero exponent\r\n\r\n // normalized\r\n while ((m & 0x00800000) === 0) {\r\n m <<= 1;\r\n e -= 0x00800000; // decrement exponent\r\n }\r\n\r\n m &= ~0x00800000; // clear leading 1 bit\r\n e += 0x38800000; // adjust bias\r\n\r\n mantissaTable[i] = m | e;\r\n }\r\n\r\n for (let i = 1024; i < 2048; ++i) {\r\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\r\n }\r\n\r\n for (let i = 1; i < 31; ++i) {\r\n exponentTable[i] = i << 23;\r\n }\r\n\r\n exponentTable[31] = 0x47800000;\r\n exponentTable[32] = 0x80000000;\r\n\r\n for (let i = 33; i < 63; ++i) {\r\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\r\n }\r\n\r\n exponentTable[63] = 0xc7800000;\r\n\r\n for (let i = 1; i < 64; ++i) {\r\n if (i !== 32) {\r\n offsetTable[i] = 1024;\r\n }\r\n }\r\n\r\n return {\r\n floatView: floatView,\r\n uint32View: uint32View,\r\n baseTable: baseTable,\r\n shiftTable: shiftTable,\r\n mantissaTable: mantissaTable,\r\n exponentTable: exponentTable,\r\n offsetTable: offsetTable,\r\n };\r\n}\r\n\r\n/**\r\n * Parse a null terminated string from the buffer\r\n * @param buffer buffer to read from\r\n * @param offset current offset in the buffer\r\n * @returns a string\r\n */\r\nexport function ParseNullTerminatedString(buffer: ArrayBufferLike, offset: DataCursor) {\r\n const uintBuffer = new Uint8Array(buffer);\r\n let endOffset = 0;\r\n\r\n while (uintBuffer[offset.value + endOffset] != 0) {\r\n endOffset += 1;\r\n }\r\n\r\n const stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));\r\n\r\n offset.value = offset.value + endOffset + 1;\r\n\r\n return stringValue;\r\n}\r\n\r\n/**\r\n * Parse an int32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an int32\r\n */\r\nexport function ParseInt32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getInt32(offset.value, true);\r\n\r\n offset.value += INT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint32 from the buffer\r\n * @param dataView data view to read from\r\n * @param offset offset in the data view\r\n * @returns an uint32\r\n */\r\nexport function ParseUint32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint32(offset.value, true);\r\n\r\n offset.value += INT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint8 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an uint8\r\n */\r\nexport function ParseUint8(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint8(offset.value);\r\n\r\n offset.value += INT8_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint16 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an uint16\r\n */\r\nexport function ParseUint16(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint16(offset.value, true);\r\n\r\n offset.value += INT16_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint8 from an array buffer\r\n * @param array array buffer\r\n * @param offset current offset in the data view\r\n * @returns an uint16\r\n */\r\nexport function ParseUint8Array(array: Uint8Array, offset: DataCursor) {\r\n const value = array[offset.value];\r\n\r\n offset.value += INT8_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an int64 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an int64\r\n */\r\nexport function ParseInt64(dataView: DataView, offset: DataCursor) {\r\n let int;\r\n\r\n if (\"getBigInt64\" in DataView.prototype) {\r\n int = Number(dataView.getBigInt64(offset.value, true));\r\n } else {\r\n int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);\r\n }\r\n\r\n offset.value += ULONG_SIZE;\r\n\r\n return int;\r\n}\r\n\r\n/**\r\n * Parse a float32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float32\r\n */\r\nexport function ParseFloat32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getFloat32(offset.value, true);\r\n\r\n offset.value += FLOAT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse a float16 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float16\r\n */\r\nexport function ParseFloat16(dataView: DataView, offset: DataCursor) {\r\n return DecodeFloat16(ParseUint16(dataView, offset));\r\n}\r\n\r\nfunction DecodeFloat16(binary: number) {\r\n const exponent = (binary & 0x7c00) >> 10;\r\n const fraction = binary & 0x03ff;\r\n\r\n return (\r\n (binary >> 15 ? -1 : 1) *\r\n (exponent ? (exponent === 0x1f ? (fraction ? NaN : Infinity) : Math.pow(2, exponent - 15) * (1 + fraction / 0x400)) : 6.103515625e-5 * (fraction / 0x400))\r\n );\r\n}\r\n\r\nfunction ToHalfFloat(value: number) {\r\n if (Math.abs(value) > 65504) {\r\n throw new Error(\"Value out of range.Consider using float instead of half-float.\");\r\n }\r\n\r\n value = Clamp(value, -65504, 65504);\r\n\r\n Tables.floatView[0] = value;\r\n const f = Tables.uint32View[0];\r\n const e = (f >> 23) & 0x1ff;\r\n return Tables.baseTable[e] + ((f & 0x007fffff) >> Tables.shiftTable[e]);\r\n}\r\n\r\n/**\r\n * Decode a float32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float32\r\n */\r\nexport function DecodeFloat32(dataView: DataView, offset: DataCursor) {\r\n return ToHalfFloat(ParseFloat32(dataView, offset));\r\n}\r\n\r\nfunction ParseFixedLengthString(buffer: ArrayBufferLike, offset: DataCursor, size: number) {\r\n const stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));\r\n\r\n offset.value = offset.value + size;\r\n\r\n return stringValue;\r\n}\r\n\r\nfunction ParseRational(dataView: DataView, offset: DataCursor) {\r\n const x = ParseInt32(dataView, offset);\r\n const y = ParseUint32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseTimecode(dataView: DataView, offset: DataCursor) {\r\n const x = ParseUint32(dataView, offset);\r\n const y = ParseUint32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseV2f(dataView: DataView, offset: DataCursor) {\r\n const x = ParseFloat32(dataView, offset);\r\n const y = ParseFloat32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseV3f(dataView: DataView, offset: DataCursor) {\r\n const x = ParseFloat32(dataView, offset);\r\n const y = ParseFloat32(dataView, offset);\r\n const z = ParseFloat32(dataView, offset);\r\n\r\n return [x, y, z];\r\n}\r\n\r\nfunction ParseChlist(dataView: DataView, offset: DataCursor, size: number) {\r\n const startOffset = offset.value;\r\n const channels = [];\r\n\r\n while (offset.value < startOffset + size - 1) {\r\n const name = ParseNullTerminatedString(dataView.buffer, offset);\r\n const pixelType = ParseInt32(dataView, offset);\r\n const pLinear = ParseUint8(dataView, offset);\r\n offset.value += 3; // reserved, three chars\r\n const xSampling = ParseInt32(dataView, offset);\r\n const ySampling = ParseInt32(dataView, offset);\r\n\r\n channels.push({\r\n name: name,\r\n pixelType: pixelType,\r\n pLinear: pLinear,\r\n xSampling: xSampling,\r\n ySampling: ySampling,\r\n });\r\n }\r\n\r\n offset.value += 1;\r\n\r\n return channels;\r\n}\r\n\r\nfunction ParseChromaticities(dataView: DataView, offset: DataCursor) {\r\n const redX = ParseFloat32(dataView, offset);\r\n const redY = ParseFloat32(dataView, offset);\r\n const greenX = ParseFloat32(dataView, offset);\r\n const greenY = ParseFloat32(dataView, offset);\r\n const blueX = ParseFloat32(dataView, offset);\r\n const blueY = ParseFloat32(dataView, offset);\r\n const whiteX = ParseFloat32(dataView, offset);\r\n const whiteY = ParseFloat32(dataView, offset);\r\n\r\n return { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\r\n}\r\n\r\nfunction ParseCompression(dataView: DataView, offset: DataCursor) {\r\n return ParseUint8(dataView, offset);\r\n}\r\n\r\nfunction ParseBox2i(dataView: DataView, offset: DataCursor) {\r\n const xMin = ParseInt32(dataView, offset);\r\n const yMin = ParseInt32(dataView, offset);\r\n const xMax = ParseInt32(dataView, offset);\r\n const yMax = ParseInt32(dataView, offset);\r\n\r\n return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\r\n}\r\n\r\nfunction ParseLineOrder(dataView: DataView, offset: DataCursor) {\r\n const lineOrder = ParseUint8(dataView, offset);\r\n\r\n return LineOrders[lineOrder];\r\n}\r\n\r\n/**\r\n * Parse a value from the data view\r\n * @param dataView defines the data view to read from\r\n * @param offset defines the current offset in the data view\r\n * @param type defines the type of the value to read\r\n * @param size defines the size of the value to read\r\n * @returns the parsed value\r\n */\r\nexport function ParseValue(dataView: DataView, offset: DataCursor, type: string, size: number) {\r\n switch (type) {\r\n case \"string\":\r\n case \"stringvector\":\r\n case \"iccProfile\":\r\n return ParseFixedLengthString(dataView.buffer, offset, size);\r\n case \"chlist\":\r\n return ParseChlist(dataView, offset, size);\r\n case \"chromaticities\":\r\n return ParseChromaticities(dataView, offset);\r\n case \"compression\":\r\n return ParseCompression(dataView, offset);\r\n case \"box2i\":\r\n return ParseBox2i(dataView, offset);\r\n case \"lineOrder\":\r\n return ParseLineOrder(dataView, offset);\r\n case \"float\":\r\n return ParseFloat32(dataView, offset);\r\n case \"v2f\":\r\n return ParseV2f(dataView, offset);\r\n case \"v3f\":\r\n return ParseV3f(dataView, offset);\r\n case \"int\":\r\n return ParseInt32(dataView, offset);\r\n case \"rational\":\r\n return ParseRational(dataView, offset);\r\n case \"timecode\":\r\n return ParseTimecode(dataView, offset);\r\n case \"preview\":\r\n offset.value += size;\r\n return \"skipped\";\r\n default:\r\n offset.value += size;\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Revert the endianness of the data\r\n * @param source defines the source\r\n */\r\nexport function Predictor(source: Uint8Array) {\r\n for (let t = 1; t < source.length; t++) {\r\n const d = source[t - 1] + source[t] - 128;\r\n source[t] = d;\r\n }\r\n}\r\n\r\n/**\r\n * Interleave pixels\r\n * @param source defines the data source\r\n * @param out defines the output\r\n */\r\nexport function InterleaveScalar(source: Uint8Array, out: Uint8Array) {\r\n let t1 = 0;\r\n let t2 = Math.floor((source.length + 1) / 2);\r\n let s = 0;\r\n const stop = source.length - 1;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n if (s > stop) {\r\n break;\r\n }\r\n out[s++] = source[t1++];\r\n\r\n if (s > stop) {\r\n break;\r\n }\r\n out[s++] = source[t2++];\r\n }\r\n}\r\n"]}
@@ -114,6 +114,12 @@ export declare class InternalTexture extends TextureSampler {
114
114
  */
115
115
  get useMipMaps(): Nullable<boolean>;
116
116
  set useMipMaps(value: Nullable<boolean>);
117
+ /**
118
+ * Gets the number of mip levels for this texture.
119
+ * Note: This property has the correct value only if the texture was created through
120
+ * `createRawTexture` or `createRawTexture2DArray`.
121
+ */
122
+ mipLevelCount: number;
117
123
  /**
118
124
  * Gets the number of samples used by the texture (WebGL2+ only)
119
125
  */