[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