void ClothingScene::removeRenderProxies(ClothingAsset* asset) { // delete all render proxies that have the RenderMeshAsset // of this ClothingAsset mRenderProxiesLock.lock(); PxU32 numGraphicalMeshes = asset->getNumGraphicalMeshes(); for (PxU32 i = 0; i < numGraphicalMeshes; ++i) { NiApexRenderMeshAsset* renderMeshAsset = asset->getGraphicalMesh(i); Array<ClothingRenderProxy*>& renderProxies = mRenderProxies[renderMeshAsset]; for (PxI32 i = (physx::PxI32)renderProxies.size()-1; i >= 0 ; --i) { ClothingRenderProxy* renderProxy = renderProxies[(physx::PxU32)i]; if (renderProxy->getTimeInPool() > 0) { PX_DELETE(renderProxies[(physx::PxU32)i]); } else { renderProxy->notifyAssetRelease(); } } renderProxies.clear(); mRenderProxies.erase(renderMeshAsset); } mRenderProxiesLock.unlock(); }
void ClothingScene::tickRenderProxies() { PX_PROFILER_PERF_SCOPE("ClothingScene::tickRenderProxies"); mRenderProxiesLock.lock(); for(HashMap<NiApexRenderMeshAsset*, Array<ClothingRenderProxy*> >::Iterator iter = mRenderProxies.getIterator(); !iter.done(); ++iter) { Array<ClothingRenderProxy*>& renderProxies = iter->second; for (PxI32 i = (physx::PxI32)renderProxies.size()-1; i >= 0 ; --i) { PxU32 timeInPool = renderProxies[(physx::PxU32)i]->getTimeInPool(); if (timeInPool > 0) { if (timeInPool > mModule->getMaxTimeRenderProxyInPool() + 1) // +1 because we add them with time 1 { PX_DELETE(renderProxies[(physx::PxU32)i]); renderProxies.replaceWithLast((physx::PxU32)i); } else { renderProxies[(physx::PxU32)i]->setTimeInPool(timeInPool+1); } } } } mRenderProxiesLock.unlock(); }
void ApexResourceProvider::destroy() { if (mUserCallback) { for (uint32_t i = 0 ; i < mResources.size() ; i++) { ApexResourceProvider::resource& res = mResources[i]; if (res.refCount != 0 && res.valueIsSet && res.ptr != NULL) { ResID resIndex = mNSNames.getOrCreateID(res.nameSpace, "NameSpace"); PX_ASSERT(mResources[resIndex].ptr); uint32_t nsIndex = getNSIndex((ResID)(size_t)mResources[resIndex].ptr); if (nsIndex < mNameSpaces.size() && mNameSpaces[nsIndex]->releaseAtExit()) { if (res.usedGetResource) // this check added for PhysXLab DE4349 { mUserCallback->releaseResource(res.nameSpace, res.name, res.ptr); } else { APEX_DEBUG_WARNING("Unreleased resource found during teardown: Namespace <%s>, Name <%s>", res.nameSpace, res.name); } } } } } mResources.clear(); for (uint32_t i = 0 ; i < mNameSpaces.size() ; i++) { PX_DELETE(mNameSpaces[i]); } mNameSpaces.clear(); delete this; }
void DefaultBufferedProfiler::release() { mProfileZoneHandler.release(); mProfileZoneManager->removeProfileZoneHandler(mProfileZoneHandler); mCallbacks.clear(); mProfileZoneManager->release(); PX_DELETE(this); }
void ProfileZoneHandler::release() { for (PxU32 i = mProfileZoneInterfaces.size(); i--;) { mProfileZoneInterfaces[i]->getProfileZone().removeClient(*mProfileZoneInterfaces[i]); PX_DELETE(mProfileZoneInterfaces[i]); } mProfileZoneInterfaces.clear(); }
void ProfileZoneHandler::onZoneRemoved( PxProfileZone& inSDK) { for (PxU32 i = mProfileZoneInterfaces.size(); i--;) { if(&mProfileZoneInterfaces[i]->getProfileZone() == &inSDK) { inSDK.removeClient(*mProfileZoneInterfaces[i]); PX_DELETE(mProfileZoneInterfaces[i]); mProfileZoneInterfaces.replaceWithLast(i); break; } } }
void ApexRenderMeshAsset::setSubmeshCount(physx::PxU32 submeshCount) { const physx::PxU32 oldSize = mSubmeshes.size(); for (physx::PxU32 i = oldSize; i-- > submeshCount;) { PX_DELETE(mSubmeshes[i]); } mSubmeshes.resize(submeshCount); for (physx::PxU32 i = oldSize; i < submeshCount; ++i) { mSubmeshes[i] = PX_NEW(ApexRenderSubmesh); } }
void PxTaskMgr::release() { PX_DELETE(this); }
void ClothingScene::destroy() { for (PxU32 i = 0; i < mActorArray.size(); i++) { ClothingActor* clothingActor = static_cast<ClothingActor*>(mActorArray[i]); clothingActor->waitForFetchResults(); } removeAllActors(); mClothingAssetsMutex.lock(); for (physx::PxU32 i = 0 ; i < mClothingAssets.size(); i++) { if (mPhysXScene != NULL) { mClothingAssets[i]->hintSceneDeletion(mPhysXScene); } // for PhysX3: making sure that fabrics (in assets) are released before the factories (in mSimulationTask) mClothingAssets[i]->releaseCookedInstances(); } mClothingAssets.clear(); mClothingAssetsMutex.unlock(); // clear render list for(HashMap<NiApexRenderMeshAsset*, Array<ClothingRenderProxy*> >::Iterator iter = mRenderProxies.getIterator(); !iter.done(); ++iter) { Array<ClothingRenderProxy*>& renderProxies = iter->second; for (PxI32 i = (physx::PxI32)renderProxies.size()-1; i >= 0 ; --i) { PxU32 timeInPool = renderProxies[(physx::PxU32)i]->getTimeInPool(); if (timeInPool > 0) { PX_DELETE(renderProxies[(physx::PxU32)i]); renderProxies.replaceWithLast((physx::PxU32)i); } else { // actually the scene is released, but we just want to make sure // that the render proxy deletes itself when it's returned next time renderProxies[(physx::PxU32)i]->notifyAssetRelease(); } } renderProxies.clear(); } //mRenderProxies.clear(); while (mCurrentCookingTask != NULL) { submitCookingTask(NULL); physx::Thread::sleep(0); // wait for remaining cooking tasks to finish } if (mSimulationTask != NULL) { setModulePhysXScene(NULL); // does some cleanup necessary here. Only needed when module gets deleted without the apex scene being deleted before! PX_DELETE(mSimulationTask); mSimulationTask = NULL; } if (mWaitForSolverTask != NULL) { PX_DELETE(mWaitForSolverTask); mWaitForSolverTask = NULL; } { if (mCpuFactory.factory != NULL) { mModule->releaseClothFactory(NULL); mCpuFactory.clear(); } #ifdef PX_WINDOWS PX_ASSERT(mGpuFactory.factory == NULL); NiApexSDK* apexSdk = NiGetApexSDK(); apexSdk->unregisterPhysXIndicatorGpuClient(mPhysXGpuIndicator); mPhysXGpuIndicator = NULL; #endif } mApexScene->moduleReleased(*this); delete this; }
Actor::~Actor() { PX_DELETE(mDefaultFracturePattern); mDefaultFracturePattern = NULL; }
NpSpatialIndex::~NpSpatialIndex() { PX_DELETE(mPruner); }