The spica renderer
integrator.h
1 
6 #ifdef _MSC_VER
7 #pragma once
8 #endif
9 
10 #ifndef _SPICA_INTEGRATOR_H_
11 #define _SPICA_INTEGRATOR_H_
12 
13 #include <memory>
14 
15 #include "core/core.hpp"
16 #include "core/common.h"
17 #include "core/spectrum.h"
18 #include "core/cobject.h"
19 #include "core/uncopyable.h"
20 
21 #include "core/render.hpp"
22 
23 namespace spica {
24 
29 class SPICA_EXPORTS Integrator : public CObject, Uncopyable {
30 public:
31  // Public methods
32  explicit Integrator();
33  virtual ~Integrator();
34  virtual void render(const std::shared_ptr<const Camera>& camera,
35  const Scene& scene,
36  RenderParams& params);
37 };
38 
45 class SPICA_EXPORTS SamplerIntegrator : public Integrator {
46 public:
47  // Public methods
48  explicit SamplerIntegrator(const std::shared_ptr<Sampler>& sampler);
49  virtual ~SamplerIntegrator();
50  virtual void render(const std::shared_ptr<const Camera> &camera,
51  const Scene& scene,
52  RenderParams& params) override;
53 
54  virtual void initialize(const std::shared_ptr<const Camera> &camera,
55  const Scene& scene,
56  RenderParams& params,
57  Sampler& sampler) {}
58 
59  virtual void loopStarted(const std::shared_ptr<const Camera> &camera,
60  const Scene& scene,
61  RenderParams& params,
62  Sampler& sampler) {}
63 
64  virtual void loopFinished(const std::shared_ptr<const Camera> &camera,
65  const Scene& scene,
66  RenderParams& params,
67  Sampler& sampler) {}
68 
69  virtual Spectrum Li(const Scene& scene,
70  RenderParams& params,
71  const Ray& ray,
72  Sampler& sampler,
73  MemoryArena& arena,
74  int depth = 0) const = 0;
75 
76  Spectrum specularReflect(const Scene& scene,
77  RenderParams& params,
78  const Ray& ray,
79  const SurfaceInteraction& isect,
80  Sampler& sampler,
81  MemoryArena& arena,
82  int depth = 0) const;
83 
84  Spectrum specularTransmit(const Scene& scene,
85  RenderParams& params,
86  const Ray& ray,
87  const SurfaceInteraction& isect,
88  Sampler& sampler,
89  MemoryArena& arena,
90  int depth = 0) const;
91 
92 private:
93  // Private fields
94  std::shared_ptr<Sampler> sampler_;
95 
96 }; // class SamplerIntegrator
97 
98 } // namespace spica
99 
100 #endif // _SPICA_INTEGRATOR_H_
Definition: interaction.h:68
Random sampler class.
Definition: sampler.h:24
RGB spectrum.
Definition: spectrum.h:18
The integrator interface.
Definition: integrator.h:29
Ray class.
Definition: ray.h:24
Definition: cobject.h:24
Definition: renderparams.h:27
The sampler integrator interface.
Definition: integrator.h:45
Interface class which forbids copy and assignment.
Definition: uncopyable.h:15
Scene provides the interface for scene graph.
Definition: scene.h:23