Cycles: fix for ColorRamp node alpha output.

This commit is contained in:
2012-03-26 13:21:43 +00:00
parent d27a1a9acd
commit 53dab9ec69
2 changed files with 12 additions and 3 deletions

View File

@@ -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;
}

View File

@@ -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);
}