UNPKG

@luma.gl/core

Version:

The luma.gl core Device API

41 lines 1.71 kB
// luma.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import { log } from "../utils/log.js"; export function getShaderLayoutBinding(shaderLayout, bindingName, options) { const bindingLayout = shaderLayout.bindings.find(binding => binding.name === bindingName || `${binding.name.toLocaleLowerCase()}uniforms` === bindingName.toLocaleLowerCase()); if (!bindingLayout && !options?.ignoreWarnings) { log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)(); } return bindingLayout || null; } export function normalizeBindingsByGroup(shaderLayout, bindingsOrBindGroups) { if (!bindingsOrBindGroups) { return {}; } if (areBindingsGrouped(bindingsOrBindGroups)) { const bindGroups = bindingsOrBindGroups; return Object.fromEntries(Object.entries(bindGroups).map(([group, bindings]) => [Number(group), { ...bindings }])); } const bindGroups = {}; for (const [bindingName, binding] of Object.entries(bindingsOrBindGroups)) { const bindingLayout = getShaderLayoutBinding(shaderLayout, bindingName); const group = bindingLayout?.group ?? 0; bindGroups[group] ||= {}; bindGroups[group][bindingName] = binding; } return bindGroups; } export function flattenBindingsByGroup(bindGroups) { const bindings = {}; for (const groupBindings of Object.values(bindGroups)) { Object.assign(bindings, groupBindings); } return bindings; } function areBindingsGrouped(bindingsOrBindGroups) { const keys = Object.keys(bindingsOrBindGroups); return keys.length > 0 && keys.every(key => /^\d+$/.test(key)); } //# sourceMappingURL=bind-groups.js.map