[Bf-blender-cvs] [5431870] openvdb: Removed direct grid lists in VolumeManager, all grids should be in Volumes now.
Lukas Tönne
noreply at git.blender.org
Sun Nov 13 21:44:49 CET 2016
Commit: 54318700dd16a3bab16c796d6aea1d3f6b6c5c01
Author: Lukas Tönne
Date: Sun Nov 13 11:24:51 2016 +0100
Branches: openvdb
https://developer.blender.org/rB54318700dd16a3bab16c796d6aea1d3f6b6c5c01
Removed direct grid lists in VolumeManager, all grids should be in Volumes now.
===================================================================
M intern/cycles/render/volume.cpp
M intern/cycles/render/volume.h
===================================================================
diff --git a/intern/cycles/render/volume.cpp b/intern/cycles/render/volume.cpp
index 34b8c21..e6b4931 100644
--- a/intern/cycles/render/volume.cpp
+++ b/intern/cycles/render/volume.cpp
@@ -33,8 +33,6 @@ VolumeManager::VolumeManager()
#ifdef WITH_OPENVDB
openvdb::initialize();
- scalar_grids.reserve(64);
- vector_grids.reserve(64);
current_grids.reserve(64);
#endif
@@ -54,10 +52,6 @@ VolumeManager::~VolumeManager()
#endif
}
-#ifdef WITH_OPENVDB
- scalar_grids.clear();
- vector_grids.clear();
-#endif
current_grids.clear();
}
@@ -144,14 +138,6 @@ int VolumeManager::find_existing_slot(const string& filename, const string& name
return grid.slot;
}
else {
- /* sampling was changed, remove the volume */
- if(grid_type == NODE_VDB_FLOAT) {
- scalar_grids[grid.slot].reset();
- }
- else {
- vector_grids[grid.slot].reset();
- }
-
/* remove the grid description too */
std::swap(current_grids[i], current_grids.back());
current_grids.pop_back();
@@ -190,8 +176,12 @@ int VolumeManager::find_density_slot()
}
/* try using the first scalar float grid instead */
- if(!scalar_grids.empty()) {
- return 0;
+ for (size_t i = 0; i < volumes.size(); ++i) {
+ Volume *volume = volumes[i];
+
+ if (!volume->scalar_grids.empty()) {
+ return 0;
+ }
}
return -1;
@@ -472,21 +462,31 @@ void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene *sc
device->tex_alloc("__vol_shader", dscene->vol_shader);
#ifdef WITH_OPENVDB
+ typedef typename OpenVDBGlobals::scalar_grid_t scalar_grid_t;
+ typedef typename OpenVDBGlobals::vector_grid_t vector_grid_t;
typedef typename OpenVDBGlobals::scalar_isector_t scalar_isector_t;
typedef typename OpenVDBGlobals::vector_isector_t vector_isector_t;
OpenVDBGlobals *vdb = device->vdb_memory();
- vdb->scalar_grids.reserve(scalar_grids.size());
- vdb->vector_grids.reserve(vector_grids.size());
- vdb->scalar_main_isectors.reserve(scalar_grids.size());
- vdb->vector_main_isectors.reserve(vector_grids.size());
- for(size_t i = 0; i < scalar_grids.size(); ++i) {
- vdb->scalar_grids.push_back(scalar_grids[i].get());
- vdb->scalar_main_isectors.push_back(new scalar_isector_t(*scalar_grids[i].get()));
- }
- for(size_t i = 0; i < vector_grids.size(); ++i) {
- vdb->vector_grids.push_back(vector_grids[i].get());
- vdb->vector_main_isectors.push_back(new vector_isector_t(*vector_grids[i].get()));
+ vdb->scalar_grids.reserve(num_float_volume);
+ vdb->vector_grids.reserve(num_float3_volume);
+ vdb->scalar_main_isectors.reserve(num_float_volume);
+ vdb->vector_main_isectors.reserve(num_float3_volume);
+ for (size_t i = 0; i < volumes.size(); ++i) {
+ Volume *volume = volumes[i];
+
+ for (size_t k = 0; k < volume->scalar_grids.size(); ++k) {
+ scalar_grid_t *grid = volume->scalar_grids[k].get();
+ vdb->scalar_grids.push_back(grid);
+ vdb->scalar_main_isectors.push_back(new scalar_isector_t(*grid));
+ VLOG(1) << grid->getName().c_str() << " memory usage: " << grid->memUsage() / 1024.0f << " kilobytes.\n";
+ }
+ for (size_t k = 0; k < volume->vector_grids.size(); ++k) {
+ vector_grid_t *grid = volume->vector_grids[k].get();
+ vdb->vector_grids.push_back(grid);
+ vdb->vector_main_isectors.push_back(new vector_isector_t(*grid));
+ VLOG(1) << grid->getName().c_str() << " memory usage: " << grid->memUsage() / 1024.0f << " kilobytes.\n";
+ }
}
#endif
@@ -497,16 +497,6 @@ void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene *sc
dscene->data.tables.num_volumes = num_float_volume/* + float3_volumes.size()*/;
dscene->data.tables.density_index = 0;
-#ifdef WITH_OPENVDB
- for(size_t i = 0; i < scalar_grids.size(); ++i) {
- VLOG(1) << scalar_grids[i]->getName().c_str() << " memory usage: " << scalar_grids[i]->memUsage() / 1024.0f << " kilobytes.\n";
- }
-
- for(size_t i = 0; i < vector_grids.size(); ++i) {
- VLOG(1) << vector_grids[i]->getName().c_str() << " memory usage: " << vector_grids[i]->memUsage() / 1024.0f << " kilobytes.\n";
- }
-#endif
-
need_update = false;
}
diff --git a/intern/cycles/render/volume.h b/intern/cycles/render/volume.h
index 667fc76..771aae2 100644
--- a/intern/cycles/render/volume.h
+++ b/intern/cycles/render/volume.h
@@ -62,11 +62,6 @@ class VolumeManager {
int num_float_volume;
int num_float3_volume;
-#ifdef WITH_OPENVDB
- vector<openvdb::FloatGrid::Ptr> scalar_grids;
- vector<openvdb::Vec3SGrid::Ptr> vector_grids;
-#endif
-
void delete_volume(int grid_type, int sampling, size_t slot);
#if 0
More information about the Bf-blender-cvs
mailing list