function makePseudoShaderWithInputsAndOutputAndCode(inputs, output, bodyCode) {
    let shader = combinedShaderPartsWithCode([...inputs, output], bodyCode);
    return (...inputsAndArgs) => {
        let args = [];
        for (let i = 0; i < inputs.length; i++) {
            args.push(...inputs[i].toConcretePart().argsFor(inputsAndArgs[i]));
        }
        args.push(...inputsAndArgs.slice(inputs.length));
        return shaderWithOutputPartAndArgs(shader, output.toConcretePart(), args)
    };
}
@param {!Array.<ShaderPartDescription>} inputs
@param {!ShaderPartDescription} output
@param {!string} bodyCode
@returns {!function(args: ...(!!WglTexture|!WglArg)) : !WglConfiguredShader}