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">
54 lines (50 loc) • 1.7 kB
JavaScript
;
var getAttributeInfoFromFormat = require('../../../shared/geometry/utils/getAttributeInfoFromFormat.js');
;
const WGSL_TO_VERTEX_TYPES = {
f32: "float32",
"vec2<f32>": "float32x2",
"vec3<f32>": "float32x3",
"vec4<f32>": "float32x4",
vec2f: "float32x2",
vec3f: "float32x3",
vec4f: "float32x4",
i32: "sint32",
"vec2<i32>": "sint32x2",
"vec3<i32>": "sint32x3",
"vec4<i32>": "sint32x4",
u32: "uint32",
"vec2<u32>": "uint32x2",
"vec3<u32>": "uint32x3",
"vec4<u32>": "uint32x4",
bool: "uint32",
"vec2<bool>": "uint32x2",
"vec3<bool>": "uint32x3",
"vec4<bool>": "uint32x4"
};
function extractAttributesFromGpuProgram({ source, entryPoint }) {
const results = {};
const mainVertStart = source.indexOf(`fn ${entryPoint}`);
if (mainVertStart !== -1) {
const arrowFunctionStart = source.indexOf("->", mainVertStart);
if (arrowFunctionStart !== -1) {
const functionArgsSubstring = source.substring(mainVertStart, arrowFunctionStart);
const inputsRegex = /@location\((\d+)\)\s+([a-zA-Z0-9_]+)\s*:\s*([a-zA-Z0-9_<>]+)(?:,|\s|$)/g;
let match;
while ((match = inputsRegex.exec(functionArgsSubstring)) !== null) {
const format = WGSL_TO_VERTEX_TYPES[match[3]] ?? "float32";
results[match[2]] = {
location: parseInt(match[1], 10),
format,
stride: getAttributeInfoFromFormat.getAttributeInfoFromFormat(format).stride,
offset: 0,
instance: false,
start: 0
};
}
}
}
return results;
}
exports.extractAttributesFromGpuProgram = extractAttributesFromGpuProgram;
//# sourceMappingURL=extractAttributesFromGpuProgram.js.map