[Bf-blender-cvs] [ec51175] master: Code refactor: add generic Cycles node infrastructure.
Brecht Van Lommel
noreply at git.blender.org
Sun May 22 18:16:11 CEST 2016
Commit: ec51175f1fd6c91d53b0d24daccfd5cc9bddf59d
Author: Brecht Van Lommel
Date: Sat May 7 19:47:37 2016 +0200
Branches: master
https://developer.blender.org/rBec51175f1fd6c91d53b0d24daccfd5cc9bddf59d
Code refactor: add generic Cycles node infrastructure.
Differential Revision: https://developer.blender.org/D2016
===================================================================
M build_files/cmake/macros.cmake
M intern/cycles/CMakeLists.txt
M intern/cycles/app/CMakeLists.txt
M intern/cycles/blender/CMakeLists.txt
M intern/cycles/bvh/CMakeLists.txt
M intern/cycles/device/CMakeLists.txt
A intern/cycles/graph/CMakeLists.txt
A intern/cycles/graph/node.cpp
A intern/cycles/graph/node.h
A intern/cycles/graph/node_enum.h
A intern/cycles/graph/node_type.cpp
A intern/cycles/graph/node_type.h
M intern/cycles/kernel/osl/CMakeLists.txt
M intern/cycles/kernel/svm/svm_types.h
M intern/cycles/render/CMakeLists.txt
M intern/cycles/render/nodes.cpp
M intern/cycles/render/svm.cpp
M intern/cycles/render/svm.h
M intern/cycles/subd/CMakeLists.txt
M intern/cycles/util/util_vector.h
===================================================================
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 08d26e5..f14c954 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -487,6 +487,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
if(WITH_CYCLES)
list(APPEND BLENDER_LINK_LIBS
cycles_render
+ cycles_graph
cycles_bvh
cycles_device
cycles_kernel
@@ -600,6 +601,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
bf_intern_dualcon
bf_intern_cycles
cycles_render
+ cycles_graph
cycles_bvh
cycles_device
cycles_kernel
diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt
index efc36f0..3b410b2 100644
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@ -237,6 +237,7 @@ endif()
add_subdirectory(bvh)
add_subdirectory(device)
add_subdirectory(doc)
+add_subdirectory(graph)
add_subdirectory(kernel)
add_subdirectory(render)
add_subdirectory(subd)
diff --git a/intern/cycles/app/CMakeLists.txt b/intern/cycles/app/CMakeLists.txt
index d40a1a1..73dbf16 100644
--- a/intern/cycles/app/CMakeLists.txt
+++ b/intern/cycles/app/CMakeLists.txt
@@ -1,13 +1,14 @@
set(INC
.
+ ../bvh
../device
+ ../graph
../kernel
../kernel/svm
- ../bvh
- ../util
../render
../subd
+ ../util
)
set(INC_SYS
)
@@ -20,6 +21,7 @@ set(LIBRARIES
cycles_render
cycles_bvh
cycles_subd
+ cycles_graph
cycles_util
${BLENDER_GL_LIBRARIES}
${CYCLES_APP_GLEW_LIBRARY}
diff --git a/intern/cycles/blender/CMakeLists.txt b/intern/cycles/blender/CMakeLists.txt
index a8cc490..a79deca 100644
--- a/intern/cycles/blender/CMakeLists.txt
+++ b/intern/cycles/blender/CMakeLists.txt
@@ -1,5 +1,6 @@
set(INC
+ ../graph
../render
../device
../kernel
diff --git a/intern/cycles/bvh/CMakeLists.txt b/intern/cycles/bvh/CMakeLists.txt
index cbbd23f..5729fa6 100644
--- a/intern/cycles/bvh/CMakeLists.txt
+++ b/intern/cycles/bvh/CMakeLists.txt
@@ -1,6 +1,7 @@
set(INC
.
+ ../graph
../kernel
../kernel/svm
../render
diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt
index 2a9ec0c..c34677e 100644
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@ -1,6 +1,7 @@
set(INC
.
+ ../graph
../kernel
../kernel/svm
../kernel/osl
diff --git a/intern/cycles/graph/CMakeLists.txt b/intern/cycles/graph/CMakeLists.txt
new file mode 100644
index 0000000..401bdb4
--- /dev/null
+++ b/intern/cycles/graph/CMakeLists.txt
@@ -0,0 +1,22 @@
+
+set(INC
+ .
+ ../util
+)
+
+set(SRC
+ node.cpp
+ node_type.cpp
+)
+
+set(SRC_HEADERS
+ node.h
+ node_enum.h
+ node_type.h
+)
+
+include_directories(${INC})
+include_directories(SYSTEM ${INC_SYS})
+
+add_library(cycles_graph ${SRC} ${SRC_HEADERS})
+
diff --git a/intern/cycles/graph/node.cpp b/intern/cycles/graph/node.cpp
new file mode 100644
index 0000000..d9a6bde
--- /dev/null
+++ b/intern/cycles/graph/node.cpp
@@ -0,0 +1,354 @@
+/*
+ * Copyright 2011-2016 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "node.h"
+#include "node_type.h"
+
+#include "util_foreach.h"
+#include "util_param.h"
+#include "util_transform.h"
+
+CCL_NAMESPACE_BEGIN
+
+/* Node Type */
+
+Node::Node(const NodeType *type_, ustring name_)
+: name(name_), type(type_)
+{
+ assert(type);
+
+ /* assign non-empty name, convenient for debugging */
+ if(name.empty()) {
+ name = type->name;
+ }
+
+ /* initialize default values */
+ typedef unordered_map<ustring, SocketType, ustringHash> map_type;
+ foreach(const map_type::value_type& it, type->inputs) {
+ const SocketType& socket = it.second;
+ const void *src = socket.default_value;
+ void *dst = ((char*)this) + socket.struct_offset;
+ memcpy(dst, src, socket.size());
+ }
+}
+
+Node::~Node()
+{
+}
+
+template<typename T>
+static T& get_socket_value(const Node *node, const SocketType& socket)
+{
+ return (T&)*(((char*)node) + socket.struct_offset);
+}
+
+static bool is_socket_float3(const SocketType& socket)
+{
+ return socket.type == SocketType::COLOR ||
+ socket.type == SocketType::POINT ||
+ socket.type == SocketType::VECTOR ||
+ socket.type == SocketType::NORMAL;
+}
+
+static bool is_socket_array_float3(const SocketType& socket)
+{
+ return socket.type == SocketType::COLOR_ARRAY ||
+ socket.type == SocketType::POINT_ARRAY ||
+ socket.type == SocketType::VECTOR_ARRAY ||
+ socket.type == SocketType::NORMAL_ARRAY;
+}
+
+/* set values */
+void Node::set(const SocketType& input, bool value)
+{
+ assert(input.type == SocketType::BOOLEAN);
+ get_socket_value<bool>(this, input) = value;
+}
+
+void Node::set(const SocketType& input, int value)
+{
+ assert((input.type == SocketType::INT || input.type == SocketType::ENUM));
+ get_socket_value<int>(this, input) = value;
+}
+
+void Node::set(const SocketType& input, float value)
+{
+ assert(input.type == SocketType::FLOAT);
+ get_socket_value<float>(this, input) = value;
+}
+
+void Node::set(const SocketType& input, float2 value)
+{
+ assert(input.type == SocketType::FLOAT);
+ get_socket_value<float2>(this, input) = value;
+}
+
+void Node::set(const SocketType& input, float3 value)
+{
+ assert(is_socket_float3(input));
+ get_socket_value<float3>(this, input) = value;
+}
+
+void Node::set(const SocketType& input, ustring value)
+{
+ if(input.type == SocketType::STRING) {
+ get_socket_value<ustring>(this, input) = value;
+ }
+ else if(input.type == SocketType::ENUM) {
+ const NodeEnum& enm = *input.enum_values;
+ if(enm.exists(value)) {
+ get_socket_value<int>(this, input) = enm[value];
+ }
+ else {
+ assert(0);
+ }
+ }
+ else {
+ assert(0);
+ }
+}
+
+void Node::set(const SocketType& input, const Transform& value)
+{
+ assert(input.type == SocketType::TRANSFORM);
+ get_socket_value<Transform>(this, input) = value;
+}
+
+void Node::set(const SocketType& input, Node *value)
+{
+ assert(input.type == SocketType::TRANSFORM);
+ get_socket_value<Node*>(this, input) = value;
+}
+
+/* set array values */
+void Node::set(const SocketType& input, array<bool>& value)
+{
+ assert(input.type == SocketType::BOOLEAN_ARRAY);
+ get_socket_value<array<bool> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<int>& value)
+{
+ assert(input.type == SocketType::INT_ARRAY);
+ get_socket_value<array<int> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<float>& value)
+{
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ get_socket_value<array<float> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<float2>& value)
+{
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ get_socket_value<array<float2> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<float3>& value)
+{
+ assert(is_socket_array_float3(input));
+ get_socket_value<array<float3> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<ustring>& value)
+{
+ assert(input.type == SocketType::STRING_ARRAY);
+ get_socket_value<array<ustring> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<Transform>& value)
+{
+ assert(input.type == SocketType::TRANSFORM_ARRAY);
+ get_socket_value<array<Transform> >(this, input).steal_data(value);
+}
+
+void Node::set(const SocketType& input, array<Node*>& value)
+{
+ assert(input.type == SocketType::TRANSFORM_ARRAY);
+ get_socket_value<array<Node*> >(this, input).steal_data(value);
+}
+
+/* get values */
+bool Node::get_bool(const SocketType& input) const
+{
+ assert(input.type == SocketType::BOOLEAN);
+ return get_socket_value<bool>(this, input);
+}
+
+int Node::get_int(const SocketType& input) const
+{
+ assert(input.type == SocketType::INT || input.type == SocketType::ENUM);
+ return get_socket_value<int>(this, input);
+}
+
+float Node::get_float(const SocketType& input) const
+{
+ assert(input.type == SocketType::FLOAT);
+ return get_socket_value<float>(this, input);
+}
+
+float2 Node::get_float2(const SocketType& input) const
+{
+ assert(input.type == SocketType::FLOAT);
+ return get_socket_value<float2>(this, input);
+}
+
+float3 Node::get_float3(const SocketType& input) const
+{
+ assert(is_socket_float3(input));
+ return get_socket_value<float3>(this, input);
+}
+
+ustring Node::get_string(const SocketType& input) const
+{
+ if(input.type == SocketType::STRING) {
+ return get_socket_value<ustring>(this, input);
+ }
+ else if(input.type == SocketType::ENUM) {
+ const NodeEnum& enm = *input.enum_values;
+ int intvalue = get_socket_value<int>(this, input);
+ return (enm.exists(intvalue)) ? enm[intvalue] : ustring();
+ }
+ else {
+ assert(0);
+ return ustring();
+ }
+}
+
+Transform Node::get_transform(const SocketType& input) const
+{
+ assert(input.type == SocketType::TRANSFORM);
+ return get_socket_value<Transform>(this, input);
+}
+
+Node *Node::get_node(const SocketType& input) const
+{
+ assert(input.type == SocketType::NODE);
+ return get_socket_value<Node*>(this, input);
+}
+
+/* get array values */
+const array<bool>& Node::get_bool_array(const SocketType& input) const
+{
+ assert(input.type == SocketType::BOOLEAN_ARRAY);
+ return get_socket_value<array<bool> >(this, input);
+}
+
+const array<int>& Node::get_int_array(const SocketType& input) const
+{
+ assert(input.type == SocketType::INT_ARRAY);
+ return get_socket_value<array<int> >(this, input);
+}
+
+const array<float>& Node::get_float_array(const SocketType& input) const
+{
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ return get_socket_value<array<float> >(this, input);
+}
+
+const array<float2>& Node::get_float2_array(const SocketType& input) const
+{
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ return get_socket_val
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list