1 | {"version":3,"file":"BatchShaderGenerator.mjs","sources":["../../src/batch/BatchShaderGenerator.ts"],"sourcesContent":["import { Matrix } from '@pixi/math';\nimport { Program } from '../shader/Program';\nimport { Shader } from '../shader/Shader';\nimport { UniformGroup } from '../shader/UniformGroup';\n\n/**\n * Helper that generates batching multi-texture shader. Use it with your new BatchRenderer\n * @memberof PIXI\n */\nexport class BatchShaderGenerator\n{\n /** Reference to the vertex shader source. */\n public vertexSrc: string;\n\n /** Reference to the fragment shader template. Must contain \"%count%\" and \"%forloop%\". */\n public fragTemplate: string;\n\n programCache: {[key: number]: Program};\n defaultGroupCache: {[key: number]: UniformGroup};\n\n /**\n * @param vertexSrc - Vertex shader\n * @param fragTemplate - Fragment shader template\n */\n constructor(vertexSrc: string, fragTemplate: string)\n {\n this.vertexSrc = vertexSrc;\n this.fragTemplate = fragTemplate;\n\n this.programCache = {};\n this.defaultGroupCache = {};\n\n if (!fragTemplate.includes('%count%'))\n {\n throw new Error('Fragment template must contain \"%count%\".');\n }\n\n if (!fragTemplate.includes('%forloop%'))\n {\n throw new Error('Fragment template must contain \"%forloop%\".');\n }\n }\n\n generateShader(maxTextures: number): Shader\n {\n if (!this.programCache[maxTextures])\n {\n const sampleValues = new Int32Array(maxTextures);\n\n for (let i = 0; i < maxTextures; i++)\n {\n sampleValues[i] = i;\n }\n\n this.defaultGroupCache[maxTextures] = UniformGroup.from({ uSamplers: sampleValues }, true);\n\n let fragmentSrc = this.fragTemplate;\n\n fragmentSrc = fragmentSrc.replace(/%count%/gi, `${maxTextures}`);\n fragmentSrc = fragmentSrc.replace(/%forloop%/gi, this.generateSampleSrc(maxTextures));\n\n this.programCache[maxTextures] = new Program(this.vertexSrc, fragmentSrc);\n }\n\n const uniforms = {\n tint: new Float32Array([1, 1, 1, 1]),\n translationMatrix: new Matrix(),\n default: this.defaultGroupCache[maxTextures],\n };\n\n return new Shader(this.programCache[maxTextures], uniforms);\n }\n\n generateSampleSrc(maxTextures: number): string\n {\n let src = '';\n\n src += '\\n';\n src += '\\n';\n\n for (let i = 0; i < maxTextures; i++)\n {\n if (i > 0)\n {\n src += '\\nelse ';\n }\n\n if (i < maxTextures - 1)\n {\n src += `if(vTextureId < ${i}.5)`;\n }\n\n src += '\\n{';\n src += `\\n\\tcolor = texture2D(uSamplers[${i}], vTextureCoord);`;\n src += '\\n}';\n }\n\n src += '\\n';\n src += '\\n';\n\n return src;\n }\n}\n"],"names":[],"mappings":"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"} |