Commit: d0effe8683db05a27325683f3d642c9febae04d2
Author: Kévin Dietrich
Date:   Thu Jun 4 16:34:36 2015 +0200
Branches: openvdb
https://developer.blender.org/rBd0effe8683db05a27325683f3d642c9febae04d2

Add an 'is_color' metadata to set an rgba socket for color grids

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

M       intern/cycles/render/nodes.cpp
M       intern/openvdb/intern/openvdb_dense_convert.cpp
M       intern/openvdb/intern/openvdb_dense_convert.h
M       intern/openvdb/openvdb_capi.cpp
M       intern/openvdb/openvdb_capi.h
M       source/blender/blenkernel/intern/smoke.c
M       source/blender/nodes/shader/nodes/node_shader_openvdb.c

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

diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index be56045..2b02d63 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -4401,7 +4401,7 @@ void OpenVDBNode::compile(SVMCompiler& compiler)
 
                int type = NODE_VDB_FLOAT;
 
-               if(out->type == SHADER_SOCKET_VECTOR) {
+               if(out->type == SHADER_SOCKET_VECTOR || out->type == 
SHADER_SOCKET_COLOR) {
                        type = NODE_VDB_FLOAT3;
                }
 
diff --git a/intern/openvdb/intern/openvdb_dense_convert.cpp 
b/intern/openvdb/intern/openvdb_dense_convert.cpp
index c299679..e7f61df 100644
--- a/intern/openvdb/intern/openvdb_dense_convert.cpp
+++ b/intern/openvdb/intern/openvdb_dense_convert.cpp
@@ -67,7 +67,7 @@ void OpenVDB_export_vector_grid(OpenVDBWriter *writer,
                                 const float *data_x, const float *data_y, 
const float *data_z,
                                 const int res[3],
                                 float fluid_mat[4][4],
-                                VecType vec_type)
+                                VecType vec_type, const bool is_color)
 {
 
        math::CoordBBox bbox(Coord(0), Coord(res[0] - 1, res[1] - 1, res[2] - 
1));
@@ -109,6 +109,7 @@ void OpenVDB_export_vector_grid(OpenVDBWriter *writer,
        vecgrid->setTransform(transform);
        vecgrid->setIsInWorldSpace(false);
        vecgrid->setVectorType(vec_type);
+       vecgrid->insertMeta("is_color", BoolMetadata(is_color));
 
        writer->insert(vecgrid);
 }
diff --git a/intern/openvdb/intern/openvdb_dense_convert.h 
b/intern/openvdb/intern/openvdb_dense_convert.h
index 0006d8b..019c3f1 100644
--- a/intern/openvdb/intern/openvdb_dense_convert.h
+++ b/intern/openvdb/intern/openvdb_dense_convert.h
@@ -102,7 +102,7 @@ void OpenVDB_export_vector_grid(OpenVDBWriter *writer,
                                 const float *data_x, const float *data_y, 
const float *data_z,
                                 const int res[3],
                                 float fluid_mat[4][4],
-                                openvdb::VecType vec_type);
+                                openvdb::VecType vec_type, const bool 
is_color);
 
 
 void OpenVDB_import_grid_vector(OpenVDBReader *reader,
diff --git a/intern/openvdb/openvdb_capi.cpp b/intern/openvdb/openvdb_capi.cpp
index 3120487..b69b481 100644
--- a/intern/openvdb/openvdb_capi.cpp
+++ b/intern/openvdb/openvdb_capi.cpp
@@ -53,7 +53,17 @@ void OpenVDB_get_grid_names_and_types(const char *filename,
                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());
+
+                       /* XXX - this is blender specific, for external files 
it might crash if
+                        * it doens't find a "is_color" metaValue, cases where 
it doens't crash
+                        * are when the vector grids are at the end of the grid 
vector.
+                        */
+                       if (grid->valueType() == "vec3s" && 
grid->metaValue<bool>("is_color")) {
+                               grid_types[i] = strdup("color");
+                       }
+                       else {
+                               grid_types[i] = 
strdup(grid->valueType().c_str());
+                       }
                }
        }
        catch (...) {
@@ -92,11 +102,12 @@ void OpenVDB_export_grid_ch(OpenVDBWriter *writer,
 void OpenVDB_export_grid_vec(struct OpenVDBWriter *writer,
                              const char *name,
                              const float *data_x, const float *data_y, const 
float *data_z,
-                             const int res[3], float matrix[4][4], short 
vec_type)
+                             const int res[3], float matrix[4][4], short 
vec_type, const bool is_color)
 {
        internal::OpenVDB_export_vector_grid(writer, name,
                                             data_x, data_y, data_z, res, 
matrix,
-                                            
static_cast<openvdb::VecType>(vec_type));
+                                            
static_cast<openvdb::VecType>(vec_type),
+                                            is_color);
 }
 
 void OpenVDB_import_grid_fl(OpenVDBReader *reader,
diff --git a/intern/openvdb/openvdb_capi.h b/intern/openvdb/openvdb_capi.h
index 570c68c..8424275 100644
--- a/intern/openvdb/openvdb_capi.h
+++ b/intern/openvdb/openvdb_capi.h
@@ -77,7 +77,7 @@ void OpenVDB_export_grid_ch(struct OpenVDBWriter *writer,
 void OpenVDB_export_grid_vec(struct OpenVDBWriter *writer,
                              const char *name,
                              const float *data_x, const float *data_y, const 
float *data_z,
-                             const int res[3], float matrix[4][4], short 
vec_type);
+                             const int res[3], float matrix[4][4], short 
vec_type, const bool is_color);
 
 void OpenVDB_import_grid_fl(struct OpenVDBReader *reader,
                             const char *name, float **data,
diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index b8cf5aa..0c631de 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -3171,10 +3171,10 @@ static void OpenVDB_export_smoke(SmokeDomainSettings 
*sds, struct OpenVDBWriter
                }
 
                if (fluid_fields & SM_ACTIVE_COLORS) {
-                       OpenVDB_export_grid_vec(writer, "Color", r, g, b, 
sds->res, sds->fluidmat, VEC_INVARIANT);
+                       OpenVDB_export_grid_vec(writer, "Color", r, g, b, 
sds->res, sds->fluidmat, VEC_INVARIANT, true);
                }
 
-               OpenVDB_export_grid_vec(writer, "Velocity", vx, vy, vz, 
sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE);
+               OpenVDB_export_grid_vec(writer, "Velocity", vx, vy, vz, 
sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE, false);
                OpenVDB_export_grid_ch(writer, "Obstacles", obstacles, 
sds->res, sds->fluidmat);
        }
 
@@ -3192,10 +3192,10 @@ static void OpenVDB_export_smoke(SmokeDomainSettings 
*sds, struct OpenVDBWriter
                }
 
                if (fluid_fields & SM_ACTIVE_COLORS) {
-                       OpenVDB_export_grid_vec(writer, "Color High", r, g, b, 
sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT);
+                       OpenVDB_export_grid_vec(writer, "Color High", r, g, b, 
sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT, true);
                }
 
-               OpenVDB_export_grid_vec(writer, "Texture Coordinates", tcu, 
tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT);
+               OpenVDB_export_grid_vec(writer, "Texture Coordinates", tcu, 
tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT, false);
        }
 }
 
diff --git a/source/blender/nodes/shader/nodes/node_shader_openvdb.c 
b/source/blender/nodes/shader/nodes/node_shader_openvdb.c
index 7f32b52..e1e3c21 100644
--- a/source/blender/nodes/shader/nodes/node_shader_openvdb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_openvdb.c
@@ -84,6 +84,9 @@ static void node_openvdb_get_sockets(Main *bmain, bNodeTree 
*ntree, bNode *node)
                else if (STREQ(grid_types[i], "vec3s")) {
                        type = SOCK_VECTOR;
                }
+               else if (STREQ(grid_types[i], "color")) {
+                       type = SOCK_RGBA;
+               }
                else {
                        continue;
                }

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

Reply via email to