typegpu
Version:
A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.
32 lines (31 loc) • 1.08 kB
JavaScript
import { isBuiltin } from "../../data/attributes.js";
import { isVoid, isWgslStruct } from "../../data/wgslTypes.js";
export function connectTargetsToShader(fragmentOut, targets) {
let presentationFormat;
if (isVoid(fragmentOut) || isBuiltin(fragmentOut)) {
return [null];
}
if (isWgslStruct(fragmentOut)) {
const result = [];
for (const key of Object.keys(fragmentOut.propTypes)) {
const outputValue = fragmentOut.propTypes[key];
if (isBuiltin(outputValue)) {
continue;
}
const matchingTarget = targets[key];
result.push({
...matchingTarget,
format: matchingTarget?.format ??
(presentationFormat ??= navigator.gpu.getPreferredCanvasFormat()),
});
}
return result;
}
const singleTarget = targets;
return [
{
...singleTarget,
format: singleTarget?.format ?? (presentationFormat ??= navigator.gpu.getPreferredCanvasFormat()),
},
];
}