Bladeren bron

WebGLPrograms: Improve performance of getParameters().

Mugen87 5 jaren geleden
bovenliggende
commit
924a6d3643
3 gewijzigde bestanden met toevoegingen van 23 en 4 verwijderingen
  1. 1 1
      src/renderers/WebGLRenderer.js
  2. 1 0
      src/renderers/webgl/WebGLPrograms.d.ts
  3. 21 3
      src/renderers/webgl/WebGLPrograms.js

+ 1 - 1
src/renderers/WebGLRenderer.js

@@ -1539,7 +1539,7 @@ function WebGLRenderer( parameters ) {
 			program = programCache.acquireProgram( parameters, programCacheKey );
 			program = programCache.acquireProgram( parameters, programCacheKey );
 
 
 			materialProperties.program = program;
 			materialProperties.program = program;
-			materialProperties.uniforms = parameters.uniforms;
+			materialProperties.uniforms = programCache.getUniforms( material );
 			materialProperties.outputEncoding = parameters.outputEncoding;
 			materialProperties.outputEncoding = parameters.outputEncoding;
 			material.program = program;
 			material.program = program;
 
 

+ 1 - 0
src/renderers/webgl/WebGLPrograms.d.ts

@@ -21,6 +21,7 @@ export class WebGLPrograms {
 		object: any
 		object: any
 	): any;
 	): any;
 	getProgramCacheKey( parameters: any ): string;
 	getProgramCacheKey( parameters: any ): string;
+	getUniforms( material: Material ): object;
 	acquireProgram(
 	acquireProgram(
 		parameters: any,
 		parameters: any,
 		cacheKey: string
 		cacheKey: string

+ 21 - 3
src/renderers/webgl/WebGLPrograms.js

@@ -63,7 +63,6 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 
 
 			shaderobject = {
 			shaderobject = {
 				name: material.name || material.type,
 				name: material.name || material.type,
-				uniforms: UniformsUtils.clone( shader.uniforms ),
 				vertexShader: shader.vertexShader,
 				vertexShader: shader.vertexShader,
 				fragmentShader: shader.fragmentShader
 				fragmentShader: shader.fragmentShader
 			};
 			};
@@ -72,7 +71,6 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 
 
 			shaderobject = {
 			shaderobject = {
 				name: material.name || material.type,
 				name: material.name || material.type,
-				uniforms: material.uniforms,
 				vertexShader: material.vertexShader,
 				vertexShader: material.vertexShader,
 				fragmentShader: material.fragmentShader
 				fragmentShader: material.fragmentShader
 			};
 			};
@@ -180,7 +178,6 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 			shaderID: shaderID,
 			shaderID: shaderID,
 			shaderName: shaderobject.name,
 			shaderName: shaderobject.name,
 
 
-			uniforms: shaderobject.uniforms,
 			vertexShader: shaderobject.vertexShader,
 			vertexShader: shaderobject.vertexShader,
 			fragmentShader: shaderobject.fragmentShader,
 			fragmentShader: shaderobject.fragmentShader,
 			defines: material.defines,
 			defines: material.defines,
@@ -342,6 +339,26 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 
 
 	}
 	}
 
 
+	function getUniforms( material ) {
+
+		const shaderID = shaderIDs[ material.type ];
+		let uniforms;
+
+		if ( shaderID ) {
+
+			const shader = ShaderLib[ shaderID ];
+			uniforms = UniformsUtils.clone( shader.uniforms );
+
+		} else {
+
+			uniforms = material.uniforms;
+
+		}
+
+		return uniforms;
+
+	}
+
 	function acquireProgram( parameters, cacheKey ) {
 	function acquireProgram( parameters, cacheKey ) {
 
 
 		let program;
 		let program;
@@ -392,6 +409,7 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 	return {
 	return {
 		getParameters: getParameters,
 		getParameters: getParameters,
 		getProgramCacheKey: getProgramCacheKey,
 		getProgramCacheKey: getProgramCacheKey,
+		getUniforms: getUniforms,
 		acquireProgram: acquireProgram,
 		acquireProgram: acquireProgram,
 		releaseProgram: releaseProgram,
 		releaseProgram: releaseProgram,
 		// Exposed for resource monitoring & error feedback via renderer.info:
 		// Exposed for resource monitoring & error feedback via renderer.info: