Skip to content

Commit 5c6ec4a

Browse files
committed
Updated builds.
1 parent 7f25fb8 commit 5c6ec4a

File tree

2 files changed

+122
-123
lines changed

2 files changed

+122
-123
lines changed

build/three.js

Lines changed: 63 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -19706,8 +19706,6 @@ THREE.WebGLRenderer = function ( parameters ) {
1970619706

1970719707
var _this = this,
1970819708

19709-
_programs = [],
19710-
1971119709
// internal state cache
1971219710

1971319711
_currentProgram = null,
@@ -19755,7 +19753,6 @@ THREE.WebGLRenderer = function ( parameters ) {
1975519753

1975619754
_infoMemory = {
1975719755

19758-
programs: 0,
1975919756
geometries: 0,
1976019757
textures: 0
1976119758

@@ -19774,10 +19771,11 @@ THREE.WebGLRenderer = function ( parameters ) {
1977419771

1977519772
render: _infoRender,
1977619773
memory: _infoMemory,
19777-
programs: _programs
19774+
programs: null
1977819775

1977919776
};
1978019777

19778+
1978119779
// initialize
1978219780

1978319781
var _gl;
@@ -19839,6 +19837,8 @@ THREE.WebGLRenderer = function ( parameters ) {
1983919837
var objects = new THREE.WebGLObjects( _gl, properties, this.info );
1984019838
var programCache = new THREE.WebGLPrograms( this, capabilities );
1984119839

19840+
this.info.programs = programCache.programs;
19841+
1984219842
var bufferRenderer = new THREE.WebGLBufferRenderer( _gl, extensions, _infoRender );
1984319843
var indexedBufferRenderer = new THREE.WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );
1984419844

@@ -20213,41 +20213,13 @@ THREE.WebGLRenderer = function ( parameters ) {
2021320213

2021420214
function releaseMaterialProgramReference( material ) {
2021520215

20216-
var program = properties.get( material ).program.program;
20217-
20218-
if ( program === undefined ) return;
20216+
var programInfo = properties.get( material ).program;
2021920217

2022020218
material.program = undefined;
2022120219

20222-
for ( var i = 0, n = _programs.length; i !== n; ++ i ) {
20223-
20224-
var programInfo = _programs[ i ];
20225-
20226-
if ( programInfo.program === program ) {
20227-
20228-
var newReferenceCount = -- programInfo.usedTimes;
20229-
20230-
if ( newReferenceCount === 0 ) {
20231-
20232-
// the last material that has been using the program let
20233-
// go of it, so remove it from the (unordered) _programs
20234-
// set and deallocate the GL resource
20235-
20236-
var newLength = n - 1;
20237-
20238-
_programs[ i ] = _programs[ newLength ];
20239-
_programs.pop();
20240-
20241-
_gl.deleteProgram( program );
20242-
20243-
_infoMemory.programs = newLength;
20244-
20245-
}
20246-
20247-
break;
20248-
20249-
}
20220+
if ( programInfo !== undefined ) {
2025020221

20222+
programCache.releaseProgram( programInfo );
2025120223
}
2025220224

2025320225
}
@@ -21066,15 +21038,15 @@ THREE.WebGLRenderer = function ( parameters ) {
2106621038
var parameters = programCache.getParameters( material, lights, fog, object );
2106721039
var code = programCache.getProgramCode( material, parameters );
2106821040

21069-
21041+
var program = materialProperties.program;
2107021042
var programChange = true;
2107121043

21072-
if ( ! materialProperties.program ) {
21044+
if ( program === undefined ) {
2107321045

2107421046
// new material
2107521047
material.addEventListener( 'dispose', onMaterialDispose );
2107621048

21077-
} else if ( materialProperties.program.code !== code ) {
21049+
} else if ( program.code !== code ) {
2107821050

2107921051
// changed glsl or parameters
2108021052
releaseMaterialProgramReference( material );
@@ -21091,41 +21063,39 @@ THREE.WebGLRenderer = function ( parameters ) {
2109121063

2109221064
}
2109321065

21094-
if ( parameters.shaderID ) {
21066+
if ( programChange ) {
2109521067

21096-
var shader = THREE.ShaderLib[ parameters.shaderID ];
21068+
if ( parameters.shaderID ) {
2109721069

21098-
materialProperties.__webglShader = {
21099-
name: material.type,
21100-
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
21101-
vertexShader: shader.vertexShader,
21102-
fragmentShader: shader.fragmentShader
21103-
};
21070+
var shader = THREE.ShaderLib[ parameters.shaderID ];
2110421071

21105-
} else {
21072+
materialProperties.__webglShader = {
21073+
name: material.type,
21074+
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
21075+
vertexShader: shader.vertexShader,
21076+
fragmentShader: shader.fragmentShader
21077+
};
2110621078

21107-
materialProperties.__webglShader = {
21108-
name: material.type,
21109-
uniforms: material.uniforms,
21110-
vertexShader: material.vertexShader,
21111-
fragmentShader: material.fragmentShader
21112-
};
21079+
} else {
2111321080

21114-
}
21081+
materialProperties.__webglShader = {
21082+
name: material.type,
21083+
uniforms: material.uniforms,
21084+
vertexShader: material.vertexShader,
21085+
fragmentShader: material.fragmentShader
21086+
};
2111521087

21116-
material.__webglShader = materialProperties.__webglShader;
21088+
}
2111721089

21118-
var program = programCache.getProgram( material, parameters, code );
21090+
material.__webglShader = materialProperties.__webglShader;
2111921091

21120-
if ( programChange ) {
21092+
program = programCache.acquireProgram( material, parameters, code );
2112121093

21122-
program.usedTimes ++;
21094+
materialProperties.program = program;
21095+
material.program = program;
2112321096

2112421097
}
2112521098

21126-
materialProperties.program = program;
21127-
material.program = program;
21128-
2112921099
var attributes = program.getAttributes();
2113021100

2113121101
if ( material.morphTargets ) {
@@ -24338,6 +24308,15 @@ THREE.WebGLProgram = ( function () {
2433824308

2433924309
};
2434024310

24311+
// free resource
24312+
24313+
this.destroy = function() {
24314+
24315+
gl.deleteProgram( program );
24316+
this.program = undefined;
24317+
24318+
};
24319+
2434124320
// DEPRECATED
2434224321

2434324322
Object.defineProperties( this, {
@@ -24612,7 +24591,7 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
2461224591

2461324592
};
2461424593

24615-
this.getProgram = function ( material, parameters, code ) {
24594+
this.acquireProgram = function ( material, parameters, code ) {
2461624595

2461724596
var program;
2461824597

@@ -24624,6 +24603,7 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
2462424603
if ( programInfo.code === code ) {
2462524604

2462624605
program = programInfo;
24606+
++ program.usedTimes;
2462724607

2462824608
break;
2462924609

@@ -24638,9 +24618,28 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
2463824618

2463924619
}
2464024620

24641-
return program ;
24621+
return program;
2464224622

24643-
}
24623+
};
24624+
24625+
this.releaseProgram = function( program ) {
24626+
24627+
if ( -- program.usedTimes === 0 ) {
24628+
24629+
// Remove from unordered set
24630+
var i = programs.indexOf( program );
24631+
programs[ i ] = programs[ programs.length - 1 ];
24632+
programs.pop();
24633+
24634+
// Free WebGL resources
24635+
program.destroy();
24636+
24637+
}
24638+
24639+
};
24640+
24641+
// Exposed for resource monitoring & error feedback via renderer.info:
24642+
this.programs = programs;
2464424643

2464524644
};
2464624645

0 commit comments

Comments
 (0)