PxScene* getScene( PxPhysics* physics ) { PxSceneDesc scene_desc( physics->getTolerancesScale() ); scene_desc.cpuDispatcher = PxDefaultCpuDispatcherCreate(1); scene_desc.filterShader = PxDefaultSimulationFilterShader; return physics->createScene( scene_desc ); }
void phx::core::scene::base::create_physics() { BOOST_LOG_CHANNEL_SEV(lg, "phx core scene", debug) << __PRETTY_FUNCTION__; if(px_scene_ != NULL) { BOOST_LOG_CHANNEL_SEV(lg, "phx core scene", debug) << "been here!"; return; } auto pxphysics = phx::app::base::global()->px_physics_; physx::PxSceneDesc scene_desc(pxphysics->getTolerancesScale()); scene_desc.gravity = phx::util::convert(gravity_); scene_desc.flags |= physx::PxSceneFlag::eENABLE_ACTIVETRANSFORMS; int m_nbThreads = 1; // cpu dispatcher printf("cpu dispatcher\n"); if( !scene_desc.cpuDispatcher ) { physx::PxDefaultCpuDispatcher* cpuDispatcher = ::physx::PxDefaultCpuDispatcherCreate( m_nbThreads ); assert( cpuDispatcher ); scene_desc.cpuDispatcher = cpuDispatcher; } // filter shader printf("filter shader\n"); if(!scene_desc.filterShader) { if(px_filter_shader_) { scene_desc.filterShader = px_filter_shader_; } else { scene_desc.filterShader = DefaultFilterShader; } } // gpu dispatcher printf("gpu dispatcher\n"); #ifdef PX_WINDOWS if( !scene_desc.gpuDispatcher && m_cudaContextManager ) { sceneDesc.gpuDispatcher = m_cudaContextManager->getGpuDispatcher(); } #endif assert( scene_desc.isValid() ); px_scene_ = pxphysics->createScene(scene_desc); assert(px_scene_); // simulation callback phx::simulation_callback* sec = new phx::simulation_callback; simulation_callback_ = sec; px_scene_->setSimulationEventCallback(sec); }