Commit: 12109dd18e622a5c469c4fb5b802edfee0d2b2de
Author: Thomas Dinges
Date:   Sun Jan 26 16:22:19 2014 +0100
https://developer.blender.org/rB12109dd18e622a5c469c4fb5b802edfee0d2b2de

Cycles Standalone: Basic support for external OSL shaders.

* Very simple implementation, only allows for 1 output socket. As we haven't 
decided yet whether we keep the XML API, rather not spend more time on this now.

* To use an external osl shader, put the .osl file next to the xml file.
* Parameters: "output" is the output socket name, "output_type" the variable 
type (float, color and closure color are supported).
Example:
<osl_shader name="tex" src="ramp_closure.osl" output="Phong" 
output_type="closure color" />
<connect from="tex Phong" to="output surface" />

===================================================================

M       intern/cycles/app/cycles_xml.cpp

===================================================================

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index 1e41525..ac8d1c1 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -379,6 +379,32 @@ static void xml_read_shader_graph(const XMLReadState& 
state, Shader *shader, pug
 
                        snode = env;
                }
+               else if(string_iequals(node.name(), "osl_shader")) {
+                       OSLScriptNode *osl = new OSLScriptNode();
+
+                       /* Source */
+                       xml_read_string(&osl->filepath, node, "src");
+                       osl->filepath = path_join(state.base, osl->filepath);
+
+                       /* Outputs */
+                       string output = "", output_type = "";
+                       ShaderSocketType type = SHADER_SOCKET_FLOAT;
+
+                       xml_read_string(&output, node, "output");
+                       xml_read_string(&output_type, node, "output_type");
+                       
+                       if(output_type == "float")
+                               type = SHADER_SOCKET_FLOAT;
+                       else if(output_type == "closure color")
+                               type = SHADER_SOCKET_CLOSURE;
+                       else if(output_type == "color")
+                               type = SHADER_SOCKET_COLOR;
+
+                       osl->output_names.push_back(ustring(output));
+                       osl->add_output(osl->output_names.back().c_str(), type);
+                       
+                       snode = osl;
+               }
                else if(string_iequals(node.name(), "sky_texture")) {
                        SkyTextureNode *sky = new SkyTextureNode();

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to