Beispiel #1
0
void VisualDebugger::setupSceneConnection(Scb::Scene& s)
{
	physx::debugger::comm::PvdDataStream* conn = mPvdConnectionFactory ? &mPvdConnectionFactory->createDataStream() : NULL;
	if(conn)
	s.getSceneVisualDebugger().setPvdConnection(conn, mPvdConnectionFactory ? mPvdConnectionFactory->getConnectionType() : physx::debugger::TConnectionFlagsType(0));
	s.getSceneVisualDebugger().setCreateContactReports(conn ? getTransmitContactsFlag() : false);
}
void NpRigidDynamic::release()
{
    NP_WRITE_CHECK(NpActor::getOwnerScene(*this));

    NpPhysics::getInstance().notifyDeletionListenersUserRelease(this, userData);

    Scb::Scene* s = mBody.getScbSceneForAPI();

    bool noSim = mBody.isSimDisabledInternally();
    // important to check the non-buffered flag because it tells what the current internal state of the object is
    // (someone might switch to non-simulation and release all while the sim is running).
    if (s && noSim)
    {
        // need to do it here because the Np-shape buffer will not be valid anymore after the release below
        // and unlike simulation objects, there is no shape buffer in the simulation controller
        getShapeManager().clearShapesOnRelease(*s, *this);
    }

    NpRigidDynamicT::release();

    // Remove from scene should happen at the end because the base class still needs to know whether the object was in the scene (implicit constraint removal etc.)
    if (s)
    {
        s->removeRigidBody(mBody, true, noSim);
        static_cast<NpScene*>(s->getPxScene())->removeFromRigidActorList(mIndex);
    }

    mBody.destroy();
}
void VisualDebugger::setupSceneConnection(Scb::Scene& s)
{
	PVD::PvdDataStream* conn = mPvdConnectionFactory ? mPvdConnectionFactory->createDataStream() : NULL;
	if(conn)
		conn->setNamespace(getPhysxNamespace());
	s.getSceneVisualDebugger().setPvdConnection(conn, mPvdConnectionFactory ? mPvdConnectionFactory->getConnectionType() : PVD::TConnectionFlagsType(0));
	s.getSceneVisualDebugger().setCreateContactReports(conn ? getTransmitContactsFlag() : false);
}
SceneQueryManager::SceneQueryManager(	Scb::Scene& scene, PxPruningStructureType::Enum staticStructure, 
										PxPruningStructureType::Enum dynamicStructure, PxU32 dynamicTreeRebuildRateHint,
										const PxSceneLimits& limits) :
	mScene		(scene)
{
	mPrunerExt[PruningIndex::eSTATIC].init(staticStructure, scene.getContextId());
	mPrunerExt[PruningIndex::eDYNAMIC].init(dynamicStructure, scene.getContextId());

	setDynamicTreeRebuildRateHint(dynamicTreeRebuildRateHint);

	preallocate(limits.maxNbStaticShapes, limits.maxNbDynamicShapes);

	mDynamicBoundsSync.mPruner = mPrunerExt[PruningIndex::eDYNAMIC].pruner();
	mDynamicBoundsSync.mTimestamp = &mPrunerExt[PruningIndex::eDYNAMIC].mTimestamp;
}
void NpConstraint::updateConstants()
{
	if(!mIsDirty)
		return;

	//ML - we can't just set dirty to false because this fails with constraints that were created while the scene was buffering!
	if(mConstraint.updateConstants(mConstraint.getPxConnector()->prepareData()))
		mIsDirty = false;
#if PX_SUPPORT_PVD
	Scb::Scene* scbScene = mConstraint.getScbSceneForAPI();
	//Changed to use the visual scenes update system which respects
	//the debugger's connection type flag.
	if( scbScene && !scbScene->isPhysicsBuffering() )
		scbScene->getScenePvdClient().updatePvdProperties( &mConstraint );
#endif
}
void NpShapeManager::clearShapesOnRelease(Scb::Scene& s, PxRigidActor& r)
{
	PX_ASSERT(static_cast<Scb::RigidObject&>(NpActor::getScbFromPxActor(r)).isSimDisabledInternally());
	
	const PxU32 nbShapes = getNbShapes();
	NpShape*const* PX_RESTRICT shapes = getShapes();

	for(PxU32 i=0;i<nbShapes;i++)
	{
		Scb::Shape& scbShape = shapes[i]->getScbShape();
		scbShape.checkUpdateOnRemove<false>(&s);
#if PX_SUPPORT_PVD
		s.getScenePvdClient().releasePvdInstance(&scbShape, r);
#else
		PX_UNUSED(r);
#endif
	}
}