UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

1 lines 6.88 kB
{"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\n/** @internal */\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 * @category rendering\n * @advanced\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, dataInt32: Int32Array, 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 let dataInt32: Int32Array = null;\n\n if (!data)\n {\n data = uniformGroup.buffer.data as Float32Array;\n dataInt32 = uniformGroup.buffer.dataInt32;\n }\n offset ||= 0;\n\n uniformGroupData.syncFunction(uniformGroup.uniforms, data, dataInt32, 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":";;;;;AAoBO,MAAM,SAAA,CACb;AAAA,EASI,YAAY,OAAA,EACZ;AARA;AAAA,IAAA,IAAA,CAAQ,iBAAA,mBAGH,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAMnB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAGhB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,YAAA,GACR;AACI,IAAA,IAAI,CAAC,qBAAoB,EACzB;AACI,MAAA,MAAM,IAAI,MAAM,0GACiD,CAAA;AAAA,IACrE;AAAA,EACJ;AAAA,EAEO,mBAAmB,YAAA,EAC1B;AACI,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,YAAY,CAAA;AAEzD,IAAA,YAAA,CAAa,MAAA,KAAb,YAAA,CAAa,MAAA,GAAW,IAAI,MAAA,CAAO;AAAA,MAC/B,MAAM,IAAI,YAAA,CAAa,WAAA,CAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAClD,KAAA,EAAO,WAAA,CAAY,OAAA,GAAU,WAAA,CAAY;AAAA,KAC5C,CAAA,CAAA;AAAA,EACL;AAAA,EAEO,oBAAoB,YAAA,EAC3B;AACI,IAAA,OAAO,KAAK,iBAAA,CAAkB,YAAA,CAAa,UAAU,CAAA,IAAK,IAAA,CAAK,kBAAkB,YAAY,CAAA;AAAA,EACjG;AAAA,EAEQ,kBAAkB,YAAA,EAC1B;AACI,IAAA,MAAM,wBAAwB,YAAA,CAAa,UAAA;AAE3C,IAAA,IAAI,WAAA,GAAc,IAAA,CAAK,iBAAA,CAAkB,qBAAqB,CAAA;AAE9D,IAAA,IAAI,CAAC,WAAA,EACL;AACI,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,iBAAiB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,iBAAA,CAAkB,CAAC,CAAC,CAAA;AAEzG,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,QAAQ,CAAA;AAEvD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,WAAW,CAAA;AAE7D,MAAA,WAAA,GAAc,IAAA,CAAK,iBAAA,CAAkB,qBAAqB,CAAA,GAAI;AAAA,QAC1D,MAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA,CAAK,kBAAkB,qBAAqB,CAAA;AAAA,EACvD;AAAA,EAEQ,iBACJ,WAAA,EAEJ;AACI,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,WAAW,CAAA;AAAA,EACpD;AAAA,EAEO,gBAAA,CAAiB,YAAA,EAA4B,IAAA,EAAqB,MAAA,EACzE;AACI,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAoB,YAAY,CAAA;AAE9D,IAAA,YAAA,CAAa,MAAA,KAAb,YAAA,CAAa,MAAA,GAAW,IAAI,MAAA,CAAO;AAAA,MAC/B,MAAM,IAAI,YAAA,CAAa,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MACvD,KAAA,EAAO,WAAA,CAAY,OAAA,GAAU,WAAA,CAAY;AAAA,KAC5C,CAAA,CAAA;AAED,IAAA,IAAI,SAAA,GAAwB,IAAA;AAE5B,IAAA,IAAI,CAAC,IAAA,EACL;AACI,MAAA,IAAA,GAAO,aAAa,MAAA,CAAO,IAAA;AAC3B,MAAA,SAAA,GAAY,aAAa,MAAA,CAAO,SAAA;AAAA,IACpC;AACA,IAAA,MAAA,KAAA,MAAA,GAAW,CAAA,CAAA;AAEX,IAAA,gBAAA,CAAiB,YAAA,CAAa,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,WAAW,MAAM,CAAA;AAE5E,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEO,mBAAmB,YAAA,EAC1B;AACI,IAAA,IAAI,YAAA,CAAa,QAAA,IAAY,CAAC,YAAA,CAAa,UAAU,OAAO,KAAA;AAC5D,IAAA,YAAA,CAAa,QAAA,GAAW,CAAA;AAExB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,YAAY,CAAA;AAEjD,IAAA,YAAA,CAAa,OAAO,MAAA,EAAO;AAE3B,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,EAC7B;AACJ;;;;"}