avoid a lot of dynamic allocations in btDbvt/btSoftBody (re-use stack)
add Maya 2009 to Dynamica msvc projectfiles
This commit is contained in:
@@ -51,7 +51,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
AdditionalOptions="/GR /GS /EHsc"
|
AdditionalOptions="/GR /GS /EHsc"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=".;"C:\Program Files\Autodesk\Maya2008\include";"C:\Program Files\Alias\Maya8.0\include";../../src;../../Extras\GIMPACT\include"
|
AdditionalIncludeDirectories=".;"C:\Program Files\Autodesk\Maya2009\include";"C:\Program Files\Autodesk\Maya2008\include";"C:\Program Files\Alias\Maya8.0\include";../../src;../../Extras\GIMPACT\include"
|
||||||
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;NT_PLUGIN;REQUIRE_IOSTREAM"
|
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;NT_PLUGIN;REQUIRE_IOSTREAM"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
AssemblerListingLocation=".\Debug/"
|
AssemblerListingLocation=".\Debug/"
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
OutputFile="./BulletMayaPluginDebug.mll"
|
OutputFile="./BulletMayaPluginDebug.mll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
SuppressStartupBanner="true"
|
SuppressStartupBanner="true"
|
||||||
AdditionalLibraryDirectories="..\..\lib;"C:\Program Files\Autodesk\Maya2008\lib";C:\develop\disney_bulletmaya\boost_1_35_0\lib;"C:\Program Files\Alias\Maya8.0\lib""
|
AdditionalLibraryDirectories="..\..\lib;"C:\Program Files\Autodesk\Maya2009\lib";"C:\Program Files\Autodesk\Maya2008\lib";C:\develop\disney_bulletmaya\boost_1_35_0\lib;"C:\Program Files\Alias\Maya8.0\lib""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
ProgramDatabaseFile=".\Debug/BulletMayaPlugin.pdb"
|
ProgramDatabaseFile=".\Debug/BulletMayaPlugin.pdb"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
AdditionalOptions="/GR /GS /EHsc"
|
AdditionalOptions="/GR /GS /EHsc"
|
||||||
Optimization="2"
|
Optimization="2"
|
||||||
InlineFunctionExpansion="1"
|
InlineFunctionExpansion="1"
|
||||||
AdditionalIncludeDirectories=".;"C:\Program Files\Autodesk\Maya2008\include";"C:\Program Files\Autodesk\Maya8.5\include";"C:\Program Files\Alias\Maya8.0\include";../../src;../../Extras\GIMPACT\include"
|
AdditionalIncludeDirectories=".;"C:\Program Files\Autodesk\Maya2009\include";"C:\Program Files\Autodesk\Maya2008\include";"C:\Program Files\Autodesk\Maya8.5\include";"C:\Program Files\Alias\Maya8.0\include";../../src;../../Extras\GIMPACT\include"
|
||||||
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;NT_PLUGIN;REQUIRE_IOSTREAM"
|
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;NT_PLUGIN;REQUIRE_IOSTREAM"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
@@ -177,7 +177,7 @@
|
|||||||
OutputFile=".\BulletMayaPlugin.mll"
|
OutputFile=".\BulletMayaPlugin.mll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
SuppressStartupBanner="true"
|
SuppressStartupBanner="true"
|
||||||
AdditionalLibraryDirectories="..\..\lib;"C:\Program Files\Autodesk\Maya2008\lib";"C:\Program Files\Autodesk\Maya8.5\lib";"C:\Program Files\Alias\Maya8.0\lib";C:\develop\disney_bulletmaya\boost_1_35_0\lib;$(NOINHERIT)"
|
AdditionalLibraryDirectories="..\..\lib;"C:\Program Files\Autodesk\Maya2009\lib";"C:\Program Files\Autodesk\Maya2008\lib";"C:\Program Files\Autodesk\Maya8.5\lib";"C:\Program Files\Alias\Maya8.0\lib";C:\develop\disney_bulletmaya\boost_1_35_0\lib;$(NOINHERIT)"
|
||||||
ProgramDatabaseFile=".\Release/BulletMayaPlugin.pdb"
|
ProgramDatabaseFile=".\Release/BulletMayaPlugin.pdb"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
ImportLibrary=".\Release/BulletMayaPlugin.lib"
|
ImportLibrary=".\Release/BulletMayaPlugin.lib"
|
||||||
|
|||||||
@@ -265,6 +265,8 @@ struct btDbvt
|
|||||||
unsigned m_opath;
|
unsigned m_opath;
|
||||||
|
|
||||||
mutable btAlignedObjectArray<const btDbvtNode*> m_stack;
|
mutable btAlignedObjectArray<const btDbvtNode*> m_stack;
|
||||||
|
mutable btAlignedObjectArray<sStkNN> m_stkStack;
|
||||||
|
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
btDbvt();
|
btDbvt();
|
||||||
@@ -299,22 +301,22 @@ struct btDbvt
|
|||||||
static void enumLeaves( const btDbvtNode* root,
|
static void enumLeaves( const btDbvtNode* root,
|
||||||
DBVT_IPOLICY);
|
DBVT_IPOLICY);
|
||||||
DBVT_PREFIX
|
DBVT_PREFIX
|
||||||
static void collideTT( const btDbvtNode* root0,
|
void collideTT( const btDbvtNode* root0,
|
||||||
const btDbvtNode* root1,
|
const btDbvtNode* root1,
|
||||||
DBVT_IPOLICY);
|
DBVT_IPOLICY);
|
||||||
DBVT_PREFIX
|
DBVT_PREFIX
|
||||||
static void collideTT( const btDbvtNode* root0,
|
void collideTT( const btDbvtNode* root0,
|
||||||
const btDbvtNode* root1,
|
const btDbvtNode* root1,
|
||||||
const btTransform& xform,
|
const btTransform& xform,
|
||||||
DBVT_IPOLICY);
|
DBVT_IPOLICY);
|
||||||
DBVT_PREFIX
|
DBVT_PREFIX
|
||||||
static void collideTT( const btDbvtNode* root0,
|
void collideTT( const btDbvtNode* root0,
|
||||||
const btTransform& xform0,
|
const btTransform& xform0,
|
||||||
const btDbvtNode* root1,
|
const btDbvtNode* root1,
|
||||||
const btTransform& xform1,
|
const btTransform& xform1,
|
||||||
DBVT_IPOLICY);
|
DBVT_IPOLICY);
|
||||||
DBVT_PREFIX
|
DBVT_PREFIX
|
||||||
static void collideTV( const btDbvtNode* root,
|
void collideTV( const btDbvtNode* root,
|
||||||
const btDbvtVolume& volume,
|
const btDbvtVolume& volume,
|
||||||
DBVT_IPOLICY);
|
DBVT_IPOLICY);
|
||||||
///rayTest is a re-entrant ray test, and can be called in parallel as long as the btAlignedAlloc is thread-safe (uses locking etc)
|
///rayTest is a re-entrant ray test, and can be called in parallel as long as the btAlignedAlloc is thread-safe (uses locking etc)
|
||||||
@@ -723,25 +725,24 @@ inline void btDbvt::collideTT( const btDbvtNode* root0,
|
|||||||
DBVT_CHECKTYPE
|
DBVT_CHECKTYPE
|
||||||
if(root0&&root1)
|
if(root0&&root1)
|
||||||
{
|
{
|
||||||
btAlignedObjectArray<sStkNN> stack;
|
|
||||||
int depth=1;
|
int depth=1;
|
||||||
int treshold=DOUBLE_STACKSIZE-4;
|
int treshold=DOUBLE_STACKSIZE-4;
|
||||||
stack.resize(DOUBLE_STACKSIZE);
|
m_stkStack.resize(DOUBLE_STACKSIZE);
|
||||||
stack[0]=sStkNN(root0,root1);
|
m_stkStack[0]=sStkNN(root0,root1);
|
||||||
do {
|
do {
|
||||||
sStkNN p=stack[--depth];
|
sStkNN p=m_stkStack[--depth];
|
||||||
if(depth>treshold)
|
if(depth>treshold)
|
||||||
{
|
{
|
||||||
stack.resize(stack.size()*2);
|
m_stkStack.resize(m_stkStack.size()*2);
|
||||||
treshold=stack.size()-4;
|
treshold=m_stkStack.size()-4;
|
||||||
}
|
}
|
||||||
if(p.a==p.b)
|
if(p.a==p.b)
|
||||||
{
|
{
|
||||||
if(p.a->isinternal())
|
if(p.a->isinternal())
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.a->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.a->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.a->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.a->childs[1]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.a->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.a->childs[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Intersect(p.a->volume,p.b->volume))
|
else if(Intersect(p.a->volume,p.b->volume))
|
||||||
@@ -750,23 +751,23 @@ inline void btDbvt::collideTT( const btDbvtNode* root0,
|
|||||||
{
|
{
|
||||||
if(p.b->isinternal())
|
if(p.b->isinternal())
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.b);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.b);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.b);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(p.b->isinternal())
|
if(p.b->isinternal())
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a,p.b->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a,p.b->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a,p.b->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a,p.b->childs[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -788,41 +789,40 @@ inline void btDbvt::collideTT( const btDbvtNode* root0,
|
|||||||
DBVT_CHECKTYPE
|
DBVT_CHECKTYPE
|
||||||
if(root0&&root1)
|
if(root0&&root1)
|
||||||
{
|
{
|
||||||
btAlignedObjectArray<sStkNN> stack;
|
|
||||||
int depth=1;
|
int depth=1;
|
||||||
int treshold=DOUBLE_STACKSIZE-4;
|
int treshold=DOUBLE_STACKSIZE-4;
|
||||||
stack.resize(DOUBLE_STACKSIZE);
|
m_stkStack.resize(DOUBLE_STACKSIZE);
|
||||||
stack[0]=sStkNN(root0,root1);
|
m_stkStack[0]=sStkNN(root0,root1);
|
||||||
do {
|
do {
|
||||||
sStkNN p=stack[--depth];
|
sStkNN p=stack[--depth];
|
||||||
if(Intersect(p.a->volume,p.b->volume,xform))
|
if(Intersect(p.a->volume,p.b->volume,xform))
|
||||||
{
|
{
|
||||||
if(depth>treshold)
|
if(depth>treshold)
|
||||||
{
|
{
|
||||||
stack.resize(stack.size()*2);
|
m_stkStack.resize(stack.size()*2);
|
||||||
treshold=stack.size()-4;
|
treshold=stack.size()-4;
|
||||||
}
|
}
|
||||||
if(p.a->isinternal())
|
if(p.a->isinternal())
|
||||||
{
|
{
|
||||||
if(p.b->isinternal())
|
if(p.b->isinternal())
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a->childs[0],p.b);
|
m_stkStack[depth++]=sStkNN(p.a->childs[0],p.b);
|
||||||
stack[depth++]=sStkNN(p.a->childs[1],p.b);
|
m_stkStack[depth++]=sStkNN(p.a->childs[1],p.b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(p.b->isinternal())
|
if(p.b->isinternal())
|
||||||
{
|
{
|
||||||
stack[depth++]=sStkNN(p.a,p.b->childs[0]);
|
m_stkStack[depth++]=sStkNN(p.a,p.b->childs[0]);
|
||||||
stack[depth++]=sStkNN(p.a,p.b->childs[1]);
|
m_stkStack[depth++]=sStkNN(p.a,p.b->childs[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -856,25 +856,26 @@ inline void btDbvt::collideTV( const btDbvtNode* root,
|
|||||||
if(root)
|
if(root)
|
||||||
{
|
{
|
||||||
ATTRIBUTE_ALIGNED16(btDbvtVolume) volume(vol);
|
ATTRIBUTE_ALIGNED16(btDbvtVolume) volume(vol);
|
||||||
btAlignedObjectArray<const btDbvtNode*> stack;
|
|
||||||
stack.reserve(SIMPLE_STACKSIZE);
|
m_stack.resize(0);
|
||||||
stack.push_back(root);
|
m_stack.reserve(SIMPLE_STACKSIZE);
|
||||||
|
m_stack.push_back(root);
|
||||||
do {
|
do {
|
||||||
const btDbvtNode* n=stack[stack.size()-1];
|
const btDbvtNode* n=m_stack[m_stack.size()-1];
|
||||||
stack.pop_back();
|
m_stack.pop_back();
|
||||||
if(Intersect(n->volume,volume))
|
if(Intersect(n->volume,volume))
|
||||||
{
|
{
|
||||||
if(n->isinternal())
|
if(n->isinternal())
|
||||||
{
|
{
|
||||||
stack.push_back(n->childs[0]);
|
m_stack.push_back(n->childs[0]);
|
||||||
stack.push_back(n->childs[1]);
|
m_stack.push_back(n->childs[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
policy.Process(n);
|
policy.Process(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while(stack.size()>0);
|
} while(m_stack.size()>0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -182,8 +182,8 @@ btBroadphaseProxy* btDbvtBroadphase::createProxy( const btVector3& aabbMin,
|
|||||||
{
|
{
|
||||||
btDbvtTreeCollider collider(this);
|
btDbvtTreeCollider collider(this);
|
||||||
collider.proxy=proxy;
|
collider.proxy=proxy;
|
||||||
btDbvt::collideTV(m_sets[0].m_root,aabb,collider);
|
m_sets[0].collideTV(m_sets[0].m_root,aabb,collider);
|
||||||
btDbvt::collideTV(m_sets[1].m_root,aabb,collider);
|
m_sets[1].collideTV(m_sets[1].m_root,aabb,collider);
|
||||||
}
|
}
|
||||||
return(proxy);
|
return(proxy);
|
||||||
}
|
}
|
||||||
@@ -307,8 +307,8 @@ void btDbvtBroadphase::setAabb( btBroadphaseProxy* absproxy,
|
|||||||
if(!m_deferedcollide)
|
if(!m_deferedcollide)
|
||||||
{
|
{
|
||||||
btDbvtTreeCollider collider(this);
|
btDbvtTreeCollider collider(this);
|
||||||
btDbvt::collideTT(m_sets[1].m_root,proxy->leaf,collider);
|
m_sets[1].collideTT(m_sets[1].m_root,proxy->leaf,collider);
|
||||||
btDbvt::collideTT(m_sets[0].m_root,proxy->leaf,collider);
|
m_sets[0].collideTT(m_sets[0].m_root,proxy->leaf,collider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -382,12 +382,12 @@ void btDbvtBroadphase::collide(btDispatcher* dispatcher)
|
|||||||
if(m_deferedcollide)
|
if(m_deferedcollide)
|
||||||
{
|
{
|
||||||
SPC(m_profiling.m_fdcollide);
|
SPC(m_profiling.m_fdcollide);
|
||||||
btDbvt::collideTT(m_sets[0].m_root,m_sets[1].m_root,collider);
|
m_sets[0].collideTT(m_sets[0].m_root,m_sets[1].m_root,collider);
|
||||||
}
|
}
|
||||||
if(m_deferedcollide)
|
if(m_deferedcollide)
|
||||||
{
|
{
|
||||||
SPC(m_profiling.m_ddcollide);
|
SPC(m_profiling.m_ddcollide);
|
||||||
btDbvt::collideTT(m_sets[0].m_root,m_sets[0].m_root,collider);
|
m_sets[0].collideTT(m_sets[0].m_root,m_sets[0].m_root,collider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* clean up */
|
/* clean up */
|
||||||
|
|||||||
@@ -2584,7 +2584,7 @@ void btSoftBody::defaultCollisionHandler(btCollisionObject* pco)
|
|||||||
docollide.prb = prb;
|
docollide.prb = prb;
|
||||||
docollide.dynmargin = basemargin+timemargin;
|
docollide.dynmargin = basemargin+timemargin;
|
||||||
docollide.stamargin = basemargin;
|
docollide.stamargin = basemargin;
|
||||||
btDbvt::collideTV(m_ndbvt.m_root,volume,docollide);
|
m_ndbvt.collideTV(m_ndbvt.m_root,volume,docollide);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case fCollision::CL_RS:
|
case fCollision::CL_RS:
|
||||||
@@ -2617,13 +2617,13 @@ void btSoftBody::defaultCollisionHandler(btSoftBody* psb)
|
|||||||
/* psb0 nodes vs psb1 faces */
|
/* psb0 nodes vs psb1 faces */
|
||||||
docollide.psb[0]=this;
|
docollide.psb[0]=this;
|
||||||
docollide.psb[1]=psb;
|
docollide.psb[1]=psb;
|
||||||
btDbvt::collideTT( docollide.psb[0]->m_ndbvt.m_root,
|
docollide.psb[0]->m_ndbvt.collideTT( docollide.psb[0]->m_ndbvt.m_root,
|
||||||
docollide.psb[1]->m_fdbvt.m_root,
|
docollide.psb[1]->m_fdbvt.m_root,
|
||||||
docollide);
|
docollide);
|
||||||
/* psb1 nodes vs psb0 faces */
|
/* psb1 nodes vs psb0 faces */
|
||||||
docollide.psb[0]=psb;
|
docollide.psb[0]=psb;
|
||||||
docollide.psb[1]=this;
|
docollide.psb[1]=this;
|
||||||
btDbvt::collideTT( docollide.psb[0]->m_ndbvt.m_root,
|
docollide.psb[0]->m_ndbvt.collideTT( docollide.psb[0]->m_ndbvt.m_root,
|
||||||
docollide.psb[1]->m_fdbvt.m_root,
|
docollide.psb[1]->m_fdbvt.m_root,
|
||||||
docollide);
|
docollide);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -752,7 +752,7 @@ struct btSoftColliders
|
|||||||
pr->getCollisionShape()->getAabb(pr->getInterpolationWorldTransform(),mins,maxs);
|
pr->getCollisionShape()->getAabb(pr->getInterpolationWorldTransform(),mins,maxs);
|
||||||
volume=btDbvtVolume::FromMM(mins,maxs);
|
volume=btDbvtVolume::FromMM(mins,maxs);
|
||||||
volume.Expand(btVector3(1,1,1)*margin);
|
volume.Expand(btVector3(1,1,1)*margin);
|
||||||
btDbvt::collideTV(ps->m_cdbvt.m_root,volume,*this);
|
ps->m_cdbvt.collideTV(ps->m_cdbvt.m_root,volume,*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//
|
//
|
||||||
@@ -789,7 +789,7 @@ struct btSoftColliders
|
|||||||
friction = btMin(psa->m_cfg.kDF,psb->m_cfg.kDF);
|
friction = btMin(psa->m_cfg.kDF,psb->m_cfg.kDF);
|
||||||
bodies[0] = psa;
|
bodies[0] = psa;
|
||||||
bodies[1] = psb;
|
bodies[1] = psb;
|
||||||
btDbvt::collideTT(psa->m_cdbvt.m_root,psb->m_cdbvt.m_root,*this);
|
psa->m_cdbvt.collideTT(psa->m_cdbvt.m_root,psb->m_cdbvt.m_root,*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user