Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-03-26 17:21:43 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-03-26 17:21:43 +0400
commit53dab9ec69d8a583f458a47d3cdfdae06486ca17 (patch)
treeb32ee9e8ff908556a2bc0643a7705fc16729b309 /intern
parentd27a1a9acd3cc4e64334da9c872f3fe71f80a215 (diff)
Cycles: fix for ColorRamp node alpha output.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/svm/svm_ramp.h6
-rw-r--r--intern/cycles/render/nodes.cpp9
2 files changed, 12 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/svm_ramp.h b/intern/cycles/kernel/svm/svm_ramp.h
index 0654240c21b..55c2b3f6af4 100644
--- a/intern/cycles/kernel/svm/svm_ramp.h
+++ b/intern/cycles/kernel/svm/svm_ramp.h
@@ -40,11 +40,15 @@ __device void svm_node_rgb_ramp(KernelGlobals *kg, ShaderData *sd, float *stack,
{
uint fac_offset = node.y;
uint color_offset = node.z;
+ uint alpha_offset = node.w;
float fac = stack_load_float(stack, fac_offset);
float4 color = rgb_ramp_lookup(kg, *offset, fac);
- stack_store_float3(stack, color_offset, float4_to_float3(color));
+ if(stack_valid(color_offset))
+ stack_store_float3(stack, color_offset, float4_to_float3(color));
+ if(stack_valid(alpha_offset))
+ stack_store_float(stack, alpha_offset, color.w);
*offset += RAMP_TABLE_SIZE;
}
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 45ba18469d6..db696993737 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -2388,17 +2388,22 @@ RGBRampNode::RGBRampNode()
{
add_input("Fac", SHADER_SOCKET_FLOAT);
add_output("Color", SHADER_SOCKET_COLOR);
+ add_output("Alpha", SHADER_SOCKET_FLOAT);
}
void RGBRampNode::compile(SVMCompiler& compiler)
{
ShaderInput *fac_in = input("Fac");
ShaderOutput *color_out = output("Color");
+ ShaderOutput *alpha_out = output("Alpha");
compiler.stack_assign(fac_in);
- compiler.stack_assign(color_out);
+ if(!color_out->links.empty())
+ compiler.stack_assign(color_out);
+ if(!alpha_out->links.empty())
+ compiler.stack_assign(alpha_out);
- compiler.add_node(NODE_RGB_RAMP, fac_in->stack_offset, color_out->stack_offset);
+ compiler.add_node(NODE_RGB_RAMP, fac_in->stack_offset, color_out->stack_offset, alpha_out->stack_offset);
compiler.add_array(ramp, RAMP_TABLE_SIZE);
}