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 7.1 kB
{"version":3,"file":"GlUniformGroupSystem.mjs","sources":["../../../../../src/rendering/renderers/gl/shader/GlUniformGroupSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../../extensions/Extensions';\nimport { generateUniformsSync } from './utils/generateUniformsSync';\n\nimport type { UniformsSyncCallback } from '../../shared/shader/types';\nimport type { UniformGroup } from '../../shared/shader/UniformGroup';\nimport type { System } from '../../shared/system/System';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { WebGLRenderer } from '../WebGLRenderer';\nimport type { GlProgram, GlUniformData } from './GlProgram';\n\n/**\n * System plugin to the renderer to manage shaders.\n * @category rendering\n * @advanced\n */\nexport class GlUniformGroupSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'uniformGroup',\n } as const;\n\n /**\n * The current WebGL rendering context.\n * @type {WebGLRenderingContext}\n */\n protected gl: GlRenderingContext;\n\n /** Cache to holds the generated functions. Stored against UniformObjects unique signature. */\n private _cache: Record<string, UniformsSyncCallback> = {};\n private _renderer: WebGLRenderer;\n\n private _uniformGroupSyncHash: Record<string, Record<string, UniformsSyncCallback>> = {};\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n\n this.gl = null;\n this._cache = {};\n }\n\n protected contextChange(gl: GlRenderingContext): void\n {\n this.gl = gl;\n }\n\n /**\n * Uploads the uniforms values to the currently bound shader.\n * @param group - the uniforms values that be applied to the current shader\n * @param program\n * @param syncData\n * @param syncData.textureCount\n */\n public updateUniformGroup(group: UniformGroup, program: GlProgram, syncData: { textureCount: number }): void\n {\n const programData = this._renderer.shader._getProgramData(program);\n\n if (!group.isStatic || group._dirtyId !== programData.uniformDirtyGroups[group.uid])\n {\n programData.uniformDirtyGroups[group.uid] = group._dirtyId;\n\n const syncFunc = this._getUniformSyncFunction(group, program);\n\n syncFunc(programData.uniformData, group.uniforms, this._renderer, syncData);\n }\n }\n\n /**\n * Overridable by the pixi.js/unsafe-eval package to use static syncUniforms instead.\n * @param group\n * @param program\n */\n private _getUniformSyncFunction(group: UniformGroup, program: GlProgram): UniformsSyncCallback\n {\n return this._uniformGroupSyncHash[group._signature]?.[program._key]\n || this._createUniformSyncFunction(group, program);\n }\n\n private _createUniformSyncFunction(group: UniformGroup, program: GlProgram): UniformsSyncCallback\n {\n const uniformGroupSyncHash = this._uniformGroupSyncHash[group._signature]\n || (this._uniformGroupSyncHash[group._signature] = {});\n\n const id = this._getSignature(group, program._uniformData, 'u');\n\n if (!this._cache[id])\n {\n this._cache[id] = this._generateUniformsSync(group, program._uniformData);\n }\n\n uniformGroupSyncHash[program._key] = this._cache[id];\n\n return uniformGroupSyncHash[program._key];\n }\n\n private _generateUniformsSync(group: UniformGroup, uniformData: Record<string, GlUniformData>): UniformsSyncCallback\n {\n return generateUniformsSync(group, uniformData);\n }\n\n /**\n * Takes a uniform group and data and generates a unique signature for them.\n * @param group - The uniform group to get signature of\n * @param group.uniforms\n * @param uniformData - Uniform information generated by the shader\n * @param preFix\n * @returns Unique signature of the uniform group\n */\n private _getSignature(group: UniformGroup, uniformData: Record<string, any>, preFix: string): string\n {\n const uniforms = group.uniforms;\n\n const strings = [`${preFix}-`];\n\n for (const i in uniforms)\n {\n strings.push(i);\n\n if (uniformData[i])\n {\n strings.push(uniformData[i].type);\n }\n }\n\n return strings.join('-');\n }\n\n /** Destroys this System and removes all its textures. */\n public destroy(): void\n {\n this._renderer = null;\n this._cache = null;\n }\n}\n"],"names":[],"mappings":"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"}