diff --git a/include/FluidSCWrapper.hpp b/include/FluidSCWrapper.hpp index cdfe8f5..8ca7dc3 100644 --- a/include/FluidSCWrapper.hpp +++ b/include/FluidSCWrapper.hpp @@ -194,8 +194,6 @@ public: }); } - - /// Final input is the doneAction, not a param, so we skip it in the controlsIterator NonRealTime() : mControlsIterator{mInBuf,static_cast(static_cast(mNumInputs) - mSpecialIndex - 1)} @@ -209,8 +207,7 @@ public: void init() { mFifoMsg.Set(mWorld, initNRTJob, nullptr, this); - mWorld->ft->fSendMsgFromRT(mWorld,mFifoMsg); - + mWorld->ft->fSendMsgFromRT(mWorld,mFifoMsg); //we want to poll thread roughly every 20ms checkThreadInterval = static_cast(0.02 / controlDur()); set_calc_function(); @@ -219,26 +216,16 @@ public: /// The calc function. Checks to see if we've cancelled, spits out progress, launches tidy up when complete void poll(int) { -// if(!mClient.done()) -// { - out0(0) = static_cast(mClient.progress()); -// } -// else { - if(0 == pollCounter++) - { - mWorld->ft->fDoAsynchronousCommand(mWorld, nullptr, Wrapper::getName(), this, - postProcess, exchangeBuffers, tidyUp, destroy, - 0, nullptr); - } - - pollCounter %= checkThreadInterval; - -// if(mClient.state() == kDone) -// mDone = true; -// mCalcFunc = mWorld->ft->fClearUnitOutputs; -// if(!mDone) + out0(0) = static_cast(mClient.progress()); -// } + if(0 == pollCounter++) + { + mWorld->ft->fDoAsynchronousCommand(mWorld, nullptr, Wrapper::getName(), this, + postProcess, exchangeBuffers, tidyUp, destroy, + 0, nullptr); + mCalcFunc = nop; + } + pollCounter %= checkThreadInterval; } static void nop(Unit*, int) {} @@ -248,16 +235,14 @@ public: { auto w = static_cast(f->mData); w->mDone = false; + Result result = validateParameters(w); if (!result.ok()) { std::cout << "ERROR: " << Wrapper::getName() << ": " << result.message().c_str() << std::endl; -// w->mDone = true; return; } -// w->mClient.setSynchronous(mSynchronous); -// mClient.setQueu w->mClient.enqueue(w->mParams); w->mClient.process(); } @@ -272,7 +257,7 @@ public: if(s==ProcessState::kDone || s==ProcessState::kDoneStillProcessing) { w->mDone = true; - + if(r.status() == Result::Status::kCancelled) { std::cout << Wrapper::getName() << ": Processing cancelled \n"; @@ -284,9 +269,9 @@ public: std::cout << "ERROR: " << Wrapper::getName() << ": " << r.message().c_str() << '\n'; return false; } - return true; } + w->template set_calc_function(); return false; } @@ -302,7 +287,6 @@ public: if(w->mDone && w->mNumInputs > 0) //don't check for doneAction if UGen has no ins { int doneAction = static_cast(w->in0(static_cast(w->mNumInputs - 1))); //doneAction is last input; THIS IS THE LAW - if(doneAction >= 2) w->mCalcFunc = nop; world->ft->fDoneAction(doneAction,w); } } @@ -311,8 +295,6 @@ public: { static_cast(unit)->mClient.cancel(); } - - private: static Result validateParameters(NonRealTime *w)