CommonGUIHelperInterface.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #ifndef GUI_HELPER_INTERFACE_H
  2. #define GUI_HELPER_INTERFACE_H
  3. class btRigidBody;
  4. class btVector3;
  5. class btCollisionObject;
  6. class btDiscreteDynamicsWorld;
  7. class btCollisionShape;
  8. struct Common2dCanvasInterface;
  9. struct CommonParameterInterface;
  10. struct CommonRenderInterface;
  11. struct CommonGraphicsApp;
  12. struct GUISyncPosition
  13. {
  14. int m_graphicsInstanceId;
  15. float m_pos[4];
  16. float m_orn[4];
  17. };
  18. typedef void (*VisualizerFlagCallback)(int flag, bool enable);
  19. ///The Bullet 2 GraphicsPhysicsBridge let's the graphics engine create graphics representation and synchronize
  20. struct GUIHelperInterface
  21. {
  22. virtual ~GUIHelperInterface() {}
  23. virtual void createRigidBodyGraphicsObject(btRigidBody* body, const btVector3& color) = 0;
  24. virtual void createCollisionObjectGraphicsObject(btCollisionObject* obj, const btVector3& color) = 0;
  25. virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape) = 0;
  26. virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld) = 0;
  27. virtual void syncPhysicsToGraphics2(const btDiscreteDynamicsWorld* rbWorld) {}
  28. virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions) {}
  29. virtual void render(const btDiscreteDynamicsWorld* rbWorld) = 0;
  30. virtual void createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld) = 0;
  31. virtual int registerTexture(const unsigned char* texels, int width, int height) = 0;
  32. virtual int registerGraphicsShape(const float* vertices, int numvertices, const int* indices, int numIndices, int primitiveType, int textureId) = 0;
  33. virtual int registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling) = 0;
  34. virtual void removeAllGraphicsInstances() = 0;
  35. virtual void removeGraphicsInstance(int graphicsUid) {}
  36. virtual void changeInstanceFlags(int instanceUid, int flags) {}
  37. virtual void changeRGBAColor(int instanceUid, const double rgbaColor[4]) {}
  38. virtual void changeScaling(int instanceUid, const double scaling[3]) {}
  39. virtual void changeSpecularColor(int instanceUid, const double specularColor[3]) {}
  40. virtual void changeTexture(int textureUniqueId, const unsigned char* rgbTexels, int width, int height) {}
  41. virtual void updateShape(int shapeIndex, float* vertices, int numVertices) {}
  42. virtual int getShapeIndexFromInstance(int instanceUid) { return -1; }
  43. virtual void replaceTexture(int shapeIndex, int textureUid) {}
  44. virtual void removeTexture(int textureUid) {}
  45. virtual void setBackgroundColor(const double rgbBackground[3]) {}
  46. virtual Common2dCanvasInterface* get2dCanvasInterface() = 0;
  47. virtual CommonParameterInterface* getParameterInterface() = 0;
  48. virtual CommonRenderInterface* getRenderInterface() = 0;
  49. virtual const CommonRenderInterface* getRenderInterface() const
  50. {
  51. return 0;
  52. }
  53. virtual CommonGraphicsApp* getAppInterface() = 0;
  54. virtual void setUpAxis(int axis) = 0;
  55. virtual void resetCamera(float camDist, float yaw, float pitch, float camPosX, float camPosY, float camPosZ) = 0;
  56. virtual bool getCameraInfo(int* width, int* height, float viewMatrix[16], float projectionMatrix[16], float camUp[3], float camForward[3], float hor[3], float vert[3], float* yaw, float* pitch, float* camDist, float camTarget[3]) const
  57. {
  58. return false;
  59. }
  60. virtual void setVisualizerFlag(int flag, int enable){};
  61. virtual void copyCameraImageData(const float viewMatrix[16], const float projectionMatrix[16],
  62. unsigned char* pixelsRGBA, int rgbaBufferSizeInPixels,
  63. float* depthBuffer, int depthBufferSizeInPixels,
  64. int startPixelIndex, int destinationWidth, int destinationHeight, int* numPixelsCopied)
  65. {
  66. copyCameraImageData(viewMatrix, projectionMatrix, pixelsRGBA, rgbaBufferSizeInPixels,
  67. depthBuffer, depthBufferSizeInPixels,
  68. 0, 0,
  69. startPixelIndex, destinationWidth,
  70. destinationHeight, numPixelsCopied);
  71. }
  72. virtual void copyCameraImageData(const float viewMatrix[16], const float projectionMatrix[16],
  73. unsigned char* pixelsRGBA, int rgbaBufferSizeInPixels,
  74. float* depthBuffer, int depthBufferSizeInPixels,
  75. int* segmentationMaskBuffer, int segmentationMaskBufferSizeInPixels,
  76. int startPixelIndex, int destinationWidth, int destinationHeight, int* numPixelsCopied) = 0;
  77. virtual void debugDisplayCameraImageData(const float viewMatrix[16], const float projectionMatrix[16],
  78. unsigned char* pixelsRGBA, int rgbaBufferSizeInPixels,
  79. float* depthBuffer, int depthBufferSizeInPixels,
  80. int* segmentationMaskBuffer, int segmentationMaskBufferSizeInPixels,
  81. int startPixelIndex, int destinationWidth, int destinationHeight, int* numPixelsCopied) {}
  82. virtual void setProjectiveTextureMatrices(const float viewMatrix[16], const float projectionMatrix[16]) {}
  83. virtual void setProjectiveTexture(bool useProjectiveTexture) {}
  84. virtual void autogenerateGraphicsObjects(btDiscreteDynamicsWorld* rbWorld) = 0;
  85. virtual void drawText3D(const char* txt, float posX, float posY, float posZ, float size) {}
  86. virtual void drawText3D(const char* txt, float position[3], float orientation[4], float color[4], float size, int optionFlag) {}
  87. virtual int addUserDebugText3D(const char* txt, const double positionXYZ[3], const double orientation[4], const double textColorRGB[3], double size, double lifeTime, int trackingVisualShapeIndex, int optionFlags, int replaceItemUid) { return -1; }
  88. virtual int addUserDebugLine(const double debugLineFromXYZ[3], const double debugLineToXYZ[3], const double debugLineColorRGB[3], double lineWidth, double lifeTime, int trackingVisualShapeIndex, int replaceItemUid) { return -1; };
  89. virtual int addUserDebugPoints(const double debugPointPositionXYZ[], const double debugPointColorRGB[3], double pointSize, double lifeTime, int trackingVisualShapeIndex, int replaceItemUid, int debugPointNum) { return -1; };
  90. virtual int addUserDebugParameter(const char* txt, double rangeMin, double rangeMax, double startValue) { return -1; };
  91. virtual int readUserDebugParameter(int itemUniqueId, double* value) { return 0; }
  92. virtual void removeUserDebugItem(int debugItemUniqueId){};
  93. virtual void removeAllUserDebugItems(){};
  94. virtual void removeAllUserParameters() {};
  95. virtual void setVisualizerFlagCallback(VisualizerFlagCallback callback) {}
  96. //empty name stops dumping video
  97. virtual void dumpFramesToVideo(const char* mp4FileName){};
  98. virtual void drawDebugDrawerLines(){}
  99. virtual void clearLines(){}
  100. virtual bool isRemoteVisualizer() { return false; }
  101. };
  102. ///the DummyGUIHelper does nothing, so we can test the examples without GUI/graphics (in 'console mode')
  103. struct DummyGUIHelper : public GUIHelperInterface
  104. {
  105. DummyGUIHelper()
  106. {
  107. }
  108. virtual ~DummyGUIHelper() {}
  109. virtual void createRigidBodyGraphicsObject(btRigidBody* body, const btVector3& color) {}
  110. virtual void createCollisionObjectGraphicsObject(btCollisionObject* obj, const btVector3& color) {}
  111. virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape) {}
  112. virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld) {}
  113. virtual void render(const btDiscreteDynamicsWorld* rbWorld) {}
  114. virtual void createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld) {}
  115. virtual int registerTexture(const unsigned char* texels, int width, int height) { return -1; }
  116. virtual int registerGraphicsShape(const float* vertices, int numvertices, const int* indices, int numIndices, int primitiveType, int textureId) { return -1; }
  117. virtual int registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling) { return -1; }
  118. virtual void removeAllGraphicsInstances() {}
  119. virtual void removeGraphicsInstance(int graphicsUid) {}
  120. virtual void changeRGBAColor(int instanceUid, const double rgbaColor[4]) {}
  121. virtual void changeScaling(int instanceUid, const double scaling[3]) {}
  122. virtual Common2dCanvasInterface* get2dCanvasInterface()
  123. {
  124. return 0;
  125. }
  126. virtual CommonParameterInterface* getParameterInterface()
  127. {
  128. return 0;
  129. }
  130. virtual CommonRenderInterface* getRenderInterface()
  131. {
  132. return 0;
  133. }
  134. virtual CommonGraphicsApp* getAppInterface()
  135. {
  136. return 0;
  137. }
  138. virtual void setUpAxis(int axis)
  139. {
  140. }
  141. virtual void resetCamera(float camDist, float yaw, float pitch, float camPosX, float camPosY, float camPosZ)
  142. {
  143. }
  144. virtual void copyCameraImageData(const float viewMatrix[16], const float projectionMatrix[16],
  145. unsigned char* pixelsRGBA, int rgbaBufferSizeInPixels,
  146. float* depthBuffer, int depthBufferSizeInPixels,
  147. int* segmentationMaskBuffer, int segmentationMaskBufferSizeInPixels,
  148. int startPixelIndex, int width, int height, int* numPixelsCopied)
  149. {
  150. if (numPixelsCopied)
  151. *numPixelsCopied = 0;
  152. }
  153. virtual void setProjectiveTextureMatrices(const float viewMatrix[16], const float projectionMatrix[16])
  154. {
  155. }
  156. virtual void setProjectiveTexture(bool useProjectiveTexture)
  157. {
  158. }
  159. virtual void autogenerateGraphicsObjects(btDiscreteDynamicsWorld* rbWorld)
  160. {
  161. }
  162. virtual void drawText3D(const char* txt, float posX, float posZY, float posZ, float size)
  163. {
  164. }
  165. virtual void drawText3D(const char* txt, float position[3], float orientation[4], float color[4], float size, int optionFlag)
  166. {
  167. }
  168. virtual int addUserDebugLine(const double debugLineFromXYZ[3], const double debugLineToXYZ[3], const double debugLineColorRGB[3], double lineWidth, double lifeTime, int trackingVisualShapeIndex, int replaceItemUid)
  169. {
  170. return -1;
  171. }
  172. virtual int addUserDebugPoints(const double debugPointPositionXYZ[3], const double debugPointColorRGB[3], double pointSize, double lifeTime, int trackingVisualShapeIndex, int replaceItemUid, int debugPointNum)
  173. {
  174. return -1;
  175. };
  176. virtual void removeUserDebugItem(int debugItemUniqueId)
  177. {
  178. }
  179. virtual void removeAllUserDebugItems()
  180. {
  181. }
  182. };
  183. #endif //GUI_HELPER_INTERFACE_H