renderFilter method
void
renderFilter(
- RenderState renderState,
- RenderTextureQuad renderTextureQuad,
- 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();
}
}