Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 8 additions & 1 deletion jme3-bullet-native/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
}
Expand Down Expand Up @@ -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") {
Expand All @@ -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"
}
Expand Down
81 changes: 4 additions & 77 deletions jme3-bullet-native/src/native/cpp/jmePhysicsSpace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
*/
#include "jmePhysicsSpace.h"
#include "jmeBulletUtil.h"
#include <stdio.h>

/**
* Author: Normen Hansen
Expand Down Expand Up @@ -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);
Expand All @@ -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 {
Expand Down
11 changes: 0 additions & 11 deletions jme3-bullet-native/src/native/cpp/jmePhysicsSpace.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -59,8 +50,6 @@ class jmePhysicsSpace {
JavaVM* vm;
btDynamicsWorld* dynamicsWorld;
jobject javaPhysicsSpace;
btThreadSupportInterface* createSolverThreadSupport(int);
btThreadSupportInterface* createDispatchThreadSupport(int);
void attachThread();
public:
jmePhysicsSpace(){};
Expand Down