Browse Source

UniformsUtils: Refactoring.

Mr.doob 6 years ago
parent
commit
f10da706e0

+ 2 - 2
src/materials/ShaderMaterial.js

@@ -1,5 +1,5 @@
 import { Material } from './Material.js';
 import { Material } from './Material.js';
-import { UniformsUtils } from '../renderers/shaders/UniformsUtils.js';
+import { cloneUniforms } from '../renderers/shaders/UniformsUtils.js';
 
 
 /**
 /**
  * @author alteredq / http://alteredqualia.com/
  * @author alteredq / http://alteredqualia.com/
@@ -91,7 +91,7 @@ ShaderMaterial.prototype.copy = function ( source ) {
 	this.fragmentShader = source.fragmentShader;
 	this.fragmentShader = source.fragmentShader;
 	this.vertexShader = source.vertexShader;
 	this.vertexShader = source.vertexShader;
 
 
-	this.uniforms = UniformsUtils.clone( source.uniforms );
+	this.uniforms = cloneUniforms( source.uniforms );
 
 
 	this.defines = Object.assign( {}, source.defines );
 	this.defines = Object.assign( {}, source.defines );
 
 

+ 2 - 2
src/renderers/WebGLRenderer.js

@@ -16,7 +16,7 @@ import { Frustum } from '../math/Frustum.js';
 import { Matrix4 } from '../math/Matrix4.js';
 import { Matrix4 } from '../math/Matrix4.js';
 import { ShaderLib } from './shaders/ShaderLib.js';
 import { ShaderLib } from './shaders/ShaderLib.js';
 import { UniformsLib } from './shaders/UniformsLib.js';
 import { UniformsLib } from './shaders/UniformsLib.js';
-import { UniformsUtils } from './shaders/UniformsUtils.js';
+import { cloneUniforms } from './shaders/UniformsUtils.js';
 import { Vector3 } from '../math/Vector3.js';
 import { Vector3 } from '../math/Vector3.js';
 import { Vector4 } from '../math/Vector4.js';
 import { Vector4 } from '../math/Vector4.js';
 import { WebGLAnimation } from './webgl/WebGLAnimation.js';
 import { WebGLAnimation } from './webgl/WebGLAnimation.js';
@@ -1427,7 +1427,7 @@ function WebGLRenderer( parameters ) {
 
 
 				materialProperties.shader = {
 				materialProperties.shader = {
 					name: material.type,
 					name: material.type,
-					uniforms: UniformsUtils.clone( shader.uniforms ),
+					uniforms: cloneUniforms( shader.uniforms ),
 					vertexShader: shader.vertexShader,
 					vertexShader: shader.vertexShader,
 					fragmentShader: shader.fragmentShader
 					fragmentShader: shader.fragmentShader
 				};
 				};

+ 14 - 14
src/renderers/shaders/ShaderLib.js

@@ -1,5 +1,5 @@
 import { ShaderChunk } from './ShaderChunk.js';
 import { ShaderChunk } from './ShaderChunk.js';
-import { UniformsUtils } from './UniformsUtils.js';
+import { mergeUniforms } from './UniformsUtils.js';
 import { Vector3 } from '../../math/Vector3.js';
 import { Vector3 } from '../../math/Vector3.js';
 import { UniformsLib } from './UniformsLib.js';
 import { UniformsLib } from './UniformsLib.js';
 import { Color } from '../../math/Color.js';
 import { Color } from '../../math/Color.js';
@@ -15,7 +15,7 @@ var ShaderLib = {
 
 
 	basic: {
 	basic: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.specularmap,
 			UniformsLib.specularmap,
 			UniformsLib.envmap,
 			UniformsLib.envmap,
@@ -31,7 +31,7 @@ var ShaderLib = {
 
 
 	lambert: {
 	lambert: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.specularmap,
 			UniformsLib.specularmap,
 			UniformsLib.envmap,
 			UniformsLib.envmap,
@@ -52,7 +52,7 @@ var ShaderLib = {
 
 
 	phong: {
 	phong: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.specularmap,
 			UniformsLib.specularmap,
 			UniformsLib.envmap,
 			UniformsLib.envmap,
@@ -79,7 +79,7 @@ var ShaderLib = {
 
 
 	standard: {
 	standard: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.envmap,
 			UniformsLib.envmap,
 			UniformsLib.aomap,
 			UniformsLib.aomap,
@@ -107,7 +107,7 @@ var ShaderLib = {
 
 
 	matcap: {
 	matcap: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.bumpmap,
 			UniformsLib.bumpmap,
 			UniformsLib.normalmap,
 			UniformsLib.normalmap,
@@ -125,7 +125,7 @@ var ShaderLib = {
 
 
 	points: {
 	points: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.points,
 			UniformsLib.points,
 			UniformsLib.fog
 			UniformsLib.fog
 		] ),
 		] ),
@@ -137,7 +137,7 @@ var ShaderLib = {
 
 
 	dashed: {
 	dashed: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.fog,
 			UniformsLib.fog,
 			{
 			{
@@ -154,7 +154,7 @@ var ShaderLib = {
 
 
 	depth: {
 	depth: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.displacementmap
 			UniformsLib.displacementmap
 		] ),
 		] ),
@@ -166,7 +166,7 @@ var ShaderLib = {
 
 
 	normal: {
 	normal: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.bumpmap,
 			UniformsLib.bumpmap,
 			UniformsLib.normalmap,
 			UniformsLib.normalmap,
@@ -183,7 +183,7 @@ var ShaderLib = {
 
 
 	sprite: {
 	sprite: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.sprite,
 			UniformsLib.sprite,
 			UniformsLib.fog
 			UniformsLib.fog
 		] ),
 		] ),
@@ -234,7 +234,7 @@ var ShaderLib = {
 
 
 	distanceRGBA: {
 	distanceRGBA: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.common,
 			UniformsLib.common,
 			UniformsLib.displacementmap,
 			UniformsLib.displacementmap,
 			{
 			{
@@ -251,7 +251,7 @@ var ShaderLib = {
 
 
 	shadow: {
 	shadow: {
 
 
-		uniforms: UniformsUtils.merge( [
+		uniforms: mergeUniforms( [
 			UniformsLib.lights,
 			UniformsLib.lights,
 			UniformsLib.fog,
 			UniformsLib.fog,
 			{
 			{
@@ -269,7 +269,7 @@ var ShaderLib = {
 
 
 ShaderLib.physical = {
 ShaderLib.physical = {
 
 
-	uniforms: UniformsUtils.merge( [
+	uniforms: mergeUniforms( [
 		ShaderLib.standard.uniforms,
 		ShaderLib.standard.uniforms,
 		{
 		{
 			clearCoat: { value: 0 },
 			clearCoat: { value: 0 },

+ 32 - 33
src/renderers/shaders/UniformsUtils.js

@@ -2,66 +2,65 @@
  * Uniform Utilities
  * Uniform Utilities
  */
  */
 
 
