@loaders.gl/draco 3.4.14 → 3.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/draco-nodejs-worker.js +1 -1
- package/dist/draco-worker.js +1 -1
- package/dist/draco-writer-nodejs-worker.js +2 -2
- package/dist/draco-writer-worker.js +2 -2
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/draco-loader.js +4 -6
- package/dist/es5/draco-loader.js.map +1 -1
- package/dist/es5/draco-writer-nodejs.js +1 -1
- package/dist/es5/draco-writer.js +14 -38
- package/dist/es5/draco-writer.js.map +1 -1
- package/dist/es5/draco3d/draco3d-types.js +4 -4
- package/dist/es5/index.js +18 -40
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/draco-builder.js +218 -266
- package/dist/es5/lib/draco-builder.js.map +1 -1
- package/dist/es5/lib/draco-module-loader.js +64 -164
- package/dist/es5/lib/draco-module-loader.js.map +1 -1
- package/dist/es5/lib/draco-parser.js +279 -343
- package/dist/es5/lib/draco-parser.js.map +1 -1
- package/dist/es5/lib/utils/get-draco-schema.js +15 -15
- package/dist/es5/lib/utils/get-draco-schema.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/workers/draco-writer-nodejs-worker.js +22 -43
- package/dist/es5/workers/draco-writer-nodejs-worker.js.map +1 -1
- package/dist/es5/workers/draco-writer-worker.js +22 -43
- package/dist/es5/workers/draco-writer-worker.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/package.json +6 -6
|
@@ -5,27 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
-
|
|
15
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
16
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
17
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
|
-
var GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
|
|
9
|
+
const GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
|
|
20
10
|
POSITION: 'POSITION',
|
|
21
11
|
NORMAL: 'NORMAL',
|
|
22
12
|
COLOR_0: 'COLOR',
|
|
23
13
|
TEXCOORD_0: 'TEX_COORD'
|
|
24
14
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
(0, _classCallCheck2.default)(this, DracoBuilder);
|
|
15
|
+
const noop = () => {};
|
|
16
|
+
class DracoBuilder {
|
|
17
|
+
constructor(draco) {
|
|
29
18
|
(0, _defineProperty2.default)(this, "draco", void 0);
|
|
30
19
|
(0, _defineProperty2.default)(this, "dracoEncoder", void 0);
|
|
31
20
|
(0, _defineProperty2.default)(this, "dracoMeshBuilder", void 0);
|
|
@@ -36,289 +25,252 @@ var DracoBuilder = function () {
|
|
|
36
25
|
this.dracoMeshBuilder = new this.draco.MeshBuilder();
|
|
37
26
|
this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
|
|
38
27
|
}
|
|
39
|
-
(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
28
|
+
destroy() {
|
|
29
|
+
this.destroyEncodedObject(this.dracoMeshBuilder);
|
|
30
|
+
this.destroyEncodedObject(this.dracoEncoder);
|
|
31
|
+
this.destroyEncodedObject(this.dracoMetadataBuilder);
|
|
32
|
+
this.dracoMeshBuilder = null;
|
|
33
|
+
this.dracoEncoder = null;
|
|
34
|
+
this.draco = null;
|
|
35
|
+
}
|
|
36
|
+
destroyEncodedObject(object) {
|
|
37
|
+
if (object) {
|
|
38
|
+
this.draco.destroy(object);
|
|
48
39
|
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
40
|
+
}
|
|
41
|
+
encodeSync(mesh) {
|
|
42
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
43
|
+
this.log = noop;
|
|
44
|
+
this._setOptions(options);
|
|
45
|
+
return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
|
|
46
|
+
}
|
|
47
|
+
_getAttributesFromMesh(mesh) {
|
|
48
|
+
const attributes = {
|
|
49
|
+
...mesh,
|
|
50
|
+
...mesh.attributes
|
|
51
|
+
};
|
|
52
|
+
if (mesh.indices) {
|
|
53
|
+
attributes.indices = mesh.indices;
|
|
55
54
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.
|
|
62
|
-
return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
|
|
55
|
+
return attributes;
|
|
56
|
+
}
|
|
57
|
+
_encodePointCloud(pointcloud, options) {
|
|
58
|
+
const dracoPointCloud = new this.draco.PointCloud();
|
|
59
|
+
if (options.metadata) {
|
|
60
|
+
this._addGeometryMetadata(dracoPointCloud, options.metadata);
|
|
63
61
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
const attributes = this._getAttributesFromMesh(pointcloud);
|
|
63
|
+
this._createDracoPointCloud(dracoPointCloud, attributes, options);
|
|
64
|
+
const dracoData = new this.draco.DracoInt8Array();
|
|
65
|
+
try {
|
|
66
|
+
const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
|
|
67
|
+
if (!(encodedLen > 0)) {
|
|
68
|
+
throw new Error('Draco encoding failed.');
|
|
70
69
|
}
|
|
71
|
-
|
|
70
|
+
this.log("DRACO encoded ".concat(dracoPointCloud.num_points(), " points\n with ").concat(dracoPointCloud.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
71
|
+
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
72
|
+
} finally {
|
|
73
|
+
this.destroyEncodedObject(dracoData);
|
|
74
|
+
this.destroyEncodedObject(dracoPointCloud);
|
|
72
75
|
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this._addGeometryMetadata(dracoPointCloud, options.metadata);
|
|
79
|
-
}
|
|
80
|
-
var attributes = this._getAttributesFromMesh(pointcloud);
|
|
81
|
-
this._createDracoPointCloud(dracoPointCloud, attributes, options);
|
|
82
|
-
var dracoData = new this.draco.DracoInt8Array();
|
|
83
|
-
try {
|
|
84
|
-
var encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
|
|
85
|
-
if (!(encodedLen > 0)) {
|
|
86
|
-
throw new Error('Draco encoding failed.');
|
|
87
|
-
}
|
|
88
|
-
this.log("DRACO encoded ".concat(dracoPointCloud.num_points(), " points\n with ").concat(dracoPointCloud.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
89
|
-
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
90
|
-
} finally {
|
|
91
|
-
this.destroyEncodedObject(dracoData);
|
|
92
|
-
this.destroyEncodedObject(dracoPointCloud);
|
|
93
|
-
}
|
|
76
|
+
}
|
|
77
|
+
_encodeMesh(mesh, options) {
|
|
78
|
+
const dracoMesh = new this.draco.Mesh();
|
|
79
|
+
if (options.metadata) {
|
|
80
|
+
this._addGeometryMetadata(dracoMesh, options.metadata);
|
|
94
81
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
var attributes = this._getAttributesFromMesh(mesh);
|
|
103
|
-
this._createDracoMesh(dracoMesh, attributes, options);
|
|
104
|
-
var dracoData = new this.draco.DracoInt8Array();
|
|
105
|
-
try {
|
|
106
|
-
var encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
|
|
107
|
-
if (encodedLen <= 0) {
|
|
108
|
-
throw new Error('Draco encoding failed.');
|
|
109
|
-
}
|
|
110
|
-
this.log("DRACO encoded ".concat(dracoMesh.num_points(), " points\n with ").concat(dracoMesh.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
111
|
-
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
112
|
-
} finally {
|
|
113
|
-
this.destroyEncodedObject(dracoData);
|
|
114
|
-
this.destroyEncodedObject(dracoMesh);
|
|
82
|
+
const attributes = this._getAttributesFromMesh(mesh);
|
|
83
|
+
this._createDracoMesh(dracoMesh, attributes, options);
|
|
84
|
+
const dracoData = new this.draco.DracoInt8Array();
|
|
85
|
+
try {
|
|
86
|
+
const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
|
|
87
|
+
if (encodedLen <= 0) {
|
|
88
|
+
throw new Error('Draco encoding failed.');
|
|
115
89
|
}
|
|
90
|
+
this.log("DRACO encoded ".concat(dracoMesh.num_points(), " points\n with ").concat(dracoMesh.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
91
|
+
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
92
|
+
} finally {
|
|
93
|
+
this.destroyEncodedObject(dracoData);
|
|
94
|
+
this.destroyEncodedObject(dracoMesh);
|
|
116
95
|
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
96
|
+
}
|
|
97
|
+
_setOptions(options) {
|
|
98
|
+
if ('speed' in options) {
|
|
99
|
+
this.dracoEncoder.SetSpeedOptions(...options.speed);
|
|
100
|
+
}
|
|
101
|
+
if ('method' in options) {
|
|
102
|
+
const dracoMethod = this.draco[options.method || 'MESH_SEQUENTIAL_ENCODING'];
|
|
103
|
+
this.dracoEncoder.SetEncodingMethod(dracoMethod);
|
|
104
|
+
}
|
|
105
|
+
if ('quantization' in options) {
|
|
106
|
+
for (const attribute in options.quantization) {
|
|
107
|
+
const bits = options.quantization[attribute];
|
|
108
|
+
const dracoPosition = this.draco[attribute];
|
|
109
|
+
this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);
|
|
123
110
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
_createDracoMesh(dracoMesh, attributes, options) {
|
|
114
|
+
const optionalMetadata = options.attributesMetadata || {};
|
|
115
|
+
try {
|
|
116
|
+
const positions = this._getPositionAttribute(attributes);
|
|
117
|
+
if (!positions) {
|
|
118
|
+
throw new Error('positions');
|
|
127
119
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
120
|
+
const vertexCount = positions.length / 3;
|
|
121
|
+
for (let attributeName in attributes) {
|
|
122
|
+
const attribute = attributes[attributeName];
|
|
123
|
+
attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
|
|
124
|
+
const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);
|
|
125
|
+
if (uniqueId !== -1) {
|
|
126
|
+
this._addAttributeMetadata(dracoMesh, uniqueId, {
|
|
127
|
+
name: attributeName,
|
|
128
|
+
...(optionalMetadata[attributeName] || {})
|
|
129
|
+
});
|
|
133
130
|
}
|
|
134
131
|
}
|
|
132
|
+
} catch (error) {
|
|
133
|
+
this.destroyEncodedObject(dracoMesh);
|
|
134
|
+
throw error;
|
|
135
135
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
var vertexCount = positions.length / 3;
|
|
146
|
-
for (var _attributeName in attributes) {
|
|
147
|
-
var attribute = attributes[_attributeName];
|
|
148
|
-
_attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[_attributeName] || _attributeName;
|
|
149
|
-
var uniqueId = this._addAttributeToMesh(dracoMesh, _attributeName, attribute, vertexCount);
|
|
150
|
-
if (uniqueId !== -1) {
|
|
151
|
-
this._addAttributeMetadata(dracoMesh, uniqueId, _objectSpread({
|
|
152
|
-
name: _attributeName
|
|
153
|
-
}, optionalMetadata[_attributeName] || {}));
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
} catch (error) {
|
|
157
|
-
this.destroyEncodedObject(dracoMesh);
|
|
158
|
-
throw error;
|
|
136
|
+
return dracoMesh;
|
|
137
|
+
}
|
|
138
|
+
_createDracoPointCloud(dracoPointCloud, attributes, options) {
|
|
139
|
+
const optionalMetadata = options.attributesMetadata || {};
|
|
140
|
+
try {
|
|
141
|
+
const positions = this._getPositionAttribute(attributes);
|
|
142
|
+
if (!positions) {
|
|
143
|
+
throw new Error('positions');
|
|
159
144
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
145
|
+
const vertexCount = positions.length / 3;
|
|
146
|
+
for (let attributeName in attributes) {
|
|
147
|
+
const attribute = attributes[attributeName];
|
|
148
|
+
attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
|
|
149
|
+
const uniqueId = this._addAttributeToMesh(dracoPointCloud, attributeName, attribute, vertexCount);
|
|
150
|
+
if (uniqueId !== -1) {
|
|
151
|
+
this._addAttributeMetadata(dracoPointCloud, uniqueId, {
|
|
152
|
+
name: attributeName,
|
|
153
|
+
...(optionalMetadata[attributeName] || {})
|
|
154
|
+
});
|
|
170
155
|
}
|
|
171
|
-
var vertexCount = positions.length / 3;
|
|
172
|
-
for (var _attributeName2 in attributes) {
|
|
173
|
-
var attribute = attributes[_attributeName2];
|
|
174
|
-
_attributeName2 = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[_attributeName2] || _attributeName2;
|
|
175
|
-
var uniqueId = this._addAttributeToMesh(dracoPointCloud, _attributeName2, attribute, vertexCount);
|
|
176
|
-
if (uniqueId !== -1) {
|
|
177
|
-
this._addAttributeMetadata(dracoPointCloud, uniqueId, _objectSpread({
|
|
178
|
-
name: _attributeName2
|
|
179
|
-
}, optionalMetadata[_attributeName2] || {}));
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
} catch (error) {
|
|
183
|
-
this.destroyEncodedObject(dracoPointCloud);
|
|
184
|
-
throw error;
|
|
185
156
|
}
|
|
186
|
-
|
|
157
|
+
} catch (error) {
|
|
158
|
+
this.destroyEncodedObject(dracoPointCloud);
|
|
159
|
+
throw error;
|
|
187
160
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
var type = this._getDracoAttributeType(attributeName);
|
|
195
|
-
var size = attribute.length / vertexCount;
|
|
196
|
-
if (type === 'indices') {
|
|
197
|
-
var numFaces = attribute.length / 3;
|
|
198
|
-
this.log("Adding attribute ".concat(attributeName, ", size ").concat(numFaces));
|
|
199
|
-
this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
|
|
200
|
-
return -1;
|
|
201
|
-
}
|
|
202
|
-
this.log("Adding attribute ".concat(attributeName, ", size ").concat(size));
|
|
203
|
-
var builder = this.dracoMeshBuilder;
|
|
204
|
-
var buffer = attribute.buffer;
|
|
205
|
-
switch (attribute.constructor) {
|
|
206
|
-
case Int8Array:
|
|
207
|
-
return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
|
|
208
|
-
case Int16Array:
|
|
209
|
-
return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
|
|
210
|
-
case Int32Array:
|
|
211
|
-
return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
|
|
212
|
-
case Uint8Array:
|
|
213
|
-
case Uint8ClampedArray:
|
|
214
|
-
return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
|
|
215
|
-
case Uint16Array:
|
|
216
|
-
return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
|
|
217
|
-
case Uint32Array:
|
|
218
|
-
return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
|
|
219
|
-
case Float32Array:
|
|
220
|
-
default:
|
|
221
|
-
return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
|
|
222
|
-
}
|
|
161
|
+
return dracoPointCloud;
|
|
162
|
+
}
|
|
163
|
+
_addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
|
|
164
|
+
if (!ArrayBuffer.isView(attribute)) {
|
|
165
|
+
return -1;
|
|
223
166
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
case 'positions':
|
|
232
|
-
case 'vertices':
|
|
233
|
-
return this.draco.POSITION;
|
|
234
|
-
case 'normal':
|
|
235
|
-
case 'normals':
|
|
236
|
-
return this.draco.NORMAL;
|
|
237
|
-
case 'color':
|
|
238
|
-
case 'colors':
|
|
239
|
-
return this.draco.COLOR;
|
|
240
|
-
case 'texcoord':
|
|
241
|
-
case 'texcoords':
|
|
242
|
-
return this.draco.TEX_COORD;
|
|
243
|
-
default:
|
|
244
|
-
return this.draco.GENERIC;
|
|
245
|
-
}
|
|
167
|
+
const type = this._getDracoAttributeType(attributeName);
|
|
168
|
+
const size = attribute.length / vertexCount;
|
|
169
|
+
if (type === 'indices') {
|
|
170
|
+
const numFaces = attribute.length / 3;
|
|
171
|
+
this.log("Adding attribute ".concat(attributeName, ", size ").concat(numFaces));
|
|
172
|
+
this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
|
|
173
|
+
return -1;
|
|
246
174
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
175
|
+
this.log("Adding attribute ".concat(attributeName, ", size ").concat(size));
|
|
176
|
+
const builder = this.dracoMeshBuilder;
|
|
177
|
+
const {
|
|
178
|
+
buffer
|
|
179
|
+
} = attribute;
|
|
180
|
+
switch (attribute.constructor) {
|
|
181
|
+
case Int8Array:
|
|
182
|
+
return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
|
|
183
|
+
case Int16Array:
|
|
184
|
+
return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
|
|
185
|
+
case Int32Array:
|
|
186
|
+
return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
|
|
187
|
+
case Uint8Array:
|
|
188
|
+
case Uint8ClampedArray:
|
|
189
|
+
return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
|
|
190
|
+
case Uint16Array:
|
|
191
|
+
return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
|
|
192
|
+
case Uint32Array:
|
|
193
|
+
return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
|
|
194
|
+
case Float32Array:
|
|
195
|
+
default:
|
|
196
|
+
return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
|
|
258
197
|
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
198
|
+
}
|
|
199
|
+
_getDracoAttributeType(attributeName) {
|
|
200
|
+
switch (attributeName.toLowerCase()) {
|
|
201
|
+
case 'indices':
|
|
202
|
+
return 'indices';
|
|
203
|
+
case 'position':
|
|
204
|
+
case 'positions':
|
|
205
|
+
case 'vertices':
|
|
206
|
+
return this.draco.POSITION;
|
|
207
|
+
case 'normal':
|
|
208
|
+
case 'normals':
|
|
209
|
+
return this.draco.NORMAL;
|
|
210
|
+
case 'color':
|
|
211
|
+
case 'colors':
|
|
212
|
+
return this.draco.COLOR;
|
|
213
|
+
case 'texcoord':
|
|
214
|
+
case 'texcoords':
|
|
215
|
+
return this.draco.TEX_COORD;
|
|
216
|
+
default:
|
|
217
|
+
return this.draco.GENERIC;
|
|
265
218
|
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
this.
|
|
271
|
-
this.
|
|
219
|
+
}
|
|
220
|
+
_getPositionAttribute(attributes) {
|
|
221
|
+
for (const attributeName in attributes) {
|
|
222
|
+
const attribute = attributes[attributeName];
|
|
223
|
+
const dracoType = this._getDracoAttributeType(attributeName);
|
|
224
|
+
if (dracoType === this.draco.POSITION) {
|
|
225
|
+
return attribute;
|
|
226
|
+
}
|
|
272
227
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, _key, value, value.length);
|
|
294
|
-
}
|
|
295
|
-
break;
|
|
296
|
-
case 'string':
|
|
297
|
-
default:
|
|
298
|
-
this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, _key, value);
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
_addGeometryMetadata(dracoGeometry, metadata) {
|
|
231
|
+
const dracoMetadata = new this.draco.Metadata();
|
|
232
|
+
this._populateDracoMetadata(dracoMetadata, metadata);
|
|
233
|
+
this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
|
|
234
|
+
}
|
|
235
|
+
_addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
|
|
236
|
+
const dracoAttributeMetadata = new this.draco.Metadata();
|
|
237
|
+
this._populateDracoMetadata(dracoAttributeMetadata, metadata);
|
|
238
|
+
this.dracoMeshBuilder.SetMetadataForAttribute(dracoGeometry, uniqueAttributeId, dracoAttributeMetadata);
|
|
239
|
+
}
|
|
240
|
+
_populateDracoMetadata(dracoMetadata, metadata) {
|
|
241
|
+
for (const [key, value] of getEntries(metadata)) {
|
|
242
|
+
switch (typeof value) {
|
|
243
|
+
case 'number':
|
|
244
|
+
if (Math.trunc(value) === value) {
|
|
245
|
+
this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);
|
|
246
|
+
} else {
|
|
247
|
+
this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);
|
|
299
248
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
249
|
+
break;
|
|
250
|
+
case 'object':
|
|
251
|
+
if (value instanceof Int32Array) {
|
|
252
|
+
this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);
|
|
253
|
+
}
|
|
254
|
+
break;
|
|
255
|
+
case 'string':
|
|
256
|
+
default:
|
|
257
|
+
this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);
|
|
305
258
|
}
|
|
306
259
|
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
}();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
310
262
|
exports.default = DracoBuilder;
|
|
311
263
|
function dracoInt8ArrayToArrayBuffer(dracoData) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
for (
|
|
264
|
+
const byteLength = dracoData.size();
|
|
265
|
+
const outputBuffer = new ArrayBuffer(byteLength);
|
|
266
|
+
const outputData = new Int8Array(outputBuffer);
|
|
267
|
+
for (let i = 0; i < byteLength; ++i) {
|
|
316
268
|
outputData[i] = dracoData.GetValue(i);
|
|
317
269
|
}
|
|
318
270
|
return outputBuffer;
|
|
319
271
|
}
|
|
320
272
|
function getEntries(container) {
|
|
321
|
-
|
|
273
|
+
const hasEntriesFunc = container.entries && !container.hasOwnProperty('entries');
|
|
322
274
|
return hasEntriesFunc ? container.entries() : Object.entries(container);
|
|
323
275
|
}
|
|
324
276
|
//# sourceMappingURL=draco-builder.js.map
|