import { ParticleContainer } from '@pixi/particles'; /** * Renders the object using the Canvas renderer * * @private * @param {PIXI.CanvasRenderer} renderer - a reference to the canvas renderer */ ParticleContainer.prototype.renderCanvas = function renderCanvas(renderer) { if (!this.visible || this.worldAlpha <= 0 || !this.children.length || !this.renderable) { return; } const context = renderer.context; const transform = this.worldTransform; let isRotated = true; let positionX = 0; let positionY = 0; let finalWidth = 0; let finalHeight = 0; renderer.setBlendMode(this.blendMode); context.globalAlpha = this.worldAlpha; this.displayObjectUpdateTransform(); for (let i = 0; i < this.children.length; ++i) { const child = this.children[i]; if (!child.visible) { continue; } const frame = child._texture.frame; context.globalAlpha = this.worldAlpha * child.alpha; if (child.rotation % (Math.PI * 2) === 0) { // this is the fastest way to optimise! - if rotation is 0 then we can avoid any kind of setTransform call if (isRotated) { context.setTransform( transform.a, transform.b, transform.c, transform.d, transform.tx * renderer.resolution, transform.ty * renderer.resolution ); isRotated = false; } positionX = ((child.anchor.x) * (-frame.width * child.scale.x)) + child.position.x + 0.5; positionY = ((child.anchor.y) * (-frame.height * child.scale.y)) + child.position.y + 0.5; finalWidth = frame.width * child.scale.x; finalHeight = frame.height * child.scale.y; } else { if (!isRotated) { isRotated = true; } child.displayObjectUpdateTransform(); const childTransform = child.worldTransform; if (renderer.roundPixels) { context.setTransform( childTransform.a, childTransform.b, childTransform.c, childTransform.d, (childTransform.tx * renderer.resolution) | 0, (childTransform.ty * renderer.resolution) | 0 ); } else { context.setTransform( childTransform.a, childTransform.b, childTransform.c, childTransform.d, childTransform.tx * renderer.resolution, childTransform.ty * renderer.resolution ); } positionX = ((child.anchor.x) * (-frame.width)) + 0.5; positionY = ((child.anchor.y) * (-frame.height)) + 0.5; finalWidth = frame.width; finalHeight = frame.height; } const resolution = child._texture.baseTexture.resolution; context.drawImage( child._texture.baseTexture.source, frame.x * resolution, frame.y * resolution, frame.width * resolution, frame.height * resolution, positionX * renderer.resolution, positionY * renderer.resolution, finalWidth * renderer.resolution, finalHeight * renderer.resolution ); } };