| /* | |
| Bullet Continuous Collision Detection and Physics Library | |
| Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ | |
| This software is provided 'as-is', without any express or implied warranty. | |
| In no event will the authors be held liable for any damages arising from the use of this software. | |
| Permission is granted to anyone to use this software for any purpose, | |
| including commercial applications, and to alter it and redistribute it freely, | |
| subject to the following restrictions: | |
| 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. | |
| 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. | |
| 3. This notice may not be removed or altered from any source distribution. | |
| */ | |
| #ifndef BENCHMARK_DEMO_H | |
| #define BENCHMARK_DEMO_H | |
| #include "LinearMath/btAlignedObjectArray.h" | |
| #include "LinearMath/btTransform.h" | |
| class btDynamicsWorld; | |
| #define NUMRAYS 500 | |
| class btRigidBody; | |
| class btBroadphaseInterface; | |
| class btCollisionShape; | |
| class btOverlappingPairCache; | |
| class btCollisionDispatcher; | |
| class btConstraintSolver; | |
| struct btCollisionAlgorithmCreateFunc; | |
| class btDefaultCollisionConfiguration; | |
| #ifndef USE_GLUT_DEMO_APPLICATION | |
| ///empty placeholder | |
| class DemoApplication | |
| { | |
| protected: | |
| btDynamicsWorld* m_dynamicsWorld; | |
| public: | |
| virtual void myinit() {} | |
| virtual btDynamicsWorld* getDynamicsWorld() | |
| { | |
| return m_dynamicsWorld; | |
| } | |
| btScalar getDeltaTimeMicroseconds() | |
| { | |
| return 1.f; | |
| } | |
| void renderme() {} | |
| void setCameraDistance(btScalar dist){} | |
| void clientResetScene(){} | |
| btRigidBody* localCreateRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape); | |
| }; | |
| ///BenchmarkDemo is provides several performance tests | |
| class BenchmarkDemo : public DemoApplication | |
| #else | |
| #include "GlutDemoApplication.h" | |
| class BenchmarkDemo : public GlutDemoApplication | |
| #endif | |
| { | |
| //keep the collision shapes, for deletion/cleanup | |
| btAlignedObjectArray<btCollisionShape*> m_collisionShapes; | |
| btAlignedObjectArray<class RagDoll*> m_ragdolls; | |
| btBroadphaseInterface* m_overlappingPairCache; | |
| btCollisionDispatcher* m_dispatcher; | |
| btConstraintSolver* m_solver; | |
| btDefaultCollisionConfiguration* m_collisionConfiguration; | |
| int m_benchmark; | |
| void createTest1(); | |
| void createTest2(); | |
| void createTest3(); | |
| void createTest4(); | |
| void createTest5(); | |
| void createTest6(); | |
| void createTest7(); | |
| void createWall(const btVector3& offsetPosition,int stackSize,const btVector3& boxSize); | |
| void createPyramid(const btVector3& offsetPosition,int stackSize,const btVector3& boxSize); | |
| void createTowerCircle(const btVector3& offsetPosition,int stackSize,int rotSize,const btVector3& boxSize); | |
| void createLargeMeshBody(); | |
| class SpuBatchRaycaster* m_batchRaycaster; | |
| class btThreadSupportInterface* m_batchRaycasterThreadSupport; | |
| void castRays(); | |
| void initRays(); | |
| public: | |
| BenchmarkDemo(int benchmark) | |
| :m_benchmark(benchmark) | |
| { | |
| } | |
| virtual ~BenchmarkDemo() | |
| { | |
| exitPhysics(); | |
| } | |
| void initPhysics(); | |
| void exitPhysics(); | |
| virtual void clientMoveAndDisplay(); | |
| virtual void displayCallback(); | |
| }; | |
| class BenchmarkDemo1 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo1() | |
| :BenchmarkDemo(1) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo1* demo = new BenchmarkDemo1; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| class BenchmarkDemo2 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo2() | |
| :BenchmarkDemo(2) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo2* demo = new BenchmarkDemo2; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| class BenchmarkDemo3 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo3() | |
| :BenchmarkDemo(3) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo3* demo = new BenchmarkDemo3; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| class BenchmarkDemo4 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo4() | |
| :BenchmarkDemo(4) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo4* demo = new BenchmarkDemo4; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| class BenchmarkDemo5 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo5() | |
| :BenchmarkDemo(5) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo5* demo = new BenchmarkDemo5; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| class BenchmarkDemo6 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo6() | |
| :BenchmarkDemo(6) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo6* demo = new BenchmarkDemo6; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| class BenchmarkDemo7 : public BenchmarkDemo | |
| { | |
| public: | |
| BenchmarkDemo7() | |
| :BenchmarkDemo(7) | |
| { | |
| } | |
| static DemoApplication* Create() | |
| { | |
| BenchmarkDemo7* demo = new BenchmarkDemo7; | |
| demo->myinit(); | |
| demo->initPhysics(); | |
| return demo; | |
| } | |
| }; | |
| #endif //BENCHMARK_DEMO_H | |