-var UniformsUtils = {
+export function cloneUniforms( src ) {
 
 
-	merge: function ( uniforms ) {
+	var dst = {};
 
 
-		var merged = {};
+	for ( var u in src ) {
 
 
-		for ( var u = 0; u < uniforms.length; u ++ ) {
+		dst[ u ] = {};
 
 
-			var tmp = this.clone( uniforms[ u ] );
+		for ( var p in src[ u ] ) {
 
 
-			for ( var p in tmp ) {
+			var property = src[ u ][ p ];
 
 
-				merged[ p ] = tmp[ p ];
+			if ( property && ( property.isColor ||
+				property.isMatrix3 || property.isMatrix4 ||
+				property.isVector2 || property.isVector3 || property.isVector4 ||
+				property.isTexture ) ) {
 
 
-			}
-
-		}
+				dst[ u ][ p ] = property.clone();
 
 
-		return merged;
+			} else if ( Array.isArray( property ) ) {
 
 
-	},
+				dst[ u ][ p ] = property.slice();
 
 
-	clone: function ( uniforms_src ) {
+			} else {
 
 
-		var uniforms_dst = {};
+				dst[ u ][ p ] = property;
 
 
-		for ( var u in uniforms_src ) {
-
-			uniforms_dst[ u ] = {};
+			}
 
 
-			for ( var p in uniforms_src[ u ] ) {
+		}
 
 
-				var parameter_src = uniforms_src[ u ][ p ];
+	}
 
 
-				if ( parameter_src && ( parameter_src.isColor ||
-					parameter_src.isMatrix3 || parameter_src.isMatrix4 ||
-					parameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||
-					parameter_src.isTexture ) ) {
+	return dst;
 
 
-					uniforms_dst[ u ][ p ] = parameter_src.clone();
+}
 
 
-				} else if ( Array.isArray( parameter_src ) ) {
+export function mergeUniforms( uniforms ) {
 
 
-					uniforms_dst[ u ][ p ] = parameter_src.slice();
+	var merged = {};
 
 
-				} else {
+	for ( var u = 0; u < uniforms.length; u ++ ) {
 
 
-					uniforms_dst[ u ][ p ] = parameter_src;
+		var tmp = cloneUniforms( uniforms[ u ] );
 
 
-				}
+		for ( var p in tmp ) {
 
 
-			}
+			merged[ p ] = tmp[ p ];
 
 
 		}
 		}
 
 
-		return uniforms_dst;
-
 	}
 	}
 
 
-};
+	return merged;
+
+}
+
+// Legacy
 
 
+var UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };
 
 
 export { UniformsUtils };
 export { UniformsUtils };

