提交 be76904d 编写于 作者: K Kai Salmen

Backported onError function usage from OBJLoader2/Parser V3. Unified callback naming

Versions are only printed once in the logs
上级 914c255e
......@@ -347,7 +347,6 @@ THREE.LoaderSupport.PrepData.prototype = {
* @class
*/
THREE.LoaderSupport.MeshBuilder = function() {
console.info( 'Using THREE.LoaderSupport.MeshBuilder version: ' + THREE.LoaderSupport.MeshBuilder.LOADER_MESH_BUILDER_VERSION );
this.validator = THREE.LoaderSupport.Validator;
this.logging = {
......@@ -359,6 +358,8 @@ THREE.LoaderSupport.MeshBuilder = function() {
this.materials = {};
};
THREE.LoaderSupport.MeshBuilder.LOADER_MESH_BUILDER_VERSION = '1.3.1';
console.info( 'Using THREE.LoaderSupport.MeshBuilder version: ' + THREE.LoaderSupport.MeshBuilder.LOADER_MESH_BUILDER_VERSION );
THREE.LoaderSupport.MeshBuilder.prototype = {
......@@ -715,7 +716,6 @@ THREE.LoaderSupport.MeshBuilder.prototype = {
* @class
*/
THREE.LoaderSupport.WorkerSupport = function () {
console.info( 'Using THREE.LoaderSupport.WorkerSupport version: ' + THREE.LoaderSupport.WorkerSupport.WORKER_SUPPORT_VERSION );
this.logging = {
enabled: true,
debug: false
......@@ -726,6 +726,8 @@ THREE.LoaderSupport.WorkerSupport = function () {
};
THREE.LoaderSupport.WorkerSupport.WORKER_SUPPORT_VERSION = '2.3.0';
console.info( 'Using THREE.LoaderSupport.WorkerSupport version: ' + THREE.LoaderSupport.WorkerSupport.WORKER_SUPPORT_VERSION );
THREE.LoaderSupport.WorkerSupport.prototype = {
......@@ -1285,10 +1287,10 @@ THREE.LoaderSupport.WorkerRunnerRefImpl.prototype = {
var self = this.getParentScope();
var callbacks = {
callbackMeshBuilder: function ( payload ) {
callbackOnAssetAvailable: function ( payload ) {
self.postMessage( payload );
},
callbackProgress: function ( text ) {
callbackOnProgress: function ( text ) {
if ( payload.logging.enabled && payload.logging.debug ) console.debug( 'WorkerRunner: progress: ' + text );
}
};
......@@ -1304,7 +1306,7 @@ THREE.LoaderSupport.WorkerRunnerRefImpl.prototype = {
if ( payload.logging.enabled ) console.log( 'WorkerRunner: Run complete!' );
callbacks.callbackMeshBuilder( {
callbacks.callbackOnAssetAvailable( {
cmd: 'complete',
msg: 'WorkerRunner completed run.'
} );
......@@ -1414,7 +1416,6 @@ THREE.LoaderSupport.WorkerSupport.NodeLoaderWorker.prototype.initWorker = functi
* @param {string} classDef Class definition to be used for construction
*/
THREE.LoaderSupport.WorkerDirector = function ( classDef ) {
console.info( 'Using THREE.LoaderSupport.WorkerDirector version: ' + THREE.LoaderSupport.WorkerDirector.LOADER_WORKER_DIRECTOR_VERSION );
this.logging = {
enabled: true,
debug: false
......@@ -1443,6 +1444,8 @@ THREE.LoaderSupport.WorkerDirector = function ( classDef ) {
THREE.LoaderSupport.WorkerDirector.LOADER_WORKER_DIRECTOR_VERSION = '2.3.0';
THREE.LoaderSupport.WorkerDirector.MAX_WEB_WORKER = 16;
THREE.LoaderSupport.WorkerDirector.MAX_QUEUE_SIZE = 2048;
console.info( 'Using THREE.LoaderSupport.WorkerDirector version: ' + THREE.LoaderSupport.WorkerDirector.LOADER_WORKER_DIRECTOR_VERSION );
THREE.LoaderSupport.WorkerDirector.prototype = {
......
......@@ -17,8 +17,6 @@ if ( THREE.LoaderSupport === undefined ) console.error( '"THREE.LoaderSupport" i
*/
THREE.OBJLoader2 = function ( manager ) {
console.info( 'Using THREE.OBJLoader2 version: ' + THREE.OBJLoader2.OBJLOADER2_VERSION );
this.manager = THREE.LoaderSupport.Validator.verifyInput( manager, THREE.DefaultLoadingManager );
this.logging = {
enabled: true,
......@@ -40,8 +38,9 @@ THREE.OBJLoader2 = function ( manager ) {
this.workerSupport = new THREE.LoaderSupport.WorkerSupport();
this.terminateWorkerOnLoad = true;
};
THREE.OBJLoader2.OBJLOADER2_VERSION = '2.5.1';
console.info( 'Using THREE.OBJLoader2 version: ' + THREE.OBJLoader2.OBJLOADER2_VERSION );
THREE.OBJLoader2.prototype = {
......@@ -174,19 +173,12 @@ THREE.OBJLoader2.prototype = {
if ( this.logging.enabled && this.logging.debug ) console.debug( content );
},
_onError: function ( event ) {
var output = 'Error occurred while downloading!';
if ( event.currentTarget && event.currentTarget.statusText !== null ) {
_onError: function ( errorMessage ) {
if ( this.logging.enabled && this.logging.debug ) {
output += '\nurl: ' + event.currentTarget.responseURL + '\nstatus: ' + event.currentTarget.statusText;
console.log( errorMessage );
}
this.onProgress( 'error', output, -1 );
this._throwError( output );
},
_throwError: function ( errorMessage ) {
if ( THREE.LoaderSupport.Validator.isValid( this.callbacks.onReportError ) ) {
this.callbacks.onReportError( errorMessage );
......@@ -216,9 +208,18 @@ THREE.OBJLoader2.prototype = {
_loadObj: function ( resource, onLoad, onProgress, onError, onMeshAlter, useAsync ) {
var scope = this;
if ( ! THREE.LoaderSupport.Validator.isValid( onError ) ) {
onError = function ( event ) {
scope._onError( event );
}
var errorMessage = event;
if ( event.currentTarget && event.currentTarget.statusText !== null ) {
errorMessage = 'Error occurred while downloading!\nurl: ' + event.currentTarget.responseURL + '\nstatus: ' + event.currentTarget.statusText;
}
scope._onError( errorMessage );
};
}
// fast-fail
......@@ -365,11 +366,15 @@ THREE.OBJLoader2.prototype = {
scope.loaderRootNode.add( mesh );
}
};
parser.setCallbackMeshBuilder( onMeshLoaded );
parser.setCallbackOnAssetAvailable( onMeshLoaded );
var onProgressScoped = function ( text, numericalValue ) {
scope.onProgress( 'progressParse', text, numericalValue );
};
parser.setCallbackProgress( onProgressScoped );
parser.setCallbackOnProgress( onProgressScoped );
var onErrorScoped = function ( message ) {
scope._onError( message );
};
parser.setCallbackOnError( onErrorScoped );
if ( content instanceof ArrayBuffer || content instanceof Uint8Array ) {
......@@ -383,7 +388,7 @@ THREE.OBJLoader2.prototype = {
} else {
this._throwError( 'Provided content was neither of type String nor Uint8Array! Aborting...' );
this._onError( 'Provided content was neither of type String nor Uint8Array! Aborting...' );
}
if ( this.logging.enabled ) console.timeEnd( 'OBJLoader2 parse: ' + this.modelName );
......@@ -439,7 +444,6 @@ THREE.OBJLoader2.prototype = {
workerCode += ' * This code was constructed by OBJLoader2 buildCode.\n';
workerCode += ' */\n\n';
workerCode += 'THREE = { LoaderSupport: {}, OBJLoader2: {} };\n\n';
workerCode += codeSerializer.serializeObject( 'THREE.LoaderSupport.Validator', THREE.LoaderSupport.Validator );
workerCode += codeSerializer.serializeClass( 'THREE.OBJLoader2.Parser', THREE.OBJLoader2.Parser );
return workerCode;
......@@ -546,7 +550,7 @@ THREE.OBJLoader2.prototype = {
} else {
this._throwError( 'Unable to parse mtl as it it seems to be neither a String, an Array or an ArrayBuffer!' );
scope._onError( 'Unable to parse mtl as it it seems to be neither a String, an Array or an ArrayBuffer!' );
}
}
......@@ -595,8 +599,11 @@ THREE.OBJLoader2.prototype = {
* @class
*/
THREE.OBJLoader2.Parser = function () {
this.callbackProgress = null;
this.callbackMeshBuilder = null;
this.callbacks = {
onProgress: null,
onAssetAvailable: null,
onError: null
};
this.contentRef = null;
this.legacyMode = false;
......@@ -694,29 +701,61 @@ THREE.OBJLoader2.Parser.prototype = {
},
setMaterials: function ( materials ) {
this.materials = THREE.LoaderSupport.Validator.verifyInput( materials, this.materials );
this.materials = THREE.LoaderSupport.Validator.verifyInput( this.materials, {} );
if ( materials === undefined || materials === null ) return;
for ( var materialName in materials ) {
if ( materials.hasOwnProperty( materialName ) ) {
this.materials[ materialName ] = materials[ materialName ];
}
}
},
setCallbackMeshBuilder: function ( callbackMeshBuilder ) {
if ( ! THREE.LoaderSupport.Validator.isValid( callbackMeshBuilder ) ) {
setCallbackOnAssetAvailable: function ( onAssetAvailable ) {
if ( onAssetAvailable !== null && onAssetAvailable !== undefined ) {
this._throwError( 'Unable to run as no "MeshBuilder" callback is set.' );
this.callbacks.onAssetAvailable = onAssetAvailable;
}
this.callbackMeshBuilder = callbackMeshBuilder;
},
setCallbackProgress: function ( callbackProgress ) {
this.callbackProgress = callbackProgress;
setCallbackOnProgress: function ( onProgress ) {
if ( onProgress !== null && onProgress !== undefined ) {
this.callbacks.onProgress = onProgress;
}
},
setCallbackOnError: function ( onError ) {
if ( onError !== null && onError !== undefined ) {
this.callbacks.onError = onError;
}
},
setLogging: function ( enabled, debug ) {
this.logging.enabled = enabled === true;
this.logging.debug = debug === true;
},
configure: function () {
if ( this.callbacks.onAssetAvailable === null ) {
var errorMessage = 'Unable to run as no callback for building meshes is set.';
if ( this.callbacks.onError !== null ) {
this.callbacks.onError( errorMessage );
} else {
throw errorMessage;
}
}
this.pushSmoothingGroup( 1 );
if ( this.logging.enabled ) {
......@@ -729,9 +768,16 @@ THREE.OBJLoader2.Parser.prototype = {
+ '\n\tmaterialPerSmoothingGroup: ' + this.materialPerSmoothingGroup
+ '\n\tuseOAsMesh: ' + this.useOAsMesh
+ '\n\tuseIndices: ' + this.useIndices
+ '\n\tdisregardNormals: ' + this.disregardNormals
+ '\n\tcallbackMeshBuilderName: ' + this.callbackMeshBuilder.name
+ '\n\tcallbackProgressName: ' + this.callbackProgress.name;
+ '\n\tdisregardNormals: ' + this.disregardNormals;
if ( this.callbacks.onProgress !== null ) {
printedConfig += '\n\tcallbacks.onProgress: ' + this.callbacks.onProgress.name;
}
if ( this.callbacks.onAssetAvailable !== null ) {
printedConfig += '\n\tcallbacks.onAssetAvailable: ' + this.callbacks.onAssetAvailable.name;
}
if ( this.callbacks.onError !== null ) {
printedConfig += '\n\tcallbacks.onError: ' + this.callbacks.onError.name;
}
console.info( printedConfig );
}
},
......@@ -1040,7 +1086,7 @@ THREE.OBJLoader2.Parser.prototype = {
var index = this.rawMesh.activeMtlName + '|' + this.rawMesh.smoothingGroup.normalized;
this.rawMesh.subGroupInUse = this.rawMesh.subGroups[ index ];
if ( ! THREE.LoaderSupport.Validator.isValid( this.rawMesh.subGroupInUse ) ) {
if ( this.rawMesh.subGroupInUse === undefined || this.rawMesh.subGroupInUse === null ) {
this.rawMesh.subGroupInUse = {
index: index,
......@@ -1108,17 +1154,17 @@ THREE.OBJLoader2.Parser.prototype = {
var mappingName = faceIndexV + ( faceIndexU ? '_' + faceIndexU : '_n' ) + ( faceIndexN ? '_' + faceIndexN : '_n' );
var indicesPointer = this.rawMesh.subGroupInUse.indexMappings[ mappingName ];
if ( THREE.LoaderSupport.Validator.isValid( indicesPointer ) ) {
this.rawMesh.counts.doubleIndicesCount++;
} else {
if ( indicesPointer === undefined || indicesPointer === null ) {
indicesPointer = this.rawMesh.subGroupInUse.vertices.length / 3;
updateSubGroupInUse();
this.rawMesh.subGroupInUse.indexMappings[ mappingName ] = indicesPointer;
this.rawMesh.subGroupInUse.indexMappingsCount++;
} else {
this.rawMesh.counts.doubleIndicesCount++;
}
this.rawMesh.subGroupInUse.indices.push( indicesPointer );
......@@ -1200,11 +1246,12 @@ THREE.OBJLoader2.Parser.prototype = {
processCompletedMesh: function () {
var result = this.finalizeRawMesh();
if ( THREE.LoaderSupport.Validator.isValid( result ) ) {
var haveMesh = result !== null;
if ( haveMesh ) {
if ( this.colors.length > 0 && this.colors.length !== this.vertices.length ) {
if ( this.colors.length > 0 && this.colors.length !== this.vertices.length && this.callbacks.onError !== null ) {
this._throwError( 'Vertex Colors were detected, but vertex count and color count do not match!' );
this.callbacks.onError( 'Vertex Colors were detected, but vertex count and color count do not match!' );
}
if ( this.logging.enabled && this.logging.debug ) console.debug( this.createRawMeshReport( this.inputObjectCount ) );
......@@ -1212,14 +1259,17 @@ THREE.OBJLoader2.Parser.prototype = {
this.buildMesh( result );
var progressBytesPercent = this.globalCounts.currentByte / this.globalCounts.totalBytes;
this.callbackProgress( 'Completed [o: ' + this.rawMesh.objectName + ' g:' + this.rawMesh.groupName + '] Total progress: ' + ( progressBytesPercent * 100 ).toFixed( 2 ) + '%', progressBytesPercent );
if ( this.callbacks.onProgress !== null ) {
this.callbacks.onProgress( 'Completed [o: ' + this.rawMesh.objectName + ' g:' + this.rawMesh.groupName +
'] Total progress: ' + ( progressBytesPercent * 100 ).toFixed( 2 ) + '%', progressBytesPercent );
}
this.resetRawMesh();
return true;
} else {
return false;
}
return haveMesh;
},
/**
......@@ -1239,7 +1289,7 @@ THREE.OBJLoader2.Parser.prototype = {
var colorFA = ( result.absoluteColorCount > 0 ) ? new Float32Array( result.absoluteColorCount ) : null;
var normalFA = ( result.absoluteNormalCount > 0 ) ? new Float32Array( result.absoluteNormalCount ) : null;
var uvFA = ( result.absoluteUvCount > 0 ) ? new Float32Array( result.absoluteUvCount ) : null;
var haveVertexColors = THREE.LoaderSupport.Validator.isValid( colorFA );
var haveVertexColors = colorFA !== null;
var meshOutputGroup;
var materialNames = [];
......@@ -1281,29 +1331,20 @@ THREE.OBJLoader2.Parser.prototype = {
material = this.materials[ materialName ];
// both original and derived names do not lead to an existing material => need to use a default material
if ( ! THREE.LoaderSupport.Validator.isValid( materialOrg ) && ! THREE.LoaderSupport.Validator.isValid( material ) ) {
if ( ( materialOrg === undefined || materialOrg === null ) && ( material === undefined || material === null ) ) {
var defaultMaterialName = haveVertexColors ? 'defaultVertexColorMaterial' : 'defaultMaterial';
materialOrg = this.materials[ defaultMaterialName ];
materialName = haveVertexColors ? 'defaultVertexColorMaterial' : 'defaultMaterial';
material = this.materials[ materialName ];
if ( this.logging.enabled ) {
console.info( 'object_group "' + meshOutputGroup.objectName + '_' +
meshOutputGroup.groupName + '" was defined with unresolvable material "' +
materialNameOrg + '"! Assigning "' + defaultMaterialName + '".' );
}
materialNameOrg = defaultMaterialName;
// if names are identical then there is no need for later manipulation
if ( materialNameOrg === materialName ) {
material = materialOrg;
materialName = defaultMaterialName;
materialNameOrg + '"! Assigning "' + materialName + '".' );
}
}
if ( ! THREE.LoaderSupport.Validator.isValid( material ) ) {
if ( material === undefined || material === null ) {
var materialCloneInstructions = {
materialNameOrg: materialNameOrg,
......@@ -1319,7 +1360,7 @@ THREE.OBJLoader2.Parser.prototype = {
materialCloneInstructions: materialCloneInstructions
}
};
this.callbackMeshBuilder( payload );
this.callbacks.onAssetAvailable( payload );
// fake entry for async; sync Parser always works on material references (Builder update directly visible here)
if ( this.useAsync ) this.materials[ materialName ] = materialCloneInstructions;
......@@ -1384,7 +1425,7 @@ THREE.OBJLoader2.Parser.prototype = {
}
if ( this.logging.enabled && this.logging.debug ) {
var materialIndexLine = THREE.LoaderSupport.Validator.isValid( selectedMaterialIndex ) ? '\n\t\tmaterialIndex: ' + selectedMaterialIndex : '';
var materialIndexLine = ( selectedMaterialIndex === undefined || selectedMaterialIndex === null ) ? '' : '\n\t\tmaterialIndex: ' + selectedMaterialIndex;
var createdReport = '\tOutput Object no.: ' + this.outputObjectCount +
'\n\t\tgroupName: ' + meshOutputGroup.groupName +
'\n\t\tIndex: ' + meshOutputGroup.index +
......@@ -1404,7 +1445,7 @@ THREE.OBJLoader2.Parser.prototype = {
}
this.outputObjectCount++;
this.callbackMeshBuilder(
this.callbacks.onAssetAvailable(
{
cmd: 'meshData',
progress: {
......@@ -1429,10 +1470,10 @@ THREE.OBJLoader2.Parser.prototype = {
geometryType: this.rawMesh.faceType < 4 ? 0 : ( this.rawMesh.faceType === 6 ) ? 2 : 1
},
[ vertexFA.buffer ],
THREE.LoaderSupport.Validator.isValid( indexUA ) ? [ indexUA.buffer ] : null,
THREE.LoaderSupport.Validator.isValid( colorFA ) ? [ colorFA.buffer ] : null,
THREE.LoaderSupport.Validator.isValid( normalFA ) ? [ normalFA.buffer ] : null,
THREE.LoaderSupport.Validator.isValid( uvFA ) ? [ uvFA.buffer ] : null
indexUA !== null ? [ indexUA.buffer ] : null,
colorFA !== null ? [ colorFA.buffer ] : null,
normalFA !== null ? [ normalFA.buffer ] : null,
uvFA !== null ? [ uvFA.buffer ] : null
);
},
......
......@@ -226,8 +226,9 @@
this.debug = false;
this.dimension = 200;
this.quantity = 1;
this.callbackMeshBuilder = null;
this.callbackProgress = null;
this.callbacks = {
onAssetAvailable: null
};
this.serializedMaterials = null;
this.logging = {
enabled: true,
......@@ -239,6 +240,14 @@
constructor: MeshSpray.Parser,
setCallbackOnAssetAvailable: function ( onAssetAvailable ) {
if ( onAssetAvailable !== null && onAssetAvailable !== undefined ) {
this.callbacks.onAssetAvailable = onAssetAvailable;
}
},
setLogging: function ( enabled, debug ) {
this.logging.enabled = enabled === true;
this.logging.debug = debug === true;
......@@ -330,10 +339,10 @@
serializedMaterials: newSerializedMaterials
}
};
this.callbackMeshBuilder( payload );
this.callbacks.onAssetAvailable( payload );
this.globalObjectCount++;
this.callbackMeshBuilder(
this.callbacks.onAssetAvailable(
{
cmd: 'meshData',
progress: {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册