| 312 | } // EffectInstance::treeRecurseFunctor |
| 313 | |
| 314 | StatusEnum |
| 315 | EffectInstance::getInputsRoIsFunctor(bool useTransforms, |
| 316 | double time, |
| 317 | ViewIdx view, |
| 318 | unsigned originalMipMapLevel, |
| 319 | const NodePtr& node, |
| 320 | const NodePtr& /*callerNode*/, |
| 321 | const NodePtr& treeRoot, |
| 322 | const RectD& canonicalRenderWindow, |
| 323 | FrameRequestMap& requests) |
| 324 | { |
| 325 | NodeFrameRequestPtr nodeRequest; |
| 326 | EffectInstancePtr effect = node->getEffectInstance(); |
| 327 | |
| 328 | assert(effect); |
| 329 | |
| 330 | if (effect->supportsRenderScaleMaybe() == EffectInstance::eSupportsMaybe) { |
| 331 | /* |
| 332 | If this flag was not set already that means it probably failed all calls to getRegionOfDefinition. |
| 333 | We safely fail here |
| 334 | */ |
| 335 | return eStatusFailed; |
| 336 | } |
| 337 | assert(effect->supportsRenderScaleMaybe() == EffectInstance::eSupportsNo || |
| 338 | effect->supportsRenderScaleMaybe() == EffectInstance::eSupportsYes); |
| 339 | bool supportsRs = effect->supportsRenderScale(); |
| 340 | unsigned int mappedLevel = supportsRs ? originalMipMapLevel : 0; |
| 341 | FrameRequestMap::iterator foundNode = requests.find(node); |
| 342 | if ( foundNode != requests.end() ) { |
| 343 | nodeRequest = foundNode->second; |
| 344 | } else { |
| 345 | ///Setup global data for the node for the whole frame render |
| 346 | |
| 347 | NodeFrameRequestPtr tmp = std::make_shared<NodeFrameRequest>(); |
| 348 | tmp->mappedScale.x = tmp->mappedScale.y = Image::getScaleFromMipMapLevel(mappedLevel); |
| 349 | tmp->nodeHash = effect->getRenderHash(); |
| 350 | |
| 351 | std::pair<FrameRequestMap::iterator, bool> ret = requests.insert( std::make_pair(node, tmp) ); |
| 352 | assert(ret.second); |
| 353 | nodeRequest = ret.first->second; |
| 354 | } |
| 355 | assert(nodeRequest); |
| 356 | |
| 357 | ///Okay now we concentrate on this particular frame/view pair |
| 358 | |
| 359 | FrameViewPair frameView; |
| 360 | frameView.time = time; |
| 361 | frameView.view = view; |
| 362 | |
| 363 | FrameViewRequest* fvRequest = 0; |
| 364 | NodeFrameViewRequestData::iterator foundFrameView = nodeRequest->frames.find(frameView); |
| 365 | double par = effect->getAspectRatio(-1); |
| 366 | ViewInvarianceLevel viewInvariance = effect->isViewInvariant(); |
| 367 | |
| 368 | |
| 369 | if ( foundFrameView != nodeRequest->frames.end() ) { |
| 370 | fvRequest = &foundFrameView->second; |
| 371 | } else { |
nothing calls this directly
no test coverage detected