@luma.gl/core
Version:
The luma.gl core Device API
41 lines • 1.71 kB
JavaScript
// 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