[Bf-blender-cvs] [579d885] openvdb: Improvements to compilation with CMake: set flags to be able to build with or without OpenVDB.

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


Commit: 579d88551cf90d768aa7312f8427ab72c3c58fdf
Author: Kévin Dietrich
Date:   Sun May 17 21:04:26 2015 +0200
Branches: openvdb
https://developer.blender.org/rB579d88551cf90d768aa7312f8427ab72c3c58fdf

Improvements to compilation with CMake: set flags to be able to build
with or without OpenVDB.

Scons support should follow.

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

M	CMakeLists.txt
M	build_files/cmake/config/blender_full.cmake
M	build_files/cmake/config/blender_lite.cmake
M	intern/cycles/CMakeLists.txt
M	intern/cycles/kernel/kernel.cpp
M	intern/cycles/kernel/kernel_globals.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_openvdb.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/openvdb.cpp
M	intern/cycles/render/openvdb.h
M	intern/cycles/util/CMakeLists.txt
M	intern/cycles/util/util_openvdb.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/nodes/shader/nodes/node_shader_openvdb.c
M	source/blenderplayer/CMakeLists.txt

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

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f54c659..360b4aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1764,6 +1764,14 @@ elseif(WIN32)
 			set(SDL_LIBPATH ${SDL}/lib)
 		endif()
 
+		if(WITH_OPENVDB)
+			set(OPENVDB ${LIBDIR}/openvdb)
+			set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
+			set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
+			set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
+			set(OPENVDB_DEFINITIONS)
+		endif()
+
 		set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
 
 		## DISABLE - causes linking errors 
@@ -2058,6 +2066,14 @@ elseif(APPLE)
 		set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
 	endif()
 
+	if(WITH_OPENVDB)
+		set(OPENVDB ${LIBDIR}/openvdb)
+		set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
+		set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
+		set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
+		set(OPENVDB_DEFINITIONS)
+	endif()
+
 	if(WITH_LLVM)
 		set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH	"Path to the LLVM installation")
 		set(LLVM_VERSION "3.4" CACHE STRING	"Version of LLVM to use")
@@ -2820,6 +2836,7 @@ if(FIRST_RUN)
 	info_cfg_option(WITH_CYCLES)
 	info_cfg_option(WITH_FREESTYLE)
 	info_cfg_option(WITH_OPENCOLORIO)
+	info_cfg_option(WITH_OPENVDB)
 
 	info_cfg_text("Compiler Options:")
 	info_cfg_option(WITH_BUILDINFO)
diff --git a/build_files/cmake/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake
index d41f97a..76afbb0 100644
--- a/build_files/cmake/config/blender_full.cmake
+++ b/build_files/cmake/config/blender_full.cmake
@@ -43,6 +43,7 @@ set(WITH_OPENCOLLADA         ON  CACHE BOOL "" FORCE)
 set(WITH_OPENCOLORIO         ON  CACHE BOOL "" FORCE)
 set(WITH_OPENMP              ON  CACHE BOOL "" FORCE)
 set(WITH_OPENNL              ON  CACHE BOOL "" FORCE)
+set(WITH_OPENVDB             ON  CACHE BOOL "" FORCE)
 set(WITH_PYTHON_INSTALL      ON  CACHE BOOL "" FORCE)
 set(WITH_RAYOPTIMIZATION     ON  CACHE BOOL "" FORCE)
 set(WITH_SDL                 ON  CACHE BOOL "" FORCE)
diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake
index 3a70201..29c5818 100644
--- a/build_files/cmake/config/blender_lite.cmake
+++ b/build_files/cmake/config/blender_lite.cmake
@@ -47,6 +47,7 @@ set(WITH_OPENCOLORIO         OFF CACHE BOOL "" FORCE)
 set(WITH_OPENIMAGEIO         OFF CACHE BOOL "" FORCE)
 set(WITH_OPENMP              OFF CACHE BOOL "" FORCE)
 set(WITH_OPENNL              OFF CACHE BOOL "" FORCE)
+set(WITH_OPENVDB             OFF CACHE BOOL "" FORCE)
 set(WITH_PYTHON_INSTALL      OFF CACHE BOOL "" FORCE)
 set(WITH_RAYOPTIMIZATION     OFF CACHE BOOL "" FORCE)
 set(WITH_SDL                 OFF CACHE BOOL "" FORCE)
diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt
index 573511b..2e1565c 100644
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@ -146,6 +146,10 @@ if(WITH_CYCLES_OSL)
 	)
 endif()
 
