[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54643] branches/ge_harmony/source: Changing the light shader to use the bgl naming convention established in the 2D filter system .

Daniel Stokes kupomail at gmail.com
Tue Feb 19 00:52:20 CET 2013


Revision: 54643
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54643
Author:   kupoman
Date:     2013-02-18 23:52:19 +0000 (Mon, 18 Feb 2013)
Log Message:
-----------
Changing the light shader to use the bgl naming convention established in the 2D filter system. This provides a more consistent shader API. Also appending the magic uniform to the bounds uniform to pass in less uniforms, and to get rid of that variable name.

Modified Paths:
--------------
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Modified: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2013-02-18 23:41:28 UTC (rev 54642)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2013-02-18 23:52:19 UTC (rev 54643)
@@ -43,36 +43,29 @@
 
 varying vec3 varposition;
 
-uniform Light light;
+uniform Light bgl_Light;
 
-uniform sampler2D prepass1;
-uniform sampler2D prepass2;
-uniform sampler2D depth_texture;
+uniform sampler2D bgl_PrepassTarget0;
+uniform sampler2D bgl_PrepassTarget1;
+uniform sampler2D bgl_DepthTexture;
 
-uniform vec2 magic;
 // uniform mat4 inv_proj_matrix;
-uniform vec2 bounds;
+uniform vec4 bgl_Bounds;
 
 void main()
 {
 	vec3 L;
 	float attenuation = 1.0;
 	
-	vec2 texcoord = gl_FragCoord.xy/bounds.xy;
-	vec4 gbuffer = texture2D(prepass1, texcoord);
-	vec4 mbuffer = texture2D(prepass2, texcoord);
-	// float depth = gbuffer.b;
+	vec2 texcoord = gl_FragCoord.xy/bgl_Bounds.xy;
+	vec4 gbuffer = texture2D(bgl_PrepassTarget0, texcoord);
+	vec4 mbuffer = texture2D(bgl_PrepassTarget1, texcoord);
 
 	vec3 N = gbuffer.rgb * 2.0 - vec3(1.0, 1.0, 1.0);
-	// vec3 N = vec3(gbuffer.rg, 0.0);
-	// N = 2 * (N - vec3(0.5, 0.5, 0.0));
-	// float z = sqrt(1.0 - pow(length(N.xy), 2.0));
-	// N = vec3(2.0*z*N.x, 2.0*z*N.y, 2.0*z*z -1.0);
-	// N = normalize(N);
 	
-	float depth = texture2D(depth_texture, texcoord).r;
+	float depth = texture2D(bgl_DepthTexture, texcoord).r;
 	vec3 viewray = vec3(varposition.xy/varposition.z, 1.0);
-	depth = magic.y / (depth - magic.x);
+	depth = bgl_Bounds.w / (depth - bgl_Bounds.z);
 	vec3 V = viewray * -depth;
 	
 	// vec3 V;
@@ -87,30 +80,30 @@
 	vec3 view = (gl_ProjectionMatrix[3][3] == 0.0)? normalize(-V): vec3(0.0, 0.0, -1.0);
 	
 	// Light position/orientation and attenuation
-	if (light.type == SUN || light.type == HEMI)
-		L = light.vector;
+	if (bgl_Light.type == SUN || bgl_Light.type == HEMI)
+		L = bgl_Light.vector;
 	else {
-		L = light.position - V;
+		L = bgl_Light.position - V;
 		float dist = length(L);
 		
-		if (light.falloff == INVLINEAR)
-			attenuation = light.dist/(light.dist + dist);
-		else if (light.falloff == INVSQUARE)
-			attenuation = light.dist/(light.dist + dist*dist);
-		else if (light.falloff == SLIDERS) {
-			float distkw = light.dist * light.dist;
-			attenuation = light.dist/(light.dist + light.att[0]*dist);
-			attenuation *= distkw/(distkw + light.att[1]*dist*dist);
+		if (bgl_Light.falloff == INVLINEAR)
+			attenuation = bgl_Light.dist/(bgl_Light.dist + dist);
+		else if (bgl_Light.falloff == INVSQUARE)
+			attenuation = bgl_Light.dist/(bgl_Light.dist + dist*dist);
+		else if (bgl_Light.falloff == SLIDERS) {
+			float distkw = bgl_Light.dist * bgl_Light.dist;
+			attenuation = bgl_Light.dist/(bgl_Light.dist + bgl_Light.att[0]*dist);
+			attenuation *= distkw/(distkw + bgl_Light.att[1]*dist*dist);
 		}
 		
-		attenuation *= max((light.dist - dist), 0.0)/light.dist;
+		attenuation *= max((bgl_Light.dist - dist), 0.0)/bgl_Light.dist;
 	}
 	L = normalize(L);
 	
-	if (light.type == SPOT) {
+	if (bgl_Light.type == SPOT) {
 		float inpr;
-		lamp_visibility_spot_circle(light.vector, L, inpr);
-		lamp_visibility_spot(light.spotsize, light.spotblend, inpr, attenuation, attenuation);
+		lamp_visibility_spot_circle(bgl_Light.vector, L, inpr);
+		lamp_visibility_spot(bgl_Light.spotsize, bgl_Light.spotblend, inpr, attenuation, attenuation);
 	}
 	
 	attenuation = (attenuation < 0.001) ? 0.0 : attenuation;
@@ -128,7 +121,7 @@
 	float diff_param2 = mbuffer.g * 10.0;
 #endif
 	float lambert = max(dot(N, L), 0.0);
-	if (light.type == HEMI)
+	if (bgl_Light.type == HEMI)
 		diff_term = 0.5*lambert + 0.5;
 #ifdef ALL_SHADERS
 	else if (diff_shader == DIFF_LAMBERT)
@@ -152,7 +145,7 @@
 	float spec_param = mbuffer.a * 10.0;
 #endif
 	float spec_term = 0.0;
-	if (light.type == HEMI)
+	if (bgl_Light.type == HEMI)
 		shade_hemi_spec(N, L, view, 1.0, hardness, 1.0, spec_term);
 #ifdef ALL_SHADERS
 	else if (spec_shader == SPEC_PHONG)
@@ -174,9 +167,8 @@
 #endif
 	
 	// Factor in light properties
-	vec3 diff = light.color * light.energy * diff_term * attenuation;
-	float spec = length(light.energy) * spec_term * attenuation;
-	// diff = mix(diff, vec3(0.5, 1.0, 0.0), 0.01);
+	vec3 diff = bgl_Light.color * bgl_Light.energy * diff_term * attenuation;
+	float spec = length(bgl_Light.energy) * spec_term * attenuation;
 	gl_FragData[0] = vec4(diff, spec);
 }
 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-02-18 23:41:28 UTC (rev 54642)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-02-18 23:52:19 UTC (rev 54643)
@@ -1437,38 +1437,40 @@
 
 	glActiveTexture(GL_TEXTURE0);
 	glBindTexture(GL_TEXTURE_2D, m_prepass_target[1]);
-	bind = GPU_shader_get_uniform(m_light_shader, "prepass1");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_PrepassTarget0");
 	glUniform1iARB(bind, 0);
 
 	glActiveTexture(GL_TEXTURE1);
 	glBindTexture(GL_TEXTURE_2D, m_prepass_target[2]);
-	bind = GPU_shader_get_uniform(m_light_shader, "prepass2");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_PrepassTarget1");
 	glUniform1iARB(bind, 1);
 
 	glActiveTexture(GL_TEXTURE3);
 	glBindTexture(GL_TEXTURE_2D, m_prepass_target[3]);
-	bind = GPU_shader_get_uniform(m_light_shader, "prepass3");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_PrepassTarget2");
 	glUniform1iARB(bind, 3);
 
 	glActiveTexture(GL_TEXTURE2);
 	glBindTexture(GL_TEXTURE_2D, m_prepass_target[0]);
-	bind = GPU_shader_get_uniform(m_light_shader, "depth_texture");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_DepthTexture");
 	glUniform1iARB(bind, 2);
 
-	float magic[2];
-	magic[0] = camera->m_clipend / (camera->m_clipend - camera->m_clipstart);
-	magic[1] = (-camera->m_clipend * camera->m_clipstart) / (camera->m_clipend - camera->m_clipstart);
-	bind = GPU_shader_get_uniform(m_light_shader, "magic");
-	GPU_shader_uniform_vector(m_light_shader, bind, 2, 1, magic);
+	//float magic[2];
+	//magic[0] = camera->m_clipend / (camera->m_clipend - camera->m_clipstart);
+	//magic[1] = (-camera->m_clipend * camera->m_clipstart) / (camera->m_clipend - camera->m_clipstart);
+	//bind = GPU_shader_get_uniform(m_light_shader, "magic");
+	//GPU_shader_uniform_vector(m_light_shader, bind, 2, 1, magic);
 
 	float inv_proj_matrix[16];
 	m_projmatrix.inverse().getValue(inv_proj_matrix);
 	bind = GPU_shader_get_uniform(m_light_shader, "inv_proj_matrix");
 	GPU_shader_uniform_vector(m_light_shader, bind, 16, 1, inv_proj_matrix);
 
-	float bounds[2] = {(float)m_width, (float)m_height};
-	bind = GPU_shader_get_uniform(m_light_shader, "bounds");
-	GPU_shader_uniform_vector(m_light_shader, bind, 2, 1, bounds);
+	float bounds[4] = {(float)m_width, (float)m_height, 0.0, 0.0};
+	bounds[2] = camera->m_clipend / (camera->m_clipend - camera->m_clipstart);
+	bounds[3] = (-camera->m_clipend * camera->m_clipstart) / (camera->m_clipend - camera->m_clipstart);
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Bounds");
+	GPU_shader_uniform_vector(m_light_shader, bind, 4, 1, bounds);
 
 	return 1;
 }
@@ -1478,24 +1480,24 @@
 	if (!m_light_shader) return;
 
 	int bind;
-	bind = GPU_shader_get_uniform(m_light_shader, "light.type");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.type");
 	GPU_shader_uniform_ivector(m_light_shader, bind, 1, 1, (int*)(&light->m_type));
 
-	bind = GPU_shader_get_uniform(m_light_shader, "light.falloff");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.falloff");
 	GPU_shader_uniform_ivector(m_light_shader, bind, 1, 1, (int*)(&light->m_falloff));
 
 	float att[2] = {light->m_att1, light->m_att2};
-	bind = GPU_shader_get_uniform(m_light_shader, "light.att");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.att");
 	GPU_shader_uniform_vector(m_light_shader, bind, 2, 1, att);
 
-	bind = GPU_shader_get_uniform(m_light_shader, "light.energy");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.energy");
 	GPU_shader_uniform_vector(m_light_shader, bind, 1, 1, &light->m_energy);
 
 	float color[3] = {light->m_red, light->m_green, light->m_blue};
-	bind = GPU_shader_get_uniform(m_light_shader, "light.color");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.color");
 	GPU_shader_uniform_vector(m_light_shader, bind, 3, 1, color);
 
-	bind = GPU_shader_get_uniform(m_light_shader, "light.dist");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.dist");
 	GPU_shader_uniform_vector(m_light_shader, bind, 1, 1, &light->m_distance);
 
 	MT_Vector4 pos = MT_Vector4(light->m_position);
@@ -1503,7 +1505,7 @@
 	float fpos[4];
 	pos.getValue(fpos);
 
-	bind = GPU_shader_get_uniform(m_light_shader, "light.position");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.position");
 	GPU_shader_uniform_vector(m_light_shader, bind, 3, 1, fpos);
 
 	MT_Vector4 vec = MT_Vector4(light->m_vector[0], light->m_vector[1], light->m_vector[2], 0.0);
@@ -1511,15 +1513,15 @@
 	float fvec[4];
 	vec.getValue(fvec);
 
-	bind = GPU_shader_get_uniform(m_light_shader, "light.vector");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.vector");
 	GPU_shader_uniform_vector(m_light_shader, bind, 3, 1, fvec);
 
 	float spotsi = cosf((float)M_PI * light->m_spotsize/360.0f);
-	bind = GPU_shader_get_uniform(m_light_shader, "light.spotsize");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.spotsize");
 	GPU_shader_uniform_vector(m_light_shader, bind, 1, 1, &spotsi);
 
 	float spotbl = (1.0f - spotsi/2.0f) * light->m_spotblend;
-	bind = GPU_shader_get_uniform(m_light_shader, "light.spotblend");
+	bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.spotblend");
 	GPU_shader_uniform_vector(m_light_shader, bind, 1, 1, &spotbl);
 
 	if (light->m_type == RAS_LightObject::LIGHT_NORMAL) {




More information about the Bf-blender-cvs mailing list