JNIEXPORT jboolean JNICALL Java_org_gearvrf_bullet_Bullet_destroyPhysicsWorld(JNIEnv* env, jobject thiz, jlong physicsWorldId) { LOGV("in Java_org_gearvrf_bullet_Bullet_destroyPhysicsWorld."); btDynamicsWorld* pDynamicsWorld = g_DynamicsWorlds.get(physicsWorldId); if(pDynamicsWorld == NULL) { LOGV("Don't Load pDynamicsWorld."); return JNI_TRUE; } destroyPhysicsWorld(pDynamicsWorld); return JNI_TRUE; }
void AWPhysics::PhysicsManager::initPhysicsWorld() { // This leaks if called twice in a row. Therefore destroy first always: destroyPhysicsWorld(); mLogger << "creating physics world"; ///collision configuration contains default setup for memory, collision setup m_collisionConfiguration = new btDefaultCollisionConfiguration(); //m_collisionConfiguration->setConvexConvexMultipointIterations(); ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); m_broadphase = new btDbvtBroadphase(); ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; m_solver = sol; m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collisionConfiguration); m_dynamicsWorld->setGravity(btVector3(0, -10, 0)); mLogger << "finished creating physics world"; }
JNIEXPORT jboolean JNICALL Java_org_gearvrf_bullet_Bullet_destroyNative(JNIEnv* env, jobject thiz) { LOGV("in Java_org_gearvrf_bullet_Bullet_destroyNative."); // delete DynamicsWorld. for( signed int i = 0; i < g_DynamicsWorlds.size(); i++ ) { btDynamicsWorld* pDynamicsWorld = g_DynamicsWorlds[i]; destroyPhysicsWorld(pDynamicsWorld); } // delete Collisions. for( signed int i = 0; i < g_CollisionShapes.size(); i++ ) { btCollisionShape* shape = g_CollisionShapes[i]; g_CollisionShapes[i] = 0; SAFE_DELETE( shape ); } return JNI_TRUE; }
AWPhysics::PhysicsManager::~PhysicsManager() { destroyPhysicsWorld(); mLogger << "PhysicsManager destroyed"; }