UNPKG

4.28 kBJavaScriptView Raw
1import { DracoCompression } from "@babylonjs/core/Meshes/Compression/dracoCompression";
2import { VertexBuffer } from "@babylonjs/core/Meshes/buffer";
3import { Geometry } from "@babylonjs/core/Meshes/geometry";
4import { GLTFLoader, ArrayItem } from "../glTFLoader";
5var NAME = "KHR_draco_mesh_compression";
6/**
7 * [Specification](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression)
8 */
9var KHR_draco_mesh_compression = /** @class */ (function () {
10 /** @hidden */
11 function KHR_draco_mesh_compression(loader) {
12 /** The name of this extension. */
13 this.name = NAME;
14 /** Defines whether this extension is enabled. */
15 this.enabled = DracoCompression.DecoderAvailable;
16 this._loader = loader;
17 }
18 /** @hidden */
19 KHR_draco_mesh_compression.prototype.dispose = function () {
20 if (this._dracoCompression) {
21 this._dracoCompression.dispose();
22 delete this._dracoCompression;
23 }
24 delete this._loader;
25 };
26 /** @hidden */
27 KHR_draco_mesh_compression.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) {
28 var _this = this;
29 return GLTFLoader.LoadExtensionAsync(context, primitive, this.name, function (extensionContext, extension) {
30 if (primitive.mode != undefined) {
31 if (primitive.mode !== 5 /* TRIANGLE_STRIP */ &&
32 primitive.mode !== 4 /* TRIANGLES */) {
33 throw new Error(context + ": Unsupported mode " + primitive.mode);
34 }
35 // TODO: handle triangle strips
36 if (primitive.mode === 5 /* TRIANGLE_STRIP */) {
37 throw new Error(context + ": Mode " + primitive.mode + " is not currently supported");
38 }
39 }
40 var attributes = {};
41 var loadAttribute = function (name, kind) {
42 var uniqueId = extension.attributes[name];
43 if (uniqueId == undefined) {
44 return;
45 }
46 babylonMesh._delayInfo = babylonMesh._delayInfo || [];
47 if (babylonMesh._delayInfo.indexOf(kind) === -1) {
48 babylonMesh._delayInfo.push(kind);
49 }
50 attributes[kind] = uniqueId;
51 };
52 loadAttribute("POSITION", VertexBuffer.PositionKind);
53 loadAttribute("NORMAL", VertexBuffer.NormalKind);
54 loadAttribute("TANGENT", VertexBuffer.TangentKind);
55 loadAttribute("TEXCOORD_0", VertexBuffer.UVKind);
56 loadAttribute("TEXCOORD_1", VertexBuffer.UV2Kind);
57 loadAttribute("JOINTS_0", VertexBuffer.MatricesIndicesKind);
58 loadAttribute("WEIGHTS_0", VertexBuffer.MatricesWeightsKind);
59 loadAttribute("COLOR_0", VertexBuffer.ColorKind);
60 var bufferView = ArrayItem.Get(extensionContext, _this._loader.gltf.bufferViews, extension.bufferView);
61 if (!bufferView._dracoBabylonGeometry) {
62 bufferView._dracoBabylonGeometry = _this._loader.loadBufferViewAsync("#/bufferViews/" + bufferView.index, bufferView).then(function (data) {
63 if (!_this._dracoCompression) {
64 _this._dracoCompression = new DracoCompression();
65 }
66 return _this._dracoCompression.decodeMeshAsync(data, attributes).then(function (babylonVertexData) {
67 var babylonGeometry = new Geometry(babylonMesh.name, _this._loader.babylonScene);
68 babylonVertexData.applyToGeometry(babylonGeometry);
69 return babylonGeometry;
70 }).catch(function (error) {
71 throw new Error(context + ": " + error.message);
72 });
73 });
74 }
75 return bufferView._dracoBabylonGeometry;
76 });
77 };
78 return KHR_draco_mesh_compression;
79}());
80export { KHR_draco_mesh_compression };
81GLTFLoader.RegisterExtension(NAME, function (loader) { return new KHR_draco_mesh_compression(loader); });
82//# sourceMappingURL=KHR_draco_mesh_compression.js.map
\No newline at end of file