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

Method onRefreshIdentityStateRequestReceived

Engine/Node.cpp:4803–4859  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4801}
4802
4803void
4804Node::onRefreshIdentityStateRequestReceived()
4805{
4806 assert( QThread::currentThread() == qApp->thread() );
4807 if ( (_imp->refreshIdentityStateRequestsCount == 0) || !_imp->effect ) {
4808 //was already processed
4809 return;
4810 }
4811 _imp->refreshIdentityStateRequestsCount = 0;
4812
4813 ProjectPtr project = getApp()->getProject();
4814 double time = project->currentFrame();
4815 RenderScale scale(1.);
4816 double inputTime = 0;
4817 U64 hash = getHashValue();
4818 bool viewAware = _imp->effect->isViewAware();
4819 int nViews = !viewAware ? 1 : project->getProjectViewsCount();
4820 // Do not test identity on the project format! intermediate images may be much bigger!
4821 // see https://github.com/MrKepzie/Natron/issues/1578#issuecomment-377640892
4822 //Format frmt;
4823 //project->getProjectDefaultFormat(&frmt);
4824 RectI frmt;
4825 frmt.x1 = frmt.y1 = kOfxFlagInfiniteMin;
4826 frmt.x2 = frmt.y2 = kOfxFlagInfiniteMax;
4827
4828 //The one view node might report it is identity, but we do not want it to display it
4829
4830
4831 bool isIdentity = false;
4832 int inputNb = -1;
4833 OneViewNode* isOneView = dynamic_cast<OneViewNode*>( _imp->effect.get() );
4834 if (!isOneView) {
4835 for (int i = 0; i < nViews; ++i) {
4836 int identityInputNb = -1;
4837 ViewIdx identityView;
4838 bool isViewIdentity = _imp->effect->isIdentity_public(true, hash, time, scale, frmt, ViewIdx(i), &inputTime, &identityView, &identityInputNb);
4839 if ( (i > 0) && ( (isViewIdentity != isIdentity) || (identityInputNb != inputNb) || (identityView.value() != i) ) ) {
4840 isIdentity = false;
4841 inputNb = -1;
4842 break;
4843 }
4844 isIdentity |= isViewIdentity;
4845 inputNb = identityInputNb;
4846 if (!isIdentity) {
4847 break;
4848 }
4849 }
4850 }
4851
4852 //Check for consistency across views or then say the effect is not identity since the UI cannot display 2 different states
4853 //depending on the view
4854
4855
4856 NodeGuiIPtr nodeUi = _imp->guiPointer.lock();
4857 assert(nodeUi);
4858 nodeUi->onIdentityStateChanged(isIdentity ? inputNb : -1);
4859} // Node::onRefreshIdentityStateRequestReceived
4860

Callers

nothing calls this directly

Calls 11

getAppFunction · 0.85
getProjectMethod · 0.80
getProjectViewsCountMethod · 0.80
isIdentity_publicMethod · 0.80
ViewIdxClass · 0.70
currentFrameMethod · 0.45
isViewAwareMethod · 0.45
getMethod · 0.45
valueMethod · 0.45
lockMethod · 0.45

Tested by

no test coverage detected