function FramebufferManager(options) {
  options = options ?? Frozen.EMPTY_OBJECT;
  this._numSamples = options.numSamples ?? 1;
  this._colorAttachmentsLength = options.colorAttachmentsLength ?? 1;

  this._color = options.color ?? true;
  this._depth = options.depth ?? false;
  this._depthStencil = options.depthStencil ?? false;
  this._supportsDepthTexture = options.supportsDepthTexture ?? false;
  //>>includeStart('debug', pragmas.debug);
  if (!this._color && !this._depth && !this._depthStencil) {
    throw new DeveloperError(
      "Must enable at least one type of framebuffer attachment.",
    );
  }
  if (this._depth && this._depthStencil) {
    throw new DeveloperError(
      "Cannot have both a depth and depth-stencil attachment.",
    );
  }
  //>>includeEnd('debug');

  this._createColorAttachments = options.createColorAttachments ?? true;
  this._createDepthAttachments = options.createDepthAttachments ?? true;

  this._pixelDatatype = options.pixelDatatype;
  this._pixelFormat = options.pixelFormat;

  this._width = undefined;
  this._height = undefined;

  this._framebuffer = undefined;
  this._multisampleFramebuffer = undefined;
  this._colorTextures = undefined;
  if (this._color) {
    this._colorTextures = new Array(this._colorAttachmentsLength);
    this._colorRenderbuffers = new Array(this._colorAttachmentsLength);
  }
  this._colorRenderbuffer = undefined;
  this._depthStencilRenderbuffer = undefined;
  this._depthStencilTexture = undefined;
  this._depthRenderbuffer = undefined;
  this._depthTexture = undefined;

  this._attachmentsDirty = false;
}
Creates a wrapper object around a framebuffer and its resources.

@param {object} options Object with the following properties:
@param {number} [options.numSamples=1] The multisampling rate of the render targets. Requires a WebGL2 context.
@param {number} [options.colorAttachmentsLength=1] The number of color attachments this FramebufferManager will create.
@param {boolean} [options.color=true] Whether the FramebufferManager will use color attachments.
@param {boolean} [options.depth=false] Whether the FramebufferManager will use depth attachments.
@param {boolean} [options.depthStencil=false] Whether the FramebufferManager will use depth-stencil attachments.
@param {boolean} [options.supportsDepthTexture=false] Whether the FramebufferManager will create a depth texture when the extension is supported.
@param {boolean} [options.createColorAttachments=true] Whether the FramebufferManager will construct its own color attachments.
@param {boolean} [options.createDepthAttachments=true] Whether the FramebufferManager will construct its own depth attachments.
@param {PixelDatatype} [options.pixelDatatype=undefined] The default pixel datatype to use when creating color attachments.
@param {PixelFormat} [options.pixelFormat=undefined] The default pixel format to use when creating color attachments.

@exception {DeveloperError} Must enable at least one type of framebuffer attachment.
@exception {DeveloperError} Cannot have both a depth and depth-stencil attachment.

@private
@constructor