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

Method renderFrame

Engine/OutputSchedulerThread.cpp:2796–2886  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2794private:
2795
2796 virtual void renderFrame(int time,
2797 const std::vector<ViewIdx>& viewsToRender,
2798 bool enableRenderStats)
2799 {
2800 RenderStatsPtr stats;
2801
2802 if (enableRenderStats) {
2803 stats = std::make_shared<RenderStats>(enableRenderStats);
2804 }
2805 ///The viewer always uses the scheduler thread to regulate the output rate, @see ViewerInstance::renderViewer_internal
2806 ///it calls appendToBuffer by itself
2807 ViewerInstance::ViewerRenderRetCode stat = ViewerInstance::eViewerRenderRetCodeRedraw;
2808
2809 //Viewer can only render 1 view for now
2810 assert(viewsToRender.size() == 1);
2811 ViewIdx view = viewsToRender.front();
2812 ViewerInstancePtr viewer = _viewer.lock();
2813 U64 viewerHash = viewer->getHash();
2814 ViewerArgsPtr args[2];
2815 ViewerInstance::ViewerRenderRetCode status[2] = {
2816 ViewerInstance::eViewerRenderRetCodeFail, ViewerInstance::eViewerRenderRetCodeFail
2817 };
2818 bool clearTexture[2] = { false, false };
2819 BufferableObjectPtrList toAppend;
2820
2821 for (int i = 0; i < 2; ++i) {
2822 args[i] = std::make_shared<ViewerArgs>();
2823 status[i] = viewer->getRenderViewerArgsAndCheckCache_public( time, true, view, i, viewerHash, true, NodePtr(), stats, args[i].get() );
2824 clearTexture[i] = status[i] == ViewerInstance::eViewerRenderRetCodeFail || status[i] == ViewerInstance::eViewerRenderRetCodeBlack;
2825 if (status[i] == ViewerInstance::eViewerRenderRetCodeFail) {
2826 //Just clear the viewer, nothing to do
2827 args[i]->params.reset();
2828 args[i].reset();
2829 } else if (status[i] == ViewerInstance::eViewerRenderRetCodeBlack) {
2830 if (args[i]->params) {
2831 args[i]->params->tiles.clear();
2832 toAppend.push_back(args[i]->params);
2833 args[i]->params.reset();
2834 }
2835 args[i].reset();
2836 }
2837 }
2838
2839 if ( (status[0] == ViewerInstance::eViewerRenderRetCodeFail) && (status[1] == ViewerInstance::eViewerRenderRetCodeFail) ) {
2840 viewer->disconnectViewer();
2841 return;
2842 }
2843
2844 if (clearTexture[0]) {
2845 viewer->disconnectTexture(0, status[0] == ViewerInstance::eViewerRenderRetCodeFail);
2846 }
2847 if (clearTexture[0]) {
2848 viewer->disconnectTexture(1, status[1] == ViewerInstance::eViewerRenderRetCodeFail);
2849 }
2850
2851 if ( ( (status[0] == ViewerInstance::eViewerRenderRetCodeRedraw) && !args[0]->params->isViewerPaused ) &&
2852 ( ( status[1] == ViewerInstance::eViewerRenderRetCodeRedraw) && !args[1]->params->isViewerPaused ) ) {
2853 return;

Callers

nothing calls this directly

Calls 13

disconnectTextureMethod · 0.80
renderViewerMethod · 0.80
notifyRenderFailureMethod · 0.80
appendToBufferMethod · 0.80
sizeMethod · 0.45
lockMethod · 0.45
getHashMethod · 0.45
getMethod · 0.45
resetMethod · 0.45
clearMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected