Commit: 332cf291e4b8b104252f34383193aed2f4c814e0
Author: Antony Riakiotakis
Date:   Tue Jan 27 16:34:27 2015 +0100
Branches: master
https://developer.blender.org/rB332cf291e4b8b104252f34383193aed2f4c814e0

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.

===================================================================

M       source/blender/gpu/GPU_material.h
M       source/blender/gpu/intern/gpu_material.c
M       source/blender/gpu/shaders/gpu_shader_material.glsl
M       source/blender/nodes/shader/nodes/node_shader_lamp.c

===================================================================

diff --git a/source/blender/gpu/GPU_material.h 
b/source/blender/gpu/GPU_material.h
index a65a123..eef07fd 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -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
 }
diff --git a/source/blender/gpu/intern/gpu_material.c 
b/source/blender/gpu/intern/gpu_material.c
index 20f8f5f..4638ad2 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -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)) {
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl 
b/source/blender/gpu/shaders/gpu_shader_material.glsl
index a79bb23..a7bb4fe 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -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);
diff --git a/source/blender/nodes/shader/nodes/node_shader_lamp.c 
b/source/blender/nodes/shader/nodes/node_shader_lamp.c
index adf53ba..3b000d4 100644
--- a/source/blender/nodes/shader/nodes/node_shader_lamp.c
+++ b/source/blender/nodes/shader/nodes/node_shader_lamp.c
@@ -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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to