UNPKG

@pixi/core

Version:
183 lines (165 loc) 6.33 kB
const uniformParsers = [ // a float cache layer { test: (data) => data.type === "float" && data.size === 1 && !data.isArray, code: (name) => ` if(uv["${name}"] !== ud["${name}"].value) { ud["${name}"].value = uv["${name}"] gl.uniform1f(ud["${name}"].location, uv["${name}"]) } ` }, // handling samplers { test: (data, uniform) => ( // eslint-disable-next-line max-len,no-eq-null,eqeqeq (data.type === "sampler2D" || data.type === "samplerCube" || data.type === "sampler2DArray") && data.size === 1 && !data.isArray && (uniform == null || uniform.castToBaseTexture !== void 0) ), code: (name) => `t = syncData.textureCount++; renderer.texture.bind(uv["${name}"], t); if(ud["${name}"].value !== t) { ud["${name}"].value = t; gl.uniform1i(ud["${name}"].location, t); ; // eslint-disable-line max-len }` }, // uploading pixi matrix object to mat3 { test: (data, uniform) => data.type === "mat3" && data.size === 1 && !data.isArray && uniform.a !== void 0, code: (name) => ( // TODO and some smart caching dirty ids here! ` gl.uniformMatrix3fv(ud["${name}"].location, false, uv["${name}"].toArray(true)); ` ), codeUbo: (name) => ` var ${name}_matrix = uv.${name}.toArray(true); data[offset] = ${name}_matrix[0]; data[offset+1] = ${name}_matrix[1]; data[offset+2] = ${name}_matrix[2]; data[offset + 4] = ${name}_matrix[3]; data[offset + 5] = ${name}_matrix[4]; data[offset + 6] = ${name}_matrix[5]; data[offset + 8] = ${name}_matrix[6]; data[offset + 9] = ${name}_matrix[7]; data[offset + 10] = ${name}_matrix[8]; ` }, // uploading a pixi point as a vec2 with caching layer { test: (data, uniform) => data.type === "vec2" && data.size === 1 && !data.isArray && uniform.x !== void 0, code: (name) => ` cv = ud["${name}"].value; v = uv["${name}"]; if(cv[0] !== v.x || cv[1] !== v.y) { cv[0] = v.x; cv[1] = v.y; gl.uniform2f(ud["${name}"].location, v.x, v.y); }`, codeUbo: (name) => ` v = uv.${name}; data[offset] = v.x; data[offset+1] = v.y; ` }, // caching layer for a vec2 { test: (data) => data.type === "vec2" && data.size === 1 && !data.isArray, code: (name) => ` cv = ud["${name}"].value; v = uv["${name}"]; if(cv[0] !== v[0] || cv[1] !== v[1]) { cv[0] = v[0]; cv[1] = v[1]; gl.uniform2f(ud["${name}"].location, v[0], v[1]); } ` }, // upload a pixi rectangle as a vec4 with caching layer { test: (data, uniform) => data.type === "vec4" && data.size === 1 && !data.isArray && uniform.width !== void 0, code: (name) => ` cv = ud["${name}"].value; v = uv["${name}"]; if(cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) { cv[0] = v.x; cv[1] = v.y; cv[2] = v.width; cv[3] = v.height; gl.uniform4f(ud["${name}"].location, v.x, v.y, v.width, v.height) }`, codeUbo: (name) => ` v = uv.${name}; data[offset] = v.x; data[offset+1] = v.y; data[offset+2] = v.width; data[offset+3] = v.height; ` }, // upload a pixi color as vec4 with caching layer { test: (data, uniform) => data.type === "vec4" && data.size === 1 && !data.isArray && uniform.red !== void 0, code: (name) => ` cv = ud["${name}"].value; v = uv["${name}"]; if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) { cv[0] = v.red; cv[1] = v.green; cv[2] = v.blue; cv[3] = v.alpha; gl.uniform4f(ud["${name}"].location, v.red, v.green, v.blue, v.alpha) }`, codeUbo: (name) => ` v = uv.${name}; data[offset] = v.red; data[offset+1] = v.green; data[offset+2] = v.blue; data[offset+3] = v.alpha; ` }, // upload a pixi color as a vec3 with caching layer { test: (data, uniform) => data.type === "vec3" && data.size === 1 && !data.isArray && uniform.red !== void 0, code: (name) => ` cv = ud["${name}"].value; v = uv["${name}"]; if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.a) { cv[0] = v.red; cv[1] = v.green; cv[2] = v.blue; gl.uniform3f(ud["${name}"].location, v.red, v.green, v.blue) }`, codeUbo: (name) => ` v = uv.${name}; data[offset] = v.red; data[offset+1] = v.green; data[offset+2] = v.blue; ` }, // a caching layer for vec4 uploading { test: (data) => data.type === "vec4" && data.size === 1 && !data.isArray, code: (name) => ` cv = ud["${name}"].value; v = uv["${name}"]; if(cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) { cv[0] = v[0]; cv[1] = v[1]; cv[2] = v[2]; cv[3] = v[3]; gl.uniform4f(ud["${name}"].location, v[0], v[1], v[2], v[3]) }` } ]; export { uniformParsers }; //# sourceMappingURL=uniformParsers.mjs.map