[Bf-blender-cvs] [ce2b57e] openvdb: VolumeManager: put OpenVDB related routines in their own functions.

Kévin Dietrich noreply at git.blender.org
Fri Jun 5 14:07:53 CEST 2015


Commit: ce2b57ea91dec6430e3b334654a188f0a60b9cb7
Author: Kévin Dietrich
Date:   Sat May 23 08:25:29 2015 +0200
Branches: openvdb
https://developer.blender.org/rBce2b57ea91dec6430e3b334654a188f0a60b9cb7

VolumeManager: put OpenVDB related routines in their own 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 53dcfe5..1381c6c 100644
--- a/intern/cycles/render/openvdb.cpp
+++ b/intern/cycles/render/openvdb.cpp
@@ -21,8 +21,6 @@
 
 CCL_NAMESPACE_BEGIN
 
-#ifdef WITH_OPENVDB
-
 #define MAX_VOLUME 1024
 
 VolumeManager::VolumeManager()
@@ -52,14 +50,15 @@ static inline void catch_exceptions()
 	try {
 		throw;
 	}
+#ifdef WITH_OPENVDB
 	catch (const openvdb::IoError& e) {
 		std::cerr << e.what() << "\n";
 	}
+#endif
 }
 
 int VolumeManager::add_volume(const string& filename, const string& name, int sampling, int grid_type)
 {
-	using namespace openvdb;
 	size_t slot = -1;
 
 	if((slot = find_existing_slot(filename, name, sampling, grid_type)) != -1) {
@@ -67,16 +66,8 @@ int VolumeManager::add_volume(const string& filename, const string& name, int sa
 	}
 
 	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);
-		}
-		else if(grid_type == NODE_VDB_FLOAT3) {
-			Vec3SGrid::Ptr grid = gridPtrCast<Vec3SGrid>(file.readGrid(name));
-			slot = add_vector_grid(grid);
+		if(is_openvdb_file(filename)) {
+			slot = add_openvdb_volume(filename, name, sampling, grid_type);
 		}
 
 		add_grid_description(filename, name, sampling, slot);
@@ -123,6 +114,11 @@ int VolumeManager::find_existing_slot(const string& filename, const string& name
 	return -1;
 }
 
+bool VolumeManager::is_openvdb_file(const string& filename) const
+{
+	return string_endswith(filename, ".vdb");
+}
+
 template <typename Container>
 size_t find_empty_slot(Container container)
 {
@@ -147,30 +143,42 @@ size_t find_empty_slot(Container container)
 	return slot;
 }
 
-size_t VolumeManager::add_scalar_grid(openvdb::FloatGrid::Ptr grid)
+size_t VolumeManager::add_openvdb_volume(const std::string &filename, const std::string &name, int /*sampling*/, int grid_type)
 {
-	size_t slot = find_empty_slot(float_volumes);
+	using namespace openvdb;
+	size_t slot = -1;
 
-	if(slot == -1) return -1;
+#ifdef WITH_OPENVDB
+	openvdb::io::File file(filename);
+	file.open();
 
-	vdb_float_volume *sampler = new vdb_float_volume(grid);
+	if(grid_type == NODE_VDB_FLOAT) {
+		slot = find_empty_slot(float_volumes);
 
-	float_volumes.insert(float_volumes.begin() + slot, sampler);
-	scalar_grids.push_back(grid);
+		if(slot == -1) return -1;
 
-	return slot;
-}
+		FloatGrid::Ptr grid = gridPtrCast<FloatGrid>(file.readGrid(name));
+		vdb_float_volume *sampler = new vdb_float_volume(grid);
 
-size_t VolumeManager::add_vector_grid(openvdb::Vec3SGrid::Ptr grid)
-{
-	size_t slot = find_empty_slot(float3_volumes);
+		float_volumes.insert(float_volumes.begin() + slot, sampler);
+		scalar_grids.push_back(grid);
+	}
+	else if(grid_type == NODE_VDB_FLOAT3) {
+		size_t slot = find_empty_slot(float3_volumes);
 
-	if(slot == -1) return -1;
+		if(slot == -1) return -1;
 
-	vdb_float3_volume *sampler = new vdb_float3_volume(grid);
+		Vec3SGrid::Ptr grid = gridPtrCast<Vec3SGrid>(file.readGrid(name));
+		vdb_float3_volume *sampler = new vdb_float3_volume(grid);
 
-	float3_volumes.insert(float3_volumes.begin() + slot, sampler);
-	vector_grids.push_back(grid);
+		float3_volumes.insert(float3_volumes.begin() + slot, sampler);
+		vector_grids.push_back(grid);
+	}
+#else
+	(void)filename;
+	(void)name;
+	(void)grid_type;
+#endif
 
 	return slot;
 }
@@ -233,30 +241,4 @@ void VolumeManager::device_free(Device */*device*/, DeviceScene */*dscene*/)
 {
 }
 
-#else
-
-VolumeManager::VolumeManager()
-{
-	need_update = false;
-}
-
-VolumeManager::~VolumeManager()
-{
-}
-
-int VolumeManager::add_volume(const string& /*filename*/, const string& /*name*/, int /*sampling*/, int /*grid_type*/)
-{
-	return -1;
-}
-
-void VolumeManager::device_update(Device */*device*/, DeviceScene */*dscene*/, Scene */*scene*/, Progress& /*progress*/)
-{
-}
-
-void VolumeManager::device_free(Device */*device*/, DeviceScene */*dscene*/)
-{
-}
-
-#endif
-
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/openvdb.h b/intern/cycles/render/openvdb.h
index db14bce..5a4fccd 100644
--- a/intern/cycles/render/openvdb.h
+++ b/intern/cycles/render/openvdb.h
@@ -41,9 +41,6 @@ class VolumeManager {
 #ifdef WITH_OPENVDB
 	vector<openvdb::FloatGrid::Ptr> scalar_grids;
 	vector<openvdb::Vec3SGrid::Ptr> vector_grids;
-
-	size_t add_scalar_grid(openvdb::FloatGrid::Ptr grid);
-	size_t add_vector_grid(openvdb::Vec3SGrid::Ptr grid);
 #endif
 
 	void delete_volume(int grid_type, int sampling, size_t slot);
@@ -51,6 +48,9 @@ class VolumeManager {
 	void add_grid_description(const string& filename, const string& name, int sampling, int slot);
 	int find_existing_slot(const string& filename, const string& name, int sampling, int grid_type);
 
+	bool is_openvdb_file(const string& filename) const;
+	size_t add_openvdb_volume(const string& filename, const string& name, int sampling, int grid_type);
+
 public:
 	VolumeManager();
 	~VolumeManager();




More information about the Bf-blender-cvs mailing list