MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / waitForImageBeingRenderedElsewhere

Method waitForImageBeingRenderedElsewhere

Engine/EffectInstancePrivate.cpp:614–647  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

612}
613
614bool
615EffectInstance::Implementation::waitForImageBeingRenderedElsewhere(const RectI & roi,
616 const ImagePtr & img)
617{
618 if ( !img->usesBitMap() ) {
619 return true;
620 }
621 ImageBeingRenderedPtr ibr;
622 QMutexLocker k(&imagesBeingRenderedMutex);
623 ImageBeingRenderedMap::iterator found = imagesBeingRendered.find(img);
624 if( found != imagesBeingRendered.end() ) {
625 ibr = found->second;
626 }
627 if (!ibr) {
628 return true;
629 }
630 k.unlock(); // imagesBeingRenderedMutex
631 std::list<RectI> restToRender;
632 bool isBeingRenderedElseWhere = false;
633 img->getRestToRender_trimap(roi, restToRender, &isBeingRenderedElseWhere);
634
635 bool ab = _publicInterface->aborted();
636
637 QMutexLocker kk(&ibr->lock);
638 while (!ab && isBeingRenderedElseWhere && !ibr->failed && ibr->refCount > 1) {
639 ibr->cond.wait(kk.mutex(), 50);
640 restToRender.clear();
641 isBeingRenderedElseWhere = false;
642 img->getRestToRender_trimap(roi, restToRender, &isBeingRenderedElseWhere);
643 ab = _publicInterface->aborted();
644 }
645 ///Everything should be rendered now unless we are aborted
646 return restToRender.empty() && !ibr->failed && !ab;
647}
648
649void
650EffectInstance::Implementation::unmarkImageAsBeingRendered(const ImagePtr & img,

Callers 1

waitForPendingRegionsMethod · 0.80

Calls 8

usesBitMapMethod · 0.80
abortedMethod · 0.80
emptyMethod · 0.80
findMethod · 0.45
endMethod · 0.45
unlockMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected