BGE #18732: Python Light options don't work with GLSL materials. Commited patch from dfelinto and moguri, thanks for the good work.
This commit is contained in:
@@ -159,6 +159,7 @@ void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize
|
||||
void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
|
||||
|
||||
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);
|
||||
int GPU_lamp_shadow_layer(GPULamp *lamp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1306,6 +1306,18 @@ void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4])
|
||||
Mat4Invert(lamp->imat, mat);
|
||||
}
|
||||
|
||||
void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy)
|
||||
{
|
||||
lamp->la->energy = energy;
|
||||
lamp->la->r = r;
|
||||
lamp->la->g = g;
|
||||
lamp->la->b = 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;
|
||||
}
|
||||
|
||||
static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *la, GPULamp *lamp)
|
||||
{
|
||||
float temp, angle, pixsize, wsize;
|
||||
|
||||
@@ -3152,12 +3152,14 @@ typedef struct View3DShadow{
|
||||
static void gpu_render_lamp_update(View3D *v3d, Object *ob, Object *par, float obmat[][4], ListBase *shadows)
|
||||
{
|
||||
GPULamp *lamp;
|
||||
Lamp *la = (Lamp*)ob->data;
|
||||
View3DShadow *shadow;
|
||||
|
||||
lamp = GPU_lamp_from_blender(G.scene, ob, par);
|
||||
|
||||
if(lamp) {
|
||||
GPU_lamp_update(lamp, ob->lay, obmat);
|
||||
GPU_lamp_update_colors(lamp, la->r, la->g, la->b, la->energy);
|
||||
|
||||
if((ob->lay & v3d->lay) && GPU_lamp_has_shadow_buffer(lamp)) {
|
||||
shadow= MEM_callocN(sizeof(View3DShadow), "View3DShadow");
|
||||
|
||||
@@ -61,6 +61,11 @@ 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;
|
||||
};
|
||||
|
||||
|
||||
@@ -71,6 +76,8 @@ 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);
|
||||
@@ -114,6 +121,8 @@ void KX_LightObject::Update()
|
||||
obmat[i][j] = (float)*dobmat;
|
||||
|
||||
GPU_lamp_update(lamp, m_lightobj.m_layer, obmat);
|
||||
GPU_lamp_update_colors(lamp, m_lightobj.m_red, m_lightobj.m_green,
|
||||
m_lightobj.m_blue, m_lightobj.m_energy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ 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;
|
||||
|
||||
Reference in New Issue
Block a user