Prechádzať zdrojové kódy

Merge pull request #528 from riccardobl/bullet2.83.7

Update to Bullet 2.83.7
Kirill Vainer 9 rokov pred
rodič
commit
94c368aa42

+ 1 - 0
.gitignore

@@ -19,6 +19,7 @@
 /jme3-*/build/
 /jme3-bullet-native/bullet.zip
 /jme3-bullet-native/bullet-2.82-r2704/
+/jme3-bullet-native/bullet3-2.83.7/
 /jme3-android-native/openal-soft/
 /jme3-android-native/OpenALSoft.zip
 /jme3-android-native/src/native/jme_decode/STBI/

+ 2 - 2
gradle.properties

@@ -19,8 +19,8 @@ buildAndroidExamples = false
 ndkPath = /opt/android-ndk-r10c
 
 # Path for downloading native Bullet
-bulletUrl = http://bullet.googlecode.com/files/bullet-2.82-r2704.zip
-bulletFolder = bullet-2.82-r2704
+bulletUrl = https://github.com/bulletphysics/bullet3/archive/2.83.7.zip
+bulletFolder = bullet3-2.83.7
 bulletZipFile = bullet.zip
 
 # Path for downloading NetBeans Base

+ 8 - 1
jme3-bullet-native/build.gradle

@@ -27,12 +27,13 @@ model {
                     source {
                         srcDir 'src/native/cpp'
                         srcDir bulletSrcPath
-                        exclude 'BulletMultiThreaded/GpuSoftBodySolvers/**'
+                        exclude 'Bullet3OpenCL/**'
                         include '**/*.cpp'
                     }
                     exportedHeaders {
                         srcDir 'src/native/cpp'
                         srcDir bulletSrcPath
+                        exclude 'Bullet3OpenCL/**'
                         include '**/*.h'
                     }
                 }
@@ -84,10 +85,14 @@ model {
 
             if (os == "osx") {
                 cppCompiler.args '-I', "$javaHome/include/darwin"
+                cppCompiler.args "-Ofast"
+                cppCompiler.args "-U_FORTIFY_SOURCE"
             } else if (os == "linux") {
                 cppCompiler.args "-fvisibility=hidden"
                 cppCompiler.args '-I', "$javaHome/include/linux"
                 cppCompiler.args "-fPIC"
+                cppCompiler.args "-Ofast"
+                cppCompiler.args "-U_FORTIFY_SOURCE"
                 cppCompiler.args "-fpermissive"
                 linker.args "-fvisibility=hidden"
             } else if (os == "windows") {
@@ -99,6 +104,8 @@ model {
                     }
                     cppCompiler.args "-fpermissive"
                     cppCompiler.args "-static"
+                    cppCompiler.args "-Ofast"
+                    cppCompiler.args "-U_FORTIFY_SOURCE"
                     linker.args "-static"
                     linker.args "-Wl,--exclude-all-symbols"
                 }

+ 4 - 77
jme3-bullet-native/src/native/cpp/jmePhysicsSpace.cpp

@@ -31,7 +31,6 @@
  */
 #include "jmePhysicsSpace.h"
 #include "jmeBulletUtil.h"
-#include <stdio.h>
 
 /**
  * Author: Normen Hansen
@@ -66,49 +65,8 @@ void jmePhysicsSpace::stepSimulation(jfloat tpf, jint maxSteps, jfloat accuracy)
     dynamicsWorld->stepSimulation(tpf, maxSteps, accuracy);
 }
 
-btThreadSupportInterface* jmePhysicsSpace::createSolverThreadSupport(int maxNumThreads) {
-#ifdef _WIN32
-    Win32ThreadSupport::Win32ThreadConstructionInfo threadConstructionInfo("solverThreads", SolverThreadFunc, SolverlsMemoryFunc, maxNumThreads);
-    Win32ThreadSupport* threadSupport = new Win32ThreadSupport(threadConstructionInfo);
-    threadSupport->startSPU();
-#elif defined (USE_PTHREADS)
-    PosixThreadSupport::ThreadConstructionInfo constructionInfo("collision", SolverThreadFunc,
-            SolverlsMemoryFunc, maxNumThreads);
-    PosixThreadSupport* threadSupport = new PosixThreadSupport(constructionInfo);
-    threadSupport->startSPU();
-#else
-    SequentialThreadSupport::SequentialThreadConstructionInfo tci("solverThreads", SolverThreadFunc, SolverlsMemoryFunc);
-    SequentialThreadSupport* threadSupport = new SequentialThreadSupport(tci);
-    threadSupport->startSPU();
-#endif
-    return threadSupport;
-}
-
-btThreadSupportInterface* jmePhysicsSpace::createDispatchThreadSupport(int maxNumThreads) {
-#ifdef _WIN32
-    Win32ThreadSupport::Win32ThreadConstructionInfo threadConstructionInfo("solverThreads", processCollisionTask, createCollisionLocalStoreMemory, maxNumThreads);
-    Win32ThreadSupport* threadSupport = new Win32ThreadSupport(threadConstructionInfo);
-    threadSupport->startSPU();
-#elif defined (USE_PTHREADS)
-    PosixThreadSupport::ThreadConstructionInfo solverConstructionInfo("solver", processCollisionTask,
-            createCollisionLocalStoreMemory, maxNumThreads);
-    PosixThreadSupport* threadSupport = new PosixThreadSupport(solverConstructionInfo);
-    threadSupport->startSPU();
-#else
-    SequentialThreadSupport::SequentialThreadConstructionInfo tci("solverThreads", processCollisionTask, createCollisionLocalStoreMemory);
-    SequentialThreadSupport* threadSupport = new SequentialThreadSupport(tci);
-    threadSupport->startSPU();
-#endif
-    return threadSupport;
-}
-
-void jmePhysicsSpace::createPhysicsSpace(jfloat minX, jfloat minY, jfloat minZ, jfloat maxX, jfloat maxY, jfloat maxZ, jint broadphaseId, jboolean threading) {
-    // collision configuration contains default setup for memory, collision setup
-    btDefaultCollisionConstructionInfo cci;
-    //    if(threading){
-    //        cci.m_defaultMaxPersistentManifoldPoolSize = 32768;
-    //    }
-    btCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(cci);
+void jmePhysicsSpace::createPhysicsSpace(jfloat minX, jfloat minY, jfloat minZ, jfloat maxX, jfloat maxY, jfloat maxZ, jint broadphaseId, jboolean threading /*unused*/) {
+    btCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
 
     btVector3 min = btVector3(minX, minY, minZ);
     btVector3 max = btVector3(maxX, maxY, maxZ);
@@ -129,50 +87,19 @@ void jmePhysicsSpace::createPhysicsSpace(jfloat minX, jfloat minY, jfloat minZ,
         case 3:
             broadphase = new btDbvtBroadphase();
             break;
-        case 4:
-            //            broadphase = new btGpu3DGridBroadphase(
-            //                    min, max,
-            //                    20, 20, 20,
-            //                    10000, 1000, 25);
-            break;
     }
 
-    btCollisionDispatcher* dispatcher;
-    btConstraintSolver* solver;
-    // use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
-    if (threading) {
-        btThreadSupportInterface* dispatchThreads = createDispatchThreadSupport(4);
-        dispatcher = new SpuGatheringCollisionDispatcher(dispatchThreads, 4, collisionConfiguration);
-        dispatcher->setDispatcherFlags(btCollisionDispatcher::CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION);
-    } else {
-        dispatcher = new btCollisionDispatcher(collisionConfiguration);
-    }
+    btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
     btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher);
