diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-11-13 15:36:33 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-11-13 16:26:21 +0300 |
commit | f82f1513e06c7680d358c0ecd94ad36187225273 (patch) | |
tree | a416680366c2a5c6c065c54acce874c4e400998e /extern | |
parent | 4d35ecc3bb48efe64713d8a1750c76f5f9f4f727 (diff) |
Booleans: Boost is no longer a dependency for Carve
SCons is currently broken on my laptop, so can't test if it works for sure,
so please do tests of that.
Diffstat (limited to 'extern')
-rw-r--r-- | extern/carve/CMakeLists.txt | 1 | ||||
-rw-r--r-- | extern/carve/SConscript | 1 | ||||
-rwxr-xr-x | extern/carve/bundle.sh | 4 | ||||
-rw-r--r-- | extern/carve/include/carve/random/random.h | 61 | ||||
-rw-r--r-- | extern/carve/lib/polyhedron.cpp | 6 | ||||
-rw-r--r-- | extern/carve/patches/files/random.h | 61 | ||||
-rw-r--r-- | extern/carve/patches/random.patch | 16 | ||||
-rw-r--r-- | extern/carve/patches/series | 1 |
8 files changed, 150 insertions, 1 deletions
diff --git a/extern/carve/CMakeLists.txt b/extern/carve/CMakeLists.txt index 5754290d710..643bd423546 100644 --- a/extern/carve/CMakeLists.txt +++ b/extern/carve/CMakeLists.txt @@ -161,6 +161,7 @@ if(WITH_BOOST) add_definitions( -DCARVE_SYSTEM_BOOST + -DHAVE_BOOST_LIBRARY ) list(APPEND INC_SYS diff --git a/extern/carve/SConscript b/extern/carve/SConscript index f975e253d60..e08e75e6640 100644 --- a/extern/carve/SConscript +++ b/extern/carve/SConscript @@ -19,6 +19,7 @@ if env['WITH_BF_BOOST']: defs.append('HAVE_BOOST_UNORDERED_COLLECTIONS') defs.append('CARVE_SYSTEM_BOOST') + defs.append('HAVE_BOOST_LIBRARY') incs.append(env['BF_BOOST_INC']) env.BlenderLib ('extern_carve', Split(sources), incs, defs, libtype=['extern'], priority=[40] ) diff --git a/extern/carve/bundle.sh b/extern/carve/bundle.sh index 2a3e621fab0..236720f740d 100755 --- a/extern/carve/bundle.sh +++ b/extern/carve/bundle.sh @@ -31,6 +31,8 @@ headers=`find ./lib -type f -iname '*.h' -or -iname '*.hpp' | sed -r 's/^\.\//\t includes=`find ./include -type f -iname '*.h' -or -iname '*.hpp' | sed -r 's/^\.\//\t/' | sort -d` cp patches/files/config.h include/carve/config.h +mkdir -p include/carve/random +cp patches/files/random.h include/carve/random/random.h cat > CMakeLists.txt << EOF # ***** BEGIN GPL LICENSE BLOCK ***** @@ -91,6 +93,7 @@ if(WITH_BOOST) add_definitions( -DCARVE_SYSTEM_BOOST + -DHAVE_BOOST_LIBRARY ) list(APPEND INC_SYS @@ -123,6 +126,7 @@ if env['WITH_BF_BOOST']: defs.append('HAVE_BOOST_UNORDERED_COLLECTIONS') defs.append('CARVE_SYSTEM_BOOST') + defs.append('HAVE_BOOST_LIBRARY') incs.append(env['BF_BOOST_INC']) env.BlenderLib ('extern_carve', Split(sources), incs, defs, libtype=['extern'], priority=[40] ) diff --git a/extern/carve/include/carve/random/random.h b/extern/carve/include/carve/random/random.h new file mode 100644 index 00000000000..634063cb90c --- /dev/null +++ b/extern/carve/include/carve/random/random.h @@ -0,0 +1,61 @@ +#include <cassert> +#include <cmath> +#include <vector> + +namespace boost { +#if __cplusplus > 199711L +# include <random> +typedef std::mt19937 mt19937; +#else +# include <stdlib.h> +struct mt19937 { + int operator()() { + return rand(); + } + + int max() { + return RAND_MAX; + } +}; +#endif + +template<typename T> +struct uniform_on_sphere { + typedef std::vector<T> result_type; + + uniform_on_sphere(int dimension) { + assert(dimension == 3); + } + + std::vector<T> + operator()(float u1, float u2) { + T z = 1.0 - 2.0*u1; + T r = std::sqrt(std::max(0.0, 1.0 - z*z)); + T phi = 2.0*M_PI*u2; + T x = r*std::cos(phi); + T y = r*std::sin(phi); + std::vector<T> result; + result.push_back(x); + result.push_back(y); + result.push_back(z); + return result; + } +}; + +template<typename RNG, typename DISTR> +struct variate_generator { + + variate_generator(RNG rng, DISTR distr) + : rng_(rng), distr_(distr) {} + + typename DISTR::result_type + operator()() { + float rng_max_inv = 1.0 / rng_.max(); + return distr_(rng_() * rng_max_inv, rng_() * rng_max_inv); + } + + RNG rng_; + DISTR distr_; +}; + +} diff --git a/extern/carve/lib/polyhedron.cpp b/extern/carve/lib/polyhedron.cpp index 7f65da8c125..d402fce36df 100644 --- a/extern/carve/lib/polyhedron.cpp +++ b/extern/carve/lib/polyhedron.cpp @@ -36,7 +36,11 @@ #include <carve/mesh.hpp> -#include BOOST_INCLUDE(random.hpp) +#ifdef HAVE_BOOST_LIBRARY +# include BOOST_INCLUDE(random.hpp) +#else +# include <carve/random/random.h> +#endif namespace { bool emb_test(carve::poly::Polyhedron *poly, diff --git a/extern/carve/patches/files/random.h b/extern/carve/patches/files/random.h new file mode 100644 index 00000000000..634063cb90c --- /dev/null +++ b/extern/carve/patches/files/random.h @@ -0,0 +1,61 @@ +#include <cassert> +#include <cmath> +#include <vector> + +namespace boost { +#if __cplusplus > 199711L +# include <random> +typedef std::mt19937 mt19937; +#else +# include <stdlib.h> +struct mt19937 { + int operator()() { + return rand(); + } + + int max() { + return RAND_MAX; + } +}; +#endif + +template<typename T> +struct uniform_on_sphere { + typedef std::vector<T> result_type; + + uniform_on_sphere(int dimension) { + assert(dimension == 3); + } + + std::vector<T> + operator()(float u1, float u2) { + T z = 1.0 - 2.0*u1; + T r = std::sqrt(std::max(0.0, 1.0 - z*z)); + T phi = 2.0*M_PI*u2; + T x = r*std::cos(phi); + T y = r*std::sin(phi); + std::vector<T> result; + result.push_back(x); + result.push_back(y); + result.push_back(z); + return result; + } +}; + +template<typename RNG, typename DISTR> +struct variate_generator { + + variate_generator(RNG rng, DISTR distr) + : rng_(rng), distr_(distr) {} + + typename DISTR::result_type + operator()() { + float rng_max_inv = 1.0 / rng_.max(); + return distr_(rng_() * rng_max_inv, rng_() * rng_max_inv); + } + + RNG rng_; + DISTR distr_; +}; + +} diff --git a/extern/carve/patches/random.patch b/extern/carve/patches/random.patch new file mode 100644 index 00000000000..36cc8d10430 --- /dev/null +++ b/extern/carve/patches/random.patch @@ -0,0 +1,16 @@ +diff -r 9a85d733a43d lib/polyhedron.cpp +--- a/lib/polyhedron.cpp Tue Jun 24 11:15:23 2014 +1000 ++++ b/lib/polyhedron.cpp Thu Nov 13 17:36:06 2014 +0500 +@@ -36,7 +36,11 @@ + + #include <carve/mesh.hpp> + +-#include BOOST_INCLUDE(random.hpp) ++#ifdef HAVE_BOOST_LIBRARY ++# include BOOST_INCLUDE(random.hpp) ++#else ++# include <carve/random/random.h> ++#endif + + namespace { + bool emb_test(carve::poly::Polyhedron *poly, diff --git a/extern/carve/patches/series b/extern/carve/patches/series index 4691339b419..b7e97d68c4c 100644 --- a/extern/carve/patches/series +++ b/extern/carve/patches/series @@ -11,3 +11,4 @@ mesh_simplify_uninitialized_var.patch memory_leak_fix.patch msvc_fix.patch face_hole_merge_workaround.patch +random.patch |