{"version":3,"file":"TilingSpriteShader.mjs","sources":["../../../../src/scene/sprite-tiling/shader/TilingSpriteShader.ts"],"sourcesContent":["import { Matrix } from '../../../maths/matrix/Matrix';\nimport {\n    compileHighShaderGlProgram,\n    compileHighShaderGpuProgram\n} from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { localUniformBit, localUniformBitGl } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBit, roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport { tilingBit, tilingBitGl } from './tilingBit';\n\nimport type { GlProgram } from '../../../rendering/renderers/gl/shader/GlProgram';\nimport type { GpuProgram } from '../../../rendering/renderers/gpu/shader/GpuProgram';\n\nlet gpuProgram: GpuProgram;\nlet glProgram: GlProgram;\n\n/**\n * The shader used by the TilingSprite.\n * @internal\n */\nexport class TilingSpriteShader extends Shader\n{\n    constructor()\n    {\n        gpuProgram ??= compileHighShaderGpuProgram({\n            name: 'tiling-sprite-shader',\n            bits: [\n                localUniformBit,\n                tilingBit,\n                roundPixelsBit,\n            ],\n        });\n\n        glProgram ??= compileHighShaderGlProgram({\n            name: 'tiling-sprite-shader',\n            bits: [\n                localUniformBitGl,\n                tilingBitGl,\n                roundPixelsBitGl,\n            ]\n        });\n\n        const tilingUniforms = new UniformGroup({\n            uMapCoord: { value: new Matrix(), type: 'mat3x3<f32>' },\n            uClampFrame: { value: new Float32Array([0, 0, 1, 1]), type: 'vec4<f32>' },\n            uClampOffset: { value: new Float32Array([0, 0]), type: 'vec2<f32>' },\n            uTextureTransform: { value: new Matrix(), type: 'mat3x3<f32>' },\n            uSizeAnchor: { value: new Float32Array([100, 100, 0.5, 0.5]), type: 'vec4<f32>' },\n        });\n\n        super({\n            glProgram,\n            gpuProgram,\n            resources: {\n                localUniforms: new UniformGroup({\n                    uTransformMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n                    uColor: { value: new Float32Array([1, 1, 1, 1]), type: 'vec4<f32>' },\n                    uRound: { value: 0, type: 'f32' },\n                }),\n                tilingUniforms,\n                uTexture: Texture.EMPTY.source,\n                uSampler: Texture.EMPTY.source.style,\n            }\n        });\n    }\n\n    public updateUniforms(\n        width: number, height: number,\n        matrix: Matrix,\n        anchorX: number, anchorY: number,\n        texture: Texture\n    ): void\n    {\n        const tilingUniforms = this.resources.tilingUniforms;\n\n        const textureWidth = texture.width;\n        const textureHeight = texture.height;\n        const textureMatrix = texture.textureMatrix;\n\n        const uTextureTransform = tilingUniforms.uniforms.uTextureTransform;\n\n        uTextureTransform.set(\n            matrix.a * textureWidth / width,\n            matrix.b * textureWidth / height,\n            matrix.c * textureHeight / width,\n            matrix.d * textureHeight / height,\n            matrix.tx / width,\n            matrix.ty / height);\n\n        uTextureTransform.invert();\n\n        tilingUniforms.uniforms.uMapCoord = textureMatrix.mapCoord;\n        tilingUniforms.uniforms.uClampFrame = textureMatrix.uClampFrame;\n        tilingUniforms.uniforms.uClampOffset = textureMatrix.uClampOffset;\n        tilingUniforms.uniforms.uTextureTransform = uTextureTransform;\n        tilingUniforms.uniforms.uSizeAnchor[0] = width;\n        tilingUniforms.uniforms.uSizeAnchor[1] = height;\n        tilingUniforms.uniforms.uSizeAnchor[2] = anchorX;\n        tilingUniforms.uniforms.uSizeAnchor[3] = anchorY;\n\n        if (texture)\n        {\n            this.resources.uTexture = texture.source;\n            this.resources.uSampler = texture.source.style;\n        }\n    }\n}\n"],"names":[],"mappings":"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"}