[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37776] branches/soc-2011-cucumber/source: Distance, att1, att2, spot size, and spot blending are now all dynamic.
Daniel Stokes
kupomail at gmail.com
Fri Jun 24 01:18:50 CEST 2011
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
More information about the Bf-blender-cvs
mailing list