UNPKG

@luma.gl/shadertools

Version:

Shader module system for luma.gl

69 lines (60 loc) 1.71 kB
import ShaderModule from './shader-module'; import { assert } from '../utils'; export function resolveModules(modules) { return getShaderDependencies(instantiateModules(modules)); } function getShaderDependencies(modules) { const moduleMap = {}; const moduleDepth = {}; getDependencyGraph({ modules, level: 0, moduleMap, moduleDepth }); return Object.keys(moduleDepth).sort((a, b) => moduleDepth[b] - moduleDepth[a]).map(name => moduleMap[name]); } function getDependencyGraph(_ref) { let { modules, level, moduleMap, moduleDepth } = _ref; if (level >= 5) { throw new Error('Possible loop in shader dependency graph'); } for (const module of modules) { moduleMap[module.name] = module; if (moduleDepth[module.name] === undefined || moduleDepth[module.name] < level) { moduleDepth[module.name] = level; } } for (const module of modules) { if (module.dependencies) { getDependencyGraph({ modules: module.dependencies, level: level + 1, moduleMap, moduleDepth }); } } } function instantiateModules(modules, seen) { return modules.map(module => { if (module instanceof ShaderModule) { return module; } assert(typeof module !== 'string', "Shader module use by name is deprecated. Import shader module '".concat(module, "' and use it directly.")); assert(module.name, 'shader module has no name'); module = new ShaderModule(module); module.dependencies = instantiateModules(module.dependencies); return module; }); } export const TEST_EXPORTS = { getShaderDependencies, getDependencyGraph }; //# sourceMappingURL=resolve-modules.js.map