1 // Copyright 2009-2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 
4 #pragma once
5 
6 #include "../../common/DistributedWorld.h"
7 #include "../../fb/DistributedFrameBuffer.h"
8 #include "../../fb/TileOperation.h"
9 #include "camera/Camera.h"
10 #include "render/Renderer.h"
DistributedRenderer()11 
12 namespace ospray {
13 namespace mpi {
14 
15 struct RegionInfo
16 {
17   int numRegions = 0;
18   box3f *regions = nullptr;
19   bool *regionVisible = nullptr;
20 };
21 
22 struct DistributedRenderer : public Renderer
23 {
24   DistributedRenderer();
25   ~DistributedRenderer() override;
26 
27   void computeRegionVisibility(DistributedFrameBuffer *fb,
28       Camera *camera,
29       DistributedWorld *world,
30       bool *regionVisible,
31       void *perFrameData,
32       Tile &tile,
33       size_t jobID) const;
34 
35   void renderRegionToTile(DistributedFrameBuffer *fb,
36       Camera *camera,
37       DistributedWorld *world,
38       const box3f &region,
39       void *perFrameData,
40       Tile &tile,
41       size_t jobID) const;
42 
43   virtual std::shared_ptr<TileOperation> tileOperation() = 0;
44 
45   // Picking in the distributed renderer needs to be clipped to the regions
46   // specified to bound the local data
47   OSPPickResult pick(FrameBuffer *fb,
48       Camera *camera,
49       World *world,
50       const vec2f &screenPos) override;
51 
52  private:
53   mpicommon::Group mpiGroup;
54 };
55 } // namespace mpi
56 } // namespace ospray
pick(FrameBuffer * fb,Camera * camera,World * world,const vec2f & screenPos)57