+ 3 - 3
src/renderers/webgl/WebGLBackground.js

@@ -9,7 +9,7 @@ import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
 import { Color } from '../../math/Color.js';
 import { Color } from '../../math/Color.js';
 import { Mesh } from '../../objects/Mesh.js';
 import { Mesh } from '../../objects/Mesh.js';
 import { ShaderLib } from '../shaders/ShaderLib.js';
 import { ShaderLib } from '../shaders/ShaderLib.js';
-import { UniformsUtils } from '../shaders/UniformsUtils.js';
+import { cloneUniforms } from '../shaders/UniformsUtils.js';
 
 
 function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 
 
@@ -48,7 +48,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 					new BoxBufferGeometry( 1, 1, 1 ),
 					new BoxBufferGeometry( 1, 1, 1 ),
 					new ShaderMaterial( {
 					new ShaderMaterial( {
 						type: 'BackgroundCubeMaterial',
 						type: 'BackgroundCubeMaterial',
-						uniforms: UniformsUtils.clone( ShaderLib.cube.uniforms ),
+						uniforms: cloneUniforms( ShaderLib.cube.uniforms ),
 						vertexShader: ShaderLib.cube.vertexShader,
 						vertexShader: ShaderLib.cube.vertexShader,
 						fragmentShader: ShaderLib.cube.fragmentShader,
 						fragmentShader: ShaderLib.cube.fragmentShader,
 						side: BackSide,
 						side: BackSide,
@@ -96,7 +96,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 					new PlaneBufferGeometry( 2, 2 ),
 					new PlaneBufferGeometry( 2, 2 ),
 					new ShaderMaterial( {
 					new ShaderMaterial( {
 						type: 'BackgroundMaterial',
 						type: 'BackgroundMaterial',
-						uniforms: UniformsUtils.clone( ShaderLib.background.uniforms ),
+						uniforms: cloneUniforms( ShaderLib.background.uniforms ),
 						vertexShader: ShaderLib.background.vertexShader,
 						vertexShader: ShaderLib.background.vertexShader,
 						fragmentShader: ShaderLib.background.fragmentShader,
 						fragmentShader: ShaderLib.background.fragmentShader,
 						side: FrontSide,
 						side: FrontSide,