提交 14b82b94 编写于 作者: O Ondrej Stava

Updated Draco decoder javascript to the latest version.

Moved all Draco related stuff into a separate sub-folder that seems to
be a more common practice when it comes to multi file loaders. We can
keep it as it was if preferred.

We are also going to includ WebAssembly decoder in a separate PR.
上级 b6b0bfba
......@@ -19,6 +19,7 @@ THREE.DRACOLoader = function(manager) {
THREE.DefaultLoadingManager;
this.materials = null;
this.verbosity = 0;
this.dracoDecoderType = {};
};
......@@ -32,7 +33,7 @@ THREE.DRACOLoader.prototype = {
loader.setPath(this.path);
loader.setResponseType('arraybuffer');
loader.load(url, function(blob) {
onLoad(scope.decodeDracoFile(blob));
scope.decodeDracoFile(blob, onLoad);
}, onProgress, onError);
},
......@@ -44,8 +45,19 @@ THREE.DRACOLoader.prototype = {
this.verbosity = level;
},
decodeDracoFile: function(rawBuffer) {
const dracoDecoder = THREE.DRACOLoader.getDecoder();
setDracoDecoderType: function(dracoDecoderType) {
this.dracoDecoderType = dracoDecoderType;
},
decodeDracoFile: function(rawBuffer, callback) {
const scope = this;
THREE.DRACOLoader.getDecoder(this.dracoDecoderType,
function(dracoDecoder) {
scope.decodeDracoFileInternal(rawBuffer, dracoDecoder, callback);
});
},
decodeDracoFileInternal : function(rawBuffer, dracoDecoder, callback) {
/*
* Here is how to use Draco Javascript decoder and get the geometry.
*/
......@@ -70,11 +82,12 @@ THREE.DRACOLoader.prototype = {
console.error(errorMsg);
throw new Error(errorMsg);
}
return this.convertDracoGeometryTo3JS(wrapper, geometryType, buffer);
callback(this.convertDracoGeometryTo3JS(dracoDecoder, wrapper,
geometryType, buffer));
},
convertDracoGeometryTo3JS: function(wrapper, geometryType, buffer) {
const dracoDecoder = THREE.DRACOLoader.getDecoder();
convertDracoGeometryTo3JS: function(dracoDecoder, wrapper, geometryType,
buffer) {
let dracoGeometry;
const start_time = performance.now();
if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
......@@ -263,26 +276,38 @@ THREE.DRACOLoader.prototype = {
return geometry;
},
isVersionSupported: function(version) {
return THREE.DRACOLoader.getDecoder().isVersionSupported(version);
isVersionSupported: function(version, callback) {
return THREE.DRACOLoader.getDecoder(this.dracoDecoderType,
function(decoder) { return decoder.isVersionSupported(version); });
}
};
/**
* Returns a singleton instance of the DracoModule decoder. Creating multiple
* copies of the decoder is expensive.
* Creates and returns a singleton instance of the DracoModule decoder.
* The module loading is done asynchronously for WebAssembly. Initialized module
* can be accessed through the callback function |onDracoModuleLoadedCallback|.
*/
THREE.DRACOLoader.getDecoder = (function() {
let decoder;
return function() {
return function(dracoDecoderType, onDracoModuleLoadedCallback) {
if (typeof DracoModule === 'undefined') {
throw new Error('THREE.DRACOLoader: DracoModule not found.');
}
decoder = decoder || DracoModule();
return decoder;
if (typeof decoder !== 'undefined') {
// Module already initialized.
if (typeof onDracoModuleLoadedCallback !== 'undefined') {
onDracoModuleLoadedCallback(decoder);
}
} else {
dracoDecoderType['onModuleLoaded'] = function(module) {
if (typeof onDracoModuleLoadedCallback === 'function') {
decoder = module;
onDracoModuleLoadedCallback(module);
}
};
DracoModule(dracoDecoderType);
}
};
})();
此差异已折叠。
此差异已折叠。
......@@ -38,8 +38,8 @@
<a href="https://github.com/google/draco" target="_blank">DRACO</a> loader
</div>
<script src="../build/three.js"></script>
<script src="js/loaders/draco_decoder.js"></script>
<script src="js/loaders/DRACOLoader.js"></script>
<script src="js/loaders/draco/draco_decoder.js"></script>
<script src="js/loaders/draco/DRACOLoader.js"></script>
<script>
var camera, scene, renderer;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册