[Bf-blender-cvs] [b82b176] openvdb: Move node socket creation to the C-code.

Kévin Dietrich noreply at git.blender.org
Fri Jun 5 14:08:42 CEST 2015


Commit: b82b176f9b617949194ad66bde1ca895f8742058
Author: Kévin Dietrich
Date:   Mon Jun 1 15:05:14 2015 +0200
Branches: openvdb
https://developer.blender.org/rBb82b176f9b617949194ad66bde1ca895f8742058

Move node socket creation to the C-code.

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

M	intern/openvdb/CMakeLists.txt
M	intern/openvdb/openvdb_capi.cpp
M	intern/openvdb/openvdb_capi.h
M	source/blender/nodes/shader/nodes/node_shader_openvdb.c

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

diff --git a/intern/openvdb/CMakeLists.txt b/intern/openvdb/CMakeLists.txt
index 3f38574..61b5dc1 100644
--- a/intern/openvdb/CMakeLists.txt
+++ b/intern/openvdb/CMakeLists.txt
@@ -26,11 +26,6 @@
 set(INC
 	.
 	intern
-	../guardedalloc
-	../../source/blender/blenkernel
-	../../source/blender/blenlib
-	../../source/blender/makesdna
-	../../source/blender/makesrna
 )
 
 set(INC_SYS
diff --git a/intern/openvdb/openvdb_capi.cpp b/intern/openvdb/openvdb_capi.cpp
index 6b7f306..3120487 100644
--- a/intern/openvdb/openvdb_capi.cpp
+++ b/intern/openvdb/openvdb_capi.cpp
@@ -23,14 +23,6 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-extern "C" {
-#include "DNA_node_types.h"
-
-#include "BKE_node.h"
-
-#include "BLI_listbase.h"
-}
-
 #include "openvdb_capi.h"
 #include "openvdb_dense_convert.h"
 #include "openvdb_util.h"
@@ -42,7 +34,10 @@ int OpenVDB_getVersionHex()
     return OPENVDB_LIBRARY_VERSION;
 }
 
-void OpenVDB_getNodeSockets(const char *filename, bNodeTree *ntree, bNode *node)
+void OpenVDB_get_grid_names_and_types(const char *filename,
+                                      char **grid_names,
+                                      char **grid_types,
+                                      int *num_grids)
 {
 	int ret = OPENVDB_NO_ERROR;
 	initialize();
@@ -53,23 +48,12 @@ void OpenVDB_getNodeSockets(const char *filename, bNodeTree *ntree, bNode *node)
 
 		GridPtrVecPtr grids = file.getGrids();
 
-		for (size_t i = 0; i < grids->size(); ++i) {
-			GridBase::ConstPtr grid = (*grids)[i];
-			int type;
-
-			if (grid->valueType() == "float") {
-				type = SOCK_FLOAT;
-			}
-			else if (grid->valueType() == "vec3s") {
-				type = SOCK_VECTOR;
-			}
-			else {
-				continue;
-			}
+		*num_grids = grids->size();
 
-			const char *name = grid->getName().c_str();
-
-			nodeAddStaticSocket(ntree, node, SOCK_OUT, type, PROP_NONE, NULL, name);
+		for (size_t i = 0; i < *num_grids; ++i) {
+			GridBase::ConstPtr grid = (*grids)[i];
+			grid_names[i] = strdup(grid->getName().c_str());
+			grid_types[i] = strdup(grid->valueType().c_str());
 		}
 	}
 	catch (...) {
diff --git a/intern/openvdb/openvdb_capi.h b/intern/openvdb/openvdb_capi.h
index 62e43e9..570c68c 100644
--- a/intern/openvdb/openvdb_capi.h
+++ b/intern/openvdb/openvdb_capi.h
@@ -37,7 +37,7 @@ struct OpenVDBWriter;
 
 int OpenVDB_getVersionHex(void);
 
-void OpenVDB_getNodeSockets(const char *filename, struct bNodeTree *ntree, struct bNode *node);
+void OpenVDB_get_grid_names_and_types(const char *filename, char **grid_names, char **grid_types, int *num_grids);
 
 enum {
 	OPENVDB_NO_ERROR      = 0,
diff --git a/source/blender/nodes/shader/nodes/node_shader_openvdb.c b/source/blender/nodes/shader/nodes/node_shader_openvdb.c
index 6ca35f6..eeaec03 100644
--- a/source/blender/nodes/shader/nodes/node_shader_openvdb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_openvdb.c
@@ -29,6 +29,8 @@
 
 #include "openvdb_capi.h"
 
+#define MAX_GRIDS 32
+
 static bNodeSocketTemplate sh_node_openvdb_in[] = {
     {SOCK_VECTOR, 1, N_("Vector"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
     {-1, 0, ""}
@@ -54,14 +56,12 @@ static bNodeSocket *node_output_relink(bNode *node, bNodeSocket *oldsock, int ol
 }
 
 #ifdef WITH_OPENVDB
-void ntreeUpdateOpenVDBNode(Main *bmain, bNodeTree *ntree, bNode *node)
+static void node_openvdb_get_sockets(Main *bmain, bNodeTree *ntree, bNode *node)
 {
 	NodeShaderOpenVDB *vdb = node->storage;
-	bNodeSocket *newsock, *oldsock;
-	ListBase oldsocklist;
-	bNodeLink *link;
-	int oldindex;
+	char *grid_names[MAX_GRIDS], *grid_types[MAX_GRIDS];
 	char *filename;
+	int i, num_grids;
 
 	if (!vdb) {
 		return;
@@ -73,10 +73,36 @@ void ntreeUpdateOpenVDBNode(Main *bmain, bNodeTree *ntree, bNode *node)
 		BLI_path_abs(filename, bmain->name);
 	}
 
+	OpenVDB_get_grid_names_and_types(filename, grid_names, grid_types, &num_grids);
+
+	for (i = 0; i < num_grids; i++) {
+		int type;
+
+		if (STREQ(grid_types[i], "float")) {
+			type = SOCK_FLOAT;
+		}
+		else if (STREQ(grid_types[i], "vec3s")) {
+			type = SOCK_VECTOR;
+		}
+		else {
+			continue;
+		}
+
+		nodeAddStaticSocket(ntree, node, SOCK_OUT, type, PROP_NONE, NULL, grid_names[i]);
+	}
+}
+
+void ntreeUpdateOpenVDBNode(Main *bmain, bNodeTree *ntree, bNode *node)
+{
+	bNodeSocket *newsock, *oldsock;
+	ListBase oldsocklist;
+	bNodeLink *link;
+	int oldindex;
+
 	oldsocklist = node->outputs;
 	BLI_listbase_clear(&node->outputs);
 
-	OpenVDB_getNodeSockets(filename, ntree, node);
+	node_openvdb_get_sockets(bmain, ntree, node);
 
 	/* move links to new socket */
 	for (oldsock = oldsocklist.first, oldindex = 0; oldsock; oldsock = oldsock->next, ++oldindex) {




More information about the Bf-blender-cvs mailing list