mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-13 21:30:09 +00:00
08409cae9f
To enable the feature, enable the BULLET2_MULTITHREADING option. Increases the number of rays that can go in a batch request by storing them in the shared memory stream instead of the shared memory command. Adds the API b3RaycastBatchSetNumThreads to specify the number of threads to use for the raycast batch, also adds the argument numThreads to the pybullet function rayTestBatch. Rays are distributed among the threads in a greedy fashion there's a shared queue of work, once a thread finishes its task, it picks the next available ray from the task. This works better than pre-distributing the rays among threads, since there's a large variance in computation time per ray. Some controversial changes: - Added a pointer to PhysicsClient to the SharedMemoryCommand struct, this was necessary to keep the C-API the same for b3RaycastBatchAddRay, while adding the ray to the shared memory stream instead of the command struct. I think this may be useful to simplify other APIs as well, that take both a client handle and a command handle. - Moved #define SHARED_MEMORY_MAX_STREAM_CHUNK_SIZE to SharedMemoryPublic. This was necessary for the definition of MAX_RAY_INTERSECTION_BATCH_SIZE.
98 lines
3.4 KiB
C++
98 lines
3.4 KiB
C++
#ifndef PHYSICS_LOOP_BACK_H
|
|
#define PHYSICS_LOOP_BACK_H
|
|
|
|
//#include "SharedMemoryCommands.h"
|
|
|
|
|
|
#include "PhysicsClient.h"
|
|
#include "LinearMath/btVector3.h"
|
|
|
|
///todo: the PhysicsClient API was designed with shared memory in mind,
|
|
///now it become more general we need to move out the shared memory specifics away
|
|
///for example naming [disconnectSharedMemory -> disconnect] [ move setSharedMemoryKey to shared memory specific subclass ]
|
|
|
|
class PhysicsLoopBack : public PhysicsClient
|
|
{
|
|
struct PhysicsLoopBackInternalData* m_data;
|
|
|
|
public:
|
|
|
|
PhysicsLoopBack();
|
|
|
|
virtual ~PhysicsLoopBack();
|
|
|
|
// return true if connection succesfull, can also check 'isConnected'
|
|
virtual bool connect();
|
|
|
|
////todo: rename to 'disconnect'
|
|
virtual void disconnectSharedMemory();
|
|
|
|
virtual bool isConnected() const;
|
|
|
|
// return non-null if there is a status, nullptr otherwise
|
|
virtual const SharedMemoryStatus* processServerStatus();
|
|
|
|
virtual SharedMemoryCommand* getAvailableSharedMemoryCommand();
|
|
|
|
virtual bool canSubmitCommand() const;
|
|
|
|
virtual bool submitClientCommand(const struct SharedMemoryCommand& command);
|
|
|
|
virtual int getNumBodies() const;
|
|
|
|
virtual int getBodyUniqueId(int serialIndex) const;
|
|
|
|
virtual bool getBodyInfo(int bodyUniqueId, struct b3BodyInfo& info) const;
|
|
|
|
virtual int getNumJoints(int bodyIndex) const;
|
|
|
|
virtual bool getJointInfo(int bodyIndex, int jointIndex, struct b3JointInfo& info) const;
|
|
|
|
virtual int getNumUserConstraints() const;
|
|
|
|
virtual int getUserConstraintInfo(int constraintUniqueId, struct b3UserConstraint&info) const;
|
|
|
|
virtual int getUserConstraintId(int serialIndex) const;
|
|
|
|
///todo: move this out of the
|
|
virtual void setSharedMemoryKey(int key);
|
|
|
|
void uploadBulletFileToSharedMemory(const char* data, int len);
|
|
virtual char* getSharedMemoryStreamBuffer();
|
|
|
|
virtual int getNumDebugLines() const;
|
|
|
|
virtual const float* getDebugLinesFrom() const;
|
|
virtual const float* getDebugLinesTo() const;
|
|
virtual const float* getDebugLinesColor() const;
|
|
virtual void getCachedCameraImage(struct b3CameraImageData* cameraData);
|
|
|
|
virtual void getCachedContactPointInformation(struct b3ContactInformation* contactPointData);
|
|
|
|
virtual void getCachedOverlappingObjects(struct b3AABBOverlapData* overlappingObjects);
|
|
|
|
virtual void getCachedVisualShapeInformation(struct b3VisualShapeInformation* visualShapesInfo);
|
|
|
|
virtual void getCachedCollisionShapeInformation(struct b3CollisionShapeInformation* collisionShapesInfo);
|
|
|
|
virtual void getCachedVREvents(struct b3VREventsData* vrEventsData);
|
|
|
|
virtual void getCachedKeyboardEvents(struct b3KeyboardEventsData* keyboardEventsData);
|
|
|
|
virtual void getCachedMouseEvents(struct b3MouseEventsData* mouseEventsData);
|
|
|
|
virtual void getCachedRaycastHits(struct b3RaycastInformation* raycastHits);
|
|
|
|
virtual void getCachedMassMatrix(int dofCountCheck, double* massMatrix);
|
|
|
|
virtual void setTimeOut(double timeOutInSeconds);
|
|
virtual double getTimeOut() const;
|
|
|
|
virtual bool getCachedUserData(int bodyUniqueId, int linkIndex, int userDataId, struct b3UserDataValue &valueOut) const;
|
|
virtual int getCachedUserDataId(int bodyUniqueId, int linkIndex, const char *key) const;
|
|
virtual int getNumUserData(int bodyUniqueId, int linkIndex) const;
|
|
virtual void getUserDataInfo(int bodyUniqueId, int linkIndex, int userDataIndex, const char **keyOut, int *userDataIdOut) const;
|
|
};
|
|
|
|
#endif //PHYSICS_LOOP_BACK_H
|