提交 9ab5e05c 编写于 作者: K Kai Salmen

- Issue21: Fixed 'o' or 'g' declaration lead to early cleanup of stored vertex data

- WorkerSupport: Added worker payloads "imageData" and "error"
上级 5958c7d7
......@@ -891,7 +891,7 @@ THREE.LoaderSupport.WorkerRunnerRefImpl = (function () {
function WorkerRunnerRefImpl() {
var scope = this;
var scopedRunner = function( event ) {
scope.run( event.data );
scope.processMessage( event.data );
};
self.addEventListener( 'message', scopedRunner, false );
}
......@@ -927,12 +927,15 @@ THREE.LoaderSupport.WorkerRunnerRefImpl = (function () {
*
* @param {Object} payload Raw mesh description (buffers, params, materials) used to build one to many meshes.
*/
WorkerRunnerRefImpl.prototype.run = function ( payload ) {
var logger = new ConsoleLogger( payload.logger.enabled, payload.logger.debug );
WorkerRunnerRefImpl.prototype.processMessage = function ( payload ) {
var logger = new ConsoleLogger();
if ( Validator.isValid( payload.logger ) ) {
if ( payload.cmd === 'run' ) {
logger.setEnabled( payload.logger.enabled );
logger.setDebug( payload.logger.debug );
logger.logInfo( 'WorkerRunner: Starting Run...' );
}
if ( payload.cmd === 'run' ) {
var callbacks = {
callbackBuilder: function ( payload ) {
......@@ -948,7 +951,8 @@ THREE.LoaderSupport.WorkerRunnerRefImpl = (function () {
this.applyProperties( parser, payload.params );
this.applyProperties( parser, payload.materials );
this.applyProperties( parser, callbacks );
parser.parse( payload.buffers.input );
parser.workerScope = self;
parser.parse( payload.data.input, payload.data.options );
logger.logInfo( 'WorkerRunner: Run complete!' );
......@@ -976,7 +980,7 @@ THREE.LoaderSupport.WorkerRunnerRefImpl = (function () {
*/
THREE.LoaderSupport.WorkerSupport = (function () {
var WORKER_SUPPORT_VERSION = '1.1.0';
var WORKER_SUPPORT_VERSION = '1.1.1';
var Validator = THREE.LoaderSupport.Validator;
......@@ -1046,11 +1050,17 @@ THREE.LoaderSupport.WorkerSupport = (function () {
var scope = this;
var buildWorkerCode = function ( baseWorkerCode ) {
scope.workerCode = baseWorkerCode;
if ( workerRunner == THREE.LoaderSupport.WorkerRunnerRefImpl ) {
scope.workerCode += buildObject( 'Validator', THREE.LoaderSupport.Validator );
scope.workerCode += buildSingelton( 'ConsoleLogger', 'ConsoleLogger', THREE.LoaderSupport.ConsoleLogger );
}
scope.workerCode += functionCodeBuilder( buildObject, buildSingelton );
scope.workerCode += buildSingelton( workerRunner.name, workerRunner.name, workerRunner );
scope.workerCode += 'new ' + workerRunner.name + '();\n\n';
var blob = new Blob( [ scope.workerCode ], { type: 'text/plain' } );
var blob = new Blob( [ scope.workerCode ], { type: 'application/javascript' } );
scope.worker = new Worker( window.URL.createObjectURL( blob ) );
scope.logger.logTimeEnd( 'buildWebWorkerCode' );
......@@ -1059,10 +1069,8 @@ THREE.LoaderSupport.WorkerSupport = (function () {
switch ( payload.cmd ) {
case 'meshData':
scope.callbacks.builder( payload );
break;
case 'materialData':
case 'imageData':
scope.callbacks.builder( payload );
break;
......@@ -1072,14 +1080,18 @@ THREE.LoaderSupport.WorkerSupport = (function () {
if ( scope.terminateRequested ) {
scope.logger.logInfo( 'WorkerSupport: Run is complete. Terminating application on request!' );
scope.logger.logInfo( 'WorkerSupport [' + workerRunner + ']: Run is complete. Terminating application on request!' );
scope.terminateWorker();
}
break;
case 'error':
scope.logger.logError( 'WorkerSupport [' + workerRunner + ']: Reported error: ' + payload.msg );
break;
default:
scope.logger.logError( 'WorkerSupport: Received unknown command: ' + payload.cmd );
scope.logger.logError( 'WorkerSupport [' + workerRunner + ']: Received unknown command: ' + payload.cmd );
break;
}
......@@ -1183,6 +1195,7 @@ THREE.LoaderSupport.WorkerSupport = (function () {
var buildSingelton = function ( fullName, internalName, object ) {
var objectString = fullName + ' = (function () {\n\n';
objectString += '\t' + object.prototype.constructor.toString() + '\n\n';
objectString = objectString.replace( object.name, internalName );
var funcString;
var objectPart;
......@@ -1223,8 +1236,9 @@ THREE.LoaderSupport.WorkerSupport = (function () {
if ( ! Validator.isValid( this.callbacks.builder ) ) throw 'Unable to run as no "builder" callback is set.';
if ( ! Validator.isValid( this.callbacks.onLoad ) ) throw 'Unable to run as no "onLoad" callback is set.';
if ( Validator.isValid( this.worker ) || this.loading ) {
this.running = true;
if ( payload.cmd !== 'run' ) payload.cmd = 'run';
this.queuedMessage = payload;
this.running = true;
this._postMessage();
}
......
......@@ -16,7 +16,7 @@ if ( THREE.OBJLoader2 === undefined ) { THREE.OBJLoader2 = {} }
*/
THREE.OBJLoader2 = (function () {
var OBJLOADER2_VERSION = '2.1.0';
var OBJLOADER2_VERSION = '2.1.1';
var LoaderBase = THREE.LoaderSupport.LoaderBase;
var Validator = THREE.LoaderSupport.Validator;
var ConsoleLogger = THREE.LoaderSupport.ConsoleLogger;
......@@ -254,12 +254,10 @@ THREE.OBJLoader2 = (function () {
var buildCode = function ( funcBuildObject, funcBuildSingelton ) {
var workerCode = '';
workerCode += '/**\n';
workerCode += ' * This code was constructed by OBJLoader2 buildWorkerCode.\n';
workerCode += ' * This code was constructed by OBJLoader2 buildCode.\n';
workerCode += ' */\n\n';
workerCode += funcBuildSingelton( 'LoaderBase', 'LoaderBase', LoaderBase );
workerCode += funcBuildObject( 'Consts', Consts );
workerCode += funcBuildObject( 'Validator', Validator );
workerCode += funcBuildSingelton( 'ConsoleLogger', 'ConsoleLogger', ConsoleLogger );
workerCode += funcBuildSingelton( 'Parser', 'Parser', Parser );
workerCode += funcBuildSingelton( 'RawMesh', 'RawMesh', RawMesh );
workerCode += funcBuildSingelton( 'RawMeshSubGroup', 'RawMeshSubGroup', RawMeshSubGroup );
......@@ -278,7 +276,6 @@ THREE.OBJLoader2 = (function () {
}
this.workerSupport.run(
{
cmd: 'run',
params: {
useAsync: true,
materialPerSmoothingGroup: this.materialPerSmoothingGroup,
......@@ -293,8 +290,9 @@ THREE.OBJLoader2 = (function () {
// in async case only material names are supplied to parser
materials: materialNames
},
buffers: {
input: content
data: {
input: content,
options: null
}
},
[ content.buffer ]
......@@ -561,7 +559,7 @@ THREE.OBJLoader2 = (function () {
throw 'Vertex Colors were detected, but vertex count and color count do not match!';
}
this.processCompletedObject( null, this.rawMesh.groupName, currentByte );
this.processCompletedObject( this.rawMesh.objectName, this.rawMesh.groupName, currentByte );
reachedFaces = false;
}
......@@ -600,20 +598,13 @@ THREE.OBJLoader2 = (function () {
case Consts.LINE_G:
this.processCompletedGroup( concatStringBuffer( buffer, bufferPointer, slashSpacePattern ), currentByte );
reachedFaces = false;
flushStringBuffer( buffer, bufferPointer );
break;
case Consts.LINE_O:
if ( this.rawMesh.vertices.length > 0 ) {
this.processCompletedObject( concatStringBuffer( buffer, bufferPointer, slashSpacePattern ), null, currentByte );
this.processCompletedObject( concatStringBuffer( buffer, bufferPointer, slashSpacePattern ), this.rawMesh.groupName, currentByte );
reachedFaces = false;
} else {
this.rawMesh.pushObject( concatStringBuffer( buffer, bufferPointer, slashSpacePattern ) );
}
flushStringBuffer( buffer, bufferPointer );
break;
......@@ -656,9 +647,15 @@ THREE.OBJLoader2 = (function () {
this.buildMesh( result, currentByte );
var progressBytesPercent = currentByte / this.totalBytes;
this.callbackProgress( 'Completed object: ' + objectName + ' Total progress: ' + ( progressBytesPercent * 100 ).toFixed( 2 ) + '%', progressBytesPercent );
this.rawMesh = this.rawMesh.newInstanceFromObject( objectName, groupName );
} else {
// if a object was set that did not lead to object creation in finalize, then the object name has to be updated
this.rawMesh.pushObject( objectName );
}
this.rawMesh = this.rawMesh.newInstanceFromObject( objectName, groupName );
};
Parser.prototype.processCompletedGroup = function ( groupName, currentByte ) {
......
......@@ -139,14 +139,14 @@
OBJLoader2Example.prototype.initContent = function () {
var modelName = 'female02';
this._reportProgress( 'Loading: ' + modelName );
this._reportProgress( { detail: { text: 'Loading: ' + modelName } } );
var scope = this;
var objLoader = new THREE.OBJLoader2();
var callbackOnLoad = function ( event ) {
scope.scene.add( event.detail.loaderRootNode );
console.log( 'Loading complete: ' + event.detail.modelName );
scope._reportProgress( '' );
scope._reportProgress( { detail: { text: '' } } );
};
var onLoadMtl = function ( materials ) {
......@@ -160,9 +160,10 @@
objLoader.loadMtl( 'obj/female02/female02.mtl', 'female02.mtl', null, onLoadMtl );
};
OBJLoader2Example.prototype._reportProgress = function( content ) {
console.log( 'Progress: ' + content );
document.getElementById( 'feedback' ).innerHTML = Validator.isValid( content ) ? content : '';
OBJLoader2Example.prototype._reportProgress = function( event ) {
var output = Validator.verifyInput( event.detail.text, '' );
console.log( 'Progress: ' + output );
document.getElementById( 'feedback' ).innerHTML = output;
};
OBJLoader2Example.prototype.resizeDisplayGL = function () {
......
......@@ -140,10 +140,8 @@
var buildCode = function ( funcBuildObject, funcBuildSingelton ) {
var workerCode = '';
workerCode += '/**\n';
workerCode += ' * This code was constructed by MeshSpray buildWorkerCode.\n';
workerCode += ' * This code was constructed by MeshSpray buildCode.\n';
workerCode += ' */\n\n';
workerCode += funcBuildObject( 'Validator', Validator );
workerCode += funcBuildSingelton( 'ConsoleLogger', 'ConsoleLogger', ConsoleLogger );
workerCode += funcBuildSingelton( 'Parser', 'Parser', Parser );
return workerCode;
......@@ -153,7 +151,6 @@
this.workerSupport.setCallbacks( scopeBuilderFunc, scopeFuncComplete );
this.workerSupport.run(
{
cmd: 'run',
params: {
dimension: prepData.dimension,
quantity: prepData.quantity,
......@@ -166,8 +163,9 @@
debug: this.logger.debug,
enabled: this.logger.enabled
},
buffers: {
input: null
data: {
input: null,
options: null
}
}
);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册