[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