Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2012-11-07 01:36:44 +0400
committerDalai Felinto <dfelinto@gmail.com>2012-11-07 01:36:44 +0400
commit0890c2a4a021e7d5951abb0a7ebe138ed24ae28a (patch)
treeb6891b8a0b4d39b960a6556a214d5341cfee4097 /intern/cycles/blender
parentd68981158b843d2b7c47d6e2e94e64d807dda569 (diff)
support for string parameters in OSL nodes
for now subtype is not defined, but once we start parsing the metadata we can set texture inputs as FILEPATH also, it takes relative strings and convert to absolute for all strings (which is arguably a good solution, but should work for now)
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/blender_python.cpp10
-rw-r--r--intern/cycles/blender/blender_shader.cpp17
2 files changed, 22 insertions, 5 deletions
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index c047805c6ae..3b78651a6a1 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -217,6 +217,7 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
float default_float4[4] = {0.0f, 0.0f, 0.0f, 1.0f};
float default_float = 0.0f;
int default_int = 0;
+ std::string default_string = "";
if(param->isclosure) {
socket_type = BL::NodeSocket::type_SHADER;
@@ -252,6 +253,11 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
if(param->validdefault)
default_float = param->fdefault[0];
}
+ else if(param->type.basetype == TypeDesc::STRING) {
+ socket_type = BL::NodeSocket::type_STRING;
+ if(param->validdefault)
+ default_string = param->sdefault[0];
+ }
}
else
continue;
@@ -286,6 +292,10 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
BL::NodeSocketVectorNone b_vector_sock(b_sock.ptr);
b_vector_sock.default_value(default_float4);
}
+ else if(socket_type == BL::NodeSocket::type_STRING) {
+ BL::NodeSocketStringNone b_string_sock(b_sock.ptr);
+ b_string_sock.default_value(default_string);
+ }
}
used_sockets.insert(b_sock.ptr.data);
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 6dc0bbdb90e..63cf719d010 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -90,6 +90,8 @@ static ShaderSocketType convert_socket_type(BL::NodeSocket::type_enum b_type)
return SHADER_SOCKET_COLOR;
case BL::NodeSocket::type_SHADER:
return SHADER_SOCKET_CLOSURE;
+ case BL::NodeSocket::type_STRING:
+ return SHADER_SOCKET_STRING;
case BL::NodeSocket::type_BOOLEAN:
case BL::NodeSocket::type_MESH:
@@ -98,7 +100,7 @@ static ShaderSocketType convert_socket_type(BL::NodeSocket::type_enum b_type)
}
}
-static void set_default_value(ShaderInput *input, BL::NodeSocket sock)
+static void set_default_value(ShaderInput *input, BL::NodeSocket sock, BL::BlendData b_data, BL::ID b_id)
{
/* copy values for non linked inputs */
switch(input->type) {
@@ -124,6 +126,11 @@ static void set_default_value(ShaderInput *input, BL::NodeSocket sock)
input->set(get_float3(vec_sock.default_value()));
break;
}
+ case SHADER_SOCKET_STRING: {
+ BL::NodeSocketStringNone string_sock(sock);
+ input->set((ustring)blender_absolute_path(b_data, b_id, string_sock.default_value()));
+ break;
+ }
case SHADER_SOCKET_CLOSURE:
break;
}
@@ -457,7 +464,7 @@ static ShaderNode *add_node(Scene *scene, BL::BlendData b_data, BL::Scene b_scen
for (b_script_node.inputs.begin(b_input); b_input != b_script_node.inputs.end(); ++b_input) {
script_node->input_names.push_back(ustring(b_input->name()));
ShaderInput *input = script_node->add_input(script_node->input_names.back().c_str(), convert_socket_type(b_input->type()));
- set_default_value(input, *b_input);
+ set_default_value(input, *b_input, b_data, b_ntree);
}
BL::Node::outputs_iterator b_output;
@@ -726,7 +733,7 @@ static void add_nodes(Scene *scene, BL::BlendData b_data, BL::Scene b_scene, Sha
group_sockmap[b_input->group_socket().ptr.data] = SocketPair(proxy, proxy->outputs[0]->name);
/* default input values of the group node */
- set_default_value(proxy->inputs[0], *b_input);
+ set_default_value(proxy->inputs[0], *b_input, b_data, b_group_ntree);
}
for(b_node->outputs.begin(b_output); b_output != b_node->outputs.end(); ++b_output) {
@@ -740,7 +747,7 @@ static void add_nodes(Scene *scene, BL::BlendData b_data, BL::Scene b_scene, Sha
group_sockmap[b_output->group_socket().ptr.data] = SocketPair(proxy, proxy->inputs[0]->name);
/* default input values of internal, unlinked group outputs */
- set_default_value(proxy->inputs[0], b_output->group_socket());
+ set_default_value(proxy->inputs[0], b_output->group_socket(), b_data, b_group_ntree);
}
add_nodes(scene, b_data, b_scene, graph, b_group_ntree, group_sockmap);
@@ -760,7 +767,7 @@ static void add_nodes(Scene *scene, BL::BlendData b_data, BL::Scene b_scene, Sha
assert(input);
/* copy values for non linked inputs */
- set_default_value(input, *b_input);
+ set_default_value(input, *b_input, b_data, b_ntree);
}
}
}