import { Graphics } from '@pixi/graphics';
import { CanvasRenderer } from '@pixi/canvas-renderer';
import { RenderTexture, Texture } from '@pixi/core';
import { Matrix } from '@pixi/math';
let canvasRenderer;
const tempMatrix = new Matrix();
/**
* Generates a canvas texture.
* @method generateCanvasTexture
* @memberof PIXI.Graphics#
* @param {number} scaleMode - The scale mode of the texture.
* @param {number} resolution - The resolution of the texture.
* @return {PIXI.Texture} The new texture.
*/
Graphics.prototype.generateCanvasTexture = function generateCanvasTexture(scaleMode, resolution = 1)
{
const bounds = this.getLocalBounds();
const canvasBuffer = RenderTexture.create(bounds.width, bounds.height, scaleMode, resolution);
if (!canvasRenderer)
{
canvasRenderer = new CanvasRenderer();
}
this.transform.updateLocalTransform();
this.transform.localTransform.copyTo(tempMatrix);
tempMatrix.invert();
tempMatrix.tx -= bounds.x;
tempMatrix.ty -= bounds.y;
canvasRenderer.render(this, canvasBuffer, true, tempMatrix);
const texture = Texture.fromCanvas(canvasBuffer.baseTexture._canvasRenderTarget.canvas, scaleMode, 'graphics');
texture.baseTexture.resolution = resolution;
texture.baseTexture.update();
return texture;
};
/**
* Renders the object using the Canvas renderer
*
* @method _renderCanvas
* @memberof PIXI.Graphics#
* @private
* @param {PIXI.CanvasRenderer} renderer - The renderer
*/
Graphics.prototype._renderCanvas = function _renderCanvas(renderer)
{
if (this.isMask === true)
{
return;
}
renderer.plugins.graphics.render(this);
};