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.24 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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"}