render method

  1. @override
void render(
  1. Renderer renderer,
  2. RenderTarget writeBuffer,
  3. RenderTarget readBuffer, {
  4. double? deltaTime,
  5. bool? maskActive,
})
override

Implementation

@override
void render(Renderer renderer, RenderTarget writeBuffer, RenderTarget readBuffer,{double? deltaTime, bool? maskActive}) {
  renderer.getClearColor(oldClearColor);
  oldClearAlpha = renderer.getClearAlpha();
  final oldAutoClear = renderer.autoClear;
  renderer.autoClear = false;

  renderer.setClearColor(clearColor, 1);

  if (maskActive == true) renderer.state.buffers['stencil'].setTest(false);

  // Render input to screen

  if (renderToScreen) {
    fsQuad.material = basic;
    basic.map = readBuffer.texture;

    renderer.setRenderTarget(null);
    renderer.clear();
    fsQuad.render(renderer);
  }

  // 1. Extract Bright Areas

  highPassUniforms['tDiffuse']["value"] = readBuffer.texture;
  highPassUniforms['luminosityThreshold']["value"] = threshold;
  fsQuad.material = materialHighPassFilter;

  renderer.setRenderTarget(renderTargetBright);
  renderer.clear();
  fsQuad.render(renderer);

  // 2. Blur All the mips progressively

  RenderTarget inputRenderTarget = renderTargetBright;

  for (int i = 0; i < nMips; i++) {
    fsQuad.material = separableBlurMaterials[i];

    separableBlurMaterials[i].uniforms['colorTexture']["value"] = inputRenderTarget.texture;
    separableBlurMaterials[i].uniforms['direction']["value"] = UnrealBloomPass.blurDirectionX;
    renderer.setRenderTarget(renderTargetsHorizontal[i]);
    renderer.clear();
    fsQuad.render(renderer);

    separableBlurMaterials[i].uniforms['colorTexture']["value"] = renderTargetsHorizontal[i].texture;
    separableBlurMaterials[i].uniforms['direction']["value"] = UnrealBloomPass.blurDirectionY;
    renderer.setRenderTarget(renderTargetsVertical[i]);
    renderer.clear();
    fsQuad.render(renderer);

    inputRenderTarget = renderTargetsVertical[i];
  }

  // Composite All the mips

  fsQuad.material = compositeMaterial;
  compositeMaterial.uniforms['bloomStrength']["value"] = this.strength;
  compositeMaterial.uniforms['bloomRadius']["value"] = radius;
  compositeMaterial.uniforms['bloomTintColors']["value"] = bloomTintColors;

  renderer.setRenderTarget(renderTargetsHorizontal[0]);
  renderer.clear();
  fsQuad.render(renderer);

  // Blend it additively over the input texture

  fsQuad.material = blendMaterial;
  copyUniforms['tDiffuse']["value"] = renderTargetsHorizontal[0].texture;

  if (maskActive == true) renderer.state.buffers['stencil'].setTest(true);

  if (renderToScreen) {
    renderer.setRenderTarget(null);
    fsQuad.render(renderer);
  } else {
    renderer.setRenderTarget(readBuffer);
    fsQuad.render(renderer);
  }

  // Restore renderer settings

  renderer.setClearColor(oldClearColor, oldClearAlpha);
  renderer.autoClear = oldAutoClear;
}