-    
 
-    // the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded)
-    if (threading) {
-        btThreadSupportInterface* solverThreads = createSolverThreadSupport(4);
-        solver = new btParallelConstraintSolver(solverThreads);
-    } else {
-        solver = new btSequentialImpulseConstraintSolver;
-    }
+    btConstraintSolver* solver = new btSequentialImpulseConstraintSolver();
 
     //create dynamics world
     btDiscreteDynamicsWorld* world = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
     dynamicsWorld = world;
     dynamicsWorld->setWorldUserInfo(this);
 
-    //parallel solver requires the contacts to be in a contiguous pool, so avoid dynamic allocation
-    if (threading) {
-        world->getSimulationIslandManager()->setSplitIslands(false);
-        world->getSolverInfo().m_numIterations = 4;
-        world->getSolverInfo().m_solverMode = SOLVER_SIMD + SOLVER_USE_WARMSTARTING; //+SOLVER_RANDMIZE_ORDER;
-        world->getDispatchInfo().m_enableSPU = true;
-    }
-
     broadphase->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
-
     dynamicsWorld->setGravity(btVector3(0, -9.81f, 0));
 
     struct jmeFilterCallback : public btOverlapFilterCallback {

+ 0 - 11
jme3-bullet-native/src/native/cpp/jmePhysicsSpace.h

@@ -36,15 +36,6 @@
 #include "BulletCollision/CollisionDispatch/btCollisionObject.h"
 #include "BulletCollision/CollisionDispatch/btGhostObject.h"
 #include "BulletDynamics/Character/btKinematicCharacterController.h"
-#ifdef _WIN32
-#include "BulletMultiThreaded/Win32ThreadSupport.h"
-#else
-#include "BulletMultiThreaded/PosixThreadSupport.h"
-#endif
-#include "BulletMultiThreaded/btParallelConstraintSolver.h"
-#include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h"
-#include "BulletMultiThreaded/SpuCollisionTaskProcess.h"
-#include "BulletMultiThreaded/SequentialThreadSupport.h"
 #include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
 #include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
 #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
@@ -59,8 +50,6 @@ private:
 	JavaVM* vm;
 	btDynamicsWorld* dynamicsWorld;
 	jobject javaPhysicsSpace;
-        btThreadSupportInterface* createSolverThreadSupport(int);
-        btThreadSupportInterface* createDispatchThreadSupport(int);
         void attachThread();
 public:
 	jmePhysicsSpace(){};