Browse Source

simplify light factories.

Ben Houston 9 years ago
parent
commit
c290352133

+ 16 - 4
src/renderers/shaders/ShaderChunk/lights.glsl

@@ -10,11 +10,14 @@ uniform vec3 ambientLightColor;
 
 	uniform DirectionalLight directionalLights[ MAX_DIR_LIGHTS ];
 
-	void getDirectionalDirectLight( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) { 
+	IncidentLight getDirectionalDirectLight( const in DirectionalLight directionalLight, const in GeometricContext geometry ) { 
+
+		IncidentLight directLight;
 	
 		directLight.color = directionalLight.color;
 		directLight.direction = directionalLight.direction; 
 
+		return directLight;
 	}
 
 #endif
@@ -31,8 +34,10 @@ uniform vec3 ambientLightColor;
 
 	uniform PointLight pointLights[ MAX_POINT_LIGHTS ];
 
-	void getPointDirectLight( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) { 
+	IncidentLight getPointDirectLight( const in PointLight pointLight, const in GeometricContext geometry ) { 
 	
+		IncidentLight directLight;
+
 		vec3 lightPosition = pointLight.position; 
 	
 		vec3 lVector = lightPosition - geometry.position; 
@@ -41,6 +46,7 @@ uniform vec3 ambientLightColor;
 		directLight.color = pointLight.color; 
 		directLight.color *= calcLightAttenuation( length( lVector ), pointLight.distance, pointLight.decay ); 
 	
+		return directLight;
 	}
 
 #endif
@@ -60,8 +66,10 @@ uniform vec3 ambientLightColor;
 
 	uniform SpotLight spotLights[ MAX_SPOT_LIGHTS ];
 
-	void getSpotDirectLight( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {
+	IncidentLight getSpotDirectLight( const in SpotLight spotLight, const in GeometricContext geometry ) {
 	
+		IncidentLight directLight;
+
 		vec3 lightPosition = spotLight.position;
 	
 		vec3 lVector = lightPosition - geometry.position;
@@ -73,6 +81,7 @@ uniform vec3 ambientLightColor;
 		directLight.color = spotLight.color;
 		directLight.color *= ( spotEffect * calcLightAttenuation( length( lVector ), spotLight.distance, spotLight.decay ) );
 
+		return directLight;
 	}
 
 #endif
@@ -88,14 +97,17 @@ uniform vec3 ambientLightColor;
 
 	uniform HemisphereLight hemisphereLights[ MAX_HEMI_LIGHTS ];
 
-	void getHemisphereIndirectLight( const in HemisphereLight hemiLight, const in GeometricContext geometry, out IncidentLight indirectLight ) { 
+	IncidentLight getHemisphereIndirectLight( const in HemisphereLight hemiLight, const in GeometricContext geometry ) { 
 	
+		IncidentLight directLight;
+
 		float dotNL = dot( geometry.normal, hemiLight.direction );
 		float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
 
 		indirectLight.color = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
 		indirectLight.direction = geometry.normal;
 
+		return indirectLight;
 	}
 
 #endif

+ 4 - 12
src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl

@@ -10,9 +10,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
 
-		IncidentLight directLight;
-
-		getPointDirectLight( pointLights[ i ], geometry, directLight );
+		IncidentLight directLight = getPointDirectLight( pointLights[ i ], geometry );
 
 		BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
 
@@ -30,9 +28,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
 
-		IncidentLight directLight;
-
-		getSpotDirectLight( spotLights[ i ], geometry, directLight );
+		IncidentLight directLight = getSpotDirectLight( spotLights[ i ], geometry );
 
 		BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
 
@@ -50,9 +46,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
 
-		IncidentLight directLight;
-
-		getDirectionalDirectLight( directionalLights[ i ], geometry, directLight );
+		IncidentLight directLight = getDirectionalDirectLight( directionalLights[ i ], geometry );
 
 		BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
 
@@ -70,9 +64,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
 
 	for ( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
 
-		IncidentLight indirectLight;
-
-		getHemisphereIndirectLight( hemisphereLights[ i ], geometry, indirectLight );
+		IncidentLight indirectLight = getHemisphereIndirectLight( hemisphereLights[ i ], geometry );
 
 		BRDF_Lambert( indirectLight, geometry, diffuse, frontReflectedLight );
 

+ 4 - 12
src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl

@@ -25,9 +25,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
 
-		IncidentLight directLight;
-
-		getPointDirectLight( pointLights[ i ], geometry, directLight );
+		IncidentLight directLight = getPointDirectLight( pointLights[ i ], geometry );
 
 		BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
 		//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
@@ -42,9 +40,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
 
-		IncidentLight directLight;
-
-		getSpotDirectLight( spotLights[ i ], geometry, directLight );
+		IncidentLight directLight = getSpotDirectLight( spotLights[ i ], geometry );
 
 		BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
 		//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
@@ -59,9 +55,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
 
-		IncidentLight directLight;
-
-		getDirectionalDirectLight( directionalLights[ i ], geometry, directLight );
+		IncidentLight directLight = getDirectionalDirectLight( directionalLights[ i ], geometry );
 
 		BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
 		//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
@@ -76,9 +70,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
 
 	for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
 
-		IncidentLight indirectLight;
-
-		getHemisphereIndirectLight( hemisphereLights[ i ], geometry, indirectLight );
+		IncidentLight indirectLight = getHemisphereIndirectLight( hemisphereLights[ i ], geometry );
 
 		BRDF_Lambert( indirectLight, geometry, diffuse, indirectReflectedLight );
 		//BRDF_OrenNayar( indirectLight, geometry, diffuse, 0.5, indirectReflectedLight );