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 kB
Source Map (JSON)
{"version":3,"file":"createUboElementsSTD40.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/createUboElementsSTD40.ts"],"sourcesContent":["import type { UboElement, UboLayout, UniformData } from '../../../shared/shader/types';\n\n/** @internal */\nexport const WGSL_TO_STD40_SIZE: Record<string, number> = {\n f32: 4,\n i32: 4,\n 'vec2<f32>': 8,\n 'vec3<f32>': 12,\n 'vec4<f32>': 16,\n\n 'vec2<i32>': 8,\n 'vec3<i32>': 12,\n 'vec4<i32>': 16,\n\n 'mat2x2<f32>': 16 * 2,\n 'mat3x3<f32>': 16 * 3,\n 'mat4x4<f32>': 16 * 4,\n\n // TODO - not essential for now but support these in the future\n // int: 4,\n // ivec2: 8,\n // ivec3: 12,\n // ivec4: 16,\n\n // uint: 4,\n // uvec2: 8,\n // uvec3: 12,\n // uvec4: 16,\n\n // bool: 4,\n // bvec2: 8,\n // bvec3: 12,\n // bvec4: 16,\n\n // mat2: 16 * 2,\n // mat3: 16 * 3,\n // mat4: 16 * 4,\n};\n\n/**\n * @param uniformData\n * @internal\n */\nexport function createUboElementsSTD40(uniformData: UniformData[]): UboLayout\n{\n const uboElements: UboElement[] = uniformData.map((data: UniformData) =>\n ({\n data,\n offset: 0,\n size: 0,\n }));\n\n const chunkSize = 16;\n\n let size = 0;\n let offset = 0;\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n\n size = WGSL_TO_STD40_SIZE[uboElement.data.type];\n\n if (!size)\n {\n throw new Error(`Unknown type ${uboElement.data.type}`);\n }\n\n if (uboElement.data.size > 1)\n {\n size = Math.max(size, chunkSize) * uboElement.data.size;\n }\n\n const boundary = size === 12 ? 16 : size;\n\n uboElement.size = size;\n\n const curOffset = offset % chunkSize;\n\n if (curOffset > 0 && chunkSize - curOffset < boundary)\n {\n offset += (chunkSize - curOffset) % 16;\n }\n else\n {\n offset += (size - (curOffset % size)) % size;\n }\n\n uboElement.offset = offset;\n offset += size;\n }\n\n offset = Math.ceil(offset / 16) * 16;\n\n return { uboElements, size: offset };\n}\n\n"],"names":[],"mappings":";AAGO,MAAM,kBAAA,GAA6C;AAAA,EACtD,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,EAAA;AAAA,EACb,WAAA,EAAa,EAAA;AAAA,EAEb,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,EAAA;AAAA,EACb,WAAA,EAAa,EAAA;AAAA,EAEb,eAAe,EAAA,GAAK,CAAA;AAAA,EACpB,eAAe,EAAA,GAAK,CAAA;AAAA,EACpB,eAAe,EAAA,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBxB;AAMO,SAAS,uBAAuB,WAAA,EACvC;AACI,EAAA,MAAM,WAAA,GAA4B,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,MAC9C;AAAA,IACG,IAAA;AAAA,IACA,MAAA,EAAQ,CAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACV,CAAE,CAAA;AAEN,EAAA,MAAM,SAAA,GAAY,EAAA;AAElB,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EACxC;AACI,IAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAEhC,IAAA,IAAA,GAAO,kBAAA,CAAmB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAE9C,IAAA,IAAI,CAAC,IAAA,EACL;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1D;AAEA,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,CAAA,EAC3B;AACI,MAAA,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA,GAAI,WAAW,IAAA,CAAK,IAAA;AAAA,IACvD;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,KAAS,EAAA,GAAK,EAAA,GAAK,IAAA;AAEpC,IAAA,UAAA,CAAW,IAAA,GAAO,IAAA;AAElB,IAAA,MAAM,YAAY,MAAA,GAAS,SAAA;AAE3B,IAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,GAAY,SAAA,GAAY,QAAA,EAC7C;AACI,MAAA,MAAA,IAAA,CAAW,YAAY,SAAA,IAAa,EAAA;AAAA,IACxC,CAAA,MAEA;AACI,MAAA,MAAA,IAAA,CAAW,IAAA,GAAQ,YAAY,IAAA,IAAS,IAAA;AAAA,IAC5C;AAEA,IAAA,UAAA,CAAW,MAAA,GAAS,MAAA;AACpB,IAAA,MAAA,IAAU,IAAA;AAAA,EACd;AAEA,EAAA,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,EAAE,CAAA,GAAI,EAAA;AAElC,EAAA,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AACvC;;;;"}