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