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

Method renderViewer

Engine/ViewerInstance.cpp:604–696  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

602} // ViewerInstance::getViewerArgsAndRenderViewer
603
604ViewerInstance::ViewerRenderRetCode
605ViewerInstance::renderViewer(ViewIdx view,
606 bool singleThreaded,
607 bool isSequentialRender,
608 U64 viewerHash,
609 bool canAbort,
610 const NodePtr& rotoPaintNode,
611 bool useTLS,
612 ViewerArgsPtr args[2],
613 const ViewerCurrentFrameRequestSchedulerStartArgsPtr& request,
614 const RenderStatsPtr& stats)
615{
616 if (!_imp->uiContext) {
617 return eViewerRenderRetCodeFail;
618 }
619
620 /**
621 * When entering this code, we already know that the textures are not cached for the A and B inputs
622 * If the an input is not connected, it's args[i] will be NULL.
623 * If either one of the renders fails, that means we should block playback and clear to black the viewer
624 **/
625
626 ViewerInstance::ViewerRenderRetCode ret[2] = {
627 eViewerRenderRetCodeRedraw, eViewerRenderRetCodeRedraw
628 };
629 for (int i = 0; i < 2; ++i) {
630 if (args[i] && args[i]->params) {
631 if ( (i == 1) && (_imp->uiContext->getCompositingOperator() == eViewerCompositingOperatorNone) ) {
632 args[i]->params->tiles.clear();
633 break;
634 }
635 assert(args[i]->params->textureIndex == i);
636
637 ///We enable render stats just for the A input (i == 0) otherwise we would get crappy results
638
639 if (!isSequentialRender) {
640 if ( !_imp->addOngoingRender(args[i]->params->textureIndex, args[i]->params->abortInfo) ) {
641 /*
642 This may fail if another thread already pushed a more recent render in the render ages queue
643 */
644 ret[i] = eViewerRenderRetCodeRedraw;
645 args[i].reset();
646 }
647 }
648 if (args[i]) {
649 ret[i] = renderViewer_internal(view, singleThreaded, isSequentialRender, viewerHash, canAbort, rotoPaintNode, useTLS, request,
650 i == 0 ? stats : RenderStatsPtr(),
651 *args[i]);
652
653 // Reset the rednering flag
654 args[i]->isRenderingFlag.reset();
655 }
656
657 if (ret[i] != eViewerRenderRetCodeRender) {
658 /*
659 Either failure, black or nothing, the texture is junk, remove it from the cache
660 */
661 if (args[i] && args[i]->params) {

Callers 2

renderFrameMethod · 0.80

Calls 6

getRenderAgeMethod · 0.80
clearMethod · 0.45
resetMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected