diff options
Diffstat (limited to 'intern/elbeem')
-rw-r--r-- | intern/elbeem/extern/elbeem.h | 13 | ||||
-rw-r--r-- | intern/elbeem/intern/elbeem.cpp | 22 | ||||
-rw-r--r-- | intern/elbeem/intern/ntl_geometryobject.cpp | 17 | ||||
-rw-r--r-- | intern/elbeem/intern/ntl_geometryobject.h | 34 | ||||
-rw-r--r-- | intern/elbeem/intern/solver_control.cpp | 8 | ||||
-rw-r--r-- | intern/elbeem/intern/solver_init.cpp | 4 |
6 files changed, 52 insertions, 46 deletions
diff --git a/intern/elbeem/extern/elbeem.h b/intern/elbeem/extern/elbeem.h index b8752efed80..5370196ff4a 100644 --- a/intern/elbeem/extern/elbeem.h +++ b/intern/elbeem/extern/elbeem.h @@ -163,11 +163,14 @@ typedef struct elbeemMesh { float cpsTimeStart; float cpsTimeEnd; - // TODO dg: change to channels - float attractforceStrength; - float attractforceRadius; - float velocityforceStrength; - float velocityforceRadius; + int channelSizeAttractforceStrength; + float *channelAttractforceStrength; + int channelSizeAttractforceRadius; + float *channelAttractforceRadius; + int channelSizeVelocityforceStrength; + float *channelVelocityforceStrength; + int channelSizeVelocityforceRadius; + float *channelVelocityforceRadius; } elbeemMesh; // API functions diff --git a/intern/elbeem/intern/elbeem.cpp b/intern/elbeem/intern/elbeem.cpp index 4517e20d89c..b27fefd4381 100644 --- a/intern/elbeem/intern/elbeem.cpp +++ b/intern/elbeem/intern/elbeem.cpp @@ -164,10 +164,14 @@ void elbeemResetMesh(elbeemMesh *mesh) { mesh->cpsTimeStart = 0; mesh->cpsTimeEnd = 0; - mesh->attractforceStrength = 0; - mesh->attractforceRadius = 0; - mesh->velocityforceStrength = 0; - mesh->velocityforceRadius = 0; + mesh->channelSizeAttractforceStrength = 0; + mesh->channelAttractforceStrength = NULL; + mesh->channelSizeAttractforceRadius = 0; + mesh->channelAttractforceRadius = NULL; + mesh->channelSizeVelocityforceStrength = 0; + mesh->channelVelocityforceStrength = NULL; + mesh->channelSizeVelocityforceRadius = 0; + mesh->channelVelocityforceRadius = NULL; } int globalMeshCounter = 1; @@ -211,10 +215,6 @@ int elbeemAddMesh(elbeemMesh *mesh) { /* fluid control features */ obj->setCpsTimeStart(mesh->cpsTimeStart); obj->setCpsTimeEnd(mesh->cpsTimeEnd); - obj->setAttractForceStrength(mesh->attractforceStrength); - obj->setAttractForceRadius(mesh->attractforceRadius); - obj->setVelocityForceStrength(mesh->velocityforceStrength); - obj->setVelocityForceRadius(mesh->velocityforceRadius); if((mesh->volumeInitType<VOLUMEINIT_VOLUME)||(mesh->volumeInitType>VOLUMEINIT_BOTH)) mesh->volumeInitType = VOLUMEINIT_VOLUME; obj->setVolumeInit(mesh->volumeInitType); @@ -224,7 +224,11 @@ int elbeemAddMesh(elbeemMesh *mesh) { mesh->channelSizeRotation, mesh->channelRotation, mesh->channelSizeScale, mesh->channelScale, mesh->channelSizeActive, mesh->channelActive, - mesh->channelSizeInitialVel, mesh->channelInitialVel + mesh->channelSizeInitialVel, mesh->channelInitialVel, + mesh->channelSizeAttractforceStrength, mesh->channelAttractforceStrength, + mesh->channelSizeAttractforceRadius, mesh->channelAttractforceRadius, + mesh->channelSizeVelocityforceStrength, mesh->channelVelocityforceStrength, + mesh->channelSizeVelocityforceRadius, mesh->channelVelocityforceRadius ); obj->setLocalCoordInivel( mesh->localInivelCoords ); diff --git a/intern/elbeem/intern/ntl_geometryobject.cpp b/intern/elbeem/intern/ntl_geometryobject.cpp index 68735acaec1..f64dbf104b5 100644 --- a/intern/elbeem/intern/ntl_geometryobject.cpp +++ b/intern/elbeem/intern/ntl_geometryobject.cpp @@ -41,7 +41,8 @@ ntlGeometryObject::ntlGeometryObject() : mCachedMovPoints(), mCachedMovNormals(), mTriangleDivs1(), mTriangleDivs2(), mTriangleDivs3(), mMovPntsInited(-100.0), mMaxMovPnt(-1), - mcGeoActive(1.) + mcGeoActive(1.), + mcAttrFStr(0.),mcAttrFRad(0.), mcVelFStr(0.), mcVelFRad(0.) { }; @@ -331,7 +332,11 @@ void ntlGeometryObject::sceneAddTriangleNoVert(int *trips, void ntlGeometryObject::initChannels( int nTrans, float *trans, int nRot, float *rot, int nScale, float *scale, - int nAct, float *act, int nIvel, float *ivel + int nAct, float *act, int nIvel, float *ivel, + int nAttrFStr, float *attrFStr, + int nAttrFRad, float *attrFRad, + int nVelFStr, float *velFStr, + int nVelFRad, float *velFRad ) { const bool debugInitc=true; if(debugInitc) { debMsgStd("ntlGeometryObject::initChannels",DM_MSG,"nt:"<<nTrans<<" nr:"<<nRot<<" ns:"<<nScale, 10); @@ -344,6 +349,12 @@ void ntlGeometryObject::initChannels( if((scale)&&(nScale>0)) { ADD_CHANNEL_VEC(mcScale, nScale, scale); } if((act)&&(nAct>0)) { ADD_CHANNEL_FLOAT(mcGeoActive, nAct, act); } if((ivel)&&(nIvel>0)) { ADD_CHANNEL_VEC(mcInitialVelocity, nIvel, ivel); } + + /* fluid control channels */ + if((attrFStr)&&(nAttrFStr>0)) { printf("added!\n"); ADD_CHANNEL_FLOAT(mcAttrFStr, nAttrFStr, attrFStr); } + if((attrFRad)&&(nAttrFRad>0)) { ADD_CHANNEL_FLOAT(mcAttrFRad, nAttrFRad, attrFRad); } + if((velFStr)&&(nVelFStr>0)) { ADD_CHANNEL_FLOAT(mcVelFStr, nAct, velFStr); } + if((velFRad)&&(nVelFRad>0)) { ADD_CHANNEL_FLOAT(mcVelFRad, nVelFRad, velFRad); } checkIsAnimated(); @@ -567,7 +578,7 @@ void ntlGeometryObject::initMovingPoints(double time, gfxReal featureSize) { } } - if( (this-getMeshAnimated()) + if( (this->getMeshAnimated()) || (mcTrans.accessValues().size()>1) // VALIDATE || (mcRot.accessValues().size()>1) || (mcScale.accessValues().size()>1) diff --git a/intern/elbeem/intern/ntl_geometryobject.h b/intern/elbeem/intern/ntl_geometryobject.h index 6076610ea0f..436e511ea79 100644 --- a/intern/elbeem/intern/ntl_geometryobject.h +++ b/intern/elbeem/intern/ntl_geometryobject.h @@ -109,28 +109,21 @@ class ntlGeometryObject : public ntlGeometryClass inline float getCpsTimeEnd() const { return mCpsTimeEnd; } inline void setCpsTimeEnd(float set) { mCpsTimeEnd=set; } - /*! Set/get the particle control set attract force strength */ - inline float getAttractForceStrength() const { return mAttractforceStrength; } - inline void setAttractForceStrength(float set) { mAttractforceStrength=set; } - - /*! Set/get the particle control set attract force radius */ - inline float getAttractForceRadius() const { return mAttractforceRadius; } - inline void setAttractForceRadius(float set) { mAttractforceRadius=set; } - - /*! Set/get the particle control set velocity force strength */ - inline float getVelocityForceStrength() const { return mVelocityforceStrength; } - inline void setVelocityForceStrength(float set) { mVelocityforceStrength=set; } - - /*! Set/get the particle control set velocity force radius */ - inline float getVelocityForceRadius() const { return mVelocityforceRadius; } - inline void setVelocityForceRadius(float set) { mVelocityforceRadius=set; } + inline AnimChannel<float> getCpsAttrFStr() const { return mcAttrFStr; } + inline AnimChannel<float> getCpsAttrFRad() const { return mcAttrFRad; } + inline AnimChannel<float> getCpsVelFStr() const { return mcVelFStr; } + inline AnimChannel<float> getCpsVelFRad() const { return mcVelFRad; } /****************************************/ /*! Init channels from float arrays (for elbeem API) */ void initChannels( int nTrans, float *trans, int nRot, float *rot, int nScale, float *scale, - int nAct, float *act, int nIvel, float *ivel + int nAct, float *act, int nIvel, float *ivel, + int nAttrFStr, float *attrFStr, + int nAttrFRad, float *attrFRad, + int nVelFStr, float *velFStr, + int nVelFRad, float *velFRad ); /*! is the object animated? */ @@ -234,13 +227,8 @@ class ntlGeometryObject : public ntlGeometryClass /* fluid control settings */ float mCpsTimeStart; - float mCpsTimeEnd - ; - // TODO dg: change to channels - float mAttractforceStrength; - float mAttractforceRadius; - float mVelocityforceStrength; - float mVelocityforceRadius; + float mCpsTimeEnd; + AnimChannel<float> mcAttrFStr, mcAttrFRad, mcVelFStr, mcVelFRad; public: diff --git a/intern/elbeem/intern/solver_control.cpp b/intern/elbeem/intern/solver_control.cpp index 267a1c5268c..bda464f56d6 100644 --- a/intern/elbeem/intern/solver_control.cpp +++ b/intern/elbeem/intern/solver_control.cpp @@ -234,10 +234,10 @@ LbmFsgrSolver::initCpdata() cset->mContrPartFile = string(""); // TODO dg: switch to channels later - cset->mcForceAtt = AnimChannel<float>(obj->getAttractForceStrength()); - cset->mcRadiusAtt = AnimChannel<float>(obj->getAttractForceRadius()); - cset->mcForceVel = AnimChannel<float>(obj->getVelocityForceStrength()); - cset->mcRadiusVel = AnimChannel<float>(obj->getVelocityForceRadius()); + cset->mcForceAtt = obj->getCpsAttrFStr(); + cset->mcRadiusAtt = obj->getCpsAttrFRad(); + cset->mcForceVel = obj->getCpsVelFStr(); + cset->mcRadiusVel = obj->getCpsVelFRad(); cset->mCparts->setCPSTimeStart(obj->getCpsTimeStart()); cset->mCparts->setCPSTimeEnd(obj->getCpsTimeEnd()); diff --git a/intern/elbeem/intern/solver_init.cpp b/intern/elbeem/intern/solver_init.cpp index 6dd654f57ff..cbcc99dd6e0 100644 --- a/intern/elbeem/intern/solver_init.cpp +++ b/intern/elbeem/intern/solver_init.cpp @@ -696,16 +696,16 @@ bool LbmFsgrSolver::initializeSolverMemory() // restrict max. chunk of 1 mem block to 1GB for windos bool memBlockAllocProblem = false; - double maxWinMemChunk = 1100.*1024.*1024.; - double maxMacMemChunk = 1200.*1024.*1024.; double maxDefaultMemChunk = 2.*1024.*1024.*1024.; //std::cerr<<" memEstFine "<< memEstFine <<" maxWin:" <<maxWinMemChunk <<" maxMac:" <<maxMacMemChunk ; // DEBUG #ifdef WIN32 + double maxWinMemChunk = 1100.*1024.*1024.; if(memEstFine> maxWinMemChunk) { memBlockAllocProblem = true; } #endif // WIN32 #ifdef __APPLE__ + double maxMacMemChunk = 1200.*1024.*1024.; if(memEstFine> maxMacMemChunk) { memBlockAllocProblem = true; } |