{"version":3,"file":"Mesh3d2d.mjs","sources":["../../../src/proj3d/mesh/Mesh3d2d.ts"],"sourcesContent":["import { Mesh, MeshGeometry, MeshMaterial } from '@pixi/mesh';\r\nimport { Geometry, Program, Renderer, State, Texture } from '@pixi/core';\r\nimport { Projection3d } from '../Projection3d';\r\nimport { IPointData, Matrix } from '@pixi/math';\r\nimport { DisplayObject } from '@pixi/display';\r\nimport { TRANSFORM_STEP } from '../../base';\r\nimport { container3dGetDepth, container3dIsFrontFace, container3dToLocal } from '../Container3d';\r\nimport { Euler } from '../Euler';\r\nimport { Mesh2d } from '../../proj2d';\r\n\r\nexport class Mesh3d2d extends Mesh\r\n{\r\n    constructor(geometry: Geometry, shader: MeshMaterial, state: State, drawMode?: number)\r\n    {\r\n        super(geometry, shader, state, drawMode);\r\n        this.proj = new Projection3d(this.transform);\r\n    }\r\n\r\n    vertexData2d: Float32Array = null;\r\n    proj: Projection3d;\r\n\r\n    calculateVertices(): void\r\n    {\r\n        if (this.proj._affine)\r\n        {\r\n            this.vertexData2d = null;\r\n            super.calculateVertices();\r\n\r\n            return;\r\n        }\r\n\r\n        const geometry = this.geometry as any;\r\n        const vertices = geometry.buffers[0].data;\r\n        const thisAny = this as any;\r\n\r\n        if (geometry.vertexDirtyId === thisAny.vertexDirty && thisAny._transformID === thisAny.transform._worldID)\r\n        {\r\n            return;\r\n        }\r\n\r\n        thisAny._transformID = thisAny.transform._worldID;\r\n\r\n        if (thisAny.vertexData.length !== vertices.length)\r\n        {\r\n            thisAny.vertexData = new Float32Array(vertices.length);\r\n        }\r\n        if (!this.vertexData2d || this.vertexData2d.length !== vertices.length * 3 / 2)\r\n        {\r\n            this.vertexData2d = new Float32Array(vertices.length * 3);\r\n        }\r\n\r\n        const wt = this.proj.world.mat4;\r\n\r\n        const vertexData2d = this.vertexData2d;\r\n        const vertexData = thisAny.vertexData;\r\n\r\n        for (let i = 0; i < vertexData.length / 2; i++)\r\n        {\r\n            const x = vertices[(i * 2)];\r\n            const y = vertices[(i * 2) + 1];\r\n\r\n            const xx = (wt[0] * x) + (wt[4] * y) + wt[12];\r\n            const yy = (wt[1] * x) + (wt[5] * y) + wt[13];\r\n            const ww = (wt[3] * x) + (wt[7] * y) + wt[15];\r\n\r\n            vertexData2d[i * 3] = xx;\r\n            vertexData2d[(i * 3) + 1] = yy;\r\n            vertexData2d[(i * 3) + 2] = ww;\r\n\r\n            vertexData[(i * 2)] = xx / ww;\r\n            vertexData[(i * 2) + 1] = yy / ww;\r\n        }\r\n\r\n        thisAny.vertexDirty = geometry.vertexDirtyId;\r\n    }\r\n\r\n    get worldTransform(): Matrix\r\n    {\r\n        return this.proj.affine ? this.transform.worldTransform : this.proj.world as any;\r\n    }\r\n\r\n    toLocal<T extends IPointData>(position: IPointData, from?: DisplayObject,\r\n        point?: T, skipUpdate?: boolean,\r\n        step = TRANSFORM_STEP.ALL): T\r\n    {\r\n        return container3dToLocal.call(this, position, from, point, skipUpdate, step);\r\n    }\r\n\r\n    isFrontFace(forceUpdate?: boolean): boolean\r\n    {\r\n        return container3dIsFrontFace.call(this, forceUpdate);\r\n    }\r\n\r\n    getDepth(forceUpdate?: boolean): boolean\r\n    {\r\n        return container3dGetDepth.call(this, forceUpdate);\r\n    }\r\n\r\n    get position3d(): IPointData\r\n    {\r\n        return this.proj.position;\r\n    }\r\n    set position3d(value: IPointData)\r\n    {\r\n        this.proj.position.copyFrom(value);\r\n    }\r\n    get scale3d(): IPointData\r\n    {\r\n        return this.proj.scale;\r\n    }\r\n    set scale3d(value: IPointData)\r\n    {\r\n        this.proj.scale.copyFrom(value);\r\n    }\r\n    get euler(): Euler\r\n    {\r\n        return this.proj.euler;\r\n    }\r\n    set euler(value: Euler)\r\n    {\r\n        this.proj.euler.copyFrom(value);\r\n    }\r\n    get pivot3d(): IPointData\r\n    {\r\n        return this.proj.pivot;\r\n    }\r\n    set pivot3d(value: IPointData)\r\n    {\r\n        this.proj.pivot.copyFrom(value);\r\n    }\r\n}\r\n\r\n(Mesh3d2d.prototype as any)._renderDefault = Mesh2d.prototype._renderDefault;\r\n\r\nexport class SimpleMesh3d2d extends Mesh3d2d\r\n{\r\n    constructor(texture: Texture, vertices?: Float32Array, uvs?: Float32Array,\r\n        indices?: Uint16Array, drawMode?: number)\r\n    {\r\n        super(new MeshGeometry(vertices, uvs, indices),\r\n            new MeshMaterial(texture, {\r\n                program: Program.from(Mesh2d.defaultVertexShader, Mesh2d.defaultFragmentShader),\r\n                pluginName: 'batch2d'\r\n            }),\r\n            null,\r\n            drawMode);\r\n\r\n        (this.geometry.getBuffer('aVertexPosition') as any).static = false;\r\n    }\r\n\r\n    autoUpdate = true;\r\n\r\n    get vertices(): Float32Array\r\n    {\r\n        return this.geometry.getBuffer('aVertexPosition').data as Float32Array;\r\n    }\r\n    set vertices(value: Float32Array)\r\n    {\r\n        this.geometry.getBuffer('aVertexPosition').data = value;\r\n    }\r\n\r\n    protected _render(renderer?: Renderer): void\r\n    {\r\n        if (this.autoUpdate)\r\n        {\r\n            this.geometry.getBuffer('aVertexPosition').update();\r\n        }\r\n\r\n        (super._render as any)(renderer);\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}