renderFilter method

  1. @override
void renderFilter(
  1. RenderState renderState,
  2. RenderTextureQuad renderTextureQuad,
  3. int pass
)
override

Implementation

@override
void renderFilter(
    RenderState renderState, RenderTextureQuad renderTextureQuad, int pass) {
  final renderContext = renderState.renderContext as RenderContextWebGL;
  final renderTexture = renderTextureQuad.renderTexture;
  final passCount = _renderPassSources.length;
  final passScale = pow(0.5, pass >> 1);
  final pixelRatio = sqrt(renderState.globalMatrix.det.abs());
  final pixelRatioScale = pixelRatio * passScale;
  final pixelRatioDistance = pixelRatio * distance;

  if (pass == passCount - 1) {
    if (!knockout && !hideObject) {
      renderContext.renderTextureQuad(renderState, renderTextureQuad);
    }
  } else {
    final renderProgram = renderContext.getRenderProgram(
        r'$DropShadowFilterProgram', DropShadowFilterProgram.new);

    renderContext.activateRenderProgram(renderProgram);
    renderContext.activateRenderTexture(renderTexture);

    renderProgram.configure(
        pass == passCount - 2 ? color : color | 0xFF000000,
        pass == passCount - 2 ? renderState.globalAlpha : 1.0,
        pass == 0
            ? pixelRatioDistance * cos(angle) / renderTexture.width
            : 0.0,
        pass == 0
            ? pixelRatioDistance * sin(angle) / renderTexture.height
            : 0.0,
        pass.isEven ? pixelRatioScale * blurX / renderTexture.width : 0.0,
        pass.isEven ? 0.0 : pixelRatioScale * blurY / renderTexture.height);

    renderProgram.renderTextureQuad(renderState, renderTextureQuad);
    renderProgram.flush();
  }
}