void createAndExecuteSyncPass( const NodeIds& nodeIds, const RenderInputs& renderInputs, Renderer& renderer, const uint32_t renderStages ) { tuyau::PipeFilterT< RenderFilter > renderFilter( "RenderFilter", renderInputs.dataSource, renderer ); renderFilter.getPromise( "RenderInputs" ).set( renderInputs ); renderFilter.getPromise( "RenderStages" ).set( renderStages ); tuyau::PipeFilterT< CudaRenderUploadFilter > renderUploader( "RenderUploader", *dataCache, *cudaCache, *texturePool, nUploadThreads, _uploadExecutor ); renderUploader.getPromise( "RenderInputs" ).set( renderInputs ); renderUploader.getPromise( "NodeIds" ).set( nodeIds ); renderUploader.connect( "CudaTextureCacheObjects", renderFilter, "CacheObjects" ); renderUploader.execute(); renderFilter.execute(); }
void createAndExecuteSyncPass(NodeIds nodeIds, const RenderParams& renderParams, PipeFilter& sendHistogramFilter, Renderer& renderer, const uint32_t renderStages) const { PipeFilterT<HistogramFilter> histogramFilter("HistogramFilter", _histogramCache, _dataCache, _dataSource); histogramFilter.getPromise("Frustum").set( renderParams.frameInfo.frustum); histogramFilter.connect("Histogram", sendHistogramFilter, "Histogram"); histogramFilter.getPromise("RelativeViewport") .set(renderParams.viewport); histogramFilter.getPromise("DataSourceRange") .set(renderParams.dataSourceRange); Pipeline renderPipeline; Pipeline uploadPipeline; PipeFilterT<RenderFilter> renderFilter("RenderFilter", _dataSource, renderer); setupRenderFilter(renderFilter, renderParams, renderStages); PipeFilter uploader = uploadPipeline.add<DataUploadFilter>("DataUploader", _dataCache, _textureCache, _dataSource, _texturePool); uploader.getPromise("VisibleNodes").set(nodeIds); uploader.getPromise("Params").set(renderParams.vrParams); uploader.connect("CacheObjects", renderFilter, "CacheObjects"); uploader.connect("CacheObjects", histogramFilter, "CacheObjects"); renderPipeline.schedule(_renderExecutor); uploadPipeline.schedule(_uploadExecutor); sendHistogramFilter.schedule(_computeExecutor); histogramFilter.schedule(_computeExecutor); renderFilter.execute(); }
void renderAsync(const RenderParams& renderParams, PipeFilter& sendHistogramFilter, Renderer& renderer, NodeAvailability& availability, PipeFilter& redrawFilter) const { PipeFilterT<HistogramFilter> histogramFilter("HistogramFilter", _histogramCache, _dataCache, _dataSource); histogramFilter.getPromise("Frustum").set( renderParams.frameInfo.frustum); histogramFilter.connect("Histogram", sendHistogramFilter, "Histogram"); histogramFilter.getPromise("RelativeViewport") .set(renderParams.viewport); histogramFilter.getPromise("DataSourceRange") .set(renderParams.dataSourceRange); sendHistogramFilter.getPromise("RelativeViewport") .set(renderParams.viewport); sendHistogramFilter.getPromise("Id").set( renderParams.frameInfo.frameId); Pipeline renderPipeline; Pipeline uploadPipeline; PipeFilterT<RenderFilter> renderFilter("RenderFilter", _dataSource, renderer); PipeFilter visibleSetGenerator = renderPipeline.add<VisibleSetGeneratorFilter>("VisibleSetGenerator", _dataSource); setupVisibleGeneratorFilter(visibleSetGenerator, renderParams); PipeFilter renderingSetGenerator = renderPipeline.add<RenderingSetGeneratorFilter>( "RenderingSetGenerator", _textureCache); visibleSetGenerator.connect("VisibleNodes", renderingSetGenerator, "VisibleNodes"); renderingSetGenerator.connect("CacheObjects", renderFilter, "CacheObjects"); renderingSetGenerator.connect("CacheObjects", histogramFilter, "CacheObjects"); renderingSetGenerator.connect("RenderingDone", redrawFilter, "RenderingDone"); PipeFilter uploader = uploadPipeline.add<DataUploadFilter>("DataUploader", _dataCache, _textureCache, _dataSource, _texturePool); visibleSetGenerator.connect("VisibleNodes", uploader, "VisibleNodes"); visibleSetGenerator.connect("Params", uploader, "Params"); uploader.connect("CacheObjects", redrawFilter, "CacheObjects"); setupRenderFilter(renderFilter, renderParams, RENDER_ALL); redrawFilter.schedule(_renderExecutor); renderPipeline.schedule(_renderExecutor); uploadPipeline.schedule(_uploadExecutor); sendHistogramFilter.schedule(_computeExecutor); histogramFilter.schedule(_computeExecutor); renderFilter.execute(); const UniqueFutureMap futures( renderingSetGenerator.getPostconditions()); availability = futures.get<NodeAvailability>("NodeAvailability"); }
void renderAsync( RenderStatistics& statistics, Renderer& renderer, const RenderInputs& renderInputs ) { tuyau::PipeFilter sendHistogramFilter = renderInputs.filters.find( "SendHistogramFilter" )->second; tuyau::PipeFilter preRenderFilter = renderInputs.filters.find( "PreRenderFilter" )->second; tuyau::PipeFilter redrawFilter = renderInputs.filters.find( "RedrawFilter" )->second; tuyau::PipeFilterT< HistogramFilter > histogramFilter( "HistogramFilter", *histogramCache, *dataCache, renderInputs.dataSource ); histogramFilter.getPromise( "Frustum" ).set( renderInputs.frameInfo.frustum ); histogramFilter.connect( "Histogram", sendHistogramFilter, "Histogram" ); histogramFilter.getPromise( "RelativeViewport" ).set( renderInputs.viewport ); histogramFilter.getPromise( "DataSourceRange" ).set( renderInputs.dataSourceRange ); sendHistogramFilter.getPromise( "RelativeViewport" ).set( renderInputs.viewport ); sendHistogramFilter.getPromise( "Id" ).set( renderInputs.frameInfo.frameId ); preRenderFilter.getPromise( "Frustum" ).set( renderInputs.frameInfo.frustum ); tuyau::Pipeline renderPipeline; tuyau::Pipeline uploadPipeline; tuyau::PipeFilterT< RenderFilter > renderFilter( "RenderFilter", renderInputs.dataSource, renderer ); tuyau::PipeFilter visibleSetGenerator = renderPipeline.add< VisibleSetGeneratorFilter >( "VisibleSetGenerator", renderInputs.dataSource ); setupVisibleGeneratorFilter( visibleSetGenerator, renderInputs ); tuyau::PipeFilter renderingSetGenerator = renderPipeline.add< RenderingSetGeneratorFilter< CudaTextureObject >>( "RenderingSetGenerator", *cudaCache ); visibleSetGenerator.connect( "VisibleNodes", renderingSetGenerator, "VisibleNodes" ); renderingSetGenerator.connect( "CacheObjects", renderFilter, "CacheObjects" ); renderingSetGenerator.connect( "NodeIds", histogramFilter, "NodeIds" ); renderingSetGenerator.connect( "RenderingDone", redrawFilter, "RenderingDone" ); visibleSetGenerator.connect( "VisibleNodes", preRenderFilter, "VisibleNodes" ); tuyau::PipeFilter renderUploader = uploadPipeline.add< CudaRenderUploadFilter >( "RenderUploader", *dataCache, *cudaCache, *texturePool, nUploadThreads, _uploadExecutor ); renderUploader.getPromise( "RenderInputs" ).set( renderInputs ); visibleSetGenerator.connect( "VisibleNodes", renderUploader, "NodeIds" ); renderFilter.getPromise( "RenderInputs" ).set( renderInputs ); renderFilter.getPromise( "RenderStages" ).set( RENDER_ALL ); redrawFilter.schedule( _renderExecutor ); renderPipeline.schedule( _renderExecutor ); uploadPipeline.schedule( _asyncUploadExecutor ); sendHistogramFilter.schedule( _computeExecutor ); histogramFilter.schedule( _computeExecutor ); preRenderFilter.execute(); renderFilter.execute(); const tuyau::UniqueFutureMap futures( renderingSetGenerator.getPostconditions( )); statistics = futures.get< RenderStatistics >( "RenderStatistics" ); }