Revision: 37776
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37776
Author:   kupoman
Date:     2011-06-23 23:18:49 +0000 (Thu, 23 Jun 2011)
Log Message:
-----------
Distance, att1, att2, spot size, and spot blending are now all dynamic.

Modified Paths:
--------------
    branches/soc-2011-cucumber/source/blender/gpu/GPU_material.h
    branches/soc-2011-cucumber/source/blender/gpu/intern/gpu_material.c
    branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_Light.cpp

Modified: branches/soc-2011-cucumber/source/blender/gpu/GPU_material.h
===================================================================
--- branches/soc-2011-cucumber/source/blender/gpu/GPU_material.h        
2011-06-23 22:44:24 UTC (rev 37775)
+++ branches/soc-2011-cucumber/source/blender/gpu/GPU_material.h        
2011-06-23 23:18:49 UTC (rev 37776)
@@ -164,6 +164,8 @@
 
 void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[][4]);
 void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float 
energy);
+void GPU_lamp_update_distance(GPULamp *lamp, float distance, float att1, float 
att2);
+void GPU_lamp_update_spot(GPULamp *lamp, float spotsize, float spotblend);
 int GPU_lamp_shadow_layer(GPULamp *lamp);
 
 #ifdef __cplusplus

Modified: branches/soc-2011-cucumber/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/soc-2011-cucumber/source/blender/gpu/intern/gpu_material.c 
2011-06-23 22:44:24 UTC (rev 37775)
+++ branches/soc-2011-cucumber/source/blender/gpu/intern/gpu_material.c 
2011-06-23 23:18:49 UTC (rev 37776)
@@ -74,7 +74,7 @@
        DYN_LAMP_CO = 1,
        DYN_LAMP_VEC = 2,
        DYN_LAMP_IMAT = 4,
-       DYN_LAMP_PERSMAT = 8,
+       DYN_LAMP_PERSMAT = 8
 } DynMatProperty;
 
 struct GPUMaterial {
@@ -119,6 +119,7 @@
        float dynimat[4][4];
 
        float spotsi, spotbl, k;
+       float dyndist, dynatt1, dynatt2;
        float dist, att1, att2;
 
        float bias, d, clipend;
@@ -401,13 +402,13 @@
                        case LA_FALLOFF_CONSTANT:
                                break;
                        case LA_FALLOFF_INVLINEAR:
-                               GPU_link(mat, "lamp_falloff_invlinear", 
GPU_uniform(&lamp->dist), *dist, &visifac);
+                               GPU_link(mat, "lamp_falloff_invlinear", 
GPU_dynamic_uniform(&lamp->dist), *dist, &visifac);
                                break;
                        case LA_FALLOFF_INVSQUARE:
-                               GPU_link(mat, "lamp_falloff_invsquare", 
GPU_uniform(&lamp->dist), *dist, &visifac);
+                               GPU_link(mat, "lamp_falloff_invsquare", 
GPU_dynamic_uniform(&lamp->dist), *dist, &visifac);
                                break;
                        case LA_FALLOFF_SLIDERS:
-                               GPU_link(mat, "lamp_falloff_sliders", 
GPU_uniform(&lamp->dist), GPU_uniform(&lamp->att1), GPU_uniform(&lamp->att2), 
*dist, &visifac);
+                               GPU_link(mat, "lamp_falloff_sliders", 
GPU_dynamic_uniform(&lamp->dist), GPU_dynamic_uniform(&lamp->att1), 
GPU_dynamic_uniform(&lamp->att2), *dist, &visifac);
                                break;
                        case LA_FALLOFF_CURVE:
                                {
@@ -415,13 +416,13 @@
                                        int size;
 
                                        
curvemapping_table_RGBA(lamp->curfalloff, &array, &size);
-                                       GPU_link(mat, "lamp_falloff_curve", 
GPU_uniform(&lamp->dist), GPU_texture(size, array), *dist, &visifac);
+                                       GPU_link(mat, "lamp_falloff_curve", 
GPU_dynamic_uniform(&lamp->dist), GPU_texture(size, array), *dist, &visifac);
                                }
                                break;
                }
 
                if(lamp->mode & LA_SPHERE)
-                       GPU_link(mat, "lamp_visibility_sphere", 
GPU_uniform(&lamp->dist), *dist, visifac, &visifac);
+                       GPU_link(mat, "lamp_visibility_sphere", 
GPU_dynamic_uniform(&lamp->dist), *dist, visifac, &visifac);
 
                if(lamp->type == LA_SPOT) {
                        if(lamp->mode & LA_SQUARE) {
@@ -433,7 +434,7 @@
                                GPU_link(mat, "lamp_visibility_spot_circle", 
GPU_dynamic_uniform(lamp->dynvec), *lv, &inpr);
                        }
                        
-                       GPU_link(mat, "lamp_visibility_spot", 
GPU_uniform(&lamp->spotsi), GPU_uniform(&lamp->spotbl), inpr, visifac, 
&visifac);
+                       GPU_link(mat, "lamp_visibility_spot", 
GPU_dynamic_uniform(&lamp->spotsi), GPU_dynamic_uniform(&lamp->spotbl), inpr, 
visifac, &visifac);
                }
 
                GPU_link(mat, "lamp_visibility_clamp", visifac, &visifac);
@@ -1465,6 +1466,19 @@
        lamp->col[2]= b* lamp->energy;
 }
 
+void GPU_lamp_update_distance(GPULamp *lamp, float distance, float att1, float 
att2)
+{
+       lamp->dist = distance;
+       lamp->att1 = att1;
+       lamp->att2 = att2;
+}
+
+void GPU_lamp_update_spot(GPULamp *lamp, float spotsize, float spotblend)
+{
+       lamp->spotsi= cos(M_PI*spotsize/360.0);
+       lamp->spotbl= (1.0f - lamp->spotsi)*spotblend;
+}
+
 static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp 
*la, GPULamp *lamp)
 {
        float temp, angle, pixsize, wsize;

Modified: branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_Light.cpp
===================================================================
--- branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_Light.cpp    
2011-06-23 22:44:24 UTC (rev 37775)
+++ branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_Light.cpp    
2011-06-23 23:18:49 UTC (rev 37776)
@@ -231,6 +231,8 @@
                GPU_lamp_update(lamp, m_lightobj.m_layer, 0, obmat);
                GPU_lamp_update_colors(lamp, m_lightobj.m_red, 
m_lightobj.m_green, 
                        m_lightobj.m_blue, m_lightobj.m_energy);
+               GPU_lamp_update_distance(lamp, m_lightobj.m_distance, 
m_lightobj.m_att1, m_lightobj.m_att2);
+               GPU_lamp_update_spot(lamp, m_lightobj.m_spotsize, 
m_lightobj.m_spotblend);
        }
 }
 
@@ -346,7 +348,7 @@
 
        m_blenderlight_count = 0;
 
-       //GPU_materials_free();
+       GPU_materials_free();
 }
 
 #ifdef WITH_PYTHON

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to