[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