[Bf-blender-cvs] [a1bb117] openvdb: Cycles, OpenVDBManager: split routines into separate functions.
Kévin Dietrich
noreply at git.blender.org
Fri Jun 5 14:07:05 CEST 2015
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();
More information about the Bf-blender-cvs
mailing list