mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-14 01:25:57 +08:00
Expose .isVersionSupported() method on THREE.DRACOLoader. (#85)
* Expose .isVersionSupported() method on THREE.DRACOLoader.
This commit is contained in:
parent
c7a5e903e5
commit
4dac78e622
@ -44,49 +44,37 @@ THREE.DRACOLoader.prototype = {
|
|||||||
this.verbosity = level;
|
this.verbosity = level;
|
||||||
},
|
},
|
||||||
|
|
||||||
decodeDracoFile: ( function() {
|
decodeDracoFile: function(rawBuffer) {
|
||||||
let dracoDecoder;
|
const dracoDecoder = THREE.DRACOLoader.getDecoder();
|
||||||
|
/*
|
||||||
|
* Here is how to use Draco Javascript decoder and get the geometry.
|
||||||
|
*/
|
||||||
|
const buffer = new dracoDecoder.DecoderBuffer();
|
||||||
|
buffer.Init(new Int8Array(rawBuffer), rawBuffer.byteLength);
|
||||||
|
const wrapper = new dracoDecoder.WebIDLWrapper();
|
||||||
|
|
||||||
if (typeof DracoModule === 'function') {
|
/*
|
||||||
dracoDecoder = DracoModule();
|
* Determine what type is this file: mesh or point cloud.
|
||||||
} else {
|
*/
|
||||||
console.error('THREE.DRACOLoader: DracoModule not found.');
|
const geometryType = wrapper.GetEncodedGeometryType(buffer);
|
||||||
return;
|
if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
|
||||||
|
if (this.verbosity > 0) {
|
||||||
|
console.log('Loaded a mesh.');
|
||||||
}
|
}
|
||||||
|
} else if (geometryType == dracoDecoder.POINT_CLOUD) {
|
||||||
return function(rawBuffer) {
|
if (this.verbosity > 0) {
|
||||||
const scope = this;
|
console.log('Loaded a point cloud.');
|
||||||
/*
|
|
||||||
* Here is how to use Draco Javascript decoder and get the geometry.
|
|
||||||
*/
|
|
||||||
const buffer = new dracoDecoder.DecoderBuffer();
|
|
||||||
buffer.Init(new Int8Array(rawBuffer), rawBuffer.byteLength);
|
|
||||||
const wrapper = new dracoDecoder.WebIDLWrapper();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Determine what type is this file: mesh or point cloud.
|
|
||||||
*/
|
|
||||||
const geometryType = wrapper.GetEncodedGeometryType(buffer);
|
|
||||||
if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
|
|
||||||
if (this.verbosity > 0) {
|
|
||||||
console.log('Loaded a mesh.');
|
|
||||||
}
|
|
||||||
} else if (geometryType == dracoDecoder.POINT_CLOUD) {
|
|
||||||
if (this.verbosity > 0) {
|
|
||||||
console.log('Loaded a point cloud.');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const errorMsg = 'THREE.DRACOLoader: Unknown geometry type.'
|
|
||||||
console.error(errorMsg);
|
|
||||||
throw new Error(errorMsg);
|
|
||||||
}
|
|
||||||
return scope.convertDracoGeometryTo3JS(wrapper, geometryType, buffer,
|
|
||||||
dracoDecoder);
|
|
||||||
}
|
}
|
||||||
} )(),
|
} else {
|
||||||
|
const errorMsg = 'THREE.DRACOLoader: Unknown geometry type.'
|
||||||
|
console.error(errorMsg);
|
||||||
|
throw new Error(errorMsg);
|
||||||
|
}
|
||||||
|
return this.convertDracoGeometryTo3JS(wrapper, geometryType, buffer);
|
||||||
|
},
|
||||||
|
|
||||||
convertDracoGeometryTo3JS: function(wrapper, geometryType, buffer,
|
convertDracoGeometryTo3JS: function(wrapper, geometryType, buffer) {
|
||||||
dracoDecoder) {
|
const dracoDecoder = THREE.DRACOLoader.getDecoder();
|
||||||
let dracoGeometry;
|
let dracoGeometry;
|
||||||
const start_time = performance.now();
|
const start_time = performance.now();
|
||||||
if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
|
if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
|
||||||
@ -273,5 +261,28 @@ THREE.DRACOLoader.prototype = {
|
|||||||
console.log('Import time: ' + this.import_time);
|
console.log('Import time: ' + this.import_time);
|
||||||
}
|
}
|
||||||
return geometry;
|
return geometry;
|
||||||
|
},
|
||||||
|
|
||||||
|
isVersionSupported: function(version) {
|
||||||
|
return THREE.DRACOLoader.getDecoder().isVersionSupported(version);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a singleton instance of the DracoModule decoder. Creating multiple
|
||||||
|
* copies of the decoder is expensive.
|
||||||
|
*/
|
||||||
|
THREE.DRACOLoader.getDecoder = (function() {
|
||||||
|
let decoder;
|
||||||
|
|
||||||
|
return function() {
|
||||||
|
if (typeof DracoModule === 'undefined') {
|
||||||
|
throw new Error('THREE.DRACOLoader: DracoModule not found.');
|
||||||
|
}
|
||||||
|
|
||||||
|
decoder = decoder || DracoModule();
|
||||||
|
|
||||||
|
return decoder;
|
||||||
|
};
|
||||||
|
|
||||||
|
})();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user