1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | const uniformParsers = [
|
6 | {
|
7 | test: (data) => data.type === "float" && data.size === 1 && !data.isArray,
|
8 | code: (name) => `
|
9 | if(uv["${name}"] !== ud["${name}"].value)
|
10 | {
|
11 | ud["${name}"].value = uv["${name}"]
|
12 | gl.uniform1f(ud["${name}"].location, uv["${name}"])
|
13 | }
|
14 | `
|
15 | },
|
16 | {
|
17 | test: (data, uniform) => (data.type === "sampler2D" || data.type === "samplerCube" || data.type === "sampler2DArray") && data.size === 1 && !data.isArray && (uniform == null || uniform.castToBaseTexture !== void 0),
|
18 | code: (name) => `t = syncData.textureCount++;
|
19 |
|
20 | renderer.texture.bind(uv["${name}"], t);
|
21 |
|
22 | if(ud["${name}"].value !== t)
|
23 | {
|
24 | ud["${name}"].value = t;
|
25 | gl.uniform1i(ud["${name}"].location, t);
|
26 | ; // eslint-disable-line max-len
|
27 | }`
|
28 | },
|
29 | {
|
30 | test: (data, uniform) => data.type === "mat3" && data.size === 1 && !data.isArray && uniform.a !== void 0,
|
31 | code: (name) => `
|
32 | gl.uniformMatrix3fv(ud["${name}"].location, false, uv["${name}"].toArray(true));
|
33 | `,
|
34 | codeUbo: (name) => `
|
35 | var ${name}_matrix = uv.${name}.toArray(true);
|
36 |
|
37 | data[offset] = ${name}_matrix[0];
|
38 | data[offset+1] = ${name}_matrix[1];
|
39 | data[offset+2] = ${name}_matrix[2];
|
40 |
|
41 | data[offset + 4] = ${name}_matrix[3];
|
42 | data[offset + 5] = ${name}_matrix[4];
|
43 | data[offset + 6] = ${name}_matrix[5];
|
44 |
|
45 | data[offset + 8] = ${name}_matrix[6];
|
46 | data[offset + 9] = ${name}_matrix[7];
|
47 | data[offset + 10] = ${name}_matrix[8];
|
48 | `
|
49 | },
|
50 | {
|
51 | test: (data, uniform) => data.type === "vec2" && data.size === 1 && !data.isArray && uniform.x !== void 0,
|
52 | code: (name) => `
|
53 | cv = ud["${name}"].value;
|
54 | v = uv["${name}"];
|
55 |
|
56 | if(cv[0] !== v.x || cv[1] !== v.y)
|
57 | {
|
58 | cv[0] = v.x;
|
59 | cv[1] = v.y;
|
60 | gl.uniform2f(ud["${name}"].location, v.x, v.y);
|
61 | }`,
|
62 | codeUbo: (name) => `
|
63 | v = uv.${name};
|
64 |
|
65 | data[offset] = v.x;
|
66 | data[offset+1] = v.y;
|
67 | `
|
68 | },
|
69 | {
|
70 | test: (data) => data.type === "vec2" && data.size === 1 && !data.isArray,
|
71 | code: (name) => `
|
72 | cv = ud["${name}"].value;
|
73 | v = uv["${name}"];
|
74 |
|
75 | if(cv[0] !== v[0] || cv[1] !== v[1])
|
76 | {
|
77 | cv[0] = v[0];
|
78 | cv[1] = v[1];
|
79 | gl.uniform2f(ud["${name}"].location, v[0], v[1]);
|
80 | }
|
81 | `
|
82 | },
|
83 | {
|
84 | test: (data, uniform) => data.type === "vec4" && data.size === 1 && !data.isArray && uniform.width !== void 0,
|
85 | code: (name) => `
|
86 | cv = ud["${name}"].value;
|
87 | v = uv["${name}"];
|
88 |
|
89 | if(cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height)
|
90 | {
|
91 | cv[0] = v.x;
|
92 | cv[1] = v.y;
|
93 | cv[2] = v.width;
|
94 | cv[3] = v.height;
|
95 | gl.uniform4f(ud["${name}"].location, v.x, v.y, v.width, v.height)
|
96 | }`,
|
97 | codeUbo: (name) => `
|
98 | v = uv.${name};
|
99 |
|
100 | data[offset] = v.x;
|
101 | data[offset+1] = v.y;
|
102 | data[offset+2] = v.width;
|
103 | data[offset+3] = v.height;
|
104 | `
|
105 | },
|
106 | {
|
107 | test: (data, uniform) => data.type === "vec4" && data.size === 1 && !data.isArray && uniform.red !== void 0,
|
108 | code: (name) => `
|
109 | cv = ud["${name}"].value;
|
110 | v = uv["${name}"];
|
111 |
|
112 | if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha)
|
113 | {
|
114 | cv[0] = v.red;
|
115 | cv[1] = v.green;
|
116 | cv[2] = v.blue;
|
117 | cv[3] = v.alpha;
|
118 | gl.uniform4f(ud["${name}"].location, v.red, v.green, v.blue, v.alpha)
|
119 | }`,
|
120 | codeUbo: (name) => `
|
121 | v = uv.${name};
|
122 |
|
123 | data[offset] = v.red;
|
124 | data[offset+1] = v.green;
|
125 | data[offset+2] = v.blue;
|
126 | data[offset+3] = v.alpha;
|
127 | `
|
128 | },
|
129 | {
|
130 | test: (data, uniform) => data.type === "vec3" && data.size === 1 && !data.isArray && uniform.red !== void 0,
|
131 | code: (name) => `
|
132 | cv = ud["${name}"].value;
|
133 | v = uv["${name}"];
|
134 |
|
135 | if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.a)
|
136 | {
|
137 | cv[0] = v.red;
|
138 | cv[1] = v.green;
|
139 | cv[2] = v.blue;
|
140 |
|
141 | gl.uniform3f(ud["${name}"].location, v.red, v.green, v.blue)
|
142 | }`,
|
143 | codeUbo: (name) => `
|
144 | v = uv.${name};
|
145 |
|
146 | data[offset] = v.red;
|
147 | data[offset+1] = v.green;
|
148 | data[offset+2] = v.blue;
|
149 | `
|
150 | },
|
151 | {
|
152 | test: (data) => data.type === "vec4" && data.size === 1 && !data.isArray,
|
153 | code: (name) => `
|
154 | cv = ud["${name}"].value;
|
155 | v = uv["${name}"];
|
156 |
|
157 | if(cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])
|
158 | {
|
159 | cv[0] = v[0];
|
160 | cv[1] = v[1];
|
161 | cv[2] = v[2];
|
162 | cv[3] = v[3];
|
163 |
|
164 | gl.uniform4f(ud["${name}"].location, v[0], v[1], v[2], v[3])
|
165 | }`
|
166 | }
|
167 | ];
|
168 |
|
169 | exports.uniformParsers = uniformParsers;
|
170 |
|