Browse Source

(did this before the core profile specification update so may be unnecessary): shift surface class method on out to a global with an inout to modify a passed one.

Brian Roberts 6 years ago
parent
commit
0842e4e4f5
1 changed files with 11 additions and 12 deletions
  1. 11 12
      Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl

+ 11 - 12
Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl

@@ -108,20 +108,19 @@ struct Surface
 	vec3 albedo;			// diffuse light absorbtion value (rgb)
 	vec3 R;				// reflection vector
 	vec3 F;				// fresnel term computed from f0, N and V
-	void Update();
 };
 
-void Surface::Update()
+void updateSurface(inout Surface surface)
 {
-	NdotV = abs(dot(N, V)) + 1e-5f; // avoid artifact
+	surface.NdotV = abs(dot(surface.N, surface.V)) + 1e-5f; // avoid artifact
 
-	albedo = baseColor.rgb * (1.0 - metalness);
-	f0 = lerp(vec3(0.04), baseColor.rgb, metalness);
-	R = -reflect(V, N);
-	float f90 = saturate(50.0 * dot(f0, vec3(0.33,0.33,0.33)));
-	F = F_Schlick(f0, f90, NdotV);
+	surface.albedo = surface.baseColor.rgb * (1.0 - surface.metalness);
+	surface.f0 = lerp(vec3(0.04), surface.baseColor.rgb, surface.metalness);
+	surface.R = -reflect(surface.V, surface.N);
+	float f90 = saturate(50.0 * dot(surface.f0, vec3(0.33,0.33,0.33)));
+	surface.F = F_Schlick(surface.f0, f90, surface.NdotV);
 }
-	
+
 Surface createSurface(vec4 normDepth, sampler2D colorBuffer, sampler2D matInfoBuffer, in vec2 uv, in vec3 wsEyePos, in vec3 wsEyeRay, in mat4 invView)
 {
 	Surface surface;// = Surface();
@@ -139,7 +138,7 @@ Surface createSurface(vec4 normDepth, sampler2D colorBuffer, sampler2D matInfoBu
 	surface.metalness = gbuffer2.a;
 	surface.ao = gbuffer2.g;
 	surface.matFlag = gbuffer2.r;
-	surface.Update();
+    updateSurface(surface);
 	return surface;
 }
 
@@ -159,7 +158,7 @@ Surface createForwardSurface(vec4 baseColor, vec4 normal, vec4 pbrProperties, in
   surface.ao = pbrProperties.g;
   surface.matFlag = pbrProperties.r;
 
-	surface.Update();
+    updateSurface(surface);
 	return surface;
 }
 
@@ -439,4 +438,4 @@ vec4 computeForwardProbes(Surface surface,
 
    finalColor = vec4(irradiance.rgb,1);
    return finalColor;
-}
+}