From 53dab9ec69d8a583f458a47d3cdfdae06486ca17 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 26 Mar 2012 13:21:43 +0000 Subject: Cycles: fix for ColorRamp node alpha output. --- intern/cycles/kernel/svm/svm_ramp.h | 6 +++++- intern/cycles/render/nodes.cpp | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'intern') 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); } -- cgit v1.2.3