Files
Foundry-VTT-Docker/resources/app/node_modules/@pixi/graphics-smooth/lib/SmoothGraphics.mjs.map
2025-01-04 00:34:03 +01:00

1 line
49 KiB
Plaintext

{"version":3,"file":"SmoothGraphics.mjs","sources":["../src/SmoothGraphics.ts"],"sourcesContent":["import {\r\n Circle,\r\n Color,\r\n Ellipse,\r\n PI_2,\r\n Point,\r\n Polygon,\r\n Rectangle,\r\n RoundedRectangle,\r\n Matrix,\r\n SHAPES,\r\n utils,\r\n Texture,\r\n State,\r\n Renderer,\r\n Shader,\r\n BLEND_MODES,\r\n DRAW_MODES,\r\n MSAA_QUALITY,\r\n} from '@pixi/core';\r\n\r\nimport { curves, Graphics, graphicsUtils, LINE_JOIN, LINE_CAP } from '@pixi/graphics';\r\nimport { SmoothGraphicsGeometry } from './SmoothGraphicsGeometry';\r\nimport { Container } from '@pixi/display';\r\n\r\nimport type { ColorSource, IShape, IPointData } from '@pixi/core';\r\nimport type { IDestroyOptions } from '@pixi/display';\r\nimport { IGraphicsBatchSettings } from './core/BatchDrawCall';\r\nimport { FillStyle } from './core/FillStyle';\r\nimport { LINE_SCALE_MODE, LineStyle } from './core/LineStyle';\r\nimport { SmoothGraphicsShader } from './SmoothShader';\r\nimport { settings } from './settings';\r\n\r\nconst UnsmoothGraphics = Graphics;\r\nconst { BezierUtils, QuadraticUtils, ArcUtils } = graphicsUtils;\r\n\r\n// a default shaders map used by graphics..\r\nconst DEFAULT_SHADERS: { [key: string]: Shader } = {};\r\n\r\nexport interface IFillStyleOptions\r\n{\r\n color?: ColorSource;\r\n alpha?: number;\r\n texture?: Texture;\r\n matrix?: Matrix;\r\n smooth?: boolean;\r\n shader?: Shader;\r\n}\r\n\r\nexport interface ILineStyleOptions extends IFillStyleOptions\r\n{\r\n width?: number;\r\n alignment?: number;\r\n scaleMode?: LINE_SCALE_MODE;\r\n cap?: LINE_CAP;\r\n join?: LINE_JOIN;\r\n miterLimit?: number;\r\n}\r\n\r\n/**\r\n * @memberof PIXI.smooth\r\n */\r\nexport class SmoothGraphics extends Container\r\n{\r\n public static readonly curves = curves;\r\n\r\n static _TEMP_POINT = new Point();\r\n\r\n public shader: Shader;\r\n public shaderSettings: IGraphicsBatchSettings;\r\n public pluginName: string;\r\n public currentPath: Polygon;\r\n\r\n protected batches: Array<any>;\r\n protected batchTint: number;\r\n protected batchDirty: number;\r\n protected vertexData: Float32Array;\r\n\r\n protected _fillStyle: FillStyle;\r\n protected _lineStyle: LineStyle;\r\n protected _matrix: Matrix;\r\n protected _holeMode: boolean;\r\n protected _transformID: number;\r\n protected _tintColor: Color;\r\n\r\n private state: State;\r\n private _geometry: SmoothGraphicsGeometry;\r\n\r\n public get geometry(): SmoothGraphicsGeometry\r\n {\r\n return this._geometry;\r\n }\r\n\r\n constructor(geometry: SmoothGraphicsGeometry = null)\r\n {\r\n super();\r\n\r\n this._geometry = geometry || new SmoothGraphicsGeometry();\r\n this._geometry.refCount++;\r\n\r\n this.shader = null;\r\n\r\n this.shaderSettings = {\r\n maxStyles: settings.SHADER_MAX_STYLES,\r\n maxTextures: settings.SHADER_MAX_TEXTURES,\r\n pixelLine: settings.PIXEL_LINE,\r\n };\r\n\r\n this.state = State.for2d();\r\n\r\n this._fillStyle = new FillStyle();\r\n\r\n this._lineStyle = new LineStyle();\r\n\r\n this._matrix = null;\r\n\r\n this._holeMode = false;\r\n\r\n this.currentPath = null;\r\n\r\n this.batches = [];\r\n\r\n this.batchTint = -1;\r\n\r\n this.batchDirty = -1;\r\n\r\n this.vertexData = null;\r\n\r\n this.pluginName = 'smooth';\r\n\r\n this._transformID = -1;\r\n\r\n // Set default\r\n this._tintColor = new Color(0xFFFFFF);\r\n this.blendMode = BLEND_MODES.NORMAL;\r\n }\r\n\r\n public clone(): SmoothGraphics\r\n {\r\n this.finishPoly();\r\n\r\n return new SmoothGraphics(this._geometry);\r\n }\r\n\r\n public set blendMode(value: BLEND_MODES)\r\n {\r\n this.state.blendMode = value;\r\n }\r\n\r\n public get blendMode(): BLEND_MODES\r\n {\r\n return this.state.blendMode;\r\n }\r\n\r\n public get tint(): ColorSource\r\n {\r\n return this._tintColor.value;\r\n }\r\n\r\n public set tint(value: ColorSource)\r\n {\r\n this._tintColor.setValue(value);\r\n }\r\n\r\n public get fill(): FillStyle\r\n {\r\n return this._fillStyle;\r\n }\r\n\r\n public get line(): LineStyle\r\n {\r\n return this._lineStyle;\r\n }\r\n\r\n public lineStyle(width: number, color?: ColorSource, alpha?: number, alignment?: number, scaleMode?: LINE_SCALE_MODE): this;\r\n\r\n public lineStyle(options?: ILineStyleOptions): this;\r\n\r\n public lineStyle(options: ILineStyleOptions | number = null,\r\n color: ColorSource = 0x0, alpha = 1, alignment = 0.5, scaleMode = settings.LINE_SCALE_MODE): this\r\n {\r\n // Support non-object params: (width, color, alpha, alignment, native)\r\n if (typeof options === 'number')\r\n {\r\n if (typeof scaleMode === 'boolean')\r\n {\r\n scaleMode = scaleMode ? LINE_SCALE_MODE.NONE : LINE_SCALE_MODE.NORMAL;\r\n }\r\n options = { width: options, color, alpha, alignment, scaleMode } as ILineStyleOptions;\r\n }\r\n else\r\n {\r\n const native: boolean = (options as any).native;\r\n\r\n if (native !== undefined)\r\n {\r\n options.scaleMode = native ? LINE_SCALE_MODE.NONE : LINE_SCALE_MODE.NORMAL;\r\n }\r\n }\r\n\r\n return this.lineTextureStyle(options);\r\n }\r\n\r\n public lineTextureStyle(options: ILineStyleOptions): this\r\n {\r\n // Apply defaults\r\n options = Object.assign({\r\n width: 0,\r\n texture: Texture.WHITE,\r\n color: (options && options.texture) ? 0xFFFFFF : 0x0,\r\n alpha: 1,\r\n matrix: null,\r\n alignment: 0.5,\r\n native: false,\r\n cap: LINE_CAP.BUTT,\r\n join: LINE_JOIN.MITER,\r\n miterLimit: 10,\r\n shader: null,\r\n scaleMode: settings.LINE_SCALE_MODE,\r\n }, options);\r\n\r\n this.normalizeColor(options);\r\n\r\n if (this.currentPath)\r\n {\r\n this.startPoly();\r\n }\r\n\r\n const visible = options.width > 0 && options.alpha > 0;\r\n\r\n if (!visible)\r\n {\r\n this._lineStyle.reset();\r\n }\r\n else\r\n {\r\n if (options.matrix)\r\n {\r\n options.matrix = options.matrix.clone();\r\n options.matrix.invert();\r\n }\r\n\r\n Object.assign(this._lineStyle, { visible }, options);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected startPoly(): void\r\n {\r\n if (this.currentPath)\r\n {\r\n const points = this.currentPath.points;\r\n const len = this.currentPath.points.length;\r\n\r\n if (len > 2)\r\n {\r\n this.drawShape(this.currentPath);\r\n this.currentPath = new Polygon();\r\n this.currentPath.closeStroke = false;\r\n this.currentPath.points.push(points[len - 2], points[len - 1]);\r\n }\r\n }\r\n else\r\n {\r\n this.currentPath = new Polygon();\r\n this.currentPath.closeStroke = false;\r\n }\r\n }\r\n\r\n finishPoly(): void\r\n {\r\n if (this.currentPath)\r\n {\r\n if (this.currentPath.points.length > 2)\r\n {\r\n this.drawShape(this.currentPath);\r\n this.currentPath = null;\r\n }\r\n else\r\n {\r\n this.currentPath.points.length = 0;\r\n }\r\n }\r\n }\r\n\r\n public moveTo(x: number, y: number): this\r\n {\r\n this.startPoly();\r\n this.currentPath.points[0] = x;\r\n this.currentPath.points[1] = y;\r\n\r\n return this;\r\n }\r\n\r\n public lineTo(x: number, y: number): this\r\n {\r\n if (!this.currentPath)\r\n {\r\n this.moveTo(0, 0);\r\n }\r\n\r\n // remove duplicates..\r\n const points = this.currentPath.points;\r\n const fromX = points[points.length - 2];\r\n const fromY = points[points.length - 1];\r\n\r\n if (fromX !== x || fromY !== y)\r\n {\r\n points.push(x, y);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _initCurve(x = 0, y = 0): void\r\n {\r\n if (this.currentPath)\r\n {\r\n if (this.currentPath.points.length === 0)\r\n {\r\n this.currentPath.points = [x, y];\r\n }\r\n }\r\n else\r\n {\r\n this.moveTo(x, y);\r\n }\r\n }\r\n\r\n public quadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): this\r\n {\r\n this._initCurve();\r\n\r\n const points = this.currentPath.points;\r\n\r\n if (points.length === 0)\r\n {\r\n this.moveTo(0, 0);\r\n }\r\n\r\n QuadraticUtils.curveTo(cpX, cpY, toX, toY, points);\r\n\r\n return this;\r\n }\r\n\r\n public bezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): this\r\n {\r\n this._initCurve();\r\n\r\n BezierUtils.curveTo(cpX, cpY, cpX2, cpY2, toX, toY, this.currentPath.points);\r\n\r\n return this;\r\n }\r\n\r\n public arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this\r\n {\r\n this._initCurve(x1, y1);\r\n\r\n const points = this.currentPath.points;\r\n\r\n const result = ArcUtils.curveTo(x1, y1, x2, y2, radius, points);\r\n\r\n if (result)\r\n {\r\n const { cx, cy, radius, startAngle, endAngle, anticlockwise } = result;\r\n\r\n this.arc(cx, cy, radius, startAngle, endAngle, anticlockwise);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public arc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise = false): this\r\n {\r\n if (startAngle === endAngle)\r\n {\r\n return this;\r\n }\r\n\r\n if (!anticlockwise && endAngle <= startAngle)\r\n {\r\n endAngle += PI_2;\r\n }\r\n else if (anticlockwise && startAngle <= endAngle)\r\n {\r\n startAngle += PI_2;\r\n }\r\n\r\n const sweep = endAngle - startAngle;\r\n\r\n if (sweep === 0)\r\n {\r\n return this;\r\n }\r\n\r\n const startX = cx + (Math.cos(startAngle) * radius);\r\n const startY = cy + (Math.sin(startAngle) * radius);\r\n const eps = this._geometry.closePointEps;\r\n\r\n // If the currentPath exists, take its points. Otherwise call `moveTo` to start a path.\r\n let points = this.currentPath ? this.currentPath.points : null;\r\n\r\n if (points)\r\n {\r\n // TODO: make a better fix.\r\n\r\n // We check how far our start is from the last existing point\r\n const xDiff = Math.abs(points[points.length - 2] - startX);\r\n const yDiff = Math.abs(points[points.length - 1] - startY);\r\n\r\n if (xDiff < eps && yDiff < eps)\r\n {\r\n // If the point is very close, we don't add it, since this would lead to artifacts\r\n // during tessellation due to floating point imprecision.\r\n }\r\n else\r\n {\r\n points.push(startX, startY);\r\n }\r\n }\r\n else\r\n {\r\n this.moveTo(startX, startY);\r\n points = this.currentPath.points;\r\n }\r\n\r\n ArcUtils.arc(startX, startY, cx, cy, radius, startAngle, endAngle, anticlockwise, points);\r\n\r\n return this;\r\n }\r\n\r\n public beginFill(color: ColorSource = 0, alpha = 1, smooth = false): this\r\n {\r\n return this.beginTextureFill({ texture: Texture.WHITE, color, alpha, smooth });\r\n }\r\n\r\n private normalizeColor(options: Pick<IFillStyleOptions, 'color' | 'alpha'>): void\r\n {\r\n const temp = Color.shared.setValue(options.color ?? 0);\r\n\r\n options.color = temp.toNumber();\r\n options.alpha ??= temp.alpha;\r\n }\r\n\r\n beginTextureFill(options?: IFillStyleOptions): this\r\n {\r\n // Apply defaults\r\n options = Object.assign({\r\n texture: Texture.WHITE,\r\n color: 0xFFFFFF,\r\n alpha: 1,\r\n matrix: null,\r\n smooth: false,\r\n }, options) as IFillStyleOptions;\r\n\r\n this.normalizeColor(options);\r\n\r\n if (this.currentPath)\r\n {\r\n this.startPoly();\r\n }\r\n\r\n const visible = options.alpha > 0;\r\n\r\n if (!visible)\r\n {\r\n this._fillStyle.reset();\r\n }\r\n else\r\n {\r\n if (options.matrix)\r\n {\r\n options.matrix = options.matrix.clone();\r\n options.matrix.invert();\r\n }\r\n\r\n Object.assign(this._fillStyle, { visible }, options);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public endFill(): this\r\n {\r\n this.finishPoly();\r\n\r\n this._fillStyle.reset();\r\n\r\n return this;\r\n }\r\n\r\n public drawRect(x: number, y: number, width: number, height: number): this\r\n {\r\n return this.drawShape(new Rectangle(x, y, width, height));\r\n }\r\n\r\n public drawRoundedRect(x: number, y: number, width: number, height: number, radius: number): this\r\n {\r\n return this.drawShape(new RoundedRectangle(x, y, width, height, radius));\r\n }\r\n\r\n public drawCircle(x: number, y: number, radius: number): this\r\n {\r\n return this.drawShape(new Circle(x, y, radius));\r\n }\r\n\r\n public drawEllipse(x: number, y: number, width: number, height: number): this\r\n {\r\n return this.drawShape(new Ellipse(x, y, width, height));\r\n }\r\n\r\n public drawPolygon(...path: Array<number> | Array<Point>): this;\r\n public drawPolygon(path: Array<number> | Array<Point> | Polygon): this;\r\n\r\n public drawPolygon(...path: any[]): this\r\n {\r\n let points: Array<number> | Array<Point>;\r\n let closeStroke = true;// !!this._fillStyle;\r\n\r\n const poly = path[0] as Polygon;\r\n\r\n // check if data has points..\r\n if (poly.points)\r\n {\r\n closeStroke = poly.closeStroke;\r\n points = poly.points;\r\n }\r\n else if (Array.isArray(path[0]))\r\n {\r\n points = path[0];\r\n }\r\n else\r\n {\r\n points = path;\r\n }\r\n\r\n const shape = new Polygon(points);\r\n\r\n shape.closeStroke = closeStroke;\r\n\r\n this.drawShape(shape);\r\n\r\n return this;\r\n }\r\n\r\n public drawShape(shape: IShape): this\r\n {\r\n if (!this._holeMode)\r\n {\r\n this._geometry.drawShape(\r\n shape,\r\n this._fillStyle.clone(),\r\n this._lineStyle.clone(),\r\n this._matrix\r\n );\r\n }\r\n else\r\n {\r\n this._geometry.drawHole(shape, this._matrix);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public clear(): this\r\n {\r\n this._geometry.clear();\r\n this._lineStyle.reset();\r\n this._fillStyle.reset();\r\n\r\n this._boundsID++;\r\n this._matrix = null;\r\n this._holeMode = false;\r\n this.currentPath = null;\r\n\r\n return this;\r\n }\r\n\r\n public isFastRect(): boolean\r\n {\r\n const data = this._geometry.graphicsData;\r\n\r\n return data.length === 1\r\n && data[0].shape.type === SHAPES.RECT\r\n && !data[0].matrix\r\n && !data[0].holes.length\r\n && !(data[0].lineStyle.visible && data[0].lineStyle.width);\r\n }\r\n\r\n protected _renderCanvas(renderer: any): void\r\n {\r\n (UnsmoothGraphics.prototype as any)._renderCanvas.call(this, renderer);\r\n }\r\n\r\n protected _render(renderer: Renderer): void\r\n {\r\n this.finishPoly();\r\n\r\n const geometry = this._geometry;\r\n const hasuint32 = renderer.context.supports.uint32Indices;\r\n // batch part..\r\n // batch it!\r\n\r\n geometry.checkInstancing(renderer.geometry.hasInstance, hasuint32);\r\n\r\n geometry.updateBatches(this.shaderSettings);\r\n\r\n if (geometry.batchable)\r\n {\r\n if (this.batchDirty !== geometry.batchDirty)\r\n {\r\n this._populateBatches();\r\n }\r\n\r\n this._renderBatched(renderer);\r\n }\r\n else\r\n {\r\n // no batching...\r\n renderer.batch.flush();\r\n\r\n this._renderDirect(renderer);\r\n }\r\n }\r\n\r\n protected _populateBatches(): void\r\n {\r\n const geometry = this._geometry;\r\n const blendMode = this.blendMode;\r\n const len = geometry.batches.length;\r\n\r\n this.batchTint = -1;\r\n this._transformID = -1;\r\n this.batchDirty = geometry.batchDirty;\r\n this.batches.length = len;\r\n\r\n this.vertexData = new Float32Array(geometry.points);\r\n\r\n for (let i = 0; i < len; i++)\r\n {\r\n const gI = geometry.batches[i];\r\n const color = gI.style.color;\r\n const vertexData = new Float32Array(this.vertexData.buffer,\r\n gI.attribStart * 4 * 2,\r\n gI.attribSize * 2);\r\n\r\n // const uvs = new Float32Array(geometry.uvsFloat32.buffer,\r\n // gI.attribStart * 4 * 2,\r\n // gI.attribSize * 2);\r\n\r\n // const indices = new Uint16Array(geometry.indicesUint16.buffer,\r\n // gI.start * 2,\r\n // gI.size);\r\n\r\n const batch = {\r\n vertexData,\r\n blendMode,\r\n // indices,\r\n // uvs,\r\n _batchRGB: utils.hex2rgb(color) as Array<number>,\r\n _tintRGB: color,\r\n _texture: gI.style.texture,\r\n alpha: gI.style.alpha,\r\n worldAlpha: 1\r\n };\r\n\r\n this.batches[i] = batch;\r\n }\r\n }\r\n\r\n protected _renderBatched(renderer: Renderer): void\r\n {\r\n if (!this.batches.length)\r\n {\r\n return;\r\n }\r\n\r\n renderer.batch.setObjectRenderer(renderer.plugins[this.pluginName]);\r\n\r\n this.calculateVertices();\r\n this.calculateTints();\r\n\r\n for (let i = 0, l = this.batches.length; i < l; i++)\r\n {\r\n const batch = this.batches[i];\r\n\r\n batch.worldAlpha = this.worldAlpha * batch.alpha;\r\n\r\n renderer.plugins[this.pluginName].render(batch);\r\n }\r\n }\r\n\r\n protected _renderDirect(renderer: Renderer): void\r\n {\r\n const directShader = this._resolveDirectShader(renderer);\r\n let shader: Shader = directShader;\r\n\r\n const geometry = this._geometry;\r\n const worldAlpha = this.worldAlpha;\r\n const uniforms = shader.uniforms;\r\n const drawCalls = geometry.drawCalls;\r\n\r\n // lets set the transfomr\r\n uniforms.translationMatrix = this.transform.worldTransform;\r\n\r\n // and then lets set the tint..\r\n Color.shared.setValue(this._tintColor)\r\n .premultiply(worldAlpha)\r\n .toArray(uniforms.tint);\r\n\r\n uniforms.resolution = renderer.renderTexture.current\r\n ? renderer.renderTexture.current.resolution : renderer.resolution;\r\n\r\n const projTrans = renderer.projection.transform;\r\n\r\n if (projTrans)\r\n {\r\n // only uniform scale is supported!\r\n const scale = Math.sqrt((projTrans.a * projTrans.a) + (projTrans.b * projTrans.b));\r\n\r\n uniforms.resolution *= scale;\r\n }\r\n\r\n const multisample = renderer.renderTexture.current\r\n ? renderer.renderTexture.current.multisample : renderer.multisample;\r\n\r\n uniforms.expand = (multisample !== MSAA_QUALITY.NONE ? 2 : 1) / uniforms.resolution;\r\n\r\n // the first draw call, we can set the uniforms of the shader directly here.\r\n\r\n // this means that we can tack advantage of the sync function of pixi!\r\n // bind and sync uniforms..\r\n // there is a way to optimise this..\r\n renderer.shader.bind(shader);\r\n renderer.geometry.bind(geometry, shader);\r\n\r\n // set state..\r\n renderer.state.set(this.state);\r\n\r\n shader = null;\r\n // then render the rest of them...\r\n for (let i = 0, l = drawCalls.length; i < l; i++)\r\n {\r\n // TODO: refactor it to another class, that fills uniforms of this shader\r\n const drawCall = geometry.drawCalls[i];\r\n\r\n const shaderChange = shader !== drawCall.shader;\r\n\r\n if (shaderChange)\r\n {\r\n shader = drawCall.shader;\r\n if (shader)\r\n {\r\n shader.uniforms.translationMatrix = this.transform.worldTransform;\r\n if (shader.uniforms.tint)\r\n {\r\n shader.uniforms.tint[0] = uniforms.tint[0];\r\n shader.uniforms.tint[1] = uniforms.tint[1];\r\n shader.uniforms.tint[2] = uniforms.tint[2];\r\n shader.uniforms.tint[3] = uniforms.tint[3];\r\n }\r\n }\r\n }\r\n\r\n const { texArray, styleArray, size, start } = drawCall;\r\n const groupTextureCount = texArray.count;\r\n const shaderHere = shader || directShader;\r\n\r\n const texs = shaderHere.uniforms.styleTextureId;\r\n const mats = shaderHere.uniforms.styleMatrix;\r\n const lines = shaderHere.uniforms.styleLine;\r\n\r\n for (let i = 0; i < styleArray.count; i++)\r\n {\r\n texs[i] = styleArray.textureIds[i];\r\n lines[i * 2] = styleArray.lines[i * 2];\r\n lines[(i * 2) + 1] = styleArray.lines[(i * 2) + 1];\r\n const m = styleArray.matrices[i];\r\n\r\n mats[i * 6] = m.a;\r\n mats[(i * 6) + 1] = m.c;\r\n mats[(i * 6) + 2] = m.tx;\r\n mats[(i * 6) + 3] = m.b;\r\n mats[(i * 6) + 4] = m.d;\r\n mats[(i * 6) + 5] = m.ty;\r\n }\r\n const sizes = shaderHere.uniforms.samplerSize;\r\n\r\n for (let i = 0; i < groupTextureCount; i++)\r\n {\r\n sizes[i * 2] = texArray.elements[i].width;\r\n sizes[(i * 2) + 1] = texArray.elements[i].height;\r\n }\r\n\r\n renderer.shader.bind(shaderHere);\r\n if (shaderChange)\r\n {\r\n renderer.geometry.bind(geometry);\r\n }\r\n\r\n // TODO: bind styles!\r\n for (let j = 0; j < groupTextureCount; j++)\r\n {\r\n renderer.texture.bind(texArray.elements[j], j);\r\n }\r\n\r\n // bind the geometry...\r\n renderer.geometry.draw(DRAW_MODES.TRIANGLES, size, start);\r\n }\r\n }\r\n\r\n protected _resolveDirectShader(_renderer: Renderer): Shader\r\n {\r\n let shader = this.shader;\r\n\r\n const pluginName = this.pluginName;\r\n\r\n if (!shader)\r\n {\r\n if (!DEFAULT_SHADERS[pluginName])\r\n {\r\n DEFAULT_SHADERS[pluginName] = new SmoothGraphicsShader(this.shaderSettings);\r\n }\r\n shader = DEFAULT_SHADERS[pluginName];\r\n }\r\n\r\n return shader;\r\n }\r\n\r\n protected _calculateBounds(): void\r\n {\r\n this.finishPoly();\r\n\r\n const geometry = this._geometry;\r\n\r\n // skipping when graphics is empty, like a container\r\n if (!geometry.graphicsData.length)\r\n {\r\n return;\r\n }\r\n\r\n const { minX, minY, maxX, maxY } = geometry.bounds;\r\n\r\n this._bounds.addFrame(this.transform, minX, minY, maxX, maxY);\r\n }\r\n\r\n public containsPoint(point: IPointData): boolean\r\n {\r\n this.worldTransform.applyInverse(point, SmoothGraphics._TEMP_POINT);\r\n\r\n return this._geometry.containsPoint(SmoothGraphics._TEMP_POINT);\r\n }\r\n\r\n protected calculateTints(): void\r\n {\r\n if (this.batchTint !== this.tint)\r\n {\r\n this.batchTint = this._tintColor.toNumber();\r\n\r\n for (let i = 0; i < this.batches.length; i++)\r\n {\r\n const batch = this.batches[i];\r\n\r\n batch._tintRGB = Color.shared\r\n .setValue(this._tintColor)\r\n .multiply(batch._batchRGB)\r\n .toLittleEndianNumber();\r\n }\r\n }\r\n }\r\n\r\n protected calculateVertices(): void\r\n {\r\n const wtID = this.transform._worldID;\r\n\r\n if (this._transformID === wtID)\r\n {\r\n return;\r\n }\r\n\r\n this._transformID = wtID;\r\n\r\n const wt = this.transform.worldTransform;\r\n const a = wt.a;\r\n const b = wt.b;\r\n const c = wt.c;\r\n const d = wt.d;\r\n const tx = wt.tx;\r\n const ty = wt.ty;\r\n\r\n const data = this._geometry.points;// batch.vertexDataOriginal;\r\n const vertexData = this.vertexData;\r\n\r\n let count = 0;\r\n\r\n for (let i = 0; i < data.length; i += 2)\r\n {\r\n const x = data[i];\r\n const y = data[i + 1];\r\n\r\n vertexData[count++] = (a * x) + (c * y) + tx;\r\n vertexData[count++] = (d * y) + (b * x) + ty;\r\n }\r\n }\r\n\r\n public closePath(): this\r\n {\r\n const currentPath = this.currentPath;\r\n\r\n if (currentPath)\r\n {\r\n // we don't need to add extra point in the end because buildLine will take care of that\r\n currentPath.closeStroke = true;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public setMatrix(matrix: Matrix): this\r\n {\r\n this._matrix = matrix;\r\n\r\n return this;\r\n }\r\n\r\n public beginHole(): this\r\n {\r\n this.finishPoly();\r\n this._holeMode = true;\r\n\r\n return this;\r\n }\r\n\r\n public endHole(): this\r\n {\r\n this.finishPoly();\r\n this._holeMode = false;\r\n\r\n return this;\r\n }\r\n\r\n public destroy(options?: IDestroyOptions | boolean): void\r\n {\r\n this._geometry.refCount--;\r\n if (this._geometry.refCount === 0)\r\n {\r\n this._geometry.dispose();\r\n }\r\n\r\n this._matrix = null;\r\n this.currentPath = null;\r\n this._lineStyle.destroy();\r\n this._lineStyle = null;\r\n this._fillStyle.destroy();\r\n this._fillStyle = null;\r\n this._geometry = null;\r\n this.shader = null;\r\n this.vertexData = null;\r\n this.batches.length = 0;\r\n this.batches = null;\r\n\r\n super.destroy(options);\r\n }\r\n}\r\n"],"names":["radius","i"],"mappings":"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"}