Bladeren bron

WebGLPrograms: Refactor call of onBeforeCompile().

Mugen87 5 jaren geleden
bovenliggende
commit
3c934fc34d
3 gewijzigde bestanden met toevoegingen van 25 en 37 verwijderingen
  1. 2 3
      src/materials/Material.d.ts
  2. 5 1
      src/renderers/WebGLRenderer.js
  3. 18 33
      src/renderers/webgl/WebGLPrograms.js

+ 2 - 3
src/materials/Material.d.ts

@@ -1,5 +1,4 @@
 import { Plane } from './../math/Plane';
-import { Shader } from './../renderers/shaders/ShaderLib';
 import { EventDispatcher } from './../core/EventDispatcher';
 import { WebGLRenderer } from './../renderers/WebGLRenderer';
 import {
@@ -322,10 +321,10 @@ export class Material extends EventDispatcher {
 
 	/**
 	 * An optional callback that is executed immediately before the shader program is compiled. This function is called with the shader source code as a parameter. Useful for the modification of built-in materials.
-	 * @param shader Source code of the shader
+	 * @param shaderobject Represents the shader source code and program information.
 	 * @param renderer WebGLRenderer Context that is initializing the material
 	 */
-	onBeforeCompile ( shader : Shader, renderer : WebGLRenderer ) : void;
+	onBeforeCompile ( shaderobject : object, renderer : WebGLRenderer ) : void;
 
 	/**
 	 * Sets the properties based on the values.

+ 5 - 1
src/renderers/WebGLRenderer.js

@@ -1536,10 +1536,14 @@ function WebGLRenderer( parameters ) {
 
 		if ( programChange ) {
 
+			parameters.uniforms = programCache.getUniforms( material, parameters );
+
+			material.onBeforeCompile( parameters, _this );
+
 			program = programCache.acquireProgram( parameters, programCacheKey );
 
 			materialProperties.program = program;
-			materialProperties.uniforms = programCache.getUniforms( material );
+			materialProperties.uniforms = parameters.uniforms;
 			materialProperties.outputEncoding = parameters.outputEncoding;
 			material.program = program;
 

+ 18 - 33
src/renderers/webgl/WebGLPrograms.js

@@ -53,34 +53,6 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 		"sheen"
 	];
 
-	function getShaderObject( material, shaderID ) {
-
-		let shaderobject;
-
-		if ( shaderID ) {
-
-			const shader = ShaderLib[ shaderID ];
-
-			shaderobject = {
-				name: material.name || material.type,
-				vertexShader: shader.vertexShader,
-				fragmentShader: shader.fragmentShader
-			};
-
-		} else {
-
-			shaderobject = {
-				name: material.name || material.type,
-				vertexShader: material.vertexShader,
-				fragmentShader: material.fragmentShader
-			};
-
-		}
-
-		return shaderobject;
-
-	}
-
 	function allocateBones( object ) {
 
 		const skeleton = object.skeleton;
@@ -166,8 +138,21 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 
 		}
 
-		const shaderobject = getShaderObject( material, shaderID );
-		material.onBeforeCompile( shaderobject, renderer );
+		let vertexShader, fragmentShader;
+
+		if ( shaderID ) {
+
+			const shader = ShaderLib[ shaderID ];
+
+			vertexShader = shader.vertexShader;
+			fragmentShader = shader.fragmentShader;
+
+		} else {
+
+			vertexShader = material.vertexShader;
+			fragmentShader = material.fragmentShader;
+
+		}
 
 		const currentRenderTarget = renderer.getRenderTarget();
 
@@ -176,10 +161,10 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 			isWebGL2: isWebGL2,
 
 			shaderID: shaderID,
-			shaderName: shaderobject.name,
+			shaderName: material.name || material.type,
 
-			vertexShader: shaderobject.vertexShader,
-			fragmentShader: shaderobject.fragmentShader,
+			vertexShader: vertexShader,
+			fragmentShader: fragmentShader,
 			defines: material.defines,
 
 			isRawShaderMaterial: material.isRawShaderMaterial,