setupDepthTexture method

void setupDepthTexture(
  1. dynamic framebuffer,
  2. RenderTarget renderTarget
)

Implementation

void setupDepthTexture(framebuffer, RenderTarget renderTarget) {
  var isCube = (renderTarget.isWebGLCubeRenderTarget);
  if (isCube) {
    throw ('Depth Texture with cube render targets is not supported');
  }

  state.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);

  if (!(renderTarget.depthTexture != null &&
      renderTarget.depthTexture is DepthTexture)) {
    throw ('renderTarget.depthTexture must be an instance of THREE.DepthTexture');
  }

  // upload an empty depth texture with framebuffer size
  final depthTexture = renderTarget.depthTexture!;
  if (properties.get(depthTexture)["__webglTexture"] == null ||
      depthTexture.image.width != renderTarget.width ||
      depthTexture.image.height != renderTarget.height) {
    depthTexture.image.width = renderTarget.width;
    depthTexture.image.height = renderTarget.height;
    depthTexture.needsUpdate = true;
  }

  setTexture2D(depthTexture, 0);

  var webglDepthTexture =
      properties.get(depthTexture)["__webglTexture"];
  var samples = getRenderTargetSamples(renderTarget);

  if (depthTexture.format == DepthFormat) {
    if (useMultisampledRenderToTexture(renderTarget)) {
      MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT(
          gl.FRAMEBUFFER,
          gl.DEPTH_ATTACHMENT,
          gl.TEXTURE_2D,
          webglDepthTexture,
          0,
          samples);
    } else {
      gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,
          gl.TEXTURE_2D, webglDepthTexture, 0);
    }
  } else if (depthTexture.format == DepthStencilFormat) {
    if (useMultisampledRenderToTexture(renderTarget)) {
      MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT(
          _gl.FRAMEBUFFER,
          _gl.DEPTH_STENCIL_ATTACHMENT,
          _gl.TEXTURE_2D,
          webglDepthTexture,
          0,
          samples);
    } else {
      _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT,
          _gl.TEXTURE_2D, webglDepthTexture, 0);
    }
  } else {
    throw ('Unknown depthTexture format');
  }
}