Cycles: fix for ColorRamp node alpha output.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user