fixes in pybullet.loadTexture, changeVisualShape replacing texture.
(also works for OpenGL3 renderer now)
This commit is contained in:
@@ -41,6 +41,9 @@ struct GUIHelperInterface
|
|||||||
virtual void changeRGBAColor(int instanceUid, const double rgbaColor[4]) {}
|
virtual void changeRGBAColor(int instanceUid, const double rgbaColor[4]) {}
|
||||||
virtual void changeSpecularColor(int instanceUid, const double specularColor[3]) {}
|
virtual void changeSpecularColor(int instanceUid, const double specularColor[3]) {}
|
||||||
|
|
||||||
|
virtual int getShapeIndexFromInstance(int instanceUid){return -1;}
|
||||||
|
virtual void replaceTexture(int shapeIndex, int textureUid){}
|
||||||
|
|
||||||
|
|
||||||
virtual Common2dCanvasInterface* get2dCanvasInterface()=0;
|
virtual Common2dCanvasInterface* get2dCanvasInterface()=0;
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,9 @@ struct CommonRenderInterface
|
|||||||
virtual int registerTexture(const unsigned char* texels, int width, int height, bool flipPixelsY=true)=0;
|
virtual int registerTexture(const unsigned char* texels, int width, int height, bool flipPixelsY=true)=0;
|
||||||
virtual void updateTexture(int textureIndex, const unsigned char* texels, bool flipPixelsY=true)=0;
|
virtual void updateTexture(int textureIndex, const unsigned char* texels, bool flipPixelsY=true)=0;
|
||||||
virtual void activateTexture(int textureIndex)=0;
|
virtual void activateTexture(int textureIndex)=0;
|
||||||
|
virtual void replaceTexture(int shapeIndex, int textureIndex){};
|
||||||
|
|
||||||
|
virtual int getShapeIndexFromInstance(int srcIndex) {return -1;}
|
||||||
|
|
||||||
virtual bool readSingleInstanceTransformToCPU(float* position, float* orientation, int srcIndex)=0;
|
virtual bool readSingleInstanceTransformToCPU(float* position, float* orientation, int srcIndex)=0;
|
||||||
|
|
||||||
|
|||||||
@@ -318,6 +318,18 @@ void OpenGLGuiHelper::removeGraphicsInstance(int graphicsUid)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int OpenGLGuiHelper::getShapeIndexFromInstance(int instanceUid)
|
||||||
|
{
|
||||||
|
return m_data->m_glApp->m_renderer->getShapeIndexFromInstance(instanceUid);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLGuiHelper::replaceTexture(int shapeIndex, int textureUid)
|
||||||
|
{
|
||||||
|
if (shapeIndex>=0)
|
||||||
|
{
|
||||||
|
m_data->m_glApp->m_renderer->replaceTexture(shapeIndex, textureUid);
|
||||||
|
};
|
||||||
|
}
|
||||||
void OpenGLGuiHelper::changeRGBAColor(int instanceUid, const double rgbaColor[4])
|
void OpenGLGuiHelper::changeRGBAColor(int instanceUid, const double rgbaColor[4])
|
||||||
{
|
{
|
||||||
if (instanceUid>=0)
|
if (instanceUid>=0)
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ struct OpenGLGuiHelper : public GUIHelperInterface
|
|||||||
virtual void changeRGBAColor(int instanceUid, const double rgbaColor[4]);
|
virtual void changeRGBAColor(int instanceUid, const double rgbaColor[4]);
|
||||||
virtual void changeSpecularColor(int instanceUid, const double specularColor[3]);
|
virtual void changeSpecularColor(int instanceUid, const double specularColor[3]);
|
||||||
|
|
||||||
|
virtual int getShapeIndexFromInstance(int instanceUid);
|
||||||
|
virtual void replaceTexture(int shapeIndex, int textureUid);
|
||||||
|
|
||||||
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape);
|
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape);
|
||||||
|
|
||||||
virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld);
|
virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld);
|
||||||
|
|||||||
@@ -392,6 +392,15 @@ GLInstancingRenderer::~GLInstancingRenderer()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int GLInstancingRenderer::getShapeIndexFromInstance(int srcIndex)
|
||||||
|
{
|
||||||
|
b3PublicGraphicsInstance* pg = m_data->m_publicGraphicsInstances.getHandle(srcIndex);
|
||||||
|
if (pg)
|
||||||
|
{
|
||||||
|
return pg->m_shapeIndex;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -955,6 +964,17 @@ int GLInstancingRenderer::registerTexture(const unsigned char* texels, int width
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GLInstancingRenderer::replaceTexture(int shapeIndex, int textureId)
|
||||||
|
{
|
||||||
|
if (shapeIndex >=0 && shapeIndex < m_data->m_textureHandles.size())
|
||||||
|
{
|
||||||
|
b3GraphicsInstance* gfxObj = m_graphicsInstances[shapeIndex];
|
||||||
|
if (textureId>=0)
|
||||||
|
{
|
||||||
|
gfxObj->m_texturehandle = m_data->m_textureHandles[textureId].m_glTexture;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GLInstancingRenderer::updateTexture(int textureIndex, const unsigned char* texels, bool flipPixelsY)
|
void GLInstancingRenderer::updateTexture(int textureIndex, const unsigned char* texels, bool flipPixelsY)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -67,7 +67,8 @@ public:
|
|||||||
virtual int registerTexture(const unsigned char* texels, int width, int height, bool flipPixelsY=true);
|
virtual int registerTexture(const unsigned char* texels, int width, int height, bool flipPixelsY=true);
|
||||||
virtual void updateTexture(int textureIndex, const unsigned char* texels, bool flipPixelsY=true);
|
virtual void updateTexture(int textureIndex, const unsigned char* texels, bool flipPixelsY=true);
|
||||||
virtual void activateTexture(int textureIndex);
|
virtual void activateTexture(int textureIndex);
|
||||||
|
virtual void replaceTexture(int shapeIndex, int textureId);
|
||||||
|
virtual int getShapeIndexFromInstance(int srcIndex);
|
||||||
|
|
||||||
///position x,y,z, quaternion x,y,z,w, color r,g,b,a, scaling x,y,z
|
///position x,y,z, quaternion x,y,z,w, color r,g,b,a, scaling x,y,z
|
||||||
virtual int registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling);
|
virtual int registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling);
|
||||||
|
|||||||
@@ -2938,6 +2938,18 @@ b3SharedMemoryCommandHandle b3InitLoadTexture(b3PhysicsClientHandle physClient,
|
|||||||
return (b3SharedMemoryCommandHandle) command;
|
return (b3SharedMemoryCommandHandle) command;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int b3GetStatusTextureUniqueId(b3SharedMemoryStatusHandle statusHandle)
|
||||||
|
{
|
||||||
|
int uid = -1;
|
||||||
|
const SharedMemoryStatus* status = (const SharedMemoryStatus*)statusHandle;
|
||||||
|
btAssert(status->m_type == CMD_LOAD_TEXTURE_COMPLETED);
|
||||||
|
if (status->m_type == CMD_LOAD_TEXTURE_COMPLETED)
|
||||||
|
{
|
||||||
|
uid = status->m_loadTextureResultArguments.m_textureUniqueId;
|
||||||
|
}
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3InitUpdateVisualShape(b3PhysicsClientHandle physClient, int bodyUniqueId, int jointIndex, int shapeIndex, int textureUniqueId)
|
b3SharedMemoryCommandHandle b3InitUpdateVisualShape(b3PhysicsClientHandle physClient, int bodyUniqueId, int jointIndex, int shapeIndex, int textureUniqueId)
|
||||||
{
|
{
|
||||||
PhysicsClient* cl = (PhysicsClient* ) physClient;
|
PhysicsClient* cl = (PhysicsClient* ) physClient;
|
||||||
|
|||||||
@@ -217,6 +217,9 @@ b3SharedMemoryCommandHandle b3InitRequestVisualShapeInformation(b3PhysicsClientH
|
|||||||
void b3GetVisualShapeInformation(b3PhysicsClientHandle physClient, struct b3VisualShapeInformation* visualShapeInfo);
|
void b3GetVisualShapeInformation(b3PhysicsClientHandle physClient, struct b3VisualShapeInformation* visualShapeInfo);
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3InitLoadTexture(b3PhysicsClientHandle physClient, const char* filename);
|
b3SharedMemoryCommandHandle b3InitLoadTexture(b3PhysicsClientHandle physClient, const char* filename);
|
||||||
|
int b3GetStatusTextureUniqueId(b3SharedMemoryStatusHandle statusHandle);
|
||||||
|
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3InitUpdateVisualShape(b3PhysicsClientHandle physClient, int bodyUniqueId, int jointIndex, int shapeIndex, int textureUniqueId);
|
b3SharedMemoryCommandHandle b3InitUpdateVisualShape(b3PhysicsClientHandle physClient, int bodyUniqueId, int jointIndex, int shapeIndex, int textureUniqueId);
|
||||||
void b3UpdateVisualShapeRGBAColor(b3SharedMemoryCommandHandle commandHandle, double rgbaColor[4]);
|
void b3UpdateVisualShapeRGBAColor(b3SharedMemoryCommandHandle commandHandle, double rgbaColor[4]);
|
||||||
void b3UpdateVisualShapeSpecularColor(b3SharedMemoryCommandHandle commandHandle, double specularColor[3]);
|
void b3UpdateVisualShapeSpecularColor(b3SharedMemoryCommandHandle commandHandle, double specularColor[3]);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
|
#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
|
||||||
#include "Bullet3Common/b3HashMap.h"
|
#include "Bullet3Common/b3HashMap.h"
|
||||||
#include "../Utils/ChromeTraceUtil.h"
|
#include "../Utils/ChromeTraceUtil.h"
|
||||||
|
#include "stb_image/stb_image.h"
|
||||||
#include "BulletInverseDynamics/MultiBodyTree.hpp"
|
#include "BulletInverseDynamics/MultiBodyTree.hpp"
|
||||||
#include "IKTrajectoryHelper.h"
|
#include "IKTrajectoryHelper.h"
|
||||||
#include "btBulletDynamicsCommon.h"
|
#include "btBulletDynamicsCommon.h"
|
||||||
@@ -129,7 +129,7 @@ struct SharedMemoryDebugDrawer : public btIDebugDraw
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InteralCollisionShapeData
|
struct InternalCollisionShapeData
|
||||||
{
|
{
|
||||||
btCollisionShape* m_collisionShape;
|
btCollisionShape* m_collisionShape;
|
||||||
b3AlignedObjectArray<UrdfCollision> m_urdfCollisionObjects;
|
b3AlignedObjectArray<UrdfCollision> m_urdfCollisionObjects;
|
||||||
@@ -139,7 +139,7 @@ struct InteralCollisionShapeData
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InteralBodyData
|
struct InternalBodyData
|
||||||
{
|
{
|
||||||
btMultiBody* m_multiBody;
|
btMultiBody* m_multiBody;
|
||||||
btRigidBody* m_rigidBody;
|
btRigidBody* m_rigidBody;
|
||||||
@@ -152,7 +152,7 @@ struct InteralBodyData
|
|||||||
b3HashMap<btHashInt, SDFAudioSource> m_audioSources;
|
b3HashMap<btHashInt, SDFAudioSource> m_audioSources;
|
||||||
#endif //B3_ENABLE_TINY_AUDIO
|
#endif //B3_ENABLE_TINY_AUDIO
|
||||||
|
|
||||||
InteralBodyData()
|
InternalBodyData()
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
@@ -183,8 +183,20 @@ struct InteralUserConstraintData
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef b3PoolBodyHandle<InteralBodyData> InternalBodyHandle;
|
struct InternalTextureData
|
||||||
typedef b3PoolBodyHandle<InteralCollisionShapeData> InternalCollisionShapeHandle;
|
{
|
||||||
|
int m_tinyRendererTextureId;
|
||||||
|
int m_openglTextureId;
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
m_tinyRendererTextureId = -1;
|
||||||
|
m_openglTextureId = -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef b3PoolBodyHandle<InternalTextureData> InternalTextureHandle;
|
||||||
|
typedef b3PoolBodyHandle<InternalBodyData> InternalBodyHandle;
|
||||||
|
typedef b3PoolBodyHandle<InternalCollisionShapeData> InternalCollisionShapeHandle;
|
||||||
|
|
||||||
class btCommandChunk
|
class btCommandChunk
|
||||||
{
|
{
|
||||||
@@ -1145,6 +1157,7 @@ struct ContactPointsStateLogger : public InternalStateLogger
|
|||||||
struct PhysicsServerCommandProcessorInternalData
|
struct PhysicsServerCommandProcessorInternalData
|
||||||
{
|
{
|
||||||
///handle management
|
///handle management
|
||||||
|
b3ResizablePool< InternalTextureHandle > m_textureHandles;
|
||||||
b3ResizablePool< InternalBodyHandle > m_bodyHandles;
|
b3ResizablePool< InternalBodyHandle > m_bodyHandles;
|
||||||
b3ResizablePool<InternalCollisionShapeHandle> m_userCollisionShapeHandles;
|
b3ResizablePool<InternalCollisionShapeHandle> m_userCollisionShapeHandles;
|
||||||
|
|
||||||
@@ -1269,7 +1282,7 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
int handle = allocHandle();
|
int handle = allocHandle();
|
||||||
bla.push_back(handle);
|
bla.push_back(handle);
|
||||||
InternalBodyHandle* body = getHandle(handle);
|
InternalBodyHandle* body = getHandle(handle);
|
||||||
InteralBodyData* body2 = body;
|
InternalBodyData* body2 = body;
|
||||||
}
|
}
|
||||||
for (int i=0;i<bla.size();i++)
|
for (int i=0;i<bla.size();i++)
|
||||||
{
|
{
|
||||||
@@ -1283,7 +1296,7 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
int handle = allocHandle();
|
int handle = allocHandle();
|
||||||
bla.push_back(handle);
|
bla.push_back(handle);
|
||||||
InternalBodyHandle* body = getHandle(handle);
|
InternalBodyHandle* body = getHandle(handle);
|
||||||
InteralBodyData* body2 = body;
|
InternalBodyData* body2 = body;
|
||||||
}
|
}
|
||||||
for (int i=0;i<bla.size();i++)
|
for (int i=0;i<bla.size();i++)
|
||||||
{
|
{
|
||||||
@@ -1296,7 +1309,7 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
int handle = allocHandle();
|
int handle = allocHandle();
|
||||||
bla.push_back(handle);
|
bla.push_back(handle);
|
||||||
InternalBodyHandle* body = getHandle(handle);
|
InternalBodyHandle* body = getHandle(handle);
|
||||||
InteralBodyData* body2 = body;
|
InternalBodyData* body2 = body;
|
||||||
}
|
}
|
||||||
for (int i=0;i<bla.size();i++)
|
for (int i=0;i<bla.size();i++)
|
||||||
{
|
{
|
||||||
@@ -2679,7 +2692,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
if ((clientCmd.m_updateFlags & STATE_LOGGING_FILTER_OBJECT_UNIQUE_ID)&& (clientCmd.m_stateLoggingArguments.m_numBodyUniqueIds>0))
|
if ((clientCmd.m_updateFlags & STATE_LOGGING_FILTER_OBJECT_UNIQUE_ID)&& (clientCmd.m_stateLoggingArguments.m_numBodyUniqueIds>0))
|
||||||
{
|
{
|
||||||
int bodyUniqueId = clientCmd.m_stateLoggingArguments.m_bodyUniqueIds[0];
|
int bodyUniqueId = clientCmd.m_stateLoggingArguments.m_bodyUniqueIds[0];
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
if (body->m_multiBody)
|
if (body->m_multiBody)
|
||||||
@@ -3256,7 +3269,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
for (int i=0;i<usedHandles.size();i++)
|
for (int i=0;i<usedHandles.size();i++)
|
||||||
{
|
{
|
||||||
int usedHandle = usedHandles[i];
|
int usedHandle = usedHandles[i];
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(usedHandle);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(usedHandle);
|
||||||
if (body && (body->m_multiBody || body->m_rigidBody))
|
if (body && (body->m_multiBody || body->m_rigidBody))
|
||||||
{
|
{
|
||||||
serverStatusOut.m_sdfLoadedArgs.m_bodyUniqueIds[actualNumBodies++] = usedHandle;
|
serverStatusOut.m_sdfLoadedArgs.m_bodyUniqueIds[actualNumBodies++] = usedHandle;
|
||||||
@@ -3345,7 +3358,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
int bodyUniqueId = sd.m_bodyUniqueIds[i];
|
int bodyUniqueId = sd.m_bodyUniqueIds[i];
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
if (body->m_multiBody)
|
if (body->m_multiBody)
|
||||||
@@ -3959,7 +3972,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
serverStatusOut.m_numDataStreamBytes = m_data->m_urdfLinkNameMapper.at(m_data->m_urdfLinkNameMapper.size()-1)->m_memSerializer->getCurrentBufferSize();
|
serverStatusOut.m_numDataStreamBytes = m_data->m_urdfLinkNameMapper.at(m_data->m_urdfLinkNameMapper.size()-1)->m_memSerializer->getCurrentBufferSize();
|
||||||
}
|
}
|
||||||
serverStatusOut.m_dataStreamArguments.m_bodyUniqueId = bodyUniqueId;
|
serverStatusOut.m_dataStreamArguments.m_bodyUniqueId = bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
strcpy(serverStatusOut.m_dataStreamArguments.m_bodyName, body->m_bodyName.c_str());
|
strcpy(serverStatusOut.m_dataStreamArguments.m_bodyName, body->m_bodyName.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4024,7 +4037,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
serverStatusOut.m_numDataStreamBytes = m_data->m_urdfLinkNameMapper.at(m_data->m_urdfLinkNameMapper.size()-1)->m_memSerializer->getCurrentBufferSize();
|
serverStatusOut.m_numDataStreamBytes = m_data->m_urdfLinkNameMapper.at(m_data->m_urdfLinkNameMapper.size()-1)->m_memSerializer->getCurrentBufferSize();
|
||||||
}
|
}
|
||||||
serverStatusOut.m_dataStreamArguments.m_bodyUniqueId = bodyUniqueId;
|
serverStatusOut.m_dataStreamArguments.m_bodyUniqueId = bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
strcpy(serverStatusOut.m_dataStreamArguments.m_bodyName, body->m_bodyName.c_str());
|
strcpy(serverStatusOut.m_dataStreamArguments.m_bodyName, body->m_bodyName.c_str());
|
||||||
hasStatus = true;
|
hasStatus = true;
|
||||||
|
|
||||||
@@ -4096,7 +4109,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
b3Printf("Processed CMD_CREATE_SENSOR");
|
b3Printf("Processed CMD_CREATE_SENSOR");
|
||||||
}
|
}
|
||||||
int bodyUniqueId = clientCmd.m_createSensorArguments.m_bodyUniqueId;
|
int bodyUniqueId = clientCmd.m_createSensorArguments.m_bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
{
|
{
|
||||||
btMultiBody* mb = body->m_multiBody;
|
btMultiBody* mb = body->m_multiBody;
|
||||||
@@ -4216,7 +4229,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
|
|
||||||
int bodyUniqueId = clientCmd.m_sendDesiredStateCommandArgument.m_bodyUniqueId;
|
int bodyUniqueId = clientCmd.m_sendDesiredStateCommandArgument.m_bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
|
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
{
|
{
|
||||||
@@ -4406,7 +4419,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
serverStatusOut.m_type = CMD_REQUEST_COLLISION_INFO_FAILED;
|
serverStatusOut.m_type = CMD_REQUEST_COLLISION_INFO_FAILED;
|
||||||
hasStatus=true;
|
hasStatus=true;
|
||||||
int bodyUniqueId = clientCmd.m_requestCollisionInfoArgs.m_bodyUniqueId;
|
int bodyUniqueId = clientCmd.m_requestCollisionInfoArgs.m_bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
|
|
||||||
|
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
@@ -4507,7 +4520,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
b3Printf("Sending the actual state (Q,U)");
|
b3Printf("Sending the actual state (Q,U)");
|
||||||
}
|
}
|
||||||
int bodyUniqueId = clientCmd.m_requestActualStateInformationCommandArgument.m_bodyUniqueId;
|
int bodyUniqueId = clientCmd.m_requestActualStateInformationCommandArgument.m_bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
|
|
||||||
|
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
@@ -4824,7 +4837,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
btAssert(bodyUniqueId >= 0);
|
btAssert(bodyUniqueId >= 0);
|
||||||
btAssert(linkIndex >= -1);
|
btAssert(linkIndex >= -1);
|
||||||
|
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
|
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
{
|
{
|
||||||
@@ -5010,7 +5023,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
{
|
{
|
||||||
int bodyUniqueId = clientCmd.m_getDynamicsInfoArgs.m_bodyUniqueId;
|
int bodyUniqueId = clientCmd.m_getDynamicsInfoArgs.m_bodyUniqueId;
|
||||||
int linkIndex = clientCmd.m_getDynamicsInfoArgs.m_linkIndex;
|
int linkIndex = clientCmd.m_getDynamicsInfoArgs.m_linkIndex;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
{
|
{
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
@@ -5151,7 +5164,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
b3Printf("Server Init Pose not implemented yet");
|
b3Printf("Server Init Pose not implemented yet");
|
||||||
}
|
}
|
||||||
int bodyUniqueId = clientCmd.m_initPoseArgs.m_bodyUniqueId;
|
int bodyUniqueId = clientCmd.m_initPoseArgs.m_bodyUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
|
|
||||||
btVector3 baseLinVel(0, 0, 0);
|
btVector3 baseLinVel(0, 0, 0);
|
||||||
btVector3 baseAngVel(0, 0, 0);
|
btVector3 baseAngVel(0, 0, 0);
|
||||||
@@ -5745,7 +5758,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
if (bodyUniqueIdA >= 0)
|
if (bodyUniqueIdA >= 0)
|
||||||
{
|
{
|
||||||
InteralBodyData* bodyA = m_data->m_bodyHandles.getHandle(bodyUniqueIdA);
|
InternalBodyData* bodyA = m_data->m_bodyHandles.getHandle(bodyUniqueIdA);
|
||||||
if (bodyA)
|
if (bodyA)
|
||||||
{
|
{
|
||||||
if (bodyA->m_multiBody)
|
if (bodyA->m_multiBody)
|
||||||
@@ -5779,7 +5792,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
if (bodyUniqueIdB>=0)
|
if (bodyUniqueIdB>=0)
|
||||||
{
|
{
|
||||||
InteralBodyData* bodyB = m_data->m_bodyHandles.getHandle(bodyUniqueIdB);
|
InternalBodyData* bodyB = m_data->m_bodyHandles.getHandle(bodyUniqueIdB);
|
||||||
if (bodyB)
|
if (bodyB)
|
||||||
{
|
{
|
||||||
if (bodyB->m_multiBody)
|
if (bodyB->m_multiBody)
|
||||||
@@ -6048,7 +6061,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
for (int i = 0; i < clientCmd.m_externalForceArguments.m_numForcesAndTorques; ++i)
|
for (int i = 0; i < clientCmd.m_externalForceArguments.m_numForcesAndTorques; ++i)
|
||||||
{
|
{
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(clientCmd.m_externalForceArguments.m_bodyUniqueIds[i]);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(clientCmd.m_externalForceArguments.m_bodyUniqueIds[i]);
|
||||||
bool isLinkFrame = ((clientCmd.m_externalForceArguments.m_forceFlags[i] & EF_LINK_FRAME) != 0);
|
bool isLinkFrame = ((clientCmd.m_externalForceArguments.m_forceFlags[i] & EF_LINK_FRAME) != 0);
|
||||||
|
|
||||||
if (body && body->m_multiBody)
|
if (body && body->m_multiBody)
|
||||||
@@ -6254,12 +6267,12 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
if (clientCmd.m_updateFlags & USER_CONSTRAINT_ADD_CONSTRAINT)
|
if (clientCmd.m_updateFlags & USER_CONSTRAINT_ADD_CONSTRAINT)
|
||||||
{
|
{
|
||||||
btScalar defaultMaxForce = 500.0;
|
btScalar defaultMaxForce = 500.0;
|
||||||
InteralBodyData* parentBody = m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_parentBodyIndex);
|
InternalBodyData* parentBody = m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_parentBodyIndex);
|
||||||
if (parentBody && parentBody->m_multiBody)
|
if (parentBody && parentBody->m_multiBody)
|
||||||
{
|
{
|
||||||
if ((clientCmd.m_userConstraintArguments.m_parentJointIndex>=-1) && clientCmd.m_userConstraintArguments.m_parentJointIndex < parentBody->m_multiBody->getNumLinks())
|
if ((clientCmd.m_userConstraintArguments.m_parentJointIndex>=-1) && clientCmd.m_userConstraintArguments.m_parentJointIndex < parentBody->m_multiBody->getNumLinks())
|
||||||
{
|
{
|
||||||
InteralBodyData* childBody = clientCmd.m_userConstraintArguments.m_childBodyIndex>=0 ? m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_childBodyIndex):0;
|
InternalBodyData* childBody = clientCmd.m_userConstraintArguments.m_childBodyIndex>=0 ? m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_childBodyIndex):0;
|
||||||
//also create a constraint with just a single multibody/rigid body without child
|
//also create a constraint with just a single multibody/rigid body without child
|
||||||
//if (childBody)
|
//if (childBody)
|
||||||
{
|
{
|
||||||
@@ -6413,7 +6426,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
InteralBodyData* childBody = clientCmd.m_userConstraintArguments.m_childBodyIndex>=0 ? m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_childBodyIndex):0;
|
InternalBodyData* childBody = clientCmd.m_userConstraintArguments.m_childBodyIndex>=0 ? m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_childBodyIndex):0;
|
||||||
|
|
||||||
if (parentBody && childBody)
|
if (parentBody && childBody)
|
||||||
{
|
{
|
||||||
@@ -6762,12 +6775,18 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
BT_PROFILE("CMD_UPDATE_VISUAL_SHAPE");
|
BT_PROFILE("CMD_UPDATE_VISUAL_SHAPE");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_VISUAL_SHAPE_UPDATE_FAILED;
|
serverCmd.m_type = CMD_VISUAL_SHAPE_UPDATE_FAILED;
|
||||||
|
InternalTextureHandle* texHandle = 0;
|
||||||
|
|
||||||
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_TEXTURE)
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_TEXTURE)
|
||||||
{
|
{
|
||||||
|
texHandle = m_data->m_textureHandles.getHandle(clientCmd.m_updateVisualShapeDataArguments.m_textureUniqueId);
|
||||||
|
|
||||||
if (clientCmd.m_updateVisualShapeDataArguments.m_textureUniqueId>=0)
|
if (clientCmd.m_updateVisualShapeDataArguments.m_textureUniqueId>=0)
|
||||||
{
|
{
|
||||||
m_data->m_visualConverter.activateShapeTexture(clientCmd.m_updateVisualShapeDataArguments.m_bodyUniqueId, clientCmd.m_updateVisualShapeDataArguments.m_jointIndex, clientCmd.m_updateVisualShapeDataArguments.m_shapeIndex, clientCmd.m_updateVisualShapeDataArguments.m_textureUniqueId);
|
if (texHandle)
|
||||||
|
{
|
||||||
|
m_data->m_visualConverter.activateShapeTexture(clientCmd.m_updateVisualShapeDataArguments.m_bodyUniqueId, clientCmd.m_updateVisualShapeDataArguments.m_jointIndex, clientCmd.m_updateVisualShapeDataArguments.m_shapeIndex, texHandle->m_tinyRendererTextureId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6784,10 +6803,18 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
{
|
{
|
||||||
if (bodyHandle->m_multiBody->getBaseCollider())
|
if (bodyHandle->m_multiBody->getBaseCollider())
|
||||||
{
|
{
|
||||||
m_data->m_visualConverter.changeRGBAColor(bodyUniqueId,linkIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
|
||||||
int graphicsIndex = bodyHandle->m_multiBody->getBaseCollider()->getUserIndex();
|
int graphicsIndex = bodyHandle->m_multiBody->getBaseCollider()->getUserIndex();
|
||||||
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_TEXTURE)
|
||||||
|
{
|
||||||
|
if (texHandle)
|
||||||
|
{
|
||||||
|
int shapeIndex = m_data->m_guiHelper->getShapeIndexFromInstance(graphicsIndex);
|
||||||
|
m_data->m_guiHelper->replaceTexture(shapeIndex,texHandle->m_openglTextureId);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_RGBA_COLOR)
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_RGBA_COLOR)
|
||||||
{
|
{
|
||||||
|
m_data->m_visualConverter.changeRGBAColor(bodyUniqueId,linkIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
||||||
m_data->m_guiHelper->changeRGBAColor(graphicsIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
m_data->m_guiHelper->changeRGBAColor(graphicsIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
||||||
}
|
}
|
||||||
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_SPECULAR_COLOR)
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_SPECULAR_COLOR)
|
||||||
@@ -6802,10 +6829,18 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
{
|
{
|
||||||
if (bodyHandle->m_multiBody->getLink(linkIndex).m_collider)
|
if (bodyHandle->m_multiBody->getLink(linkIndex).m_collider)
|
||||||
{
|
{
|
||||||
m_data->m_visualConverter.changeRGBAColor(bodyUniqueId,linkIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
|
||||||
int graphicsIndex = bodyHandle->m_multiBody->getLink(linkIndex).m_collider->getUserIndex();
|
int graphicsIndex = bodyHandle->m_multiBody->getLink(linkIndex).m_collider->getUserIndex();
|
||||||
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_TEXTURE)
|
||||||
|
{
|
||||||
|
if (texHandle)
|
||||||
|
{
|
||||||
|
int shapeIndex = m_data->m_guiHelper->getShapeIndexFromInstance(graphicsIndex);
|
||||||
|
m_data->m_guiHelper->replaceTexture(shapeIndex,texHandle->m_openglTextureId);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_RGBA_COLOR)
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_RGBA_COLOR)
|
||||||
{
|
{
|
||||||
|
m_data->m_visualConverter.changeRGBAColor(bodyUniqueId,linkIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
||||||
m_data->m_guiHelper->changeRGBAColor(graphicsIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
m_data->m_guiHelper->changeRGBAColor(graphicsIndex,clientCmd.m_updateVisualShapeDataArguments.m_rgbaColor);
|
||||||
}
|
}
|
||||||
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_SPECULAR_COLOR)
|
if (clientCmd.m_updateFlags & CMD_UPDATE_VISUAL_SHAPE_SPECULAR_COLOR)
|
||||||
@@ -6828,25 +6863,59 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_LOAD_TEXTURE:
|
case CMD_LOAD_TEXTURE:
|
||||||
{
|
{
|
||||||
BT_PROFILE("CMD_LOAD_TEXTURE");
|
BT_PROFILE("CMD_LOAD_TEXTURE");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_LOAD_TEXTURE_FAILED;
|
serverCmd.m_type = CMD_LOAD_TEXTURE_FAILED;
|
||||||
|
|
||||||
int uid = m_data->m_visualConverter.loadTextureFile(clientCmd.m_loadTextureArguments.m_textureFileName);
|
char relativeFileName[1024];
|
||||||
|
char pathPrefix[1024];
|
||||||
if (uid>=0)
|
|
||||||
{
|
if(b3ResourcePath::findResourcePath(clientCmd.m_loadTextureArguments.m_textureFileName,relativeFileName,1024))
|
||||||
serverCmd.m_type = CMD_LOAD_TEXTURE_COMPLETED;
|
{
|
||||||
} else
|
b3FileUtils::extractPath(relativeFileName,pathPrefix,1024);
|
||||||
{
|
|
||||||
serverCmd.m_type = CMD_LOAD_TEXTURE_FAILED;
|
int texHandle = m_data->m_textureHandles.allocHandle();
|
||||||
}
|
InternalTextureHandle* texH = m_data->m_textureHandles.getHandle(texHandle);
|
||||||
hasStatus = true;
|
if(texH)
|
||||||
|
{
|
||||||
break;
|
texH->m_tinyRendererTextureId = -1;
|
||||||
}
|
texH->m_openglTextureId = -1;
|
||||||
|
|
||||||
|
int uid = m_data->m_visualConverter.loadTextureFile(relativeFileName);
|
||||||
|
if(uid>=0)
|
||||||
|
{
|
||||||
|
int m_tinyRendererTextureId;
|
||||||
|
texH->m_tinyRendererTextureId = uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int width,height,n;
|
||||||
|
unsigned char* imageData= stbi_load(relativeFileName,&width,&height,&n,3);
|
||||||
|
|
||||||
|
if(imageData)
|
||||||
|
{
|
||||||
|
texH->m_openglTextureId = m_data->m_guiHelper->registerTexture(imageData,width,height);
|
||||||
|
free(imageData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
b3Warning("Unsupported texture image format [%s]\n",relativeFileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
serverCmd.m_loadTextureResultArguments.m_textureUniqueId = texHandle;
|
||||||
|
serverCmd.m_type = CMD_LOAD_TEXTURE_COMPLETED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
serverCmd.m_type = CMD_LOAD_TEXTURE_FAILED;
|
||||||
|
}
|
||||||
|
hasStatus = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case CMD_LOAD_BULLET:
|
case CMD_LOAD_BULLET:
|
||||||
{
|
{
|
||||||
@@ -7041,7 +7110,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
if ((clientCmd.m_updateFlags & USER_DEBUG_SET_CUSTOM_OBJECT_COLOR) || (clientCmd.m_updateFlags & USER_DEBUG_REMOVE_CUSTOM_OBJECT_COLOR))
|
if ((clientCmd.m_updateFlags & USER_DEBUG_SET_CUSTOM_OBJECT_COLOR) || (clientCmd.m_updateFlags & USER_DEBUG_REMOVE_CUSTOM_OBJECT_COLOR))
|
||||||
{
|
{
|
||||||
int bodyUniqueId = clientCmd.m_userDebugDrawArgs.m_objectUniqueId;
|
int bodyUniqueId = clientCmd.m_userDebugDrawArgs.m_objectUniqueId;
|
||||||
InteralBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId);
|
||||||
if (body)
|
if (body)
|
||||||
{
|
{
|
||||||
btCollisionObject* destColObj = 0;
|
btCollisionObject* destColObj = 0;
|
||||||
|
|||||||
@@ -131,6 +131,8 @@ enum MultiThreadedGUIHelperCommunicationEnums
|
|||||||
eGUIHelperChangeGraphicsInstanceRGBAColor,
|
eGUIHelperChangeGraphicsInstanceRGBAColor,
|
||||||
eGUIHelperChangeGraphicsInstanceSpecularColor,
|
eGUIHelperChangeGraphicsInstanceSpecularColor,
|
||||||
eGUIHelperSetVisualizerFlag,
|
eGUIHelperSetVisualizerFlag,
|
||||||
|
eGUIHelperChangeGraphicsInstanceTextureId,
|
||||||
|
eGUIHelperGetShapeIndexFromInstance,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -932,6 +934,29 @@ public:
|
|||||||
m_cs->setSharedParam(1,eGUIHelperRemoveGraphicsInstance);
|
m_cs->setSharedParam(1,eGUIHelperRemoveGraphicsInstance);
|
||||||
workerThreadWait();
|
workerThreadWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int m_getShapeIndex_instance;
|
||||||
|
int getShapeIndex_shapeIndex;
|
||||||
|
|
||||||
|
virtual int getShapeIndexFromInstance(int instance)
|
||||||
|
{
|
||||||
|
m_getShapeIndex_instance = instance;
|
||||||
|
m_cs->lock();
|
||||||
|
m_cs->setSharedParam(1,eGUIHelperGetShapeIndexFromInstance);
|
||||||
|
workerThreadWait();
|
||||||
|
return getShapeIndex_shapeIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
int m_graphicsInstanceChangeTextureId;
|
||||||
|
int m_graphicsInstanceChangeTextureShapeIndex;
|
||||||
|
virtual void replaceTexture(int shapeIndex, int textureUid)
|
||||||
|
{
|
||||||
|
m_graphicsInstanceChangeTextureShapeIndex = shapeIndex;
|
||||||
|
m_graphicsInstanceChangeTextureId = textureUid;
|
||||||
|
m_cs->lock();
|
||||||
|
m_cs->setSharedParam(1,eGUIHelperChangeGraphicsInstanceTextureId);
|
||||||
|
workerThreadWait();
|
||||||
|
}
|
||||||
|
|
||||||
double m_rgbaColor[4];
|
double m_rgbaColor[4];
|
||||||
int m_graphicsInstanceChangeColor;
|
int m_graphicsInstanceChangeColor;
|
||||||
@@ -1913,6 +1938,24 @@ void PhysicsServerExample::updateGraphics()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case eGUIHelperGetShapeIndexFromInstance:
|
||||||
|
{
|
||||||
|
m_multiThreadedHelper->getShapeIndex_shapeIndex = m_multiThreadedHelper->m_childGuiHelper->getShapeIndexFromInstance(m_multiThreadedHelper->m_getShapeIndex_instance);
|
||||||
|
m_multiThreadedHelper->mainThreadRelease();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case eGUIHelperChangeGraphicsInstanceTextureId:
|
||||||
|
{
|
||||||
|
m_multiThreadedHelper->m_childGuiHelper->replaceTexture(
|
||||||
|
m_multiThreadedHelper->m_graphicsInstanceChangeTextureShapeIndex,
|
||||||
|
m_multiThreadedHelper->m_graphicsInstanceChangeTextureId);
|
||||||
|
m_multiThreadedHelper->mainThreadRelease();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case eGUIHelperChangeGraphicsInstanceRGBAColor:
|
case eGUIHelperChangeGraphicsInstanceRGBAColor:
|
||||||
{
|
{
|
||||||
m_multiThreadedHelper->m_childGuiHelper->changeRGBAColor(m_multiThreadedHelper->m_graphicsInstanceChangeColor,m_multiThreadedHelper->m_rgbaColor);
|
m_multiThreadedHelper->m_childGuiHelper->changeRGBAColor(m_multiThreadedHelper->m_graphicsInstanceChangeColor,m_multiThreadedHelper->m_rgbaColor);
|
||||||
|
|||||||
@@ -283,6 +283,11 @@ struct LoadTextureArgs
|
|||||||
char m_textureFileName[MAX_FILENAME_LENGTH];
|
char m_textureFileName[MAX_FILENAME_LENGTH];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct b3LoadTextureResultArgs
|
||||||
|
{
|
||||||
|
int m_textureUniqueId;
|
||||||
|
};
|
||||||
|
|
||||||
struct SendVisualShapeDataArgs
|
struct SendVisualShapeDataArgs
|
||||||
{
|
{
|
||||||
int m_bodyUniqueId;
|
int m_bodyUniqueId;
|
||||||
@@ -1015,6 +1020,7 @@ struct SharedMemoryStatus
|
|||||||
struct b3CreateMultiBodyResultArgs m_createMultiBodyResultArgs;
|
struct b3CreateMultiBodyResultArgs m_createMultiBodyResultArgs;
|
||||||
struct b3SendCollisionInfoArgs m_sendCollisionInfoArgs;
|
struct b3SendCollisionInfoArgs m_sendCollisionInfoArgs;
|
||||||
struct SendMouseEvents m_sendMouseEvents;
|
struct SendMouseEvents m_sendMouseEvents;
|
||||||
|
struct b3LoadTextureResultArgs m_loadTextureResultArguments;
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1070,12 +1070,15 @@ void TinyRendererVisualShapeConverter::resetAll()
|
|||||||
void TinyRendererVisualShapeConverter::activateShapeTexture(int shapeUniqueId, int textureUniqueId)
|
void TinyRendererVisualShapeConverter::activateShapeTexture(int shapeUniqueId, int textureUniqueId)
|
||||||
{
|
{
|
||||||
btAssert(textureUniqueId < m_data->m_textures.size());
|
btAssert(textureUniqueId < m_data->m_textures.size());
|
||||||
TinyRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(shapeUniqueId);
|
if (textureUniqueId>=0 && textureUniqueId<m_data->m_textures.size())
|
||||||
if (ptrptr && *ptrptr)
|
{
|
||||||
{
|
TinyRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(shapeUniqueId);
|
||||||
TinyRendererObjectArray* ptr = *ptrptr;
|
if (ptrptr && *ptrptr)
|
||||||
ptr->m_renderObjects[0]->m_model->setDiffuseTextureFromData(m_data->m_textures[textureUniqueId].textureData,m_data->m_textures[textureUniqueId].m_width,m_data->m_textures[textureUniqueId].m_height);
|
{
|
||||||
}
|
TinyRendererObjectArray* ptr = *ptrptr;
|
||||||
|
ptr->m_renderObjects[0]->m_model->setDiffuseTextureFromData(m_data->m_textures[textureUniqueId].textureData,m_data->m_textures[textureUniqueId].m_width,m_data->m_textures[textureUniqueId].m_height);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TinyRendererVisualShapeConverter::activateShapeTexture(int objectUniqueId, int jointIndex, int shapeIndex, int textureUniqueId)
|
void TinyRendererVisualShapeConverter::activateShapeTexture(int objectUniqueId, int jointIndex, int shapeIndex, int textureUniqueId)
|
||||||
@@ -1085,18 +1088,26 @@ void TinyRendererVisualShapeConverter::activateShapeTexture(int objectUniqueId,
|
|||||||
{
|
{
|
||||||
if (m_data->m_visualShapes[i].m_objectUniqueId == objectUniqueId && m_data->m_visualShapes[i].m_linkIndex == jointIndex)
|
if (m_data->m_visualShapes[i].m_objectUniqueId == objectUniqueId && m_data->m_visualShapes[i].m_linkIndex == jointIndex)
|
||||||
{
|
{
|
||||||
start = i;
|
if (shapeIndex<0)
|
||||||
break;
|
{
|
||||||
}
|
activateShapeTexture(i, textureUniqueId);
|
||||||
}
|
} else
|
||||||
|
{
|
||||||
if (start >= 0)
|
start = i;
|
||||||
{
|
break;
|
||||||
if (start + shapeIndex < m_data->m_visualShapes.size())
|
}
|
||||||
{
|
|
||||||
activateShapeTexture(start + shapeIndex, textureUniqueId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (shapeIndex>=0)
|
||||||
|
{
|
||||||
|
if (start >= 0)
|
||||||
|
{
|
||||||
|
if (start + shapeIndex < m_data->m_visualShapes.size())
|
||||||
|
{
|
||||||
|
activateShapeTexture(start + shapeIndex, textureUniqueId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int TinyRendererVisualShapeConverter::registerTexture(unsigned char* texels, int width, int height)
|
int TinyRendererVisualShapeConverter::registerTexture(unsigned char* texels, int width, int height)
|
||||||
|
|||||||
@@ -4578,6 +4578,9 @@ static PyObject* pybullet_loadTexture(PyObject* self, PyObject* args, PyObject*
|
|||||||
statusType = b3GetStatusType(statusHandle);
|
statusType = b3GetStatusType(statusHandle);
|
||||||
if (statusType == CMD_LOAD_TEXTURE_COMPLETED)
|
if (statusType == CMD_LOAD_TEXTURE_COMPLETED)
|
||||||
{
|
{
|
||||||
|
PyObject* item;
|
||||||
|
item = PyInt_FromLong(b3GetStatusTextureUniqueId(statusHandle));
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -4586,8 +4589,8 @@ static PyObject* pybullet_loadTexture(PyObject* self, PyObject* args, PyObject*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
PyErr_SetString(SpamError, "Error loading texture");
|
||||||
return Py_None;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject* MyConvertContactPoint(struct b3ContactInformation* contactPointPtr)
|
static PyObject* MyConvertContactPoint(struct b3ContactInformation* contactPointPtr)
|
||||||
|
|||||||
@@ -389,28 +389,38 @@ protected:
|
|||||||
const Value* getAtIndex(int index) const
|
const Value* getAtIndex(int index) const
|
||||||
{
|
{
|
||||||
btAssert(index < m_valueArray.size());
|
btAssert(index < m_valueArray.size());
|
||||||
|
btAssert(index>=0);
|
||||||
return &m_valueArray[index];
|
if (index>=0 && index < m_valueArray.size())
|
||||||
|
{
|
||||||
|
return &m_valueArray[index];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Value* getAtIndex(int index)
|
Value* getAtIndex(int index)
|
||||||
{
|
{
|
||||||
btAssert(index < m_valueArray.size());
|
btAssert(index < m_valueArray.size());
|
||||||
|
btAssert(index>=0);
|
||||||
return &m_valueArray[index];
|
if (index>=0 && index < m_valueArray.size())
|
||||||
|
{
|
||||||
|
return &m_valueArray[index];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Key getKeyAtIndex(int index)
|
Key getKeyAtIndex(int index)
|
||||||
{
|
{
|
||||||
btAssert(index < m_keyArray.size());
|
btAssert(index < m_keyArray.size());
|
||||||
return m_keyArray[index];
|
btAssert(index>=0);
|
||||||
|
return m_keyArray[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
const Key getKeyAtIndex(int index) const
|
const Key getKeyAtIndex(int index) const
|
||||||
{
|
{
|
||||||
btAssert(index < m_keyArray.size());
|
btAssert(index < m_keyArray.size());
|
||||||
return m_keyArray[index];
|
btAssert(index>=0);
|
||||||
}
|
return m_keyArray[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Value* operator[](const Key& key) {
|
Value* operator[](const Key& key) {
|
||||||
|
|||||||
Reference in New Issue
Block a user