MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / updateLowLevelMaterial

Method updateLowLevelMaterial

physx/source/physx/src/buffering/ScbScene.cpp:746–789  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

744///////////////////////////////////////////////////////////////////////////////
745
746void Scb::Scene::updateLowLevelMaterial(NpMaterial** masterMaterial)
747{
748 Ps::Mutex::ScopedLock lock(mSceneMaterialBufferLock);
749
750 //sync all the material events
751 PxsMaterialManager& manager = mScene.getMaterialManager();
752 for(PxU32 i=0; i< mSceneMaterialBuffer.size(); ++i)
753 {
754 const MaterialEvent& event = mSceneMaterialBuffer[i];
755 const NpMaterial* masMat = masterMaterial[event.mHandle];
756 switch(event.mType)
757 {
758 case MATERIAL_ADD:
759 if(masMat)
760 {
761 Sc::MaterialCore* materialCore = &masterMaterial[event.mHandle]->getScMaterial();
762 manager.setMaterial(materialCore);
763 mScene.registerMaterialInNP(*materialCore);
764 }
765 break;
766 case MATERIAL_UPDATE:
767 if(masMat)
768 {
769 Sc::MaterialCore* materialCore = &masterMaterial[event.mHandle]->getScMaterial();
770 manager.updateMaterial(materialCore);
771 mScene.updateMaterialInNP(*materialCore);
772 }
773 break;
774 case MATERIAL_REMOVE:
775 if (event.mHandle < manager.getMaxSize()) // materials might get added and then removed again immediately. However, the add does not get processed (see case MATERIAL_ADD above),
776 { // so the remove might end up reading out of bounds memory unless checked.
777 PxsMaterialCore* materialCore = manager.getMaterial(event.mHandle);
778 if (materialCore->getMaterialIndex() == event.mHandle)
779 {
780 mScene.unregisterMaterialInNP(*materialCore);
781 manager.removeMaterial(materialCore);
782 }
783 }
784 break;
785 };
786 }
787
788 mSceneMaterialBuffer.resize(0);
789}
790
791//--------------------------------------------------------------
792//

Callers 1

simulateOrCollideMethod · 0.80

Calls 12

getMaterialManagerMethod · 0.80
registerMaterialInNPMethod · 0.80
updateMaterialInNPMethod · 0.80
getMaterialIndexMethod · 0.80
sizeMethod · 0.45
setMaterialMethod · 0.45
updateMaterialMethod · 0.45
getMaxSizeMethod · 0.45
getMaterialMethod · 0.45
removeMaterialMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected