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 • 4.32 kB
Source Map (JSON)
{"version":3,"file":"extractStructAndGroups.mjs","sources":["../../../../../../src/rendering/renderers/gpu/shader/utils/extractStructAndGroups.ts"],"sourcesContent":["/**\n * Defines the structure of the extracted WGSL structs and groups.\n * @category rendering\n * @advanced\n */\nexport interface StructsAndGroups\n{\n groups: {\n group: number;\n binding: number;\n name: string;\n isUniform: boolean;\n type: string;\n }[];\n structs: {\n name: string;\n members: Record<string, string>;\n }[];\n}\n\n/**\n * @param wgsl\n * @internal\n */\nexport function extractStructAndGroups(wgsl: string): StructsAndGroups\n{\n // Patterns for parsing the WGSL file\n const linePattern = /(^|[^/])@(group|binding)\\(\\d+\\)[^;]+;/g;\n const groupPattern = /@group\\((\\d+)\\)/;\n const bindingPattern = /@binding\\((\\d+)\\)/;\n const namePattern = /var(<[^>]+>)? (\\w+)/;\n const typePattern = /:\\s*([\\w<>]+)/;\n const structPattern = /struct\\s+(\\w+)\\s*{([^}]+)}/g;\n const structMemberPattern = /(\\w+)\\s*:\\s*([\\w\\<\\>]+)/g;\n const structName = /struct\\s+(\\w+)/;\n\n // Find the @group and @binding annotations\n const groups = wgsl.match(linePattern)?.map((item) => ({\n group: parseInt(item.match(groupPattern)[1], 10),\n binding: parseInt(item.match(bindingPattern)[1], 10),\n name: item.match(namePattern)[2],\n isUniform: item.match(namePattern)[1] === '<uniform>',\n type: item.match(typePattern)[1],\n }));\n\n if (!groups)\n {\n return {\n groups: [],\n structs: [],\n };\n }\n\n // Find the structs\n const structs = wgsl\n .match(structPattern)\n ?.map((struct) =>\n {\n const name = struct.match(structName)[1];\n const members = struct.match(structMemberPattern).reduce((acc: Record<string, string>, member) =>\n {\n const [name, type] = member.split(':');\n\n acc[name.trim()] = type.trim();\n\n return acc;\n }, {});\n\n if (!members)\n {\n return null;\n }\n\n return { name, members };\n // Only include the structs mentioned in the @group/@binding annotations\n })\n .filter(({ name }) => groups.some((group) =>\n\n // Handle both direct type matches and generic types like array<StructName>\n group.type === name || group.type.includes(`<${name}>`)\n )) ?? [];\n\n return {\n groups,\n structs,\n };\n}\n"],"names":["name"],"mappings":";AAwBO,SAAS,uBAAuB,IAAA,EACvC;AAEI,EAAA,MAAM,WAAA,GAAc,wCAAA;AACpB,EAAA,MAAM,YAAA,GAAe,iBAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,mBAAA;AACvB,EAAA,MAAM,WAAA,GAAc,qBAAA;AACpB,EAAA,MAAM,WAAA,GAAc,eAAA;AACpB,EAAA,MAAM,aAAA,GAAgB,6BAAA;AACtB,EAAA,MAAM,mBAAA,GAAsB,0BAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,gBAAA;AAGnB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,EAAG,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IACnD,KAAA,EAAO,SAAS,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,GAAG,EAAE,CAAA;AAAA,IAC/C,OAAA,EAAS,SAAS,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA,CAAE,CAAC,GAAG,EAAE,CAAA;AAAA,IACnD,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,WAAW,EAAE,CAAC,CAAA;AAAA,IAC/B,WAAW,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,CAAE,CAAC,CAAA,KAAM,WAAA;AAAA,IAC1C,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,WAAW,EAAE,CAAC;AAAA,GACnC,CAAE,CAAA;AAEF,EAAA,IAAI,CAAC,MAAA,EACL;AACI,IAAA,OAAO;AAAA,MACH,QAAQ,EAAC;AAAA,MACT,SAAS;AAAC,KACd;AAAA,EACJ;AAGA,EAAA,MAAM,UAAU,IAAA,CACX,KAAA,CAAM,aAAa,CAAA,EAClB,GAAA,CAAI,CAAC,MAAA,KACP;AACI,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,UAAU,EAAE,CAAC,CAAA;AACvC,IAAA,MAAM,OAAA,GAAU,OAAO,KAAA,CAAM,mBAAmB,EAAE,MAAA,CAAO,CAAC,KAA6B,MAAA,KACvF;AACI,MAAA,MAAM,CAACA,KAAAA,EAAM,IAAI,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AAErC,MAAA,GAAA,CAAIA,KAAAA,CAAK,IAAA,EAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AAE7B,MAAA,OAAO,GAAA;AAAA,IACX,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,IAAI,CAAC,OAAA,EACL;AACI,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EAE3B,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,EAAE,IAAA,OAAW,MAAA,CAAO,IAAA;AAAA,IAAK,CAAC,KAAA;AAAA;AAAA,MAG/B,KAAA,CAAM,SAAS,IAAA,IAAQ,KAAA,CAAM,KAAK,QAAA,CAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG;AAAA;AAAA,GACzD,KAAK,EAAC;AAEX,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA;AAAA,GACJ;AACJ;;;;"}