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.29 kB
{"version":3,"file":"compileHighShader.mjs","sources":["../../../../src/rendering/high-shader/compiler/compileHighShader.ts"],"sourcesContent":["import { addBits } from './utils/addBits';\nimport { compileHooks } from './utils/compileHooks';\nimport { compileInputs } from './utils/compileInputs';\nimport { compileOutputs } from './utils/compileOutputs';\nimport { injectBits } from './utils/injectBits';\n\nimport type { HighShaderBit, HighShaderSource } from './types';\n\n/**\n * A high template consists of vertex and fragment source\n * @internal\n */\nexport interface HighShaderTemplate\n{\n name?: string;\n fragment: string;\n vertex: string;\n}\n\n/** @internal */\nexport interface CompileHighShaderOptions\n{\n template: HighShaderTemplate;\n bits: HighShaderBit[];\n}\n\nconst cacheMap: {[key: string]: HighShaderSource} = Object.create(null);\nconst bitCacheMap: Map<HighShaderBit, number> = new Map();\n\nlet CACHE_UID = 0;\n\n/**\n * This function will take a HighShader template, some High fragments and then merge them in to a shader source.\n * @param options\n * @param options.template\n * @param options.bits\n * @internal\n */\nexport function compileHighShader({\n template,\n bits\n}: CompileHighShaderOptions): HighShaderSource\n{\n const cacheId = generateCacheId(template, bits);\n\n if (cacheMap[cacheId]) return cacheMap[cacheId];\n\n const { vertex, fragment } = compileInputsAndOutputs(template, bits);\n\n cacheMap[cacheId] = compileBits(vertex, fragment, bits);\n\n return cacheMap[cacheId];\n}\n\n/**\n * This function will take a HighShader template, some High fragments and then merge them in to a shader source.\n * It is specifically for WebGL and does not compile inputs and outputs.\n * @param options\n * @param options.template - The HighShader template containing vertex and fragment source.\n * @param options.bits - An array of HighShaderBit objects to be compiled into the shader.\n * @returns A HighShaderSource object containing the compiled vertex and fragment shaders.\n * @internal\n */\nexport function compileHighShaderGl({\n template,\n bits\n}: CompileHighShaderOptions): HighShaderSource\n{\n const cacheId = generateCacheId(template, bits);\n\n if (cacheMap[cacheId]) return cacheMap[cacheId];\n\n cacheMap[cacheId] = compileBits(template.vertex, template.fragment, bits);\n\n return cacheMap[cacheId];\n}\n\nfunction compileInputsAndOutputs(template: HighShaderTemplate, bits: HighShaderBit[])\n{\n const vertexFragments = bits.map((shaderBit) => shaderBit.vertex).filter((v) => !!v);\n const fragmentFragments = bits.map((shaderBit) => shaderBit.fragment).filter((v) => !!v);\n\n // WebGPU compile inputs and outputs..\n let compiledVertex = compileInputs(vertexFragments, template.vertex, true);\n\n compiledVertex = compileOutputs(vertexFragments, compiledVertex);\n\n const compiledFragment = compileInputs(fragmentFragments, template.fragment, true);\n\n return {\n vertex: compiledVertex,\n fragment: compiledFragment,\n };\n}\n\nfunction generateCacheId(template: HighShaderTemplate, bits: HighShaderBit[]): string\n{\n return bits\n .map((highFragment) =>\n {\n if (!bitCacheMap.has(highFragment))\n {\n bitCacheMap.set(highFragment, CACHE_UID++);\n }\n\n return bitCacheMap.get(highFragment);\n })\n .sort((a, b) => a - b)\n .join('-') + template.vertex + template.fragment;\n}\n\nfunction compileBits(vertex: string, fragment: string, bits: HighShaderBit[])\n{\n const vertexParts = compileHooks(vertex);\n const fragmentParts = compileHooks(fragment);\n\n bits.forEach((shaderBit) =>\n {\n addBits(shaderBit.vertex, vertexParts, shaderBit.name);\n addBits(shaderBit.fragment, fragmentParts, shaderBit.name);\n });\n\n return {\n vertex: injectBits(vertex, vertexParts),\n fragment: injectBits(fragment, fragmentParts),\n };\n}\n"],"names":[],"mappings":"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"}