Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | 1x 1x | import * as macro from 'vtk.js/Sources/macros'; // ---------------------------------------------------------------------------- // vtkWebGPUPipeline methods // ---------------------------------------------------------------------------- function vtkWebGPUPipeline(publicAPI, model) { // Set our className model.classHierarchy.push('vtkWebGPUPipeline'); publicAPI.getShaderDescriptions = () => model.shaderDescriptions; publicAPI.initialize = (device, hash) => { // start with the renderencoder settings model.pipelineDescription = model.renderEncoder.getPipelineSettings(); model.pipelineDescription.primitive.topology = model.topology; model.pipelineDescription.vertex = model.vertexState; model.pipelineDescription.label = hash; // add in bind group layouts const bindGroupLayouts = []; for (let i = 0; i < model.layouts.length; i++) { bindGroupLayouts.push(model.layouts[i].layout); } model.pipelineLayout = device .getHandle() .createPipelineLayout({ bindGroupLayouts }); model.pipelineDescription.layout = model.pipelineLayout; for (let i = 0; i < model.shaderDescriptions.length; i++) { const sd = model.shaderDescriptions[i]; const sm = device.getShaderModule(sd); if (sd.getType() === 'vertex') { model.pipelineDescription.vertex.module = sm.getHandle(); model.pipelineDescription.vertex.entryPoint = 'main'; } if (sd.getType() === 'fragment') { model.pipelineDescription.fragment.module = sm.getHandle(); model.pipelineDescription.fragment.entryPoint = 'main'; } } model.handle = device .getHandle() .createRenderPipeline(model.pipelineDescription); }; publicAPI.getShaderDescription = (stype) => { for (let i = 0; i < model.shaderDescriptions.length; i++) { if (model.shaderDescriptions[i].getType() === stype) return model.shaderDescriptions[i]; } return null; }; publicAPI.addBindGroupLayout = (bindGroup) => { if (!bindGroup) { return; } model.layouts.push({ layout: bindGroup.getBindGroupLayout(model.device), label: bindGroup.getLabel(), }); }; publicAPI.getBindGroupLayout = (idx) => model.layouts[idx].layout; publicAPI.getBindGroupLayoutCount = (llabel) => { for (let i = 0; i < model.layouts.length; i++) { if (model.layouts[i].label === llabel) { return i; } } return 0; }; publicAPI.bindVertexInput = (renderEncoder, vInput) => { vInput.bindBuffers(renderEncoder); }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const DEFAULT_VALUES = { handle: null, layouts: null, renderEncoder: null, shaderDescriptions: null, vertexState: null, topology: null, pipelineDescription: null, }; // ---------------------------------------------------------------------------- export function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API macro.obj(publicAPI, model); model.layouts = []; model.shaderDescriptions = []; macro.get(publicAPI, model, ['handle', 'pipelineDescription']); macro.setGet(publicAPI, model, [ 'device', 'renderEncoder', 'topology', 'vertexState', ]); // For more macro methods, see "Sources/macros.js" // Object specific methods vtkWebGPUPipeline(publicAPI, model); } // ---------------------------------------------------------------------------- export const newInstance = macro.newInstance(extend, 'vtkWebGPUPipeline'); // ---------------------------------------------------------------------------- export default { newInstance, extend }; |