Fix for: energy IPO not supported in glsl mode (reported in the forum).
authorDalai Felinto <dfelinto@gmail.com>
Fri, 22 May 2009 06:12:18 +0000 (06:12 +0000)
committerDalai Felinto <dfelinto@gmail.com>
Fri, 22 May 2009 06:12:18 +0000 (06:12 +0000)
in fact I redid part of the last "fix", making it working properly now.

Before we were changing Lamp->la . This is the Blender Lamp, we shouldn't touch it.
So this part of the code is correct now.

Things that could be tackled:
- color attribute is returning negative values when NEGATIVE is toggled
- objects with no material (default gray one) still don't support lamp spots (not spot lamp but the spot of the lamps)

source/blender/gpu/intern/gpu_material.c
source/gameengine/Ketsji/KX_Light.cpp
source/gameengine/Ketsji/KX_Light.h

index 93604e7652768d0e900ed94e882166058e3097e9..818b67170c7c0980e4e0aa1745fb87f0f8d74ded 100644 (file)
@@ -1308,14 +1308,12 @@ void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4])
 
 void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy)
 {
-       lamp->la->energy = energy;
-       lamp->la->r = fabs(r);
-       lamp->la->g = fabs(g);
-       lamp->la->b = fabs(b);
-
-       lamp->col[0]= lamp->la->r*lamp->energy;
-       lamp->col[1]= lamp->la->g*lamp->energy;
-       lamp->col[2]= lamp->la->b*lamp->energy;
+       lamp->energy = energy;
+       if(lamp->mode & LA_NEG) lamp->energy= -lamp->energy;
+
+       lamp->col[0]= r* lamp->energy;
+       lamp->col[1]= g* lamp->energy;
+       lamp->col[2]= b* lamp->energy;
 }
 
 static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *la, GPULamp *lamp)
index 1496f34c5f257b31b15809a79eabe0ad6f7a0e93..fe575384a35acb76f4b4042755b7f71150313232 100644 (file)
@@ -61,11 +61,6 @@ KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,
        m_rendertools->AddLight(&m_lightobj);
        m_glsl = glsl;
        m_blenderscene = ((KX_Scene*)sgReplicationInfo)->GetBlenderScene();
-
-       m_initialvalues[0] = lightobj.m_red;
-       m_initialvalues[1] = lightobj.m_green;
-       m_initialvalues[2] = lightobj.m_blue;
-       m_initialvalues[3] = lightobj.m_energy;
 };
 
 
@@ -76,8 +71,6 @@ KX_LightObject::~KX_LightObject()
        if((lamp = GetGPULamp())) {
                float obmat[4][4] = {{0}};
                GPU_lamp_update(lamp, 0, obmat);
-               GPU_lamp_update_colors(lamp, m_initialvalues[0], m_initialvalues[1],
-               m_initialvalues[2], m_initialvalues[3]);
        }
 
        m_rendertools->RemoveLight(&m_lightobj);
index 690231ff09049eece800e3ac937004c05f5fafa6..35f25515e3b228c81bd2fc378a2a41b974e99bb7 100644 (file)
@@ -44,7 +44,6 @@ class KX_LightObject : public KX_GameObject
        Py_Header;
 protected:
        RAS_LightObject         m_lightobj;
-       float                           m_initialvalues [4];
        class RAS_IRenderTools* m_rendertools;  //needed for registering and replication of lightobj
        bool                            m_glsl;
        Scene*                          m_blenderscene;