+if(WITH_OPENVDB)
+	add_definitions(-DWITH_OPENVDB)
+endif()
+
 add_definitions(
 	-DWITH_OPENCL
 	-DWITH_CUDA
diff --git a/intern/cycles/kernel/kernel.cpp b/intern/cycles/kernel/kernel.cpp
index 7817c67..e5c95b8 100644
--- a/intern/cycles/kernel/kernel.cpp
+++ b/intern/cycles/kernel/kernel.cpp
@@ -33,6 +33,7 @@ void kernel_const_copy(KernelGlobals *kg, const char *name, void *host, size_t s
 {
 	if(strcmp(name, "__data") == 0)
 		memcpy(&kg->__data, host, size);
+#ifdef __OPENVDB__
 	else if(strcmp(name, "__vdb_float_samplers_p") == 0)
 		kg->vdb_float_samplers_p.insert(kg->vdb_float_samplers_p.begin() + size, (vdb_fsampler_p *)host);
 	else if(strcmp(name, "__vdb_float_samplers_b") == 0)
@@ -41,6 +42,7 @@ void kernel_const_copy(KernelGlobals *kg, const char *name, void *host, size_t s
 		kg->vdb_vec3s_samplers_p.insert(kg->vdb_vec3s_samplers_p.begin() + size, (vdb_vsampler_p *)host);
 	else if(strcmp(name, "__vdb_vec3s_samplers_b") == 0)
 		kg->vdb_vec3s_samplers_b.insert(kg->vdb_vec3s_samplers_b.begin() + size, (vdb_vsampler_b *)host);
+#endif
 	else
 		assert(0);
 }
diff --git a/intern/cycles/kernel/kernel_globals.h b/intern/cycles/kernel/kernel_globals.h
index f168440..ba8ccc6 100644
--- a/intern/cycles/kernel/kernel_globals.h
+++ b/intern/cycles/kernel/kernel_globals.h
@@ -38,11 +38,13 @@ typedef struct KernelGlobals {
 	texture_image_uchar4 texture_byte_images[MAX_BYTE_IMAGES];
 	texture_image_float4 texture_float_images[MAX_FLOAT_IMAGES];
 
+#ifdef __OPENVDB__
 	/* We can't use arrays here as grid samplers don't have a default constructor */
 	vector<vdb_fsampler_p*> vdb_float_samplers_p;
 	vector<vdb_fsampler_b*> vdb_float_samplers_b;
 	vector<vdb_vsampler_p*> vdb_vec3s_samplers_p;
 	vector<vdb_vsampler_b*> vdb_vec3s_samplers_b;
+#endif
 
 #define KERNEL_TEX(type, ttype, name) ttype name;
 #define KERNEL_IMAGE_TEX(type, ttype, name)
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index d8c47e4..4abc0d7 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -67,6 +67,9 @@ CCL_NAMESPACE_BEGIN
 #ifdef WITH_OSL
 #define __OSL__
 #endif
+#ifdef WITH_OPENVDB
+#define __OPENVDB__
+#endif
 #define __SUBSURFACE__
 #define __CMJ__
 #define __VOLUME__
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index 9ec4c55..864cd05 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -436,9 +436,11 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, Shade
 			case NODE_NORMAL_MAP:
 				svm_node_normal_map(kg, sd, stack, node);
 				break;
+#ifdef __OPENVDB__
 			case NODE_OPENVDB:
 				svm_node_openvdb(kg, sd, stack, node);
 				break;
+#endif
 			case NODE_END:
 			default:
 				return;
diff --git a/intern/cycles/kernel/svm/svm_openvdb.h b/intern/cycles/kernel/svm/svm_openvdb.h
index 1722f40..c47e278 100644
--- a/intern/cycles/kernel/svm/svm_openvdb.h
+++ b/intern/cycles/kernel/svm/svm_openvdb.h
@@ -16,6 +16,8 @@
 
 CCL_NAMESPACE_BEGIN
 
+#ifdef __OPENVDB__
+
 ccl_device void svm_node_openvdb(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node)
 {
 	float3 co = sd->P;
@@ -56,5 +58,7 @@ ccl_device void svm_node_openvdb(KernelGlobals *kg, ShaderData *sd, float *stack
 #endif
 }
 
+#endif
+
 CCL_NAMESPACE_END
 
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index d18f1a0..627cc2b 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -4371,7 +4371,11 @@ OpenVDBNode::OpenVDBNode()
 {
 	filename = "";
 	vdb_manager = NULL;
+#ifdef WITH_OPENVDB
 	sampling = OPENVDB_SAMPLE_POINT;
+#else
+	sampling = 0;
+#endif
 }
 
 void OpenVDBNode::attributes(Shader *shader, AttributeRequestSet *attributes)
diff --git a/intern/cycles/render/openvdb.cpp b/intern/cycles/render/openvdb.cpp
index 4693129..dc86372 100644
--- a/intern/cycles/render/openvdb.cpp
+++ b/intern/cycles/render/openvdb.cpp
@@ -21,28 +21,16 @@
 
 CCL_NAMESPACE_BEGIN
 
-static inline void catch_exceptions()
-{
-	try {
-		throw;
-	}
-	/* OpenVDB exceptions all derive from std::exception so it should be fine */
-	catch (const std::exception &e) {
-		std::cerr << e.what() << std::endl;
-	}
-	catch (...) {
-		std::cerr << "Unknown error in OpenVDB library..." << std::endl;
-	}
-}
+#ifdef WITH_OPENVDB
 
 OpenVDBManager::OpenVDBManager()
 {
 	openvdb::initialize();
-	need_update = true;
 	float_samplers_p.reserve(64);
 	float_samplers_b.reserve(64);
 	vec3s_samplers_p.reserve(64);
 	vec3s_samplers_b.reserve(64);
+	need_update = true;
 }
 
 OpenVDBManager::~OpenVDBManager()
@@ -53,6 +41,20 @@ OpenVDBManager::~OpenVDBManager()
 	vec3s_samplers_b.clear();
 }
 
+static inline void catch_exceptions()
+{
+	try {
+		throw;
+	}
+	/* OpenVDB exceptions all derive from std::exception so it should be fine */
+	catch (const std::exception &e) {
+		std::cerr << e.what() << std::endl;
+	}
+	catch (...) {
+		std::cerr << "Unknown error in OpenVDB library..." << std::endl;
+	}
+}
+
 int OpenVDBManager::add_volume(const string &filename, const string &name, int sampling, int grid_type)
 {
 	using namespace openvdb;
@@ -216,4 +218,41 @@ void OpenVDBManager::device_free(Device *device, DeviceScene *dscene)
 	(void)dscene;
 }
 
+#else
+
+OpenVDBManager::OpenVDBManager()
+{
+	need_update = false;
+}
+
+OpenVDBManager::~OpenVDBManager()
+{
+}
+
+int OpenVDBManager::add_volume(const string &filename, const string &name, int sampling, int grid_type)
+{
+	(void)filename;
+	(void)name;
+	(void)sampling;
+	(void)grid_type;
+
+	return -1;
+}
+
+void OpenVDBManager::device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
+{
+	(void)device;
+	(void)dscene;
+	(void)scene;
+	(void)progress;
+}
+
+void OpenVDBManager::device_free(Device *device, DeviceScene *dscene)
+{
+	(void)device;
+	(void)dscene;
+}
+
+#endif
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/openvdb.h b/intern/cycles/render/openvdb.h
index 8c25058..b783fd7 100644
--- a/intern/cycles/render/openvdb.h
+++ b/intern/cycles/render/openvdb.h
@@ -47,6 +47,7 @@ public:
 
 	bool need_update;
 
+#ifdef WITH_OPENVDB
 	vector<GridDescription> current_grids;
 	vector<openvdb::FloatGrid::Ptr> scalar_grids;
 	vector<openvdb::Vec3SGrid::Ptr> vector_grids;
@@ -55,6 +56,7 @@ public:
 	vector<vdb_fsampler_b*> float_samplers_b;
 	vector<vdb_vsampler_p*> vec3s_samplers_p;
 	vector<vdb_vsampler_b*> vec3s_samplers_b;
+#endif
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/util/CMakeLists.txt b/intern/cycles/util/CMakeLists.txt
index cec6371..d3047ec 100644
--- a/intern/cycles/util/CMakeLists.txt
+++ b/intern/cycles/util/CMakeLists.txt
@@ -85,6 +85,12 @@ if(WITH_CYCLES_DEBUG)
 	)
 endif()
 
+if(WITH_OPENVDB)
+    add_definitions(
+        -DWITH_OPENVDB
+    )
+endif()
+
 include_directories(${INC})
 include_directories(SYSTEM ${INC_SYS})
 
diff --git a/intern/cycles/util/util_openvdb.h b/intern/cycles/util/util_openvdb.h
index 01fb45a..a4742d3 100644
--- a/intern/cycles/util/util_openvdb.h
+++ b/intern/cycles/util/util_openvdb.h
@@ -1,6 +1,7 @@
 #ifndef __UTIL_OPENVDB_H__
 #define __UTIL_OPENVDB_H__
 
+#ifdef WITH_OPENVDB
 #include <openvdb/openvdb.h>
 #include <openvdb/tools/Interpolation.h>
 
@@ -30,5 +31,7 @@ typedef openvdb::tools::GridSampler<openvdb::Vec3SGrid, openvdb::tools::BoxSampl
 
 CCL_NAMESPACE

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list