PyBullet: free cached textures

PyBullet: bool PhysicsServerCommandProcessor::pickBody, disable collision filtering to allow picking of all objects
This commit is contained in:
erwincoumans
2018-01-15 08:36:08 -08:00
parent 387d3f16db
commit 9d405fde67
2 changed files with 39 additions and 2 deletions

View File

@@ -30,6 +30,27 @@ struct CachedTextureResult
}; };
static b3HashMap<b3HashString, CachedTextureResult> gCachedTextureResults; static b3HashMap<b3HashString, CachedTextureResult> gCachedTextureResults;
struct CachedTextureManager
{
CachedTextureManager()
{
}
virtual ~CachedTextureManager()
{
for (int i=0;i<gCachedTextureResults.size();i++)
{
CachedTextureResult* res = gCachedTextureResults.getAtIndex(i);
if (res)
{
free(res->m_pixels);
}
}
}
};
static CachedTextureManager sTexCacheMgr;
bool b3ImportMeshUtility::loadAndRegisterMeshFromFileInternal(const std::string& fileName, b3ImportMeshData& meshData) bool b3ImportMeshUtility::loadAndRegisterMeshFromFileInternal(const std::string& fileName, b3ImportMeshData& meshData)
{ {

View File

@@ -9186,6 +9186,22 @@ void PhysicsServerCommandProcessor::physicsDebugDraw(int debugDrawFlags)
} }
struct MyResultCallback : public btCollisionWorld::ClosestRayResultCallback
{
MyResultCallback(const btVector3& rayFromWorld,const btVector3& rayToWorld)
:btCollisionWorld::ClosestRayResultCallback(rayFromWorld, rayToWorld)
{
}
virtual bool needsCollision(btBroadphaseProxy* proxy0) const
{
return true;
}
};
bool PhysicsServerCommandProcessor::pickBody(const btVector3& rayFromWorld, const btVector3& rayToWorld) bool PhysicsServerCommandProcessor::pickBody(const btVector3& rayFromWorld, const btVector3& rayToWorld)
{ {
@@ -9193,8 +9209,8 @@ bool PhysicsServerCommandProcessor::pickBody(const btVector3& rayFromWorld, cons
if (m_data->m_dynamicsWorld==0) if (m_data->m_dynamicsWorld==0)
return false; return false;
btCollisionWorld::ClosestRayResultCallback rayCallback(rayFromWorld, rayToWorld); //btCollisionWorld::ClosestRayResultCallback rayCallback(rayFromWorld, rayToWorld);
MyResultCallback rayCallback(rayFromWorld, rayToWorld);
m_data->m_dynamicsWorld->rayTest(rayFromWorld, rayToWorld, rayCallback); m_data->m_dynamicsWorld->rayTest(rayFromWorld, rayToWorld, rayCallback);
if (rayCallback.hasHit()) if (rayCallback.hasHit())
{ {