{"version":3,"file":"TilingSprite2dRenderer.mjs","sources":["../../../src/proj2d/tiling/TilingSprite2dRenderer.ts"],"sourcesContent":["import { Matrix2d } from '../Matrix2d';\r\nimport { ExtensionMetadata, ExtensionType, ObjectRenderer, QuadUv, Renderer, Shader } from '@pixi/core';\r\nimport { DRAW_MODES, WRAP_MODES } from '@pixi/constants';\r\nimport { correctBlendMode, premultiplyTintToRgba } from '@pixi/utils';\r\n\r\nconst shaderVert\r\n    = `attribute vec2 aVertexPosition;\r\nattribute vec2 aTextureCoord;\r\n\r\nuniform mat3 projectionMatrix;\r\nuniform mat3 translationMatrix;\r\nuniform mat3 uTransform;\r\n\r\nvarying vec3 vTextureCoord;\r\n\r\nvoid main(void)\r\n{\r\ngl_Position.xyw = projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0);\r\n\r\nvTextureCoord = uTransform * vec3(aTextureCoord, 1.0);\r\n}\r\n`;\r\nconst shaderFrag = `\r\nvarying vec3 vTextureCoord;\r\n\r\nuniform sampler2D uSampler;\r\nuniform vec4 uColor;\r\nuniform mat3 uMapCoord;\r\nuniform vec4 uClampFrame;\r\nuniform vec2 uClampOffset;\r\n\r\nvoid main(void)\r\n{\r\nvec2 coord = mod(vTextureCoord.xy / vTextureCoord.z - uClampOffset, vec2(1.0, 1.0)) + uClampOffset;\r\ncoord = (uMapCoord * vec3(coord, 1.0)).xy;\r\ncoord = clamp(coord, uClampFrame.xy, uClampFrame.zw);\r\n\r\nvec4 sample = texture2D(uSampler, coord);\r\ngl_FragColor = sample * uColor;\r\n}\r\n`;\r\nconst shaderSimpleFrag = `\r\nvarying vec3 vTextureCoord;\r\n\r\nuniform sampler2D uSampler;\r\nuniform vec4 uColor;\r\n\r\nvoid main(void)\r\n{\r\nvec4 sample = texture2D(uSampler, vTextureCoord.xy / vTextureCoord.z);\r\ngl_FragColor = sample * uColor;\r\n}\r\n`;\r\n\r\n// changed\r\nconst tempMat = new Matrix2d();\r\n\r\nexport class TilingSprite2dRenderer extends ObjectRenderer\r\n{\r\n    static extension: ExtensionMetadata = {\r\n        name: 'tilingSprite2d',\r\n        type: ExtensionType.RendererPlugin,\r\n    };\r\n\r\n    constructor(renderer: Renderer)\r\n    {\r\n        super(renderer);\r\n\r\n        const uniforms = { globals: this.renderer.globalUniforms };\r\n\r\n        this.shader = Shader.from(shaderVert, shaderFrag, uniforms);\r\n\r\n        this.simpleShader = Shader.from(shaderVert, shaderSimpleFrag, uniforms);\r\n    }\r\n\r\n    shader: Shader;\r\n    simpleShader: Shader;\r\n    quad = new QuadUv();\r\n\r\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n    render(ts: any): void\r\n    {\r\n        const renderer = this.renderer;\r\n        const quad = this.quad;\r\n\r\n        let vertices = quad.vertices;\r\n\r\n        vertices[0] = vertices[6] = (ts._width) * -ts.anchor.x;\r\n        vertices[1] = vertices[3] = ts._height * -ts.anchor.y;\r\n\r\n        vertices[2] = vertices[4] = (ts._width) * (1.0 - ts.anchor.x);\r\n        vertices[5] = vertices[7] = ts._height * (1.0 - ts.anchor.y);\r\n\r\n        if (ts.uvRespectAnchor)\r\n        {\r\n            vertices = quad.uvs;\r\n\r\n            vertices[0] = vertices[6] = -ts.anchor.x;\r\n            vertices[1] = vertices[3] = -ts.anchor.y;\r\n\r\n            vertices[2] = vertices[4] = 1.0 - ts.anchor.x;\r\n            vertices[5] = vertices[7] = 1.0 - ts.anchor.y;\r\n        }\r\n\r\n        quad.invalidate();\r\n\r\n        const tex = ts._texture;\r\n        const baseTex = tex.baseTexture;\r\n        const lt = ts.tileProj.world;\r\n        const uv = ts.uvMatrix;\r\n        let isSimple = baseTex.isPowerOfTwo\r\n            && tex.frame.width === baseTex.width && tex.frame.height === baseTex.height;\r\n\r\n        // auto, force repeat wrapMode for big tiling textures\r\n        if (isSimple)\r\n        {\r\n            if (!baseTex._glTextures[(renderer as any).CONTEXT_UID])\r\n            {\r\n                if (baseTex.wrapMode === WRAP_MODES.CLAMP)\r\n                {\r\n                    baseTex.wrapMode = WRAP_MODES.REPEAT;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                isSimple = baseTex.wrapMode !== WRAP_MODES.CLAMP;\r\n            }\r\n        }\r\n\r\n        const shader = isSimple ? this.simpleShader : this.shader;\r\n\r\n        // changed\r\n        tempMat.identity();\r\n        tempMat.scale(tex.width, tex.height);\r\n        tempMat.prepend(lt);\r\n        tempMat.scale(1.0 / ts._width, 1.0 / ts._height);\r\n\r\n        tempMat.invert();\r\n        if (isSimple)\r\n        {\r\n            tempMat.prepend(uv.mapCoord);\r\n        }\r\n        else\r\n        {\r\n            shader.uniforms.uMapCoord = uv.mapCoord.toArray(true);\r\n            shader.uniforms.uClampFrame = uv.uClampFrame;\r\n            shader.uniforms.uClampOffset = uv.uClampOffset;\r\n        }\r\n\r\n        shader.uniforms.uTransform = tempMat.toArray(true);\r\n        shader.uniforms.uColor = premultiplyTintToRgba(ts.tint, ts.worldAlpha,\r\n            shader.uniforms.uColor, baseTex.premultiplyAlpha);\r\n        shader.uniforms.translationMatrix = ts.worldTransform.toArray(true);\r\n        shader.uniforms.uSampler = tex;\r\n\r\n        renderer.shader.bind(shader, false);\r\n        renderer.geometry.bind(quad as any, undefined);// , renderer.shader.getGLShader());\r\n\r\n        renderer.state.setBlendMode(correctBlendMode(ts.blendMode, baseTex.premultiplyAlpha));\r\n        renderer.geometry.draw(DRAW_MODES.TRIANGLES, 6, 0);\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}