@loaders.gl/draco 3.1.0-alpha.4 → 3.1.0-beta.3
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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +5 -0
- package/dist/dist.min.js +4 -2
- package/dist/dist.min.js.map +7 -1
- package/dist/draco-loader.d.ts +28 -0
- package/dist/draco-loader.d.ts.map +1 -0
- package/dist/draco-loader.js +30 -0
- package/dist/draco-worker.js +2 -2
- package/dist/draco-worker.js.map +7 -1
- package/dist/draco-writer.d.ts +8 -0
- package/dist/draco-writer.d.ts.map +1 -0
- package/dist/draco-writer.js +44 -0
- package/dist/draco3d/draco3d-types.d.ts +295 -0
- package/dist/draco3d/draco3d-types.d.ts.map +1 -0
- package/dist/draco3d/draco3d-types.js +51 -0
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/draco-loader.js +4 -8
- package/dist/es5/draco-loader.js.map +1 -1
- package/dist/es5/draco-writer.js +13 -46
- package/dist/es5/draco-writer.js.map +1 -1
- package/dist/es5/draco3d/draco3d-types.js +4 -4
- package/dist/es5/index.js +16 -51
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/draco-builder.js +244 -292
- package/dist/es5/lib/draco-builder.js.map +1 -1
- package/dist/es5/lib/draco-module-loader.js +65 -198
- package/dist/es5/lib/draco-module-loader.js.map +1 -1
- package/dist/es5/lib/draco-parser.js +308 -372
- 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/esm/lib/draco-builder.js +4 -6
- package/dist/esm/lib/draco-builder.js.map +1 -1
- package/dist/esm/lib/draco-module-loader.js +4 -4
- package/dist/esm/lib/draco-module-loader.js.map +1 -1
- package/dist/esm/lib/draco-parser.js +2 -2
- package/dist/esm/lib/draco-parser.js.map +1 -1
- package/dist/esm/lib/utils/get-draco-schema.js +1 -1
- package/dist/esm/lib/utils/get-draco-schema.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/lib/draco-builder.d.ts +107 -0
- package/dist/lib/draco-builder.d.ts.map +1 -0
- package/dist/lib/draco-builder.js +338 -0
- package/dist/lib/draco-module-loader.d.ts +3 -0
- package/dist/lib/draco-module-loader.d.ts.map +1 -0
- package/dist/lib/draco-module-loader.js +91 -0
- package/dist/lib/draco-parser.d.ts +137 -0
- package/dist/lib/draco-parser.d.ts.map +1 -0
- package/dist/lib/draco-parser.js +476 -0
- package/dist/lib/draco-types.d.ts +59 -0
- package/dist/lib/draco-types.d.ts.map +1 -0
- package/dist/lib/draco-types.js +3 -0
- package/dist/lib/utils/get-draco-schema.d.ts +8 -0
- package/dist/lib/utils/get-draco-schema.d.ts.map +1 -0
- package/dist/lib/utils/get-draco-schema.js +42 -0
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +7 -0
- package/dist/workers/draco-worker.d.ts +2 -0
- package/dist/workers/draco-worker.d.ts.map +1 -0
- package/dist/workers/draco-worker.js +5 -0
- package/package.json +8 -8
|
@@ -7,40 +7,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
-
|
|
12
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
-
|
|
16
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
11
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
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); }
|
|
25
|
-
|
|
26
|
-
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; }
|
|
27
|
-
|
|
28
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
-
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
31
|
-
|
|
32
|
-
var GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
|
|
12
|
+
const GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
|
|
33
13
|
POSITION: 'POSITION',
|
|
34
14
|
NORMAL: 'NORMAL',
|
|
35
15
|
COLOR_0: 'COLOR',
|
|
36
16
|
TEXCOORD_0: 'TEX_COORD'
|
|
37
17
|
};
|
|
38
18
|
|
|
39
|
-
|
|
19
|
+
const noop = () => {};
|
|
40
20
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
(0, _classCallCheck2.default)(this, DracoBuilder);
|
|
21
|
+
class DracoBuilder {
|
|
22
|
+
constructor(draco) {
|
|
44
23
|
(0, _defineProperty2.default)(this, "draco", void 0);
|
|
45
24
|
(0, _defineProperty2.default)(this, "dracoEncoder", void 0);
|
|
46
25
|
(0, _defineProperty2.default)(this, "dracoMeshBuilder", void 0);
|
|
@@ -52,350 +31,323 @@ var DracoBuilder = function () {
|
|
|
52
31
|
this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
|
|
53
32
|
}
|
|
54
33
|
|
|
55
|
-
(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
value: function destroyEncodedObject(object) {
|
|
68
|
-
if (object) {
|
|
69
|
-
this.draco.destroy(object);
|
|
70
|
-
}
|
|
34
|
+
destroy() {
|
|
35
|
+
this.destroyEncodedObject(this.dracoMeshBuilder);
|
|
36
|
+
this.destroyEncodedObject(this.dracoEncoder);
|
|
37
|
+
this.destroyEncodedObject(this.dracoMetadataBuilder);
|
|
38
|
+
this.dracoMeshBuilder = null;
|
|
39
|
+
this.dracoEncoder = null;
|
|
40
|
+
this.draco = null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
destroyEncodedObject(object) {
|
|
44
|
+
if (object) {
|
|
45
|
+
this.draco.destroy(object);
|
|
71
46
|
}
|
|
72
|
-
}
|
|
73
|
-
key: "encodeSync",
|
|
74
|
-
value: function encodeSync(mesh) {
|
|
75
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
76
|
-
this.log = noop;
|
|
47
|
+
}
|
|
77
48
|
|
|
78
|
-
|
|
49
|
+
encodeSync(mesh, options = {}) {
|
|
50
|
+
this.log = noop;
|
|
79
51
|
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
}, {
|
|
83
|
-
key: "_getAttributesFromMesh",
|
|
84
|
-
value: function _getAttributesFromMesh(mesh) {
|
|
85
|
-
var attributes = _objectSpread(_objectSpread({}, mesh), mesh.attributes);
|
|
52
|
+
this._setOptions(options);
|
|
86
53
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
54
|
+
return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
_getAttributesFromMesh(mesh) {
|
|
58
|
+
const attributes = { ...mesh,
|
|
59
|
+
...mesh.attributes
|
|
60
|
+
};
|
|
90
61
|
|
|
91
|
-
|
|
62
|
+
if (mesh.indices) {
|
|
63
|
+
attributes.indices = mesh.indices;
|
|
92
64
|
}
|
|
93
|
-
}, {
|
|
94
|
-
key: "_encodePointCloud",
|
|
95
|
-
value: function _encodePointCloud(pointcloud, options) {
|
|
96
|
-
var dracoPointCloud = new this.draco.PointCloud();
|
|
97
65
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
66
|
+
return attributes;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
_encodePointCloud(pointcloud, options) {
|
|
70
|
+
const dracoPointCloud = new this.draco.PointCloud();
|
|
101
71
|
|
|
102
|
-
|
|
72
|
+
if (options.metadata) {
|
|
73
|
+
this._addGeometryMetadata(dracoPointCloud, options.metadata);
|
|
74
|
+
}
|
|
103
75
|
|
|
104
|
-
|
|
76
|
+
const attributes = this._getAttributesFromMesh(pointcloud);
|
|
105
77
|
|
|
106
|
-
|
|
78
|
+
this._createDracoPointCloud(dracoPointCloud, attributes, options);
|
|
107
79
|
|
|
108
|
-
|
|
109
|
-
var encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
|
|
80
|
+
const dracoData = new this.draco.DracoInt8Array();
|
|
110
81
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
82
|
+
try {
|
|
83
|
+
const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
|
|
114
84
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
} finally {
|
|
118
|
-
this.destroyEncodedObject(dracoData);
|
|
119
|
-
this.destroyEncodedObject(dracoPointCloud);
|
|
85
|
+
if (!(encodedLen > 0)) {
|
|
86
|
+
throw new Error('Draco encoding failed.');
|
|
120
87
|
}
|
|
88
|
+
|
|
89
|
+
this.log("DRACO encoded ".concat(dracoPointCloud.num_points(), " points\n with ").concat(dracoPointCloud.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
90
|
+
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
91
|
+
} finally {
|
|
92
|
+
this.destroyEncodedObject(dracoData);
|
|
93
|
+
this.destroyEncodedObject(dracoPointCloud);
|
|
121
94
|
}
|
|
122
|
-
}
|
|
123
|
-
key: "_encodeMesh",
|
|
124
|
-
value: function _encodeMesh(mesh, options) {
|
|
125
|
-
var dracoMesh = new this.draco.Mesh();
|
|
95
|
+
}
|
|
126
96
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
97
|
+
_encodeMesh(mesh, options) {
|
|
98
|
+
const dracoMesh = new this.draco.Mesh();
|
|
130
99
|
|
|
131
|
-
|
|
100
|
+
if (options.metadata) {
|
|
101
|
+
this._addGeometryMetadata(dracoMesh, options.metadata);
|
|
102
|
+
}
|
|
132
103
|
|
|
133
|
-
|
|
104
|
+
const attributes = this._getAttributesFromMesh(mesh);
|
|
134
105
|
|
|
135
|
-
|
|
106
|
+
this._createDracoMesh(dracoMesh, attributes, options);
|
|
136
107
|
|
|
137
|
-
|
|
138
|
-
var encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
|
|
108
|
+
const dracoData = new this.draco.DracoInt8Array();
|
|
139
109
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
110
|
+
try {
|
|
111
|
+
const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
|
|
143
112
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
} finally {
|
|
147
|
-
this.destroyEncodedObject(dracoData);
|
|
148
|
-
this.destroyEncodedObject(dracoMesh);
|
|
113
|
+
if (encodedLen <= 0) {
|
|
114
|
+
throw new Error('Draco encoding failed.');
|
|
149
115
|
}
|
|
116
|
+
|
|
117
|
+
this.log("DRACO encoded ".concat(dracoMesh.num_points(), " points\n with ").concat(dracoMesh.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
118
|
+
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
119
|
+
} finally {
|
|
120
|
+
this.destroyEncodedObject(dracoData);
|
|
121
|
+
this.destroyEncodedObject(dracoMesh);
|
|
150
122
|
}
|
|
151
|
-
}
|
|
152
|
-
key: "_setOptions",
|
|
153
|
-
value: function _setOptions(options) {
|
|
154
|
-
if ('speed' in options) {
|
|
155
|
-
var _this$dracoEncoder;
|
|
123
|
+
}
|
|
156
124
|
|
|
157
|
-
|
|
158
|
-
|
|
125
|
+
_setOptions(options) {
|
|
126
|
+
if ('speed' in options) {
|
|
127
|
+
this.dracoEncoder.SetSpeedOptions(...options.speed);
|
|
128
|
+
}
|
|
159
129
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
130
|
+
if ('method' in options) {
|
|
131
|
+
const dracoMethod = this.draco[options.method || 'MESH_SEQUENTIAL_ENCODING'];
|
|
132
|
+
this.dracoEncoder.SetEncodingMethod(dracoMethod);
|
|
133
|
+
}
|
|
164
134
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
135
|
+
if ('quantization' in options) {
|
|
136
|
+
for (const attribute in options.quantization) {
|
|
137
|
+
const bits = options.quantization[attribute];
|
|
138
|
+
const dracoPosition = this.draco[attribute];
|
|
139
|
+
this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);
|
|
171
140
|
}
|
|
172
141
|
}
|
|
173
|
-
}
|
|
174
|
-
key: "_createDracoMesh",
|
|
175
|
-
value: function _createDracoMesh(dracoMesh, attributes, options) {
|
|
176
|
-
var optionalMetadata = options.attributesMetadata || {};
|
|
142
|
+
}
|
|
177
143
|
|
|
178
|
-
|
|
179
|
-
|
|
144
|
+
_createDracoMesh(dracoMesh, attributes, options) {
|
|
145
|
+
const optionalMetadata = options.attributesMetadata || {};
|
|
180
146
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
147
|
+
try {
|
|
148
|
+
const positions = this._getPositionAttribute(attributes);
|
|
184
149
|
|
|
185
|
-
|
|
150
|
+
if (!positions) {
|
|
151
|
+
throw new Error('positions');
|
|
152
|
+
}
|
|
186
153
|
|
|
187
|
-
|
|
188
|
-
var attribute = attributes[_attributeName];
|
|
189
|
-
_attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[_attributeName] || _attributeName;
|
|
154
|
+
const vertexCount = positions.length / 3;
|
|
190
155
|
|
|
191
|
-
|
|
156
|
+
for (let attributeName in attributes) {
|
|
157
|
+
const attribute = attributes[attributeName];
|
|
158
|
+
attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
|
|
192
159
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
160
|
+
const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);
|
|
161
|
+
|
|
162
|
+
if (uniqueId !== -1) {
|
|
163
|
+
this._addAttributeMetadata(dracoMesh, uniqueId, {
|
|
164
|
+
name: attributeName,
|
|
165
|
+
...(optionalMetadata[attributeName] || {})
|
|
166
|
+
});
|
|
198
167
|
}
|
|
199
|
-
} catch (error) {
|
|
200
|
-
this.destroyEncodedObject(dracoMesh);
|
|
201
|
-
throw error;
|
|
202
168
|
}
|
|
203
|
-
|
|
204
|
-
|
|
169
|
+
} catch (error) {
|
|
170
|
+
this.destroyEncodedObject(dracoMesh);
|
|
171
|
+
throw error;
|
|
205
172
|
}
|
|
206
|
-
}, {
|
|
207
|
-
key: "_createDracoPointCloud",
|
|
208
|
-
value: function _createDracoPointCloud(dracoPointCloud, attributes, options) {
|
|
209
|
-
var optionalMetadata = options.attributesMetadata || {};
|
|
210
173
|
|
|
211
|
-
|
|
212
|
-
|
|
174
|
+
return dracoMesh;
|
|
175
|
+
}
|
|
213
176
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
177
|
+
_createDracoPointCloud(dracoPointCloud, attributes, options) {
|
|
178
|
+
const optionalMetadata = options.attributesMetadata || {};
|
|
217
179
|
|
|
218
|
-
|
|
180
|
+
try {
|
|
181
|
+
const positions = this._getPositionAttribute(attributes);
|
|
219
182
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
183
|
+
if (!positions) {
|
|
184
|
+
throw new Error('positions');
|
|
185
|
+
}
|
|
223
186
|
|
|
224
|
-
|
|
187
|
+
const vertexCount = positions.length / 3;
|
|
225
188
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
189
|
+
for (let attributeName in attributes) {
|
|
190
|
+
const attribute = attributes[attributeName];
|
|
191
|
+
attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
|
|
192
|
+
|
|
193
|
+
const uniqueId = this._addAttributeToMesh(dracoPointCloud, attributeName, attribute, vertexCount);
|
|
194
|
+
|
|
195
|
+
if (uniqueId !== -1) {
|
|
196
|
+
this._addAttributeMetadata(dracoPointCloud, uniqueId, {
|
|
197
|
+
name: attributeName,
|
|
198
|
+
...(optionalMetadata[attributeName] || {})
|
|
199
|
+
});
|
|
231
200
|
}
|
|
232
|
-
} catch (error) {
|
|
233
|
-
this.destroyEncodedObject(dracoPointCloud);
|
|
234
|
-
throw error;
|
|
235
201
|
}
|
|
202
|
+
} catch (error) {
|
|
203
|
+
this.destroyEncodedObject(dracoPointCloud);
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
236
206
|
|
|
237
|
-
|
|
207
|
+
return dracoPointCloud;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
_addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
|
|
211
|
+
if (!ArrayBuffer.isView(attribute)) {
|
|
212
|
+
return -1;
|
|
238
213
|
}
|
|
239
|
-
}, {
|
|
240
|
-
key: "_addAttributeToMesh",
|
|
241
|
-
value: function _addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
|
|
242
|
-
if (!ArrayBuffer.isView(attribute)) {
|
|
243
|
-
return -1;
|
|
244
|
-
}
|
|
245
214
|
|
|
246
|
-
|
|
215
|
+
const type = this._getDracoAttributeType(attributeName);
|
|
247
216
|
|
|
248
|
-
|
|
217
|
+
const size = attribute.length / vertexCount;
|
|
249
218
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
219
|
+
if (type === 'indices') {
|
|
220
|
+
const numFaces = attribute.length / 3;
|
|
221
|
+
this.log("Adding attribute ".concat(attributeName, ", size ").concat(numFaces));
|
|
222
|
+
this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
|
|
223
|
+
return -1;
|
|
224
|
+
}
|
|
256
225
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
226
|
+
this.log("Adding attribute ".concat(attributeName, ", size ").concat(size));
|
|
227
|
+
const builder = this.dracoMeshBuilder;
|
|
228
|
+
const {
|
|
229
|
+
buffer
|
|
230
|
+
} = attribute;
|
|
260
231
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
232
|
+
switch (attribute.constructor) {
|
|
233
|
+
case Int8Array:
|
|
234
|
+
return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
|
|
264
235
|
|
|
265
|
-
|
|
266
|
-
|
|
236
|
+
case Int16Array:
|
|
237
|
+
return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
|
|
267
238
|
|
|
268
|
-
|
|
269
|
-
|
|
239
|
+
case Int32Array:
|
|
240
|
+
return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
|
|
270
241
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
242
|
+
case Uint8Array:
|
|
243
|
+
case Uint8ClampedArray:
|
|
244
|
+
return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
|
|
274
245
|
|
|
275
|
-
|
|
276
|
-
|
|
246
|
+
case Uint16Array:
|
|
247
|
+
return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
|
|
277
248
|
|
|
278
|
-
|
|
279
|
-
|
|
249
|
+
case Uint32Array:
|
|
250
|
+
return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
|
|
280
251
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
252
|
+
case Float32Array:
|
|
253
|
+
default:
|
|
254
|
+
return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
|
|
285
255
|
}
|
|
286
|
-
}
|
|
287
|
-
key: "_getDracoAttributeType",
|
|
288
|
-
value: function _getDracoAttributeType(attributeName) {
|
|
289
|
-
switch (attributeName.toLowerCase()) {
|
|
290
|
-
case 'indices':
|
|
291
|
-
return 'indices';
|
|
292
|
-
|
|
293
|
-
case 'position':
|
|
294
|
-
case 'positions':
|
|
295
|
-
case 'vertices':
|
|
296
|
-
return this.draco.POSITION;
|
|
297
|
-
|
|
298
|
-
case 'normal':
|
|
299
|
-
case 'normals':
|
|
300
|
-
return this.draco.NORMAL;
|
|
301
|
-
|
|
302
|
-
case 'color':
|
|
303
|
-
case 'colors':
|
|
304
|
-
return this.draco.COLOR;
|
|
305
|
-
|
|
306
|
-
case 'texcoord':
|
|
307
|
-
case 'texcoords':
|
|
308
|
-
return this.draco.TEX_COORD;
|
|
256
|
+
}
|
|
309
257
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
}, {
|
|
315
|
-
key: "_getPositionAttribute",
|
|
316
|
-
value: function _getPositionAttribute(attributes) {
|
|
317
|
-
for (var _attributeName3 in attributes) {
|
|
318
|
-
var attribute = attributes[_attributeName3];
|
|
258
|
+
_getDracoAttributeType(attributeName) {
|
|
259
|
+
switch (attributeName.toLowerCase()) {
|
|
260
|
+
case 'indices':
|
|
261
|
+
return 'indices';
|
|
319
262
|
|
|
320
|
-
|
|
263
|
+
case 'position':
|
|
264
|
+
case 'positions':
|
|
265
|
+
case 'vertices':
|
|
266
|
+
return this.draco.POSITION;
|
|
321
267
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
268
|
+
case 'normal':
|
|
269
|
+
case 'normals':
|
|
270
|
+
return this.draco.NORMAL;
|
|
326
271
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
key: "_addGeometryMetadata",
|
|
331
|
-
value: function _addGeometryMetadata(dracoGeometry, metadata) {
|
|
332
|
-
var dracoMetadata = new this.draco.Metadata();
|
|
272
|
+
case 'color':
|
|
273
|
+
case 'colors':
|
|
274
|
+
return this.draco.COLOR;
|
|
333
275
|
|
|
334
|
-
|
|
276
|
+
case 'texcoord':
|
|
277
|
+
case 'texcoords':
|
|
278
|
+
return this.draco.TEX_COORD;
|
|
335
279
|
|
|
336
|
-
|
|
280
|
+
default:
|
|
281
|
+
return this.draco.GENERIC;
|
|
337
282
|
}
|
|
338
|
-
}
|
|
339
|
-
key: "_addAttributeMetadata",
|
|
340
|
-
value: function _addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
|
|
341
|
-
var dracoAttributeMetadata = new this.draco.Metadata();
|
|
283
|
+
}
|
|
342
284
|
|
|
343
|
-
|
|
285
|
+
_getPositionAttribute(attributes) {
|
|
286
|
+
for (const attributeName in attributes) {
|
|
287
|
+
const attribute = attributes[attributeName];
|
|
344
288
|
|
|
345
|
-
this.
|
|
289
|
+
const dracoType = this._getDracoAttributeType(attributeName);
|
|
290
|
+
|
|
291
|
+
if (dracoType === this.draco.POSITION) {
|
|
292
|
+
return attribute;
|
|
293
|
+
}
|
|
346
294
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
case 'string':
|
|
377
|
-
default:
|
|
378
|
-
this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, _key, value);
|
|
295
|
+
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
_addGeometryMetadata(dracoGeometry, metadata) {
|
|
300
|
+
const dracoMetadata = new this.draco.Metadata();
|
|
301
|
+
|
|
302
|
+
this._populateDracoMetadata(dracoMetadata, metadata);
|
|
303
|
+
|
|
304
|
+
this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
_addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
|
|
308
|
+
const dracoAttributeMetadata = new this.draco.Metadata();
|
|
309
|
+
|
|
310
|
+
this._populateDracoMetadata(dracoAttributeMetadata, metadata);
|
|
311
|
+
|
|
312
|
+
this.dracoMeshBuilder.SetMetadataForAttribute(dracoGeometry, uniqueAttributeId, dracoAttributeMetadata);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
_populateDracoMetadata(dracoMetadata, metadata) {
|
|
316
|
+
for (const [key, value] of getEntries(metadata)) {
|
|
317
|
+
switch (typeof value) {
|
|
318
|
+
case 'number':
|
|
319
|
+
if (Math.trunc(value) === value) {
|
|
320
|
+
this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);
|
|
321
|
+
} else {
|
|
322
|
+
this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);
|
|
379
323
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
324
|
+
|
|
325
|
+
break;
|
|
326
|
+
|
|
327
|
+
case 'object':
|
|
328
|
+
if (value instanceof Int32Array) {
|
|
329
|
+
this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
break;
|
|
333
|
+
|
|
334
|
+
case 'string':
|
|
335
|
+
default:
|
|
336
|
+
this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);
|
|
385
337
|
}
|
|
386
338
|
}
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
}
|
|
390
342
|
|
|
391
343
|
exports.default = DracoBuilder;
|
|
392
344
|
|
|
393
345
|
function dracoInt8ArrayToArrayBuffer(dracoData) {
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
346
|
+
const byteLength = dracoData.size();
|
|
347
|
+
const outputBuffer = new ArrayBuffer(byteLength);
|
|
348
|
+
const outputData = new Int8Array(outputBuffer);
|
|
397
349
|
|
|
398
|
-
for (
|
|
350
|
+
for (let i = 0; i < byteLength; ++i) {
|
|
399
351
|
outputData[i] = dracoData.GetValue(i);
|
|
400
352
|
}
|
|
401
353
|
|
|
@@ -403,7 +355,7 @@ function dracoInt8ArrayToArrayBuffer(dracoData) {
|
|
|
403
355
|
}
|
|
404
356
|
|
|
405
357
|
function getEntries(container) {
|
|
406
|
-
|
|
358
|
+
const hasEntriesFunc = container.entries && !container.hasOwnProperty('entries');
|
|
407
359
|
return hasEntriesFunc ? container.entries() : Object.entries(container);
|
|
408
360
|
}
|
|
409
361
|
//# sourceMappingURL=draco-builder.js.map
|