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