static _createMainImageryShader(shaderBuilder, imageryInputs, imageryFlags) {
    const functionId = "blendBaseColorWithImagery";
    shaderBuilder.addFunction(
      functionId,
      `vec4 blendBaseColorWithImagery(vec4 baseColorWithAlpha)`,
      ShaderDestination.FRAGMENT,
    );
    shaderBuilder.addFunctionLines(functionId, [
      `vec4 blendedBaseColor = baseColorWithAlpha;`,
    ]);

    // Roughly what was done in https://github.com/CesiumGS/cesium/blob/6cc004aaff586bb59f07f199216ae511014cf5a9/packages/engine/Source/Scene/GlobeSurfaceShaderSet.js#L394
    for (let i = 0; i < imageryInputs.length; i++) {
      const imageryInput = imageryInputs[i];
      const imageryTexCoordAttributeSetIndex =
        imageryInput.imageryTexCoordAttributeSetIndex;
      const argsString =
        ImageryPipelineStage._createSampleAndBlendCallArguments(
          imageryFlags,
          imageryTexCoordAttributeSetIndex,
          i,
        );
      shaderBuilder.addFunctionLines(functionId, [
        `blendedBaseColor = sampleAndBlend(${argsString});`,
      ]);
    }

    shaderBuilder.addFunctionLines(functionId, [`return blendedBaseColor;`]);
  }
Creates the main part of the imagery shader.

It adds the `blendBaseColorWithImagery` function, which is to be
called in the `MaterialStageFS.glsl` when the `HAS_IMAGERY`
flag was set in the shader.

The `blendBaseColorWithImagery` function will go through all imagery
layers in the input, and call the `sampleAndBlend` function, to
incorporate the imagery input in the resulting pixel.

@param {ShaderBuilder} shaderBuilder The shader builder
@param {ImageryInput[]} imageryInputs The imagery inputs
@param {ImageryFlags} imageryFlags The imagery flags