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

Method renderFrame

Engine/OutputSchedulerThread.cpp:2810–2900  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 13

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

Tested by

no test coverage detected