Skip to content

Commit d51c309

Browse files
authored
Merge pull request #123 from ruberith/fix-macos
macOS compatibility
2 parents d85c906 + f634656 commit d51c309

File tree

8 files changed

+41
-17
lines changed

8 files changed

+41
-17
lines changed

CMake/Common.cmake

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ option(USE_OpenMP "Use OpenMP" ON)
3232
if(USE_OpenMP)
3333
FIND_PACKAGE(OpenMP)
3434
if(OPENMP_FOUND)
35-
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
36-
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
35+
if (CMAKE_VERSION VERSION_GREATER "3.8")
36+
link_libraries(OpenMP::OpenMP_CXX)
37+
else()
38+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
39+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
40+
endif()
3741
endif()
3842
endif()
3943

@@ -55,6 +59,9 @@ if (UNIX OR MINGW)
5559
if (CI_BUILD)
5660
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=x86-64")
5761
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -DNDEBUG -march=x86-64")
62+
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
63+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -mcpu=native")
64+
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -DNDEBUG -mcpu=native")
5865
else()
5966
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=native")
6067
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -DNDEBUG -march=native")
@@ -66,6 +73,7 @@ endif(MINGW)
6673

6774
if(APPLE)
6875
set(CMAKE_MACOSX_RPATH 1)
76+
add_definitions(-DGL_SILENCE_DEPRECATION)
6977
endif()
7078

7179
set (CMAKE_CXX_STANDARD 11)

CMakeLists.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ cmake_minimum_required(VERSION 3.1)
66
project(PositionBasedDynamics)
77

88
set(PROJECT_PATH ${PROJECT_SOURCE_DIR})
9-
include_directories(${PROJECT_SOURCE_DIR})
9+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
10+
add_compile_options(-idirafter${PROJECT_SOURCE_DIR})
11+
else()
12+
include_directories(${PROJECT_SOURCE_DIR})
13+
endif()
1014

1115
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
1216
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
@@ -27,6 +31,9 @@ include(ExternalProject)
2731

2832
## Eigen3 is used by most of the libraries that follow
2933
find_package(Eigen3 REQUIRED)
34+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
35+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -idirafter${EIGEN3_INCLUDE_DIR}")
36+
endif()
3037

3138
set(EXT_CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE})
3239
if (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
@@ -42,7 +49,7 @@ else()
4249
Ext_Discregrid
4350
PREFIX "${CMAKE_BINARY_DIR}/extern/Discregrid"
4451
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/Discregrid.git
45-
GIT_TAG "0b69062ff9c56fbb6dcecd296652028bedbacf0e"
52+
GIT_TAG "4c27e1cc88be828c6ac5b8a05759ac7e01cf79e9"
4653
INSTALL_DIR ${ExternalInstallDir}/Discregrid
4754
CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/Discregrid
4855
-DBUILD_CMD_EXECUTABLE:BOOL=0 -DEIGEN3_INCLUDE_DIR:PATH=${EIGEN3_INCLUDE_DIR} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}

