Invert Color Cycles Node
as with the HSV node the OSL code is relying on the (yet to be implemented) autorename. Also the svm code could use mix (svm_lerp) instead: 32 . float3 color_inv = make_float3(1.0f, 1.0f, 1.0f) - color; 35 . . stack_store_float3(stack, out_color, svm_lerp(color_inv, color, factor)); I have a feeling that each node 'program' should have the least program as possible. I'll see with Brecht later. But overall I don't know if that's any fast. And apart from that I think we will need this kind of function to move to a library if multiple functions linked in are not a problem.
This commit is contained in:
@@ -1566,6 +1566,34 @@ void MixClosureNode::compile(OSLCompiler& compiler)
|
||||
compiler.add(this, "node_mix_closure");
|
||||
}
|
||||
|
||||
/* Invert */
|
||||
|
||||
InvertNode::InvertNode()
|
||||
: ShaderNode("invert")
|
||||
{
|
||||
add_input("Fac", SHADER_SOCKET_FLOAT, 1.0f);
|
||||
add_input("Color", SHADER_SOCKET_COLOR);
|
||||
add_output("Color", SHADER_SOCKET_COLOR);
|
||||
}
|
||||
|
||||
void InvertNode::compile(SVMCompiler& compiler)
|
||||
{
|
||||
ShaderInput *fac_in = input("Fac");
|
||||
ShaderInput *color_in = input("Color");
|
||||
ShaderOutput *color_out = output("Color");
|
||||
|
||||
compiler.stack_assign(fac_in);
|
||||
compiler.stack_assign(color_in);
|
||||
compiler.stack_assign(color_out);
|
||||
|
||||
compiler.add_node(NODE_INVERT, fac_in->stack_offset, color_in->stack_offset, color_out->stack_offset);
|
||||
}
|
||||
|
||||
void InvertNode::compile(OSLCompiler& compiler)
|
||||
{
|
||||
compiler.add(this, "node_invert");
|
||||
}
|
||||
|
||||
/* Mix */
|
||||
|
||||
MixNode::MixNode()
|
||||
|
Reference in New Issue
Block a user