6fd0f10f11a29e0b534ed755469f1258e68e3f9f35f76b28afeea40efb9773de.json 41 KB

1
  1. {"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { ComputeShader } from \"../../Compute/computeShader.js\";\nimport { StorageBuffer } from \"../../Buffers/storageBuffer.js\";\nimport { VertexBuffer } from \"../../Buffers/buffer.js\";\nimport { Vector3 } from \"../../Maths/math.vector.js\";\nimport { UniformBuffer } from \"../../Materials/uniformBuffer.js\";\nimport \"../../ShadersWGSL/boundingInfo.compute.js\";\n/** @internal */\nexport class ComputeShaderBoundingHelper {\n /**\n * Creates a new ComputeShaderBoundingHelper\n * @param engine defines the engine to use\n */\n constructor(engine) {\n this._computeShadersCache = {};\n this._positionBuffers = {};\n this._indexBuffers = {};\n this._weightBuffers = {};\n this._indexExtraBuffers = {};\n this._weightExtraBuffers = {};\n this._morphTargetInfluenceBuffers = {};\n this._morphTargetTextureIndexBuffers = {};\n this._ubos = [];\n this._uboIndex = 0;\n this._processedMeshes = [];\n this._computeShaders = [];\n this._uniqueComputeShaders = new Set();\n this._resultBuffers = [];\n this._engine = engine;\n }\n _getComputeShader(defines, hasBones, hasMorphs) {\n let computeShader;\n const join = defines.join(\"\\n\");\n if (!this._computeShadersCache[join]) {\n const bindingsMapping = {\n positionBuffer: {\n group: 0,\n binding: 0\n },\n resultBuffer: {\n group: 0,\n binding: 1\n },\n settings: {\n group: 0,\n binding: 7\n }\n };\n if (hasBones) {\n bindingsMapping.boneSampler = {\n group: 0,\n binding: 2\n };\n bindingsMapping.indexBuffer = {\n group: 0,\n binding: 3\n };\n bindingsMapping.weightBuffer = {\n group: 0,\n binding: 4\n };\n bindingsMapping.indexExtraBuffer = {\n group: 0,\n binding: 5\n };\n bindingsMapping.weightExtraBuffer = {\n group: 0,\n binding: 6\n };\n }\n if (hasMorphs) {\n bindingsMapping.morphTargets = {\n group: 0,\n binding: 8\n };\n bindingsMapping.morphTargetInfluences = {\n group: 0,\n binding: 9\n };\n bindingsMapping.morphTargetTextureIndices = {\n group: 0,\n binding: 10\n };\n }\n computeShader = new ComputeShader(`boundingInfoCompute${hasBones ? \"_bones\" : \"\"}${hasMorphs ? \"_morphs\" : \"\"}`, this._engine, \"boundingInfo\", {\n bindingsMapping,\n defines: defines\n });\n this._computeShadersCache[join] = computeShader;\n } else {\n computeShader = this._computeShadersCache[join];\n }\n return computeShader;\n }\n _getUBO() {\n if (this._uboIndex >= this._ubos.length) {\n const ubo = new UniformBuffer(this._engine);\n ubo.addFloat3(\"morphTargetTextureInfo\", 0, 0, 0);\n ubo.addUniform(\"morphTargetCount\", 1);\n ubo.addUniform(\"indexResult\", 1);\n this._ubos.push(ubo);\n }\n return this._ubos[this._uboIndex++];\n }\n _extractDataAndLink(computeShader, mesh, kind, stride, name, storageUnit) {\n let buffer;\n const vertexCount = mesh.getTotalVertices();\n if (!storageUnit[mesh.uniqueId]) {\n var _mesh$getVertexBuffer;\n const dataArray = (_mesh$getVertexBuffer = mesh.getVertexBuffer(kind)) === null || _mesh$getVertexBuffer === void 0 ? void 0 : _mesh$getVertexBuffer.getFloatData(vertexCount);\n buffer = new StorageBuffer(this._engine, Float32Array.BYTES_PER_ELEMENT * vertexCount * stride);\n buffer.update(dataArray);\n storageUnit[mesh.uniqueId] = buffer;\n } else {\n buffer = storageUnit[mesh.uniqueId];\n }\n computeShader.setStorageBuffer(name, buffer);\n }\n _prepareStorage(computeShader, name, id, storageUnit, numInfluencers, data) {\n let buffer;\n if (!storageUnit[id]) {\n buffer = new StorageBuffer(this._engine, Float32Array.BYTES_PER_ELEMENT * numInfluencers);\n storageUnit[id] = buffer;\n } else {\n buffer = storageUnit[id];\n }\n buffer.update(data);\n computeShader.setStorageBuffer(name, buffer);\n }\n /** @internal */\n processAsync(meshes) {\n var _this = this;\n return _asyncToGenerator(function* () {\n yield _this.registerMeshListAsync(meshes);\n _this.processMeshList();\n yield _this.fetchResultsForMeshListAsync();\n })();\n }\n /** @internal */\n registerMeshListAsync(meshes) {\n this._disposeForMeshList();\n if (!Array.isArray(meshes)) {\n meshes = [meshes];\n }\n let maxNumInfluencers = 0;\n for (let i = 0; i < meshes.length; i++) {\n const mesh = meshes[i];\n const vertexCount = mesh.getTotalVertices();\n if (vertexCount === 0 || !mesh.getVertexBuffer || !mesh.getVertexBuffer(VertexBuffer.PositionKind)) {\n continue;\n }\n this._processedMeshes.push(mesh);\n const manager = mesh.morphTargetManager;\n if (manager) {\n maxNumInfluencers = Math.max(maxNumInfluencers, manager.numTargets);\n }\n }\n for (let i = 0; i < this._processedMeshes.length; i++) {\n const mesh = this._processedMeshes[i];\n let defines = [\"\"];\n let hasBones = false;\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n hasBones = true;\n }\n const computeShaderWithoutMorph = this._getComputeShader(defines, hasBones, false);\n this._uniqueComputeShaders.add(computeShaderWithoutMorph);\n const manager = mesh.morphTargetManager;\n if (manager) {\n defines = defines.slice();\n defines.push(\"#define MORPHTARGETS\");\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + maxNumInfluencers);\n const computeShaderWithMorph = this._getComputeShader(defines, hasBones, true);\n this._uniqueComputeShaders.add(computeShaderWithMorph);\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithMorph]);\n } else {\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithoutMorph]);\n }\n // Pre-build the ubos, as they won't change if there's no morph targets\n const ubo = this._getUBO();\n ubo.updateUInt(\"indexResult\", i);\n ubo.update();\n }\n return new Promise(resolve => {\n const check = () => {\n const iterator = this._uniqueComputeShaders.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const computeShader = key.value;\n if (!computeShader.isReady()) {\n setTimeout(check, 10);\n return;\n }\n }\n resolve();\n };\n check();\n });\n }\n /** @internal */\n processMeshList() {\n if (this._processedMeshes.length === 0) {\n return;\n }\n this._uboIndex = 0;\n const resultDataSize = 8 * this._processedMeshes.length;\n const resultData = new Float32Array(resultDataSize);\n const resultBuffer = new StorageBuffer(this._engine, Float32Array.BYTES_PER_ELEMENT * resultDataSize);\n this._resultBuffers.push(resultBuffer);\n for (let i = 0; i < this._processedMeshes.length; i++) {\n resultData[i * 8 + 0] = Number.POSITIVE_INFINITY;\n resultData[i * 8 + 1] = Number.POSITIVE_INFINITY;\n resultData[i * 8 + 2] = Number.POSITIVE_INFINITY;\n resultData[i * 8 + 3] = Number.NEGATIVE_INFINITY;\n resultData[i * 8 + 4] = Number.NEGATIVE_INFINITY;\n resultData[i * 8 + 5] = Number.NEGATIVE_INFINITY;\n }\n resultBuffer.update(resultData);\n for (let i = 0; i < this._processedMeshes.length; i++) {\n const mesh = this._processedMeshes[i];\n const vertexCount = mesh.getTotalVertices();\n const [computeShaderWithoutMorph, computeShaderWithMorph] = this._computeShaders[i];\n const manager = mesh.morphTargetManager;\n const hasMorphs = manager && manager.numInfluencers > 0;\n const computeShader = hasMorphs ? computeShaderWithMorph : computeShaderWithoutMorph;\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.PositionKind, 3, \"positionBuffer\", this._positionBuffers);\n // Bones\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && mesh.skeleton.useTextureToStoreBoneMatrices) {\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesIndicesKind, 4, \"indexBuffer\", this._indexBuffers);\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesWeightsKind, 4, \"weightBuffer\", this._weightBuffers);\n const boneSampler = mesh.skeleton.getTransformMatrixTexture(mesh);\n computeShader.setTexture(\"boneSampler\", boneSampler, false);\n if (mesh.numBoneInfluencers > 4) {\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesIndicesExtraKind, 4, \"indexExtraBuffer\", this._indexExtraBuffers);\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesWeightsExtraKind, 4, \"weightExtraBuffer\", this._weightExtraBuffers);\n }\n }\n const ubo = this._getUBO();\n // Morphs\n if (hasMorphs) {\n const morphTargets = manager._targetStoreTexture;\n computeShader.setTexture(\"morphTargets\", morphTargets, false);\n this._prepareStorage(computeShader, \"morphTargetInfluences\", mesh.uniqueId, this._morphTargetInfluenceBuffers, manager.numInfluencers, manager.influences);\n this._prepareStorage(computeShader, \"morphTargetTextureIndices\", mesh.uniqueId, this._morphTargetTextureIndexBuffers, manager.numInfluencers, manager._morphTargetTextureIndices);\n ubo.updateFloat3(\"morphTargetTextureInfo\", manager._textureVertexStride, manager._textureWidth, manager._textureHeight);\n ubo.updateInt(\"morphTargetCount\", manager.numInfluencers);\n ubo.update();\n }\n computeShader.setStorageBuffer(\"resultBuffer\", resultBuffer);\n computeShader.setUniformBuffer(\"settings\", ubo);\n // Dispatch\n computeShader.dispatch(Math.ceil(vertexCount / 256));\n this._engine.flushFramebuffer();\n }\n }\n /** @internal */\n fetchResultsForMeshListAsync() {\n return new Promise(resolve => {\n const buffers = [];\n let size = 0;\n for (let i = 0; i < this._resultBuffers.length; i++) {\n const buffer = this._resultBuffers[i].getBuffer();\n buffers.push(buffer);\n size += buffer.capacity;\n }\n const resultData = new Float32Array(size / Float32Array.BYTES_PER_ELEMENT);\n const minimum = Vector3.Zero();\n const maximum = Vector3.Zero();\n const minmax = {\n minimum,\n maximum\n };\n this._engine.readFromMultipleStorageBuffers(buffers, 0, undefined, resultData, true).then(() => {\n let resultDataOffset = 0;\n for (let j = 0; j < this._resultBuffers.length; j++) {\n for (let i = 0; i < this._processedMeshes.length; i++) {\n const mesh = this._processedMeshes[i];\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8, minimum);\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8 + 3, maximum);\n if (j > 0) {\n minimum.minimizeInPlace(mesh.getBoundingInfo().minimum);\n maximum.maximizeInPlace(mesh.getBoundingInfo().maximum);\n }\n mesh._refreshBoundingInfoDirect(minmax);\n }\n resultDataOffset += 8 * this._processedMeshes.length;\n }\n for (const resultBuffer of this._resultBuffers) {\n resultBuffer.dispose();\n }\n this._resultBuffers = [];\n this._uboIndex = 0;\n resolve();\n });\n });\n }\n _disposeCache(storageUnit) {\n for (const key in storageUnit) {\n storageUnit[key].dispose();\n }\n }\n _disposeForMeshList() {\n for (const resultBuffer of this._resultBuffers) {\n resultBuffer.dispose();\n }\n this._resultBuffers = [];\n this._processedMeshes = [];\n this._computeShaders = [];\n this._uniqueComputeShaders = new Set();\n }\n /** @internal */\n dispose() {\n this._disposeCache(this._positionBuffers);\n this._positionBuffers = {};\n this._disposeCache(this._indexBuffers);\n this._indexBuffers = {};\n this._disposeCache(this._weightBuffers);\n this._weightBuffers = {};\n this._disposeCache(this._morphTargetInfluenceBuffers);\n this._morphTargetInfluenceBuffers = {};\n this._disposeCache(this._morphTargetTextureIndexBuffers);\n this._morphTargetTextureIndexBuffers = {};\n for (const ubo of this._ubos) {\n ubo.dispose();\n }\n this._ubos = [];\n this._computeShadersCache = {};\n this._engine = undefined;\n this._disposeForMeshList();\n }\n}","map":{"version":3,"names":["ComputeShader","StorageBuffer","VertexBuffer","Vector3","UniformBuffer","ComputeShaderBoundingHelper","constructor","engine","_computeShadersCache","_positionBuffers","_indexBuffers","_weightBuffers","_indexExtraBuffers","_weightExtraBuffers","_morphTargetInfluenceBuffers","_morphTargetTextureIndexBuffers","_ubos","_uboIndex","_processedMeshes","_computeShaders","_uniqueComputeShaders","Set","_resultBuffers","_engine","_getComputeShader","defines","hasBones","hasMorphs","computeShader","join","bindingsMapping","positionBuffer","group","binding","resultBuffer","settings","boneSampler","indexBuffer","weightBuffer","indexExtraBuffer","weightExtraBuffer","morphTargets","morphTargetInfluences","morphTargetTextureIndices","_getUBO","length","ubo","addFloat3","addUniform","push","_extractDataAndLink","mesh","kind","stride","name","storageUnit","buffer","vertexCount","getTotalVertices","uniqueId","_mesh$getVertexBuffer","dataArray","getVertexBuffer","getFloatData","Float32Array","BYTES_PER_ELEMENT","update","setStorageBuffer","_prepareStorage","id","numInfluencers","data","processAsync","meshes","_this","_asyncToGenerator","registerMeshListAsync","processMeshList","fetchResultsForMeshListAsync","_disposeForMeshList","Array","isArray","maxNumInfluencers","i","PositionKind","manager","morphTargetManager","Math","max","numTargets","useBones","computeBonesUsingShaders","skeleton","numBoneInfluencers","computeShaderWithoutMorph","add","slice","computeShaderWithMorph","updateUInt","Promise","resolve","check","iterator","keys","key","next","done","value","isReady","setTimeout","resultDataSize","resultData","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","useTextureToStoreBoneMatrices","MatricesIndicesKind","MatricesWeightsKind","getTransformMatrixTexture","setTexture","MatricesIndicesExtraKind","MatricesWeightsExtraKind","_targetStoreTexture","influences","_morphTargetTextureIndices","updateFloat3","_textureVertexStride","_textureWidth","_textureHeight","updateInt","setUniformBuffer","dispatch","ceil","flushFramebuffer","buffers","size","getBuffer","capacity","minimum","Zero","maximum","minmax","readFromMultipleStorageBuffers","undefined","then","resultDataOffset","j","FromArrayToRef","minimizeInPlace","getBoundingInfo","maximizeInPlace","_refreshBoundingInfoDirect","dispose","_disposeCache"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Culling/Helper/computeShaderBoundingHelper.js"],"sourcesContent":["import { ComputeShader } from \"../../Compute/computeShader.js\";\nimport { StorageBuffer } from \"../../Buffers/storageBuffer.js\";\nimport { VertexBuffer } from \"../../Buffers/buffer.js\";\nimport { Vector3 } from \"../../Maths/math.vector.js\";\nimport { UniformBuffer } from \"../../Materials/uniformBuffer.js\";\nimport \"../../ShadersWGSL/boundingInfo.compute.js\";\n/** @internal */\nexport class ComputeShaderBoundingHelper {\n /**\n * Creates a new ComputeShaderBoundingHelper\n * @param engine defines the engine to use\n */\n constructor(engine) {\n this._computeShadersCache = {};\n this._positionBuffers = {};\n this._indexBuffers = {};\n this._weightBuffers = {};\n this._indexExtraBuffers = {};\n this._weightExtraBuffers = {};\n this._morphTargetInfluenceBuffers = {};\n this._morphTargetTextureIndexBuffers = {};\n this._ubos = [];\n this._uboIndex = 0;\n this._processedMeshes = [];\n this._computeShaders = [];\n this._uniqueComputeShaders = new Set();\n this._resultBuffers = [];\n this._engine = engine;\n }\n _getComputeShader(defines, hasBones, hasMorphs) {\n let computeShader;\n const join = defines.join(\"\\n\");\n if (!this._computeShadersCache[join]) {\n const bindingsMapping = {\n positionBuffer: { group: 0, binding: 0 },\n resultBuffer: { group: 0, binding: 1 },\n settings: { group: 0, binding: 7 },\n };\n if (hasBones) {\n bindingsMapping.boneSampler = { group: 0, binding: 2 };\n bindingsMapping.indexBuffer = { group: 0, binding: 3 };\n bindingsMapping.weightBuffer = { group: 0, binding: 4 };\n bindingsMapping.indexExtraBuffer = { group: 0, binding: 5 };\n bindingsMapping.weightExtraBuffer = { group: 0, binding: 6 };\n }\n if (hasMorphs) {\n bindingsMapping.morphTargets = { group: 0, binding: 8 };\n bindingsMapping.morphTargetInfluences = { group: 0, binding: 9 };\n bindingsMapping.morphTargetTextureIndices = { group: 0, binding: 10 };\n }\n computeShader = new ComputeShader(`boundingInfoCompute${hasBones ? \"_bones\" : \"\"}${hasMorphs ? \"_morphs\" : \"\"}`, this._engine, \"boundingInfo\", {\n bindingsMapping,\n defines: defines,\n });\n this._computeShadersCache[join] = computeShader;\n }\n else {\n computeShader = this._computeShadersCache[join];\n }\n return computeShader;\n }\n _getUBO() {\n if (this._uboIndex >= this._ubos.length) {\n const ubo = new UniformBuffer(this._engine);\n ubo.addFloat3(\"morphTargetTextureInfo\", 0, 0, 0);\n ubo.addUniform(\"morphTargetCount\", 1);\n ubo.addUniform(\"indexResult\", 1);\n this._ubos.push(ubo);\n }\n return this._ubos[this._uboIndex++];\n }\n _extractDataAndLink(computeShader, mesh, kind, stride, name, storageUnit) {\n let buffer;\n const vertexCount = mesh.getTotalVertices();\n if (!storageUnit[mesh.uniqueId]) {\n const dataArray = mesh.getVertexBuffer(kind)?.getFloatData(vertexCount);\n buffer = new StorageBuffer(this._engine, Float32Array.BYTES_PER_ELEMENT * vertexCount * stride);\n buffer.update(dataArray);\n storageUnit[mesh.uniqueId] = buffer;\n }\n else {\n buffer = storageUnit[mesh.uniqueId];\n }\n computeShader.setStorageBuffer(name, buffer);\n }\n _prepareStorage(computeShader, name, id, storageUnit, numInfluencers, data) {\n let buffer;\n if (!storageUnit[id]) {\n buffer = new StorageBuffer(this._engine, Float32Array.BYTES_PER_ELEMENT * numInfluencers);\n storageUnit[id] = buffer;\n }\n else {\n buffer = storageUnit[id];\n }\n buffer.update(data);\n computeShader.setStorageBuffer(name, buffer);\n }\n /** @internal */\n async processAsync(meshes) {\n await this.registerMeshListAsync(meshes);\n this.processMeshList();\n await this.fetchResultsForMeshListAsync();\n }\n /** @internal */\n registerMeshListAsync(meshes) {\n this._disposeForMeshList();\n if (!Array.isArray(meshes)) {\n meshes = [meshes];\n }\n let maxNumInfluencers = 0;\n for (let i = 0; i < meshes.length; i++) {\n const mesh = meshes[i];\n const vertexCount = mesh.getTotalVertices();\n if (vertexCount === 0 || !mesh.getVertexBuffer || !mesh.getVertexBuffer(VertexBuffer.PositionKind)) {\n continue;\n }\n this._processedMeshes.push(mesh);\n const manager = mesh.morphTargetManager;\n if (manager) {\n maxNumInfluencers = Math.max(maxNumInfluencers, manager.numTargets);\n }\n }\n for (let i = 0; i < this._processedMeshes.length; i++) {\n const mesh = this._processedMeshes[i];\n let defines = [\"\"];\n let hasBones = false;\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n hasBones = true;\n }\n const computeShaderWithoutMorph = this._getComputeShader(defines, hasBones, false);\n this._uniqueComputeShaders.add(computeShaderWithoutMorph);\n const manager = mesh.morphTargetManager;\n if (manager) {\n defines = defines.slice();\n defines.push(\"#define MORPHTARGETS\");\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + maxNumInfluencers);\n const computeShaderWithMorph = this._getComputeShader(defines, hasBones, true);\n this._uniqueComputeShaders.add(computeShaderWithMorph);\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithMorph]);\n }\n else {\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithoutMorph]);\n }\n // Pre-build the ubos, as they won't change if there's no morph targets\n const ubo = this._getUBO();\n ubo.updateUInt(\"indexResult\", i);\n ubo.update();\n }\n return new Promise((resolve) => {\n const check = () => {\n const iterator = this._uniqueComputeShaders.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const computeShader = key.value;\n if (!computeShader.isReady()) {\n setTimeout(check, 10);\n return;\n }\n }\n resolve();\n };\n check();\n });\n }\n /** @internal */\n processMeshList() {\n if (this._processedMeshes.length === 0) {\n return;\n }\n this._uboIndex = 0;\n const resultDataSize = 8 * this._processedMeshes.length;\n const resultData = new Float32Array(resultDataSize);\n const resultBuffer = new StorageBuffer(this._engine, Float32Array.BYTES_PER_ELEMENT * resultDataSize);\n this._resultBuffers.push(resultBuffer);\n for (let i = 0; i < this._processedMeshes.length; i++) {\n resultData[i * 8 + 0] = Number.POSITIVE_INFINITY;\n resultData[i * 8 + 1] = Number.POSITIVE_INFINITY;\n resultData[i * 8 + 2] = Number.POSITIVE_INFINITY;\n resultData[i * 8 + 3] = Number.NEGATIVE_INFINITY;\n resultData[i * 8 + 4] = Number.NEGATIVE_INFINITY;\n resultData[i * 8 + 5] = Number.NEGATIVE_INFINITY;\n }\n resultBuffer.update(resultData);\n for (let i = 0; i < this._processedMeshes.length; i++) {\n const mesh = this._processedMeshes[i];\n const vertexCount = mesh.getTotalVertices();\n const [computeShaderWithoutMorph, computeShaderWithMorph] = this._computeShaders[i];\n const manager = mesh.morphTargetManager;\n const hasMorphs = manager && manager.numInfluencers > 0;\n const computeShader = hasMorphs ? computeShaderWithMorph : computeShaderWithoutMorph;\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.PositionKind, 3, \"positionBuffer\", this._positionBuffers);\n // Bones\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && mesh.skeleton.useTextureToStoreBoneMatrices) {\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesIndicesKind, 4, \"indexBuffer\", this._indexBuffers);\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesWeightsKind, 4, \"weightBuffer\", this._weightBuffers);\n const boneSampler = mesh.skeleton.getTransformMatrixTexture(mesh);\n computeShader.setTexture(\"boneSampler\", boneSampler, false);\n if (mesh.numBoneInfluencers > 4) {\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesIndicesExtraKind, 4, \"indexExtraBuffer\", this._indexExtraBuffers);\n this._extractDataAndLink(computeShader, mesh, VertexBuffer.MatricesWeightsExtraKind, 4, \"weightExtraBuffer\", this._weightExtraBuffers);\n }\n }\n const ubo = this._getUBO();\n // Morphs\n if (hasMorphs) {\n const morphTargets = manager._targetStoreTexture;\n computeShader.setTexture(\"morphTargets\", morphTargets, false);\n this._prepareStorage(computeShader, \"morphTargetInfluences\", mesh.uniqueId, this._morphTargetInfluenceBuffers, manager.numInfluencers, manager.influences);\n this._prepareStorage(computeShader, \"morphTargetTextureIndices\", mesh.uniqueId, this._morphTargetTextureIndexBuffers, manager.numInfluencers, manager._morphTargetTextureIndices);\n ubo.updateFloat3(\"morphTargetTextureInfo\", manager._textureVertexStride, manager._textureWidth, manager._textureHeight);\n ubo.updateInt(\"morphTargetCount\", manager.numInfluencers);\n ubo.update();\n }\n computeShader.setStorageBuffer(\"resultBuffer\", resultBuffer);\n computeShader.setUniformBuffer(\"settings\", ubo);\n // Dispatch\n computeShader.dispatch(Math.ceil(vertexCount / 256));\n this._engine.flushFramebuffer();\n }\n }\n /** @internal */\n fetchResultsForMeshListAsync() {\n return new Promise((resolve) => {\n const buffers = [];\n let size = 0;\n for (let i = 0; i < this._resultBuffers.length; i++) {\n const buffer = this._resultBuffers[i].getBuffer();\n buffers.push(buffer);\n size += buffer.capacity;\n }\n const resultData = new Float32Array(size / Float32Array.BYTES_PER_ELEMENT);\n const minimum = Vector3.Zero();\n const maximum = Vector3.Zero();\n const minmax = { minimum, maximum };\n this._engine.readFromMultipleStorageBuffers(buffers, 0, undefined, resultData, true).then(() => {\n let resultDataOffset = 0;\n for (let j = 0; j < this._resultBuffers.length; j++) {\n for (let i = 0; i < this._processedMeshes.length; i++) {\n const mesh = this._processedMeshes[i];\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8, minimum);\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8 + 3, maximum);\n if (j > 0) {\n minimum.minimizeInPlace(mesh.getBoundingInfo().minimum);\n maximum.maximizeInPlace(mesh.getBoundingInfo().maximum);\n }\n mesh._refreshBoundingInfoDirect(minmax);\n }\n resultDataOffset += 8 * this._processedMeshes.length;\n }\n for (const resultBuffer of this._resultBuffers) {\n resultBuffer.dispose();\n }\n this._resultBuffers = [];\n this._uboIndex = 0;\n resolve();\n });\n });\n }\n _disposeCache(storageUnit) {\n for (const key in storageUnit) {\n storageUnit[key].dispose();\n }\n }\n _disposeForMeshList() {\n for (const resultBuffer of this._resultBuffers) {\n resultBuffer.dispose();\n }\n this._resultBuffers = [];\n this._processedMeshes = [];\n this._computeShaders = [];\n this._uniqueComputeShaders = new Set();\n }\n /** @internal */\n dispose() {\n this._disposeCache(this._positionBuffers);\n this._positionBuffers = {};\n this._disposeCache(this._indexBuffers);\n this._indexBuffers = {};\n this._disposeCache(this._weightBuffers);\n this._weightBuffers = {};\n this._disposeCache(this._morphTargetInfluenceBuffers);\n this._morphTargetInfluenceBuffers = {};\n this._disposeCache(this._morphTargetTextureIndexBuffers);\n this._morphTargetTextureIndexBuffers = {};\n for (const ubo of this._ubos) {\n ubo.dispose();\n }\n this._ubos = [];\n this._computeShadersCache = {};\n this._engine = undefined;\n this._disposeForMeshList();\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}