diff --git a/Extras/BulletMultiThreaded/SpuBatchRaycaster.cpp b/Extras/BulletMultiThreaded/SpuBatchRaycaster.cpp index dd7c76ca0..19e050234 100644 --- a/Extras/BulletMultiThreaded/SpuBatchRaycaster.cpp +++ b/Extras/BulletMultiThreaded/SpuBatchRaycaster.cpp @@ -16,23 +16,39 @@ subject to the following restrictions: #include #include "SpuBatchRaycaster.h" -SpuBatchRaycaster::SpuBatchRaycaster (class btThreadSupportInterface* threadInterface, int maxNumOutstandingTasks, btCollisionObjectArray& castUponObjects, int numCastUponObjects) +SpuBatchRaycaster::SpuBatchRaycaster (class btThreadSupportInterface* threadInterface, int maxNumOutstandingTasks) { - numCastUponObjectWrappers = numCastUponObjects; m_threadInterface = threadInterface; - castUponObjectWrappers = new SpuCollisionObjectWrapper[numCastUponObjects]; - - for (int i = 0; i < numCastUponObjectWrappers; i++) - { - new (&castUponObjectWrappers[i]) SpuCollisionObjectWrapper(castUponObjects[i]); - } + castUponObjectWrappers = NULL; + numCastUponObjectWrappers = 0; m_spuRaycastTaskProcess = new SpuRaycastTaskProcess(m_threadInterface,maxNumOutstandingTasks); // FIXME non constant } SpuBatchRaycaster::~SpuBatchRaycaster () { + if (castUponObjectWrappers) + { + delete [] castUponObjectWrappers; + } +} + +void +SpuBatchRaycaster::setCollisionObjects (btCollisionObjectArray& castUponObjects, int numCastUponObjects) +{ + if (castUponObjectWrappers) + { + delete [] castUponObjectWrappers; + } + + castUponObjectWrappers = new SpuCollisionObjectWrapper[numCastUponObjects]; + numCastUponObjectWrappers = numCastUponObjects; + + for (int i = 0; i < numCastUponObjectWrappers; i++) + { + new (&castUponObjectWrappers[i]) SpuCollisionObjectWrapper(castUponObjects[i]); + } } void @@ -81,4 +97,4 @@ int SpuBatchRaycaster::getNumRays () const { return rayBatchOutput.size(); -} \ No newline at end of file +} diff --git a/Extras/BulletMultiThreaded/SpuBatchRaycaster.h b/Extras/BulletMultiThreaded/SpuBatchRaycaster.h index 177fa5446..da2f65de6 100644 --- a/Extras/BulletMultiThreaded/SpuBatchRaycaster.h +++ b/Extras/BulletMultiThreaded/SpuBatchRaycaster.h @@ -35,8 +35,10 @@ protected: SpuRaycastTaskProcess* m_spuRaycastTaskProcess; class btThreadSupportInterface* m_threadInterface; public: - SpuBatchRaycaster (class btThreadSupportInterface* threadInterface, int maxNumOutstandingTasks, btCollisionObjectArray& castUponObjects, int numCastUponObjects); + SpuBatchRaycaster (class btThreadSupportInterface* threadInterface, int maxNumOutstandingTasks); ~SpuBatchRaycaster (); + void setCollisionObjects (btCollisionObjectArray& castUponObjects, int numCastUponObjects); + void addRay (const btVector3& rayFrom, const btVector3& rayTo); void clearRays (); void performBatchRaycast (); diff --git a/Extras/BulletMultiThreaded/SpuRaycastTask/SpuRaycastTask.cpp b/Extras/BulletMultiThreaded/SpuRaycastTask/SpuRaycastTask.cpp index c640ca9c8..8fff2239f 100644 --- a/Extras/BulletMultiThreaded/SpuRaycastTask/SpuRaycastTask.cpp +++ b/Extras/BulletMultiThreaded/SpuRaycastTask/SpuRaycastTask.cpp @@ -1,8 +1,9 @@ +#include "../PlatformDefinitions.h" #include "SpuRaycastTask.h" -#include "SpuCollisionObjectWrapper.h" -#include "SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h" +#include "../SpuCollisionObjectWrapper.h" +#include "../SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h" #include "SpuSubSimplexConvexCast.h" #include "LinearMath/btAabbUtil2.h" @@ -288,7 +289,7 @@ void spuWalkStacklessQuantizedTreeAgainstRay(RaycastTask_LocalStoreMemory* lsMem bounds[0] = lsMemPtr->bvhShapeData.getOptimizedBvh()->unQuantize(rootNode->m_quantizedAabbMin); bounds[1] = lsMemPtr->bvhShapeData.getOptimizedBvh()->unQuantize(rootNode->m_quantizedAabbMax); #ifdef RAYAABB2 - rayBoxOverlap = btRayAabb2 (raySource, rayDirection, sign, bounds, param, 0.0, lambda_max); + rayBoxOverlap = true;//btRayAabb2 (raySource, rayDirection, sign, bounds, param, 0.0, lambda_max); #else rayBoxOverlap = btRayAabb(raySource, rayTarget, bounds[0], bounds[1], param, normal); #endif @@ -414,7 +415,7 @@ void performRaycastAgainstConcave (RaycastGatheredObjectData* gatheredObjectData void performRaycastAgainstCompound (RaycastGatheredObjectData* gatheredObjectData, const SpuRaycastTaskWorkUnit& workUnit, SpuRaycastTaskWorkUnitOut* workUnitOut, RaycastTask_LocalStoreMemory* lsMemPtr) { - spu_printf ("Currently no support for ray. vs compound objects. Support coming soon.\n"); + //XXX spu_printf ("Currently no support for ray. vs compound objects. Support coming soon.\n"); } void @@ -485,7 +486,7 @@ void processRaycastTask(void* userPtr, void* lsMemory) if (btBroadphaseProxy::isConvex (gatheredObjectData.m_shapeType)) { - //performRaycastAgainstConvex (&gatheredObjectData, workUnit, &tWorkUnitOut, localMemory); + performRaycastAgainstConvex (&gatheredObjectData, workUnit, &tWorkUnitOut, localMemory); } else if (btBroadphaseProxy::isCompound (gatheredObjectData.m_shapeType)) { performRaycastAgainstCompound (&gatheredObjectData, workUnit, &tWorkUnitOut, localMemory); } else if (btBroadphaseProxy::isConcave (gatheredObjectData.m_shapeType)) { diff --git a/Extras/BulletMultiThreaded/SpuRaycastTask/SpuSubSimplexConvexCast.h b/Extras/BulletMultiThreaded/SpuRaycastTask/SpuSubSimplexConvexCast.h index 81321648e..23b6899b4 100644 --- a/Extras/BulletMultiThreaded/SpuRaycastTask/SpuSubSimplexConvexCast.h +++ b/Extras/BulletMultiThreaded/SpuRaycastTask/SpuSubSimplexConvexCast.h @@ -17,8 +17,8 @@ subject to the following restrictions: #ifndef SPU_SUBSIMPLEX_RAY_CAST_H #define SPU_SUBSIMPLEX_RAY_CAST_H -#include "SpuNarrowPhaseCollisionTask/SpuVoronoiSimplexSolver.h" -#include "SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h" +#include "../SpuNarrowPhaseCollisionTask/SpuVoronoiSimplexSolver.h" +#include "../SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h" #include "SpuRaycastTask.h" class btConvexShape;