Example #1
0
    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();
    }
Example #2
0
    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();
    }
Example #3
0
    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");
    }
Example #4
0
    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" );
    }