1 line
6.6 KiB
Plaintext
1 line
6.6 KiB
Plaintext
{"version":3,"file":"UboSystem.mjs","sources":["../../../../../src/rendering/renderers/shared/shader/UboSystem.ts"],"sourcesContent":["import { unsafeEvalSupported } from '../../../../utils/browser/unsafeEvalSupported';\nimport { Buffer } from '../buffer/Buffer';\nimport { BufferUsage } from '../buffer/const';\n\nimport type { System } from '../system/System';\nimport type { UboElement, UboLayout, UniformData, UniformsSyncCallback } from './types';\nimport type { UniformGroup } from './UniformGroup';\n\nexport interface UboAdaptor\n{\n createUboElements: (uniformData: UniformData[]) => UboLayout;\n generateUboSync: (uboElements: UboElement[]) => UniformsSyncCallback;\n}\n\n/**\n * System plugin to the renderer to manage uniform buffers.\n * @memberof rendering\n */\nexport class UboSystem implements System\n{\n /** Cache of uniform buffer layouts and sync functions, so we don't have to re-create them */\n private _syncFunctionHash: Record<string, {\n layout: UboLayout,\n syncFunction: (uniforms: Record<string, any>, data: Float32Array, offset: number) => void\n }> = Object.create(null);\n\n private readonly _adaptor: UboAdaptor;\n\n constructor(adaptor: UboAdaptor)\n {\n this._adaptor = adaptor;\n\n // Validation check that this environment support `new Function`\n this._systemCheck();\n }\n\n /**\n * Overridable function by `pixi.js/unsafe-eval` to silence\n * throwing an error if platform doesn't support unsafe-evals.\n * @private\n */\n private _systemCheck(): void\n {\n if (!unsafeEvalSupported())\n {\n throw new Error('Current environment does not allow unsafe-eval, '\n + 'please use pixi.js/unsafe-eval module to enable support.');\n }\n }\n\n public ensureUniformGroup(uniformGroup: UniformGroup): void\n {\n const uniformData = this.getUniformGroupData(uniformGroup);\n\n uniformGroup.buffer ||= new Buffer({\n data: new Float32Array(uniformData.layout.size / 4),\n usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST,\n });\n }\n\n public getUniformGroupData(uniformGroup: UniformGroup)\n {\n return this._syncFunctionHash[uniformGroup._signature] || this._initUniformGroup(uniformGroup);\n }\n\n private _initUniformGroup(uniformGroup: UniformGroup)\n {\n const uniformGroupSignature = uniformGroup._signature;\n\n let uniformData = this._syncFunctionHash[uniformGroupSignature];\n\n if (!uniformData)\n {\n const elements = Object.keys(uniformGroup.uniformStructures).map((i) => uniformGroup.uniformStructures[i]);\n\n const layout = this._adaptor.createUboElements(elements);\n\n const syncFunction = this._generateUboSync(layout.uboElements);\n\n uniformData = this._syncFunctionHash[uniformGroupSignature] = {\n layout,\n syncFunction\n };\n }\n\n return this._syncFunctionHash[uniformGroupSignature];\n }\n\n private _generateUboSync(\n uboElements: UboElement[],\n ): UniformsSyncCallback\n {\n return this._adaptor.generateUboSync(uboElements);\n }\n\n public syncUniformGroup(uniformGroup: UniformGroup, data?: Float32Array, offset?: number): boolean\n {\n const uniformGroupData = this.getUniformGroupData(uniformGroup);\n\n uniformGroup.buffer ||= new Buffer({\n data: new Float32Array(uniformGroupData.layout.size / 4),\n usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST,\n });\n\n data ||= (uniformGroup.buffer.data as Float32Array);\n offset ||= 0;\n\n uniformGroupData.syncFunction(uniformGroup.uniforms, data, offset);\n\n return true;\n }\n\n public updateUniformGroup(uniformGroup: UniformGroup): boolean\n {\n if (uniformGroup.isStatic && !uniformGroup._dirtyId) return false;\n uniformGroup._dirtyId = 0;\n\n const synced = this.syncUniformGroup(uniformGroup);\n\n uniformGroup.buffer.update();\n\n return synced;\n }\n\n public destroy(): void\n {\n this._syncFunctionHash = null;\n }\n}\n"],"names":[],"mappings":"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"} |