import glCore from 'pixi-gl-core'; const defaultValue = glCore.shader.defaultValue; function extractAttributesFromSrc(vertexSrc, mask) { const vertAttributes = extractAttributesFromString(vertexSrc, mask); return vertAttributes; } function extractAttributesFromString(string) { const maskRegex = new RegExp('^(projectionMatrix|uSampler|filterArea)$'); const attributesArray = []; let nameSplit; const a = 20; // clean the lines a little - remove extra spaces / teabs etc // then split along ';' const lines = string.replace(/\s+/g, ' ') .split(/\s*;\s*/); // loop through.. for (let i = 0; i < lines.length; i++) { const line = lines[i].trim(); if (line.indexOf('attribute') > -1) { const splitLine = line.split(' '); const type = splitLine[1]; let name = splitLine[2]; let size = 1; if (name.indexOf('[') > -1) { // array! nameSplit = name.split(/\[|\]/); name = nameSplit[0]; size *= Number(nameSplit[1]); } if (!name.match(maskRegex)) { attributesArray.push({ value: defaultValue(type, size), name, location: 0, type, }); } } } attributesArray.sort(function (a, b) { return (a.name > b.name) ? 1 : -1; }); const attributes = {}; // now lets sort them alphabetically.. for (let i = 0; i < attributesArray.length; i++) { const attrib = attributesArray[i]; attrib.location = i; attributes[attrib.name] = attrib; } return attributes; } export default extractAttributesFromSrc;