drawBuffers method

void drawBuffers(
  1. RenderTarget? renderTarget,
  2. Framebuffer? framebuffer
)

Implementation

void drawBuffers(RenderTarget? renderTarget, Framebuffer? framebuffer) {
  List? drawBuffers = defaultDrawbuffers;

  bool needsUpdate = false;

  if (renderTarget != null) {
    drawBuffers = currentDrawbuffers.get(framebuffer);

    if (drawBuffers == null) {
      drawBuffers = [];
      currentDrawbuffers.set(framebuffer, drawBuffers);
    }

    final textures = renderTarget.textures;

    if (drawBuffers.length != textures.length || (drawBuffers.isNotEmpty && drawBuffers[0] != WebGL.COLOR_ATTACHMENT0)) {
      for (int i = 0, il = textures.length; i < il; i++) {
        if(drawBuffers.length <= i){
          drawBuffers.add(WebGL.COLOR_ATTACHMENT0 + i);
        }else{
          drawBuffers[i] = WebGL.COLOR_ATTACHMENT0 + i;
        }
      }

      drawBuffers.length = textures.length;

      needsUpdate = true;
    }
  }
  else {
    if (drawBuffers.isEmpty || drawBuffers[0] != WebGL.BACK) {
      if (drawBuffers.isEmpty) {
        drawBuffers.add(WebGL.BACK);
      } else {
        drawBuffers[0] = WebGL.BACK;
      }

      drawBuffers.length = 1;
      needsUpdate = true;
    }
  }

  if (needsUpdate) {
    Uint32Array buf = Uint32Array.fromList(List<int>.from(drawBuffers));
    gl.drawBuffers(buf);
    buf.dispose();
  }
}