ソースを参照

Update newton

Panagiotis Christopoulos Charitos 9 年 前
コミット
4df32576fb

+ 23 - 6
CMakeLists.txt

@@ -129,7 +129,7 @@ add_definitions(-fno-exceptions)
 
 # static libstdc++
 if(GCC)
-	set(CXX_FLAGS "${CXX_FLAGS} -static-libstdc++ ")
+	#set(CXX_FLAGS "${CXX_FLAGS} -static-libstdc++ ")
 endif()
 
 # SSE
@@ -209,7 +209,7 @@ message("++ Lib install dir: ${LIB_INSTALL_DIR}")
 ################################################################################
 include(ExternalProject)
 
-set(ANKI_EXTERN_SUB_DIRS tinyxml2 lua z newton)
+set(ANKI_EXTERN_SUB_DIRS tinyxml2 lua z)
 
 if((LINUX OR MACOS OR WINDOWS) AND GL)
 	set(ANKI_EXTERN_SUB_DIRS ${ANKI_EXTERN_SUB_DIRS} GLEW)
@@ -244,6 +244,20 @@ else()
 	set(SDL2_INSTALL_DIR "")
 endif()
 
+# Newton
+ExternalProject_Add(
+	NEWTON_PROJECT
+	DOWNLOAD_COMMAND ""
+	PREFIX "${CMAKE_CURRENT_BINARY_DIR}/newton_build"
+	SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/newton"
+	CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/newton_build -DCMAKE_BUILD_TYPE=Release 
+		-DNEWTON_DEMOS_SANDBOX=OFF -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
+
+add_library(NEWTON_LIB SHARED IMPORTED)
+set_property(TARGET NEWTON_LIB PROPERTY IMPORTED_LOCATION 
+	"${CMAKE_CURRENT_BINARY_DIR}/newton_build/lib/libNewton${CMAKE_SHARED_LIBRARY_SUFFIX}")
+add_dependencies(NEWTON_LIB NEWTON_PROJECT)
+
 # freetype
 ExternalProject_Add(
 	FREETYPE_PROJECT
@@ -322,7 +336,8 @@ find_package(Doxygen)
 if(DOXYGEN_FOUND)
 	message("++ Doxygen found")
 
-	add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+	add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxyfile 
+		WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 		COMMENT "Generating API documentation with Doxygen" VERBATIM)
 endif()
 
@@ -341,8 +356,10 @@ CONFIGURE_FILE("src/anki/Config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/anki/Confi
 INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/anki/Config.h" DESTINATION "${INCLUDE_INSTALL_DIR}/anki")
 
 # Include & lib directories
-include_directories("src" "thirdparty/tinyxml2/include" "thirdparty/lua" "thirdparty/z"
-	"${SDL2_INSTALL_DIR}/include/SDL2/" "${FREETYPE_INSTALL_DIR}/include/freetype2/" "thirdparty/newton/newton" "${CMAKE_CURRENT_BINARY_DIR}" ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glslang thirdparty)
+include_directories("src" "thirdparty/tinyxml2/include" "thirdparty/lua" "thirdparty/z" 
+	"${SDL2_INSTALL_DIR}/include/SDL2/" "${FREETYPE_INSTALL_DIR}/include/freetype2/" 
+	"thirdparty/newton/coreLibrary_300/source/" "${CMAKE_CURRENT_BINARY_DIR}" 
+	${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glslang thirdparty)
 
 if(LINUX OR MACOS OR WINDOWS)
 	include_directories("thirdparty/GLEW/include")
@@ -410,7 +427,7 @@ endforeach()
 
 add_library(anki src/anki/Dummy.cpp "${_SYS_SRC}")
 
-target_link_libraries(anki ${ANKI_LIBS} ankitinyxml2 ankilua ankiz ankinewton ${ANKI_GPERFTOOLS_LIBS} SDL2_LIB FREETYPE_LIB ${_SYS})
+target_link_libraries(anki ${ANKI_LIBS} ankitinyxml2 ankilua ankiz NEWTON_LIB ${ANKI_GPERFTOOLS_LIBS} SDL2_LIB FREETYPE_LIB ${_SYS})
 
 if(VULKAN)
 #target_link_libraries(anki GLSLANG_LIB)

+ 1 - 1
src/anki/physics/Common.h

@@ -9,7 +9,7 @@
 #include <anki/util/Enum.h>
 #include <anki/util/Ptr.h>
 #include <anki/Math.h>
-#include <Newton.h>
+#include <newton/Newton.h>
 
 namespace anki
 {

+ 1 - 1
src/anki/physics/PhysicsBody.cpp

@@ -118,7 +118,7 @@ void PhysicsBody::applyGravityForce(const NewtonBody* body, dFloat timestep, int
 	dFloat Izz;
 	dFloat mass;
 
-	NewtonBodyGetMassMatrix(body, &mass, &Ixx, &Iyy, &Izz);
+	NewtonBodyGetMass(body, &mass, &Ixx, &Iyy, &Izz);
 
 	const F32 GRAVITY = -9.8;
 	Vec4 force(0.0, mass * GRAVITY, 0.0, 0.0);

+ 8 - 4
src/anki/physics/PhysicsPlayerController.cpp

@@ -183,7 +183,7 @@ Error PhysicsPlayerController::create(const PhysicsPlayerControllerInitInfo& ini
 	outerShapeMatrix.setTranslationPart(transl);
 	outerShapeMatrix.transpose();
 
-	NewtonCollision* bodyCapsule = NewtonCreateCapsule(world, 0.25, 0.5, 0, &outerShapeMatrix[0]);
+	NewtonCollision* bodyCapsule = NewtonCreateCapsule(world, 0.25, 0.25, 0.5, 0, &outerShapeMatrix[0]);
 	if(bodyCapsule == nullptr)
 	{
 		ANKI_LOGE("NewtonCreateCapsule() failed");
@@ -373,16 +373,20 @@ void PhysicsPlayerController::updateGroundPlane(Mat4& matrix, const Mat4& castMa
 {
 	NewtonWorld* world = m_world->getNewtonWorld();
 
+	NewtonWorldConvexCastReturnInfo info;
 	CustomControllerConvexRayFilter filter;
 	filter.m_me = m_body;
 
-	NewtonWorldConvexRayCast(world,
-		m_castingShape,
+	F32 param = 10.0f;
+	NewtonWorldConvexCast(world,
 		&toNewton(castMatrix)[0],
 		reinterpret_cast<const F32*>(&dst),
-		CustomControllerConvexRayFilter::filterCallback,
+		m_castingShape,
+		&param,
 		&filter,
 		CustomControllerConvexRayFilter::prefilterCallback,
+		&info,
+		1,
 		threadIndex);
 
 	m_groundPlane = Vec4(0.0);

+ 0 - 1
src/anki/physics/PhysicsWorld.cpp

@@ -90,7 +90,6 @@ Error PhysicsWorld::create(AllocAlignedCallback allocCb, void* allocCbData)
 	NewtonMaterialSetCollisionCallback(m_world,
 		NewtonMaterialGetDefaultGroupID(m_world),
 		NewtonMaterialGetDefaultGroupID(m_world),
-		nullptr,
 		onAabbOverlapCallback,
 		onContactCallback);
 

+ 1 - 1
thirdparty

@@ -1 +1 @@
-Subproject commit 940bcadc047868060431dc2757af052a7c0b2c25
+Subproject commit 281da3ce6ef8f7a22f7bcc4e4a6a536b42f42449