Commit: a1bb117dacf0862c81c9d646bebd1a96d91ba22a
Author: Kévin Dietrich
Date:   Mon May 18 22:11:43 2015 +0200
Branches: openvdb
https://developer.blender.org/rBa1bb117dacf0862c81c9d646bebd1a96d91ba22a

Cycles, OpenVDBManager: split routines into separate functions.

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

M       intern/cycles/render/openvdb.cpp
M       intern/cycles/render/openvdb.h

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

diff --git a/intern/cycles/render/openvdb.cpp b/intern/cycles/render/openvdb.cpp
index 3150c03f..d2972f6 100644
--- a/intern/cycles/render/openvdb.cpp
+++ b/intern/cycles/render/openvdb.cpp
@@ -55,28 +55,37 @@ static inline void catch_exceptions()
        }
 }
 
-void OpenVDBManager::delete_sampler(int grid_type, int sampling, size_t slot)
+int OpenVDBManager::add_volume(const string &filename, const string &name, int 
sampling, int grid_type)
 {
-       if(grid_type == NODE_VDB_FLOAT) {
-               if(sampling == OPENVDB_SAMPLE_POINT) {
-                       delete float_samplers_p[slot];
-                       float_samplers_p[slot] = NULL;
-               }
-               else {
-                       delete float_samplers_b[slot];
-                       float_samplers_b[slot] = NULL;
-               }
+       using namespace openvdb;
+       size_t slot = -1;
+
+       if((slot = find_existing_slot(filename, name, sampling, grid_type)) != 
-1) {
+               return slot;
        }
-       else {
-               if(sampling == OPENVDB_SAMPLE_POINT) {
-                       delete vec3s_samplers_p[slot];
-                       vec3s_samplers_p[slot] = NULL;
+
+       try {
+               io::File file(filename);
+               file.open();
+
+               if(grid_type == NODE_VDB_FLOAT) {
+                       FloatGrid::Ptr grid = 
gridPtrCast<FloatGrid>(file.readGrid(name));
+                       slot = add_scalar_grid(grid, sampling);
                }
-               else {
-                       delete vec3s_samplers_b[slot];
-                       vec3s_samplers_b[slot] = NULL;
+               else if(grid_type == NODE_VDB_VEC3S) {
+                       Vec3SGrid::Ptr grid = 
gridPtrCast<Vec3SGrid>(file.readGrid(name));
+                       slot = add_vector_grid(grid, sampling);
                }
        }
+       catch (...) {
+               catch_exceptions();
+       }
+
+       add_grid_description(filename, name, sampling, slot);
+
+       need_update = true;
+
+       return slot;
 }
 
 int OpenVDBManager::find_existing_slot(const string &filename, const string 
&name, int sampling, int grid_type)
@@ -103,76 +112,92 @@ int OpenVDBManager::find_existing_slot(const string 
&filename, const string &nam
        return -1;
 }
 
-int OpenVDBManager::add_volume(const string &filename, const string &name, int 
sampling, int grid_type)
+void OpenVDBManager::delete_sampler(int grid_type, int sampling, size_t slot)
 {
-       using namespace openvdb;
-       size_t slot = -1;
-
-       if((slot = find_existing_slot(filename, name, sampling, grid_type)) != 
-1) {
-               return slot;
+       if(grid_type == NODE_VDB_FLOAT) {
+               if(sampling == OPENVDB_SAMPLE_POINT) {
+                       delete float_samplers_p[slot];
+                       float_samplers_p[slot] = NULL;
+               }
+               else {
+                       delete float_samplers_b[slot];
+                       float_samplers_b[slot] = NULL;
+               }
        }
+       else {
+               if(sampling == OPENVDB_SAMPLE_POINT) {
+                       delete vec3s_samplers_p[slot];
+                       vec3s_samplers_p[slot] = NULL;
+               }
+               else {
+                       delete vec3s_samplers_b[slot];
+                       vec3s_samplers_b[slot] = NULL;
+               }
+       }
+}
 
-       try {
-               io::File file(filename);
-               file.open();
-
-               if(grid_type == NODE_VDB_FLOAT) {
-                       FloatGrid::Ptr fgrid = 
gridPtrCast<FloatGrid>(file.readGrid(name));
+size_t OpenVDBManager::add_scalar_grid(openvdb::FloatGrid::Ptr grid, int 
sampling)
+{
+       size_t slot = 0;
 
-                       if(sampling == OPENVDB_SAMPLE_POINT) {
-                               vdb_fsampler_p *sampler = new 
vdb_fsampler_p(fgrid->tree(), fgrid->transform());
+       if(sampling == OPENVDB_SAMPLE_POINT) {
+               vdb_fsampler_p *sampler = new vdb_fsampler_p(grid->tree(), 
grid->transform());
 
-                               for(slot = 0; slot < float_samplers_p.size(); 
slot++) {
-                                       if(!float_samplers_p[slot]) {
-                                               break;
-                                       }
-                               }
-                               
float_samplers_p.insert(float_samplers_p.begin() + slot, sampler);
-                       }
-                       else {
-                               vdb_fsampler_b *sampler = new 
vdb_fsampler_b(fgrid->tree(), fgrid->transform());
-
-                               for(slot = 0; slot < float_samplers_b.size(); 
slot++) {
-                                       if(!float_samplers_b[slot]) {
-                                               break;
-                                       }
-                               }
-                               
float_samplers_b.insert(float_samplers_b.begin() + slot, sampler);
+               for(; slot < float_samplers_p.size(); slot++) {
+                       if(!float_samplers_p[slot]) {
+                               break;
                        }
+               }
+               float_samplers_p.insert(float_samplers_p.begin() + slot, 
sampler);
+       }
+       else {
+               vdb_fsampler_b *sampler = new vdb_fsampler_b(grid->tree(), 
grid->transform());
 
-                       scalar_grids.insert(scalar_grids.begin() + slot, fgrid);
+               for(; slot < float_samplers_b.size(); slot++) {
+                       if(!float_samplers_b[slot]) {
+                               break;
+                       }
                }
-               else if(grid_type == NODE_VDB_VEC3S) {
-                       Vec3SGrid::Ptr vgrid = 
gridPtrCast<Vec3SGrid>(file.readGrid(name));
+               float_samplers_b.insert(float_samplers_b.begin() + slot, 
sampler);
+       }
 
-                       if(sampling == OPENVDB_SAMPLE_POINT) {
-                               vdb_vsampler_p *sampler = new 
vdb_vsampler_p(vgrid->tree(), vgrid->transform());
+       scalar_grids.insert(scalar_grids.begin() + slot, grid);
 
-                               for(slot = 0; slot < vec3s_samplers_p.size(); 
slot++) {
-                                       if(!vec3s_samplers_p[slot]) {
-                                               break;
-                                       }
-                               }
-                               
vec3s_samplers_p.insert(vec3s_samplers_p.begin() + slot, sampler);
-                       }
-                       else {
-                               vdb_vsampler_b *sampler = new 
vdb_vsampler_b(vgrid->tree(), vgrid->transform());
-
-                               for(slot = 0; slot < vec3s_samplers_b.size(); 
slot++) {
-                                       if(!vec3s_samplers_b[slot]) {
-                                               break;
-                                       }
-                               }
-                               
vec3s_samplers_b.insert(vec3s_samplers_b.begin() + slot, sampler);
-                       }
+       return slot;
+}
+
+size_t OpenVDBManager::add_vector_grid(openvdb::Vec3SGrid::Ptr grid, int 
sampling)
+{
+       size_t slot = 0;
 
-                       vector_grids.insert(vector_grids.begin() + slot, vgrid);
+       if(sampling == OPENVDB_SAMPLE_POINT) {
+               vdb_vsampler_p *sampler = new vdb_vsampler_p(grid->tree(), 
grid->transform());
+
+               for(; slot < vec3s_samplers_p.size(); slot++) {
+                       if(!vec3s_samplers_p[slot]) {
+                               break;
+                       }
                }
+               vec3s_samplers_p.insert(vec3s_samplers_p.begin() + slot, 
sampler);
        }
-       catch (...) {
-               catch_exceptions();
+       else {
+               vdb_vsampler_b *sampler = new vdb_vsampler_b(grid->tree(), 
grid->transform());
+
+               for(; slot < vec3s_samplers_b.size(); slot++) {
+                       if(!vec3s_samplers_b[slot]) {
+                               break;
+                       }
+               }
+               vec3s_samplers_b.insert(vec3s_samplers_b.begin() + slot, 
sampler);
        }
 
+       vector_grids.insert(vector_grids.begin() + slot, grid);
+
+       return slot;
+}
+
+void OpenVDBManager::add_grid_description(const string &filename, const string 
&name, int sampling, int slot)
+{
        GridDescription descr;
        descr.filename = filename;
        descr.name = name;
@@ -180,10 +205,6 @@ int OpenVDBManager::add_volume(const string &filename, 
const string &name, int s
        descr.slot = slot;
 
        current_grids.push_back(descr);
-
-       need_update = true;
-
-       return slot;
 }
 
 void OpenVDBManager::device_update(Device *device, DeviceScene *dscene, Scene 
*scene, Progress &progress)
diff --git a/intern/cycles/render/openvdb.h b/intern/cycles/render/openvdb.h
index 07c1a0a..946fc46 100644
--- a/intern/cycles/render/openvdb.h
+++ b/intern/cycles/render/openvdb.h
@@ -36,6 +36,11 @@ class OpenVDBManager {
                int slot;
        };
 
+       size_t add_scalar_grid(openvdb::FloatGrid::Ptr grid, int sampling);
+       size_t add_vector_grid(openvdb::Vec3SGrid::Ptr grid, int sampling);
+
+       void add_grid_description(const string &filename, const string &name, 
int sampling, int slot);
+
 public:
        OpenVDBManager();
        ~OpenVDBManager();

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

Reply via email to