UNPKG

2.01 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4Object.defineProperty(exports, "__esModule", {
5 value: true
6});
7exports.extractUniforms = extractUniforms;
8var _isTypedArray2 = _interopRequireDefault(require("lodash/isTypedArray"));
9var _isPlainObject2 = _interopRequireDefault(require("lodash/isPlainObject"));
10/**
11 * 考虑结构体命名, eg:
12 * a: { b: 1 } -> 'a.b'
13 * a: [ { b: 1 } ] -> 'a[0].b'
14 */
15function extractUniforms(uniforms) {
16 var extractedUniforms = {};
17 Object.keys(uniforms).forEach(function (uniformName) {
18 extractUniformsRecursively(uniformName, uniforms[uniformName], extractedUniforms, '');
19 });
20 return extractedUniforms;
21}
22function extractUniformsRecursively(uniformName, uniformValue, uniforms, prefix) {
23 if (uniformValue === null || typeof uniformValue === 'number' ||
24 // u_A: 1
25 typeof uniformValue === 'boolean' ||
26 // u_A: false
27 Array.isArray(uniformValue) && typeof uniformValue[0] === 'number' ||
28 // u_A: [1, 2, 3]
29 (0, _isTypedArray2.default)(uniformValue) ||
30 // u_A: Float32Array
31 // @ts-ignore
32 uniformValue === '' ||
33 // @ts-ignore
34 uniformValue.resize !== undefined) {
35 uniforms["".concat(prefix && prefix + '.').concat(uniformName)] = uniformValue;
36 return;
37 }
38
39 // u_Struct.a.b.c
40 if ((0, _isPlainObject2.default)(uniformValue)) {
41 Object.keys(uniformValue).forEach(function (childName) {
42 extractUniformsRecursively(childName,
43 // @ts-ignore
44 uniformValue[childName], uniforms, "".concat(prefix && prefix + '.').concat(uniformName));
45 });
46 }
47
48 // u_Struct[0].a
49 if (Array.isArray(uniformValue)) {
50 // @ts-ignore
51 uniformValue.forEach(function (child, idx) {
52 Object.keys(child).forEach(function (childName) {
53 extractUniformsRecursively(childName,
54 // @ts-ignore
55 child[childName], uniforms, "".concat(prefix && prefix + '.').concat(uniformName, "[").concat(idx, "]"));
56 });
57 });
58 }
59}
60//# sourceMappingURL=uniform.js.map
\No newline at end of file