forked from bartvdbraak/blender
Fix T43250, lamp node did not use energy when used with nodes in blender
internal. Similar to fix for T42074 we need to multiply with energy -after- texture application.
This commit is contained in:
parent
2d86f58e0f
commit
332cf291e4
@ -270,7 +270,7 @@ void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float ener
|
||||
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);
|
||||
GPUNodeLink *GPU_lamp_get_data(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **col, GPUNodeLink **lv, GPUNodeLink **dist, GPUNodeLink **shadow);
|
||||
GPUNodeLink *GPU_lamp_get_data(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **col, GPUNodeLink **lv, GPUNodeLink **dist, GPUNodeLink **shadow, GPUNodeLink **energy);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -2096,13 +2096,14 @@ int GPU_lamp_shadow_layer(GPULamp *lamp)
|
||||
return -1;
|
||||
}
|
||||
|
||||
GPUNodeLink *GPU_lamp_get_data(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **col, GPUNodeLink **lv, GPUNodeLink **dist, GPUNodeLink **shadow)
|
||||
GPUNodeLink *GPU_lamp_get_data(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **col, GPUNodeLink **lv, GPUNodeLink **dist, GPUNodeLink **shadow, GPUNodeLink **energy)
|
||||
{
|
||||
GPUNodeLink *visifac;
|
||||
|
||||
*col = GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob);
|
||||
*energy = GPU_dynamic_uniform(&lamp->dynenergy, GPU_DYNAMIC_LAMP_DYNENERGY, lamp->ob);
|
||||
visifac = lamp_get_visibility(mat, lamp, lv, dist);
|
||||
/* looks like it's not used? psy-fi */
|
||||
|
||||
shade_light_textures(mat, lamp, col);
|
||||
|
||||
if (GPU_lamp_has_shadow_buffer(lamp)) {
|
||||
|
@ -169,9 +169,9 @@ void camera(vec3 co, out vec3 outview, out float outdepth, out float outdist)
|
||||
outview = normalize(co);
|
||||
}
|
||||
|
||||
void lamp(vec4 col, vec3 lv, float dist, vec3 shadow, float visifac, out vec4 outcol, out vec3 outlv, out float outdist, out vec4 outshadow, out float outvisifac)
|
||||
void lamp(vec4 col, float energy, vec3 lv, float dist, vec3 shadow, float visifac, out vec4 outcol, out vec3 outlv, out float outdist, out vec4 outshadow, out float outvisifac)
|
||||
{
|
||||
outcol = col;
|
||||
outcol = col * energy;
|
||||
outlv = lv;
|
||||
outdist = dist;
|
||||
outshadow = vec4(shadow, 1.0);
|
||||
|
@ -62,11 +62,11 @@ static int gpu_shader_lamp(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
|
||||
{
|
||||
if (node->id) {
|
||||
GPULamp *lamp = GPU_lamp_from_blender(GPU_material_scene(mat), (Object *)node->id, NULL);
|
||||
GPUNodeLink *col, *lv, *dist, *visifac, *shadow;
|
||||
GPUNodeLink *col, *lv, *dist, *visifac, *shadow, *energy;
|
||||
|
||||
visifac = GPU_lamp_get_data(mat, lamp, &col, &lv, &dist, &shadow);
|
||||
visifac = GPU_lamp_get_data(mat, lamp, &col, &lv, &dist, &shadow, &energy);
|
||||
|
||||
return GPU_stack_link(mat, "lamp", in, out, col, lv, dist, shadow, visifac);
|
||||
return GPU_stack_link(mat, "lamp", in, out, col, energy, lv, dist, shadow, visifac);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user