forked from bartvdbraak/blender
Fix #22986: glsl didn't take object hiding into account yet for lamps.
This commit is contained in:
parent
5e5b0cbb26
commit
c0ba0c1171
@ -1798,7 +1798,7 @@ static void gpu_render_lamp_update(Scene *scene, View3D *v3d, Object *ob, Object
|
||||
lamp = GPU_lamp_from_blender(scene, ob, par);
|
||||
|
||||
if(lamp) {
|
||||
GPU_lamp_update(lamp, ob->lay, obmat);
|
||||
GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_VIEW), 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)) {
|
||||
|
@ -158,7 +158,7 @@ int GPU_lamp_has_shadow_buffer(GPULamp *lamp);
|
||||
void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4]);
|
||||
void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
|
||||
|
||||
void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4]);
|
||||
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);
|
||||
int GPU_lamp_shadow_layer(GPULamp *lamp);
|
||||
|
||||
|
@ -103,7 +103,7 @@ struct GPULamp {
|
||||
Object *par;
|
||||
Lamp *la;
|
||||
|
||||
int type, mode, lay;
|
||||
int type, mode, lay, hide;
|
||||
|
||||
float dynenergy, dyncol[3];
|
||||
float energy, col[3];
|
||||
@ -256,7 +256,7 @@ void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double tim
|
||||
for(nlink=material->lamps.first; nlink; nlink=nlink->next) {
|
||||
lamp= nlink->data;
|
||||
|
||||
if((lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))) {
|
||||
if(!lamp->hide && (lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))) {
|
||||
lamp->dynenergy = lamp->energy;
|
||||
VECCOPY(lamp->dyncol, lamp->col);
|
||||
}
|
||||
@ -1310,11 +1310,12 @@ void GPU_materials_free()
|
||||
|
||||
/* Lamps and shadow buffers */
|
||||
|
||||
void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4])
|
||||
void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[][4])
|
||||
{
|
||||
float mat[4][4];
|
||||
|
||||
lamp->lay = lay;
|
||||
lamp->hide = hide;
|
||||
|
||||
copy_m4_m4(mat, obmat);
|
||||
normalize_m4(mat);
|
||||
@ -1355,7 +1356,7 @@ static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *l
|
||||
lamp->col[1]= la->g*lamp->energy;
|
||||
lamp->col[2]= la->b*lamp->energy;
|
||||
|
||||
GPU_lamp_update(lamp, ob->lay, ob->obmat);
|
||||
GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_VIEW), ob->obmat);
|
||||
|
||||
lamp->spotsi= la->spotsize;
|
||||
if(lamp->mode & LA_HALO)
|
||||
|
@ -66,7 +66,7 @@ KX_LightObject::~KX_LightObject()
|
||||
|
||||
if((lamp = GetGPULamp())) {
|
||||
float obmat[4][4] = {{0}};
|
||||
GPU_lamp_update(lamp, 0, obmat);
|
||||
GPU_lamp_update(lamp, 0, 0, obmat);
|
||||
}
|
||||
|
||||
m_rendertools->RemoveLight(&m_lightobj);
|
||||
@ -199,7 +199,7 @@ void KX_LightObject::Update()
|
||||
for(int j=0; j<4; j++, dobmat++)
|
||||
obmat[i][j] = (float)*dobmat;
|
||||
|
||||
GPU_lamp_update(lamp, m_lightobj.m_layer, obmat);
|
||||
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user