Browse Source

Renderer: Let cache properly own the programs.

tschw 10 years ago
parent
commit
99e185f7ec
2 changed files with 12 additions and 4 deletions
  1. 8 3
      src/renderers/WebGLRenderer.js
  2. 4 1
      src/renderers/webgl/WebGLPrograms.js

+ 8 - 3
src/renderers/WebGLRenderer.js

@@ -130,7 +130,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 	_infoMemory = {
 	_infoMemory = {
 
 
 		geometries: 0,
 		geometries: 0,
-		textures: 0
+		textures: 0,
+		programs: 0
 
 
 	},
 	},
 
 
@@ -147,16 +148,18 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		render: _infoRender,
 		render: _infoRender,
 		memory: _infoMemory,
 		memory: _infoMemory,
-		programs: []
+		programs: null
 
 
 	};
 	};
 
 
 	Object.defineProperty( _infoMemory, 'programs', { get: function() {
 	Object.defineProperty( _infoMemory, 'programs', { get: function() {
 
 
-		return _this.info.programs.length;
+		var programs = _this.info.programs;
+		return programs !== null ? programs.length : 0;
 
 
 	} } );
 	} } );
 
 
+
 	// initialize
 	// initialize
 
 
 	var _gl;
 	var _gl;
@@ -218,6 +221,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 	var objects = new THREE.WebGLObjects( _gl, properties, this.info );
 	var objects = new THREE.WebGLObjects( _gl, properties, this.info );
 	var programCache = new THREE.WebGLPrograms( this, capabilities );
 	var programCache = new THREE.WebGLPrograms( this, capabilities );
 
 
+	this.info.programs = programCache.programs;
+
 	var bufferRenderer = new THREE.WebGLBufferRenderer( _gl, extensions, _infoRender );
 	var bufferRenderer = new THREE.WebGLBufferRenderer( _gl, extensions, _infoRender );
 	var indexedBufferRenderer = new THREE.WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );
 	var indexedBufferRenderer = new THREE.WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );
 
 

+ 4 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -1,6 +1,6 @@
 THREE.WebGLPrograms = function ( renderer, capabilities ) {
 THREE.WebGLPrograms = function ( renderer, capabilities ) {
 
 
-	var programs = renderer.info.programs;
+	var programs = [];
 
 
 	var shaderIDs = {
 	var shaderIDs = {
 		MeshDepthMaterial: 'depth',
 		MeshDepthMaterial: 'depth',
@@ -277,4 +277,7 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
 
 
 	};
 	};
 
 
+	// Exposed for resource monitoring & error feedback via renderer.info:
+	this.programs = programs;
+
 };
 };