| 2808 | private: |
| 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; |
nothing calls this directly
no test coverage detected