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) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to