Source: renderer/BatchRenderer.js

import { BaseRenderer } from "./BaseRenderer";
import { Buffer } from "../utils/Buffer";

/**
 * @typedef {Object} BatchRendererConfig
 * @extends {RendererConfig}
 */

/**
 * <pre>
 *  Batch Renderer
 *    - It renders multiple items
 * </pre>
 * @extends {BaseRenderer}
 */
export class BatchRenderer extends BaseRenderer {
  /**
   * Creates an instance of BatchRenderer.
   * @constructor
   * @param {RendererConfig} options
   */
  constructor(options) {
    // prettier-ignore
    options.config.locations = [
      ...options.config.locations,
      "aMt"
    ];

    super(options);

    this.$MAX_RENDER_COUNT = options.maxRenderCount || 10000;

    this.$matrixBuffer = new Buffer("aMt", this.$MAX_RENDER_COUNT, 4, 4);
  }

  /**
   * @ignore
   */
  $uploadBuffers() {
    this.$matrixBuffer.upload(this.$gl, this.$enableBuffers);
    super.$uploadBuffers();
  }

  /**
   * @ignore
   */
  $createBuffers() {
    super.$createBuffers();
    this.$matrixBuffer.create(this.$gl, this.$locations);
  }
}