Arty
renderer.h
1 #ifndef RENDERER_H
2 #define RENDERER_H
3 
4 #include <memory>
5 #include <string>
6 
7 struct Scene;
8 struct Image;
9 
10 class Renderer {
11 public:
12  Renderer(const Scene& scene)
13  : scene(scene)
14  {}
15 
16  virtual std::string name() const = 0;
17  virtual void reset() = 0;
18  virtual void render(Image& img) = 0;
19 
20 protected:
21  const Scene& scene;
22 };
23 
24 static constexpr size_t default_tile_width = 32;
25 static constexpr size_t default_tile_height = 32;
26 
27 template <typename F>
28 void process_tiles(size_t x, size_t y, size_t w, size_t h, size_t tile_w, size_t tile_h, F f) {
29  #pragma omp parallel for collapse(2) schedule(dynamic)
30  for (size_t tile_x = x; tile_x < w; tile_x += tile_w) {
31  for (size_t tile_y = y; tile_y < h; tile_y += tile_h) {
32  f(tile_x, tile_y, std::min(tile_x + tile_w, w), std::min(tile_y + tile_h, h));
33  }
34  }
35 }
36 
37 std::unique_ptr<Renderer> create_debug_renderer(const Scene& scene);
38 std::unique_ptr<Renderer> create_pt_renderer(const Scene& scene, size_t max_path_len = 64);
39 std::unique_ptr<Renderer> create_bpt_renderer(const Scene& scene, bool connect = true, bool light_tracing = true, size_t max_path_len = 64);
40 std::unique_ptr<Renderer> create_ppm_renderer(const Scene& scene, size_t max_path_len = 64);
41 
42 #endif // RENDERER_H
Definition: renderer.h:10
Definition: scene.h:16
Definition: image.h:9