{"version":3,"file":"CanvasMeshRenderer.mjs","sources":["../src/CanvasMeshRenderer.ts"],"sourcesContent":["import { canvasUtils } from 'pixijs/renderer/canvas';\nimport { DRAW_MODES, extensions, ExtensionType, Texture } from 'pixijs/core';\n\nimport type { CanvasRenderer } from 'pixijs/renderer/canvas';\nimport type { ExtensionMetadata } from 'pixijs/core';\nimport type { Mesh } from 'pixijs/mesh';\n\n/**\n * Renderer dedicated to meshes.\n * @class\n * @protected\n * @memberof PIXI\n */\nexport class CanvasMeshRenderer\n{\n    /** @ignore */\n    static extension: ExtensionMetadata = {\n        name: 'mesh',\n        type: ExtensionType.CanvasRendererPlugin,\n    };\n\n    /** A reference to the current renderer */\n    public renderer: CanvasRenderer;\n\n    /** @param renderer - A reference to the current renderer */\n    constructor(renderer: CanvasRenderer)\n    {\n        this.renderer = renderer;\n    }\n\n    /**\n     * Renders the Mesh\n     * @param mesh - the Mesh to render\n     */\n    public render(mesh: Mesh): void\n    {\n        const renderer = this.renderer;\n        const transform = mesh.worldTransform;\n\n        renderer.canvasContext.activeContext.globalAlpha = mesh.worldAlpha;\n        renderer.canvasContext.setBlendMode(mesh.blendMode);\n        renderer.canvasContext.setContextTransform(transform, mesh.roundPixels);\n\n        if (mesh.drawMode !== DRAW_MODES.TRIANGLES)\n        {\n            this._renderTriangleMesh(mesh);\n        }\n        else\n        {\n            this._renderTriangles(mesh);\n        }\n    }\n\n    /**\n     * Draws the object in Triangle Mesh mode\n     * @private\n     * @param mesh - the Mesh to render\n     */\n    private _renderTriangleMesh(mesh: Mesh): void\n    {\n        // draw triangles!!\n        const length = mesh.geometry.buffers[0].data.length;\n\n        for (let i = 0; i < length - 2; i++)\n        {\n            // draw some triangles!\n            const index = i * 2;\n\n            this._renderDrawTriangle(mesh, index, (index + 2), (index + 4));\n        }\n    }\n\n    /**\n     * Draws the object in triangle mode using canvas\n     * @private\n     * @param mesh - the current mesh\n     */\n    private _renderTriangles(mesh: Mesh): void\n    {\n        // draw triangles!!\n        const indices = mesh.geometry.getIndex().data;\n        const length = indices.length;\n\n        for (let i = 0; i < length; i += 3)\n        {\n            // draw some triangles!\n            const index0 = indices[i] * 2;\n            const index1 = indices[i + 1] * 2;\n            const index2 = indices[i + 2] * 2;\n\n            this._renderDrawTriangle(mesh, index0, index1, index2);\n        }\n    }\n\n    /**\n     * Draws one of the triangles that from the Mesh\n     * @private\n     * @param mesh - the current mesh\n     * @param index0 - the index of the first vertex\n     * @param index1 - the index of the second vertex\n     * @param index2 - the index of the third vertex\n     */\n    private _renderDrawTriangle(mesh: Mesh, index0: number, index1: number, index2: number): void\n    {\n        const context = this.renderer.canvasContext.activeContext;\n        const vertices = mesh.geometry.buffers[0].data;\n        const { uvs, texture } = mesh;\n\n        if (!texture.valid)\n        {\n            return;\n        }\n        const isTinted = mesh.tint !== 0xFFFFFF;\n        const base = texture.baseTexture;\n        const textureWidth = base.width;\n        const textureHeight = base.height;\n\n        // Invalidate texture if base texture was updated\n        // either because mesh.texture or mesh.shader.texture was changed\n        if (mesh._cachedTexture && mesh._cachedTexture.baseTexture !== base)\n        {\n            mesh._cachedTint = 0xffffff;\n            mesh._cachedTexture?.destroy();\n            mesh._cachedTexture = null;\n            mesh._tintedCanvas = null;\n        }\n\n        if (isTinted)\n        {\n            if (mesh._cachedTint !== mesh.tint)\n            {\n                mesh._cachedTint = mesh.tint;\n                mesh._cachedTexture = mesh._cachedTexture || new Texture(base);\n                mesh._tintedCanvas = canvasUtils.getTintedCanvas(\n                    { texture: mesh._cachedTexture },\n                    mesh.tint\n                );\n            }\n        }\n\n        const textureSource = isTinted ? mesh._tintedCanvas : base.getDrawableSource();\n\n        const u0 = uvs[index0] * base.width;\n        const u1 = uvs[index1] * base.width;\n        const u2 = uvs[index2] * base.width;\n        const v0 = uvs[index0 + 1] * base.height;\n        const v1 = uvs[index1 + 1] * base.height;\n        const v2 = uvs[index2 + 1] * base.height;\n\n        let x0 = vertices[index0];\n        let x1 = vertices[index1];\n        let x2 = vertices[index2];\n        let y0 = vertices[index0 + 1];\n        let y1 = vertices[index1 + 1];\n        let y2 = vertices[index2 + 1];\n\n        const screenPadding = mesh.canvasPadding / this.renderer.canvasContext.activeResolution;\n\n        if (screenPadding > 0)\n        {\n            const { a, b, c, d } = mesh.worldTransform;\n\n            const centerX = (x0 + x1 + x2) / 3;\n            const centerY = (y0 + y1 + y2) / 3;\n\n            let normX = x0 - centerX;\n            let normY = y0 - centerY;\n\n            // Transform to screen space and calculate the distance\n            let screenX = (a * normX) + (c * normY);\n            let screenY = (b * normX) + (d * normY);\n            let screenDist = Math.sqrt((screenX * screenX) + (screenY * screenY));\n\n            // Factor by which to scale in order to add padding equal to screenPadding\n            let paddingFactor = 1 + (screenPadding / screenDist);\n\n            x0 = centerX + (normX * paddingFactor);\n            y0 = centerY + (normY * paddingFactor);\n\n            normX = x1 - centerX;\n            normY = y1 - centerY;\n\n            screenX = (a * normX) + (c * normY);\n            screenY = (b * normX) + (d * normY);\n            screenDist = Math.sqrt((screenX * screenX) + (screenY * screenY));\n\n            paddingFactor = 1 + (screenPadding / screenDist);\n\n            x1 = centerX + (normX * paddingFactor);\n            y1 = centerY + (normY * paddingFactor);\n\n            normX = x2 - centerX;\n            normY = y2 - centerY;\n\n            screenX = (a * normX) + (c * normY);\n            screenY = (b * normX) + (d * normY);\n            screenDist = Math.sqrt((screenX * screenX) + (screenY * screenY));\n\n            paddingFactor = 1 + (screenPadding / screenDist);\n\n            x2 = centerX + (normX * paddingFactor);\n            y2 = centerY + (normY * paddingFactor);\n        }\n\n        context.save();\n        context.beginPath();\n\n        context.moveTo(x0, y0);\n        context.lineTo(x1, y1);\n        context.lineTo(x2, y2);\n\n        context.closePath();\n\n        context.clip();\n\n        // Compute matrix transform\n        const delta = (u0 * v1) + (v0 * u2) + (u1 * v2) - (v1 * u2) - (v0 * u1) - (u0 * v2);\n        const deltaA = (x0 * v1) + (v0 * x2) + (x1 * v2) - (v1 * x2) - (v0 * x1) - (x0 * v2);\n        const deltaB = (u0 * x1) + (x0 * u2) + (u1 * x2) - (x1 * u2) - (x0 * u1) - (u0 * x2);\n        const deltaC = (u0 * v1 * x2) + (v0 * x1 * u2) + (x0 * u1 * v2) - (x0 * v1 * u2) - (v0 * u1 * x2) - (u0 * x1 * v2);\n        const deltaD = (y0 * v1) + (v0 * y2) + (y1 * v2) - (v1 * y2) - (v0 * y1) - (y0 * v2);\n        const deltaE = (u0 * y1) + (y0 * u2) + (u1 * y2) - (y1 * u2) - (y0 * u1) - (u0 * y2);\n        const deltaF = (u0 * v1 * y2) + (v0 * y1 * u2) + (y0 * u1 * v2) - (y0 * v1 * u2) - (v0 * u1 * y2) - (u0 * y1 * v2);\n\n        context.transform(\n            deltaA / delta,\n            deltaD / delta,\n            deltaB / delta,\n            deltaE / delta,\n            deltaC / delta,\n            deltaF / delta\n        );\n\n        context.drawImage(\n            textureSource,\n            0,\n            0,\n            textureWidth * base.resolution,\n            textureHeight * base.resolution,\n            0,\n            0,\n            textureWidth,\n            textureHeight\n        );\n\n        context.restore();\n        this.renderer.canvasContext.invalidateBlendMode();\n    }\n\n    /**\n     * Renders a flat Mesh\n     * @private\n     * @param mesh - The Mesh to render\n     */\n    renderMeshFlat(mesh: Mesh): void\n    {\n        const context = this.renderer.canvasContext.activeContext;\n        const vertices = mesh.geometry.getBuffer('aVertexPosition').data;\n        const length = vertices.length / 2;\n\n        // this.count++;\n\n        context.beginPath();\n\n        for (let i = 1; i < length - 2; ++i)\n        {\n            // draw some triangles!\n            const index = i * 2;\n\n            const x0 = vertices[index];\n            const y0 = vertices[index + 1];\n\n            const x1 = vertices[index + 2];\n            const y1 = vertices[index + 3];\n\n            const x2 = vertices[index + 4];\n            const y2 = vertices[index + 5];\n\n            context.moveTo(x0, y0);\n            context.lineTo(x1, y1);\n            context.lineTo(x2, y2);\n        }\n\n        context.fillStyle = '#FF0000';\n        context.fill();\n        context.closePath();\n    }\n\n    /** destroy the renderer */\n    public destroy(): void\n    {\n        this.renderer = null;\n    }\n}\n\nextensions.add(CanvasMeshRenderer);\n"],"names":[],"mappings":"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"}