Demos/SceneLoaderDemo/SceneLoaderDemo.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ CubicSDFCollisionDetection::GridPtr generateSDF(const std::string &modelFile, co
393393
doubleVec[3 * i + j] = vd.getPosition(i)[j];
394394
Discregrid::TriangleMesh sdfMesh(&doubleVec[0], faces.data(), vd.size(), nFaces);
395395
#endif
396-
Discregrid::MeshDistance md(sdfMesh);
396+
Discregrid::TriangleMeshDistance md(sdfMesh);
397397
Eigen::AlignedBox3d domain;
398398
for (auto const& x : sdfMesh.vertices())
399399
{
@@ -405,7 +405,7 @@ CubicSDFCollisionDetection::GridPtr generateSDF(const std::string &modelFile, co
405405
LOG_INFO << "Set SDF resolution: " << resolutionSDF[0] << ", " << resolutionSDF[1] << ", " << resolutionSDF[2];
406406
distanceField = std::make_shared<CubicSDFCollisionDetection::Grid>(domain, std::array<unsigned int, 3>({ resolutionSDF[0], resolutionSDF[1], resolutionSDF[2] }));
407407
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
408-
func = [&md](Eigen::Vector3d const& xi) {return md.signedDistanceCached(xi); };
408+
func = [&md](Eigen::Vector3d const& xi) {return md.signed_distance(xi).distance; };
409409
LOG_INFO << "Generate SDF for " << modelFile;
410410
distanceField->addFunction(func, true);
411411
if (FileSystem::makeDir(cachePath) == 0)
@@ -552,7 +552,7 @@ void readScene(const bool readFile)
552552
doubleVec[3 * i + j] = vd.getPosition(i)[j];
553553
Discregrid::TriangleMesh sdfMesh(&doubleVec[0], faces.data(), vd.size(), nFaces);
554554
#endif
555-
Discregrid::MeshDistance md(sdfMesh);
555+
Discregrid::TriangleMeshDistance md(sdfMesh);
556556
Eigen::AlignedBox3d domain;
557557
for (auto const& x : sdfMesh.vertices())
558558
{
@@ -564,7 +564,7 @@ void readScene(const bool readFile)
564564
LOG_INFO << "Set SDF resolution: " << rbd.m_resolutionSDF[0] << ", " << rbd.m_resolutionSDF[1] << ", " << rbd.m_resolutionSDF[2];
565565
distanceFields[sdfFileName] = std::make_shared<CubicSDFCollisionDetection::Grid>(domain, std::array<unsigned int, 3>({ rbd.m_resolutionSDF[0], rbd.m_resolutionSDF[1], rbd.m_resolutionSDF[2] }));
566566
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
567-
func = [&md](Eigen::Vector3d const& xi) {return md.signedDistanceCached(xi); };
567+
func = [&md](Eigen::Vector3d const& xi) {return md.signed_distance(xi).distance; };
568568
LOG_INFO << "Generate SDF for " << rbd.m_modelFile;
569569
distanceFields[sdfFileName]->addFunction(func, true);
570570
if (FileSystem::makeDir(cachePath) == 0)

Demos/StiffRodsDemos/DirectPositionBasedSolverForStiffRodsDemo.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ CubicSDFCollisionDetection::GridPtr generateSDF(const std::string &modelFile, co
404404
doubleVec[3 * i + j] = vd.getPosition(i)[j];
405405
Discregrid::TriangleMesh sdfMesh(&doubleVec[0], faces.data(), vd.size(), nFaces);
406406
#endif
407-
Discregrid::MeshDistance md(sdfMesh);
407+
Discregrid::TriangleMeshDistance md(sdfMesh);
408408
Eigen::AlignedBox3d domain;
409409
for (auto const& x : sdfMesh.vertices())
410410
{
@@ -416,7 +416,7 @@ CubicSDFCollisionDetection::GridPtr generateSDF(const std::string &modelFile, co
416416
LOG_INFO << "Set SDF resolution: " << resolutionSDF[0] << ", " << resolutionSDF[1] << ", " << resolutionSDF[2];
417417
distanceField = std::make_shared<CubicSDFCollisionDetection::Grid>(domain, std::array<unsigned int, 3>({ resolutionSDF[0], resolutionSDF[1], resolutionSDF[2] }));
418418
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
419-
func = [&md](Eigen::Vector3d const& xi) {return md.signedDistanceCached(xi); };
419+
func = [&md](Eigen::Vector3d const& xi) {return md.signed_distance(xi).distance; };
420420
LOG_INFO << "Generate SDF for " << modelFile;
421421
distanceField->addFunction(func, true);
422422
if (FileSystem::makeDir(cachePath) == 0)
@@ -563,7 +563,7 @@ void readScene()
563563
doubleVec[3 * i + j] = vd.getPosition(i)[j];
564564
Discregrid::TriangleMesh sdfMesh(&doubleVec[0], faces.data(), vd.size(), nFaces);
565565
#endif
566-
Discregrid::MeshDistance md(sdfMesh);
566+
Discregrid::TriangleMeshDistance md(sdfMesh);
567567
Eigen::AlignedBox3d domain;
568568
for (auto const& x : sdfMesh.vertices())
569569
{
@@ -575,7 +575,7 @@ void readScene()
575575
LOG_INFO << "Set SDF resolution: " << rbd.m_resolutionSDF[0] << ", " << rbd.m_resolutionSDF[1] << ", " << rbd.m_resolutionSDF[2];
576576
distanceFields[sdfFileName] = std::make_shared<CubicSDFCollisionDetection::Grid>(domain, std::array<unsigned int, 3>({ rbd.m_resolutionSDF[0], rbd.m_resolutionSDF[1], rbd.m_resolutionSDF[2] }));
577577
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
578-
func = [&md](Eigen::Vector3d const& xi) {return md.signedDistanceCached(xi); };
578+
func = [&md](Eigen::Vector3d const& xi) {return md.signed_distance(xi).distance; };
579579
LOG_INFO << "Generate SDF for " << rbd.m_modelFile;
580580
distanceFields[sdfFileName]->addFunction(func, true);
581581
if (FileSystem::makeDir(cachePath) == 0)

Demos/Visualization/MiniGL.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ void MiniGL::init(int argc, char **argv, const int width, const int height, cons
451451
if (!glfwInit())
452452
exit(EXIT_FAILURE);
453453

454+
glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GL_FALSE);
454455
//glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
455456
//glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
456457
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
@@ -499,7 +500,9 @@ void MiniGL::init(int argc, char **argv, const int width, const int height, cons
499500
fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError());
500501
exit(1);
501502
}
502-
TwWindowSize(width, height);
503+
int w, h;
504+
glfwGetWindowSize(m_glfw_window, &w, &h);
505+
TwWindowSize(w, h);
503506
initTweakBar();
504507

505508
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);

Utils/FileSystem.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
#include <unistd.h>
1414
#include <dirent.h>
1515
#endif
16+
#ifdef __APPLE__
17+
#include <mach-o/dyld.h>
18+
#endif
1619

1720
#ifndef S_ISDIR
1821
#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
@@ -217,6 +220,9 @@ namespace Utilities
217220
char buffer[1000];
218221
#ifdef WIN32
219222
GetModuleFileName(NULL, buffer, 1000);
223+
#elif defined(__APPLE__)
224+
uint32_t bufferSize = sizeof(buffer);
225+
_NSGetExecutablePath(buffer, &bufferSize);
220226
#else
221227
char szTmp[32];
222228
sprintf(szTmp, "/proc/%d/exe", getpid());

pyPBD/CollisionDetectionModule.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ void CollisionDetectionModule(py::module m_sub)
168168
doubleVec[3 * i + j] = vd.getPosition(i)[j];
169169
Discregrid::TriangleMesh sdfMesh(&doubleVec[0], faces.data(), vd.size(), nFaces);
170170
#endif
171-
Discregrid::MeshDistance md(sdfMesh);
171+
Discregrid::TriangleMeshDistance md(sdfMesh);
172172
Eigen::AlignedBox3d domain;
173173
for (auto const& x : sdfMesh.vertices())
174174
{
@@ -181,7 +181,7 @@ void CollisionDetectionModule(py::module m_sub)
181181
//PBD::CubicSDFCollisionDetection::Grid *sdf = new PBD::CubicSDFCollisionDetection::Grid(domain, std::array<unsigned int, 3>({ resolution[0], resolution[1], resolution[2] }));
182182
auto sdf = std::make_shared<PBD::CubicSDFCollisionDetection::Grid>(domain, std::array<unsigned int, 3>({ resolution[0], resolution[1], resolution[2] }));
183183
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
184-
func = [&md](Eigen::Vector3d const& xi) {return md.signedDistanceCached(xi); };
184+
func = [&md](Eigen::Vector3d const& xi) {return md.signed_distance(xi).distance; };
185185
std::cout << "Generate SDF\n";
186186
sdf->addFunction(func, true);
187187
return sdf;

pyPBD/SimulationModelModule.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ PBD::CubicSDFCollisionDetection::GridPtr generateSDF(const std::vector<Vector3r>
2626
doubleVec[3 * i + j] = vertices[i][j];
2727
Discregrid::TriangleMesh sdfMesh(&doubleVec[0], faces.data(), vertices.size(), nFaces);
2828
#endif
29-
Discregrid::MeshDistance md(sdfMesh);
29+
Discregrid::TriangleMeshDistance md(sdfMesh);
3030
Eigen::AlignedBox3d domain;
3131
for (auto const& x : sdfMesh.vertices())
3232
{
@@ -38,7 +38,7 @@ PBD::CubicSDFCollisionDetection::GridPtr generateSDF(const std::vector<Vector3r>
3838
std::cout << "Set SDF resolution: " << resolution[0] << ", " << resolution[1] << ", " << resolution[2] << std::endl;
3939
auto sdf = std::make_shared<PBD::CubicSDFCollisionDetection::Grid>(domain, std::array<unsigned int, 3>({ resolution[0], resolution[1], resolution[2] }));
4040
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
41-
func = [&md](Eigen::Vector3d const& xi) {return md.signedDistanceCached(xi); };
41+
func = [&md](Eigen::Vector3d const& xi) {return md.signed_distance(xi).distance; };
4242
std::cout << "Generate SDF\n";
4343
sdf->addFunction(func, true);
4444
return sdf;

0 commit comments

Comments
 (0)