| 4801 | } |
| 4802 | |
| 4803 | void |
| 4804 | Node::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 |
nothing calls this directly
no test coverage detected