#include "MetaCorePhysics/MetaCorePhysics.h" #include "MetaCoreScene/MetaCoreScene.h" #include #include #include #include #if defined(__linux__) #include #endif namespace { double Milliseconds(std::chrono::steady_clock::duration value) { return std::chrono::duration(value).count(); } std::size_t ResidentBytes() { #if defined(__linux__) std::ifstream input("/proc/self/statm"); std::size_t pages=0,resident=0;input>>pages>>resident;(void)pages; return resident*static_cast(::sysconf(_SC_PAGESIZE)); #else return 0U; #endif } } int main() { using namespace MetaCore; MetaCoreScene scene; for (int y=0;y<100;++y) for(int x=0;x<100;++x) { auto object=scene.CreateGameObject("Static");object.GetComponent().Position={static_cast(x)*2.0F,static_cast(y)*2.0F,0.0F};object.AddComponent(); } for(int index=0;index<100;++index) { auto object=scene.CreateGameObject("Dynamic");object.GetComponent().Position={static_cast(index%10)*2.0F,static_cast(index/10)*2.0F,5.0F};object.AddComponent();object.AddComponent().BodyType=MetaCoreRigidBodyType::Dynamic; } const auto buildBegin=std::chrono::steady_clock::now();MetaCorePhysicsWorld world(scene,MetaCoreBuildDefaultPhysicsSettings());const double buildMs=Milliseconds(std::chrono::steady_clock::now()-buildBegin); const auto stepBegin=std::chrono::steady_clock::now();for(int index=0;index<10;++index)world.Step(1.0/60.0);const double stepMs=Milliseconds(std::chrono::steady_clock::now()-stepBegin)/10.0; const auto queryBegin=std::chrono::steady_clock::now();for(int index=0;index<1000;++index)(void)world.Raycast({static_cast(index%100)*2.0F,static_cast((index/100)%100)*2.0F,20.0F},{0,0,-1},50.0F);const double queryMs=Milliseconds(std::chrono::steady_clock::now()-queryBegin); const double memoryMiB=static_cast(ResidentBytes())/(1024.0*1024.0); std::cout<<"PhysicsBenchmark build_ms="<