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:
Diffstat (limited to 'intern/cycles/blender/blender_python.cpp')
-rw-r--r--intern/cycles/blender/blender_python.cpp93
1 files changed, 57 insertions, 36 deletions
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index a10f3b63033..f7a05463f66 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -207,6 +207,7 @@ static PyObject *available_devices_func(PyObject *self, PyObject *args)
}
#ifdef WITH_OSL
+
static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
{
PyObject *pynodegroup, *pynode;
@@ -248,17 +249,19 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
continue;
/* determine socket type */
- BL::NodeSocket::type_enum socket_type;
- float default_float4[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+ std::string socket_type;
+ BL::NodeSocket::type_enum data_type = BL::NodeSocket::type_VALUE;
+ float4 default_float4 = make_float4(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;
+ socket_type = "NodeSocketShader";
}
else if(param->type.vecsemantics == TypeDesc::COLOR) {
- socket_type = BL::NodeSocket::type_RGBA;
+ socket_type = "NodeSocketColor";
+ data_type = BL::NodeSocket::type_RGBA;
if(param->validdefault) {
default_float4[0] = param->fdefault[0];
@@ -269,7 +272,8 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
else if(param->type.vecsemantics == TypeDesc::POINT ||
param->type.vecsemantics == TypeDesc::VECTOR ||
param->type.vecsemantics == TypeDesc::NORMAL) {
- socket_type = BL::NodeSocket::type_VECTOR;
+ socket_type = "NodeSocketVector";
+ data_type = BL::NodeSocket::type_VECTOR;
if(param->validdefault) {
default_float4[0] = param->fdefault[0];
@@ -279,17 +283,20 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
}
else if(param->type.aggregate == TypeDesc::SCALAR) {
if(param->type.basetype == TypeDesc::INT) {
- socket_type = BL::NodeSocket::type_INT;
+ socket_type = "NodeSocketInt";
+ data_type = BL::NodeSocket::type_INT;
if(param->validdefault)
default_int = param->idefault[0];
}
else if(param->type.basetype == TypeDesc::FLOAT) {
- socket_type = BL::NodeSocket::type_VALUE;
+ socket_type = "NodeSocketFloat";
+ data_type = BL::NodeSocket::type_VALUE;
if(param->validdefault)
default_float = param->fdefault[0];
}
else if(param->type.basetype == TypeDesc::STRING) {
- socket_type = BL::NodeSocket::type_STRING;
+ socket_type = "NodeSocketString";
+ data_type = BL::NodeSocket::type_STRING;
if(param->validdefault)
default_string = param->sdefault[0];
}
@@ -300,38 +307,52 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
continue;
/* find socket socket */
- BL::NodeSocket b_sock = b_node.find_socket(param->name.c_str(), param->isoutput);
-
- /* remove if type no longer matches */
- if(b_sock && b_sock.type() != socket_type) {
- b_node.remove_socket(b_sock);
- b_sock = BL::NodeSocket(PointerRNA_NULL);
+ BL::NodeSocket b_sock(PointerRNA_NULL);
+ if (param->isoutput) {
+ b_sock = b_node.outputs[param->name];
+
+ /* remove if type no longer matches */
+ if(b_sock && b_sock.bl_idname() != socket_type) {
+ b_node.outputs.remove(b_sock);
+ b_sock = BL::NodeSocket(PointerRNA_NULL);
+ }
+
+ if (!b_sock) {
+ /* create new socket */
+ b_sock = b_node.outputs.create(socket_type.c_str(), param->name.c_str(), param->name.c_str());
+ }
+ }
+ else {
+ b_sock = b_node.inputs[param->name];
+
+ /* remove if type no longer matches */
+ if(b_sock && b_sock.bl_idname() != socket_type) {
+ b_node.inputs.remove(b_sock);
+ b_sock = BL::NodeSocket(PointerRNA_NULL);
+ }
+
+ if (!b_sock) {
+ /* create new socket */
+ b_sock = b_node.inputs.create(socket_type.c_str(), param->name.c_str(), param->name.c_str());
+ }
}
- /* create new socket */
- if(!b_sock) {
- b_sock = b_node.add_socket(param->name.c_str(), socket_type, param->isoutput);
-
- /* set default value */
- if(socket_type == BL::NodeSocket::type_VALUE) {
- BL::NodeSocketFloatNone b_float_sock(b_sock.ptr);
- b_float_sock.default_value(default_float);
+ /* set default value */
+ if(b_sock) {
+ if(data_type == BL::NodeSocket::type_VALUE) {
+ set_float(b_sock.ptr, "default_value", default_float);
}
- else if(socket_type == BL::NodeSocket::type_INT) {
- BL::NodeSocketIntNone b_int_sock(b_sock.ptr);
- b_int_sock.default_value(default_int);
+ else if(data_type == BL::NodeSocket::type_INT) {
+ set_int(b_sock.ptr, "default_value", default_int);
}
- else if(socket_type == BL::NodeSocket::type_RGBA) {
- BL::NodeSocketRGBA b_rgba_sock(b_sock.ptr);
- b_rgba_sock.default_value(default_float4);
+ else if(data_type == BL::NodeSocket::type_RGBA) {
+ set_float4(b_sock.ptr, "default_value", default_float4);
}
- else if(socket_type == BL::NodeSocket::type_VECTOR) {
- BL::NodeSocketVectorNone b_vector_sock(b_sock.ptr);
- b_vector_sock.default_value(default_float4);
+ else if(data_type == BL::NodeSocket::type_VECTOR) {
+ set_float3(b_sock.ptr, "default_value", float4_to_float3(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);
+ else if(data_type == BL::NodeSocket::type_STRING) {
+ set_string(b_sock.ptr, "default_value", default_string);
}
}
@@ -349,7 +370,7 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
for (b_node.inputs.begin(b_input); b_input != b_node.inputs.end(); ++b_input) {
if(used_sockets.find(b_input->ptr.data) == used_sockets.end()) {
- b_node.remove_socket(*b_input);
+ b_node.inputs.remove(*b_input);
removed = true;
break;
}
@@ -357,7 +378,7 @@ static PyObject *osl_update_node_func(PyObject *self, PyObject *args)
for (b_node.outputs.begin(b_output); b_output != b_node.outputs.end(); ++b_output) {
if(used_sockets.find(b_output->ptr.data) == used_sockets.end()) {
- b_node.remove_socket(*b_output);
+ b_node.outputs.remove(*b_output);
removed = true;
break;
}