[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49911] branches/ge_harmony/source: Adding back support for material diffuse color, diffuse intensity, and inverse squared attenuation.

Daniel Stokes kupomail at gmail.com
Wed Aug 15 09:44:36 CEST 2012


Revision: 49911
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49911
Author:   kupoman
Date:     2012-08-15 07:44:35 +0000 (Wed, 15 Aug 2012)
Log Message:
-----------
Adding back support for material diffuse color, diffuse intensity, and inverse squared attenuation.

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

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_material.c	2012-08-15 05:33:57 UTC (rev 49910)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_material.c	2012-08-15 07:44:35 UTC (rev 49911)
@@ -1026,13 +1026,15 @@
 {
 	Material *ma= shi->mat;
 	GPUMaterial *mat= shi->gpumat;
-	GPUNodeLink *mdata;
+	GPUNodeLink *is, *spec, *lcol, *rgb;
 
 	
 
-	GPU_link(mat, "light_map_read", GPU_dynamic_texture(light_map, GPU_DYNAMIC_SAMPLER_2DIMAGE, ma), &mdata);
-	GPU_link(mat, "set_value", mdata, &shr->diff);
+	GPU_link(mat, "light_map_read", GPU_dynamic_texture(light_map, GPU_DYNAMIC_SAMPLER_2DIMAGE, ma), &is, &spec, &lcol);
 
+	GPU_link(mat, "shade_mul_value", shi->refl, lcol, &rgb);
+	add_to_diffuse(mat, ma, shi, is, rgb, &shr->diff);
+
 }
 
 static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr)
@@ -1042,7 +1044,7 @@
 	Scene *sce_iter;
 	GPULamp *lamp;
 
-	if (light_map) {
+	if (light_map && shi->mat->alpha >= 1.0) {
 		shade_map_light(shi, shr);
 		return;
 	}

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	2012-08-15 05:33:57 UTC (rev 49910)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2012-08-15 07:44:35 UTC (rev 49911)
@@ -1,6 +1,7 @@
 struct Light {
 	float energy;
 	vec3 color;
+	float dist;
 	vec3 position;
 };
 
@@ -14,11 +15,13 @@
 	vec3 N = texture2D(prepass1, gl_TexCoord[0].st).rgb;
 	vec3 V = texture2D(prepass2, gl_TexCoord[0].st).rgb;
 	vec3 L = light.position - V;
+	float dist = length(L);
 	L = normalize(L);
 	
+	float attenuation = light.dist/(light.dist + dist*dist);
+	
 	float lambert = max(dot(N, L), 0.0);
-	
-	vec3 diff = light.color * light.energy * lambert;
+	vec3 diff = light.color * light.energy * lambert * attenuation;
 
 	gl_FragData[0] = vec4(diff, 1);
 }

Modified: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl	2012-08-15 05:33:57 UTC (rev 49910)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl	2012-08-15 07:44:35 UTC (rev 49911)
@@ -1382,9 +1382,13 @@
 }
 
 /******* MATERIAL *********/
-void light_map_read(sampler2D map, out vec4 data)
+void light_map_read(sampler2D map, out float is, out float spec, out vec3 rgb)
 {
-	data = texelFetch(map, ivec2(gl_FragCoord.xy), 0);
+	vec4 data = texelFetch(map, ivec2(gl_FragCoord.xy), 0);
+	
+	rgb = data.rgb;
+	is = length(rgb);
+	spec = data.a;
 }
 
 void lamp_visibility_sun_hemi(vec3 lampvec, out vec3 lv, out float dist, out float visifac)

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2012-08-15 05:33:57 UTC (rev 49910)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2012-08-15 07:44:35 UTC (rev 49911)
@@ -1470,6 +1470,9 @@
 	bind = GPU_shader_get_uniform(m_light_shader, "light.color");
 	GPU_shader_uniform_vector(m_light_shader, bind, 3, 1, color);
 
+	bind = GPU_shader_get_uniform(m_light_shader, "light.dist");
+	GPU_shader_uniform_vector(m_light_shader, bind, 1, 1, &light->m_distance);
+
 	MT_Vector4 pos = MT_Vector4(light->m_position);
 	pos = m_viewmatrix * pos;
 	float fpos[4];




More information about the Bf-blender-cvs mailing list