async generateBuffers(geometryBatch, transform) {
    let filteredBatch = geometryBatch;
    if (this.featureFilter_) {
      filteredBatch = filteredBatch.filter(this.featureFilter_);
      if (filteredBatch.isEmpty()) {
        return null;
      }
    }
    const renderInstructions = this.generateRenderInstructions_(
      filteredBatch,
      transform,
    );
    const [polygonBuffers, lineStringBuffers, pointBuffers] = await Promise.all(
      [
        this.generateBuffersForType_(
          renderInstructions.polygonInstructions,
          'Polygon',
          transform,
        ),
        this.generateBuffersForType_(
          renderInstructions.lineStringInstructions,
          'LineString',
          transform,
        ),
        this.generateBuffersForType_(
          renderInstructions.pointInstructions,
          'Point',
          transform,
        ),
      ],
    );
    // also return the inverse of the transform that was applied when generating buffers
    const invertVerticesTransform = makeInverseTransform(
      createTransform(),
      transform,
    );
    return {
      polygonBuffers: polygonBuffers,
      lineStringBuffers: lineStringBuffers,
      pointBuffers: pointBuffers,
      invertVerticesTransform: invertVerticesTransform,
    };
  }
@param {import('./MixedGeometryBatch.js').default} geometryBatch Geometry batch
@param {import("../../transform.js").Transform} transform Transform to apply to coordinates
@return {Promise<WebGLBuffers|null>} A promise resolving to WebGL buffers; returns null if buffers are empty