提交 c3355d9b 编写于 作者: M Mr.doob

More post-release fixes.

上级 4360ed69
......@@ -14238,31 +14238,31 @@ THREE.ObjectLoader.prototype = {
var scope = this;
var images = {};
if ( json !== undefined && json.length > 0 ) {
var manager = new THREE.LoadingManager( onLoad );
function loadImage( url ) {
var loader = new THREE.ImageLoader( manager );
loader.setCrossOrigin( this.crossOrigin );
scope.manager.itemStart( url );
var loadImage = function ( url ) {
return loader.load( url, function () {
url = scope.texturePath + url;
scope.manager.itemEnd( url );
scope.manager.itemStart( url );
} );
return loader.load( url, function () {
}
scope.manager.itemEnd( url );
if ( json !== undefined && json.length > 0 ) {
} );
var manager = new THREE.LoadingManager( onLoad );
};
var loader = new THREE.ImageLoader( manager );
loader.setCrossOrigin( this.crossOrigin );
for ( var i = 0, l = json.length; i < l; i ++ ) {
var image = json[ i ];
images[ image.uuid ] = loadImage( image.url );
var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;
images[ image.uuid ] = loadImage( path );
}
......@@ -19706,8 +19706,6 @@ THREE.WebGLRenderer = function ( parameters ) {
var _this = this,
_programs = [],
// internal state cache
_currentProgram = null,
......@@ -19755,7 +19753,6 @@ THREE.WebGLRenderer = function ( parameters ) {
_infoMemory = {
programs: 0,
geometries: 0,
textures: 0
......@@ -19774,10 +19771,11 @@ THREE.WebGLRenderer = function ( parameters ) {
render: _infoRender,
memory: _infoMemory,
programs: _programs
programs: null
};
// initialize
var _gl;
......@@ -19839,6 +19837,8 @@ THREE.WebGLRenderer = function ( parameters ) {
var objects = new THREE.WebGLObjects( _gl, properties, this.info );
var programCache = new THREE.WebGLPrograms( this, capabilities );
this.info.programs = programCache.programs;
var bufferRenderer = new THREE.WebGLBufferRenderer( _gl, extensions, _infoRender );
var indexedBufferRenderer = new THREE.WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );
......@@ -20213,41 +20213,13 @@ THREE.WebGLRenderer = function ( parameters ) {
function releaseMaterialProgramReference( material ) {
var program = properties.get( material ).program.program;
if ( program === undefined ) return;
var programInfo = properties.get( material ).program;
material.program = undefined;
for ( var i = 0, n = _programs.length; i !== n; ++ i ) {
var programInfo = _programs[ i ];
if ( programInfo.program === program ) {
var newReferenceCount = -- programInfo.usedTimes;
if ( newReferenceCount === 0 ) {
// the last material that has been using the program let
// go of it, so remove it from the (unordered) _programs
// set and deallocate the GL resource
var newLength = n - 1;
_programs[ i ] = _programs[ newLength ];
_programs.pop();
_gl.deleteProgram( program );
_infoMemory.programs = newLength;
}
break;
}
if ( programInfo !== undefined ) {
programCache.releaseProgram( programInfo );
}
}
......@@ -21066,15 +21038,15 @@ THREE.WebGLRenderer = function ( parameters ) {
var parameters = programCache.getParameters( material, lights, fog, object );
var code = programCache.getProgramCode( material, parameters );
var program = materialProperties.program;
var programChange = true;
if ( ! materialProperties.program ) {
if ( program === undefined ) {
// new material
material.addEventListener( 'dispose', onMaterialDispose );
} else if ( materialProperties.program.code !== code ) {
} else if ( program.code !== code ) {
// changed glsl or parameters
releaseMaterialProgramReference( material );
......@@ -21091,41 +21063,39 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( parameters.shaderID ) {
if ( programChange ) {
var shader = THREE.ShaderLib[ parameters.shaderID ];
if ( parameters.shaderID ) {
materialProperties.__webglShader = {
name: material.type,
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
};
var shader = THREE.ShaderLib[ parameters.shaderID ];
} else {
materialProperties.__webglShader = {
name: material.type,
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
};
materialProperties.__webglShader = {
name: material.type,
uniforms: material.uniforms,
vertexShader: material.vertexShader,
fragmentShader: material.fragmentShader
};
} else {
}
materialProperties.__webglShader = {
name: material.type,
uniforms: material.uniforms,
vertexShader: material.vertexShader,
fragmentShader: material.fragmentShader
};
material.__webglShader = materialProperties.__webglShader;
}
var program = programCache.getProgram( material, parameters, code );
material.__webglShader = materialProperties.__webglShader;
if ( programChange ) {
program = programCache.acquireProgram( material, parameters, code );
program.usedTimes ++;
materialProperties.program = program;
material.program = program;
}
materialProperties.program = program;
material.program = program;
var attributes = program.getAttributes();
if ( material.morphTargets ) {
......@@ -24338,6 +24308,15 @@ THREE.WebGLProgram = ( function () {
};
// free resource
this.destroy = function() {
gl.deleteProgram( program );
this.program = undefined;
};
// DEPRECATED
Object.defineProperties( this, {
......@@ -24612,7 +24591,7 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
};
this.getProgram = function ( material, parameters, code ) {
this.acquireProgram = function ( material, parameters, code ) {
var program;
......@@ -24624,6 +24603,7 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
if ( programInfo.code === code ) {
program = programInfo;
++ program.usedTimes;
break;
......@@ -24638,9 +24618,28 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
}
return program ;
return program;
}
};
this.releaseProgram = function( program ) {
if ( -- program.usedTimes === 0 ) {
// Remove from unordered set
var i = programs.indexOf( program );
programs[ i ] = programs[ programs.length - 1 ];
programs.pop();
// Free WebGL resources
program.destroy();
}
};
// Exposed for resource monitoring & error feedback via renderer.info:
this.programs = programs;
};
......
此差异已折叠。
......@@ -262,11 +262,11 @@
var params = {
"a" : { map: flareA, useScreenCoordinates: false, color: 0xffffff, blending: THREE.AdditiveBlending },
"b" : { map: flareB, useScreenCoordinates: false, color: 0xffffff, blending: THREE.AdditiveBlending },
"a" : { map: flareA, color: 0xffffff, blending: THREE.AdditiveBlending },
"b" : { map: flareB, color: 0xffffff, blending: THREE.AdditiveBlending },
"ar" : { map: flareA, useScreenCoordinates: false, color: 0xff0000, blending: THREE.AdditiveBlending },
"br" : { map: flareB, useScreenCoordinates: false, color: 0xff0000, blending: THREE.AdditiveBlending }
"ar" : { map: flareA, color: 0xff0000, blending: THREE.AdditiveBlending },
"br" : { map: flareB, color: 0xff0000, blending: THREE.AdditiveBlending }
};
......
......@@ -128,7 +128,7 @@
renderer.render( scene, camera );
console.log( "before", renderer.info.memory.programs );
console.log( "before", renderer.info.programs.length );
for ( var i = 0; i < N; i ++ ) {
......@@ -137,7 +137,7 @@
}
console.log( "after", renderer.info.memory.programs );
console.log( "after", renderer.info.programs.length );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册