[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