@kitware/vtk.js
Version:
Visualization Toolkit for the Web
112 lines (98 loc) • 3.36 kB
JavaScript
import { m as macro } from '../../macros2.js';
// ----------------------------------------------------------------------------
// vtkWebGPUBindGroup methods
// ----------------------------------------------------------------------------
function vtkWebGPUBindGroup(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkWebGPUBindGroup');
publicAPI.setBindables = bindables => {
// is there a difference between the old and new list?
if (model.bindables.length === bindables.length) {
let allMatch = true;
for (let i = 0; i < model.bindables.length; i++) {
if (model.bindables[i] !== bindables[i]) {
allMatch = false;
}
}
if (allMatch) {
return;
}
}
// there is a difference
model.bindables = bindables;
publicAPI.modified();
};
publicAPI.getBindGroupLayout = device => {
const entries = [];
for (let i = 0; i < model.bindables.length; i++) {
const entry = model.bindables[i].getBindGroupLayoutEntry();
entry.binding = i;
entries.push(entry);
}
return device.getBindGroupLayout({
entries
});
};
publicAPI.getBindGroup = device => {
// check mtime
let mtime = publicAPI.getMTime();
for (let i = 0; i < model.bindables.length; i++) {
const tm = model.bindables[i].getBindGroupTime().getMTime();
mtime = tm > mtime ? tm : mtime;
}
if (mtime < model.bindGroupTime.getMTime()) {
return model.bindGroup;
}
const entries = [];
for (let i = 0; i < model.bindables.length; i++) {
const entry = model.bindables[i].getBindGroupEntry();
entry.binding = i;
entries.push(entry);
}
model.bindGroup = device.getHandle().createBindGroup({
layout: publicAPI.getBindGroupLayout(device),
entries,
label: model.label
});
model.bindGroupTime.modified();
return model.bindGroup;
};
publicAPI.getShaderCode = pipeline => {
const lines = [];
const bgroup = pipeline.getBindGroupLayoutCount(model.label);
for (let i = 0; i < model.bindables.length; i++) {
lines.push(model.bindables[i].getShaderCode(i, bgroup));
}
return lines.join('\n');
};
}
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
const DEFAULT_VALUES = {
device: null,
handle: null,
label: null
};
// ----------------------------------------------------------------------------
function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);
// Object methods
macro.obj(publicAPI, model);
model.bindables = [];
model.bindGroupTime = {};
macro.obj(model.bindGroupTime, {
mtime: 0
});
macro.get(publicAPI, model, ['bindGroupTime', 'handle', 'sizeInBytes', 'usage']);
macro.setGet(publicAPI, model, ['label', 'device', 'arrayInformation']);
vtkWebGPUBindGroup(publicAPI, model);
}
// ----------------------------------------------------------------------------
const newInstance = macro.newInstance(extend);
// ----------------------------------------------------------------------------
var vtkWebGPUBindGroup$1 = {
newInstance,
extend
};
export { vtkWebGPUBindGroup$1 as default, extend, newInstance };