UNPKG

@luma.gl/engine

Version:

3D Engine Components for luma.gl

46 lines 1.75 kB
// luma.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors export function mergeShaderModuleBindingsIntoLayout(shaderLayout, modules) { if (!shaderLayout || !modules.some(module => module.bindingLayout?.length)) { return shaderLayout; } const mergedLayout = { ...shaderLayout, bindings: shaderLayout.bindings.map(binding => ({ ...binding })) }; if ('attributes' in (shaderLayout || {})) { mergedLayout.attributes = shaderLayout?.attributes || []; } for (const module of modules) { for (const bindingLayout of module.bindingLayout || []) { for (const relatedBindingName of getRelatedBindingNames(bindingLayout.name)) { const binding = mergedLayout.bindings.find(candidate => candidate.name === relatedBindingName); if (binding?.group === 0) { binding.group = bindingLayout.group; } } } } return mergedLayout; } export function shaderModuleHasUniforms(module) { return Boolean(module.uniformTypes && !isObjectEmpty(module.uniformTypes)); } /** Returns binding-name aliases that should share the module-declared bind group. */ function getRelatedBindingNames(bindingName) { const bindingNames = new Set([bindingName, `${bindingName}Uniforms`]); if (!bindingName.endsWith('Uniforms')) { bindingNames.add(`${bindingName}Sampler`); } return [...bindingNames]; } function isObjectEmpty(obj) { // @ts-ignore key is intentionally unused // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const key in obj) { return false; } return true; } //# sourceMappingURL=shader-module-utils.js.map