{"version":3,"file":"syncUniforms.mjs","sources":["../src/syncUniforms.ts"],"sourcesContent":["import type { IRenderingContext, IUniformData, Renderer, UniformGroup } from '@pixi/core';\n\n// cv = CachedValue\n// v = value\n// ud = uniformData\n// uv = uniformValue\n// l = location\n\n/* eslint-disable max-len, @typescript-eslint/explicit-module-boundary-types */\nconst GLSL_TO_SINGLE_SETTERS = {\n    vec3(gl: IRenderingContext, location: WebGLUniformLocation, cv: number[], v: number[]): void\n    {\n        if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n        {\n            cv[0] = v[0];\n            cv[1] = v[1];\n            cv[2] = v[2];\n\n            gl.uniform3f(location, v[0], v[1], v[2]);\n        }\n    },\n    int(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number): void { gl.uniform1i(location, value); },\n    ivec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform2i(location, value[0], value[1]); },\n    ivec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform3i(location, value[0], value[1], value[2]); },\n    ivec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform4i(location, value[0], value[1], value[2], value[3]); },\n\n    uint(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number): void { gl.uniform1ui(location, value); },\n    uvec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform2ui(location, value[0], value[1]); },\n    uvec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform3ui(location, value[0], value[1], value[2]); },\n    uvec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform4ui(location, value[0], value[1], value[2], value[3]); },\n\n    bvec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform2i(location, value[0], value[1]); },\n    bvec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform3i(location, value[0], value[1], value[2]); },\n    bvec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniform4i(location, value[0], value[1], value[2], value[3]); },\n\n    mat2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniformMatrix2fv(location, false, value); },\n    mat4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: number[]): void { gl.uniformMatrix4fv(location, false, value); },\n};\n\nconst GLSL_TO_ARRAY_SETTERS = {\n    float(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Float32List): void { gl.uniform1fv(location, value); },\n    vec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Float32List): void { gl.uniform2fv(location, value); },\n    vec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Float32List): void { gl.uniform3fv(location, value); },\n    vec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Float32List): void { gl.uniform4fv(location, value); },\n    int(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform1iv(location, value); },\n    ivec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform2iv(location, value); },\n    ivec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform3iv(location, value); },\n    ivec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform4iv(location, value); },\n    uint(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Uint32List): void { gl.uniform1uiv(location, value); },\n    uvec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Uint32List): void { gl.uniform2uiv(location, value); },\n    uvec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Uint32List): void { gl.uniform3uiv(location, value); },\n    uvec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Uint32List): void { gl.uniform4uiv(location, value); },\n    bool(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform1iv(location, value); },\n    bvec2(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform2iv(location, value); },\n    bvec3(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform3iv(location, value); },\n    bvec4(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform4iv(location, value); },\n    sampler2D(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform1iv(location, value); },\n    samplerCube(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform1iv(location, value); },\n    sampler2DArray(gl: IRenderingContext, location: WebGLUniformLocation, _cv: any, value: Int32List): void { gl.uniform1iv(location, value); },\n};\n/* eslint-disable max-len */\n\nexport function syncUniforms(group: UniformGroup, uniformData: {[x: string]: IUniformData}, ud: any, uv: any, renderer: Renderer): void\n{\n    let textureCount = 0;\n    let v = null;\n    let cv = null;\n    const gl = renderer.gl;\n\n    for (const i in group.uniforms)\n    {\n        const data = uniformData[i];\n        const uvi = uv[i];\n        const udi = ud[i];\n        const gu = group.uniforms[i];\n\n        if (!data)\n        {\n            if (gu.group === true) // strict check to desambiguate from Array.group\n            {\n                renderer.shader.syncUniformGroup(uvi);\n            }\n\n            continue;\n        }\n\n        if (data.type === 'float' && data.size === 1 && !data.isArray)\n        {\n            if (uvi !== udi.value)\n            {\n                udi.value = uvi;\n                gl.uniform1f(udi.location, uvi);\n            }\n        }\n        else if (data.type === 'bool' && data.size === 1 && !data.isArray)\n        {\n            if (uvi !== udi.value)\n            {\n                udi.value = uvi;\n                gl.uniform1i(udi.location, Number(uvi));\n            }\n        }\n        /* eslint-disable max-len */\n        else if ((data.type === 'sampler2D' || data.type === 'samplerCube' || data.type === 'sampler2DArray') && data.size === 1 && !data.isArray)\n        /* eslint-disable max-len */\n        {\n            renderer.texture.bind(uvi, textureCount);\n\n            if (udi.value !== textureCount)\n            {\n                udi.value = textureCount;\n                gl.uniform1i(udi.location, textureCount);\n            }\n\n            textureCount++;\n        }\n        else if (data.type === 'mat3' && data.size === 1 && !data.isArray)\n        {\n            if (gu.a !== undefined)\n            {\n                gl.uniformMatrix3fv(udi.location, false, uvi.toArray(true));\n            }\n            else\n            {\n                gl.uniformMatrix3fv(udi.location, false, uvi);\n            }\n        }\n        else if (data.type === 'vec2' && data.size === 1 && !data.isArray)\n        {\n            if (gu.x !== undefined)\n            {\n                cv = udi.value;\n                v = uvi;\n\n                if (cv[0] !== v.x || cv[1] !== v.y)\n                {\n                    cv[0] = v.x;\n                    cv[1] = v.y;\n                    gl.uniform2f(udi.location, v.x, v.y);\n                }\n            }\n            else\n            {\n                cv = udi.value;\n                v = uvi;\n\n                if (cv[0] !== v[0] || cv[1] !== v[1])\n                {\n                    cv[0] = v[0];\n                    cv[1] = v[1];\n                    gl.uniform2f(udi.location, v[0], v[1]);\n                }\n            }\n        }\n        else if (data.type === 'vec4' && data.size === 1 && !data.isArray)\n        {\n            if (gu.width !== undefined)\n            {\n                cv = udi.value;\n                v = uvi;\n\n                if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height)\n                {\n                    cv[0] = v.x;\n                    cv[1] = v.y;\n                    cv[2] = v.width;\n                    cv[3] = v.height;\n                    gl.uniform4f(udi.location, v.x, v.y, v.width, v.height);\n                }\n            }\n            else\n            {\n                cv = udi.value;\n                v = uvi;\n\n                if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n                {\n                    cv[0] = v[0];\n                    cv[1] = v[1];\n                    cv[2] = v[2];\n                    cv[3] = v[3];\n\n                    gl.uniform4f(udi.location, v[0], v[1], v[2], v[3]);\n                }\n            }\n        }\n        else\n        {\n            const funcArray = (data.size === 1) && !data.isArray ? GLSL_TO_SINGLE_SETTERS : GLSL_TO_ARRAY_SETTERS;\n\n            (funcArray as any)[data.type].call(null, gl, udi.location, udi.value, uvi);\n        }\n    }\n}\n"],"names":[],"mappings":"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"}