UNPKG

1.69 kBJavaScriptView Raw
1import { isObject } from './is-object';
2import { isTypedArray } from './is-typedarray';
3/**
4 * 考虑结构体命名, eg:
5 * a: { b: 1 } -> 'a.b'
6 * a: [ { b: 1 } ] -> 'a[0].b'
7 */
8
9export function extractUniforms(uniforms) {
10 var extractedUniforms = {};
11 Object.keys(uniforms).forEach(function (uniformName) {
12 extractUniformsRecursively(uniformName, uniforms[uniformName], extractedUniforms, '');
13 });
14 return extractedUniforms;
15}
16
17function extractUniformsRecursively(uniformName, uniformValue, uniforms, prefix) {
18 if (uniformValue === null || typeof uniformValue === 'number' || // u_A: 1
19 typeof uniformValue === 'boolean' || // u_A: false
20 Array.isArray(uniformValue) && typeof uniformValue[0] === 'number' || // u_A: [1, 2, 3]
21 isTypedArray(uniformValue) || // u_A: Float32Array
22 // @ts-ignore
23 uniformValue === '' || // @ts-ignore
24 uniformValue.resize !== undefined) {
25 uniforms["".concat(prefix && prefix + '.').concat(uniformName)] = uniformValue;
26 return;
27 } // u_Struct.a.b.c
28
29
30 if (isObject(uniformValue)) {
31 Object.keys(uniformValue).forEach(function (childName) {
32 extractUniformsRecursively(childName, // @ts-ignore
33 uniformValue[childName], uniforms, "".concat(prefix && prefix + '.').concat(uniformName));
34 });
35 } // u_Struct[0].a
36
37
38 if (Array.isArray(uniformValue)) {
39 // @ts-ignore
40 uniformValue.forEach(function (child, idx) {
41 Object.keys(child).forEach(function (childName) {
42 extractUniformsRecursively(childName, // @ts-ignore
43 child[childName], uniforms, "".concat(prefix && prefix + '.').concat(uniformName, "[").concat(idx, "]"));
44 });
45 });
46 }
47}
48//# sourceMappingURL=uniform.js.map
\No newline at end of file