MobileRT  1.0
A multi platform C++ CPU progressive Ray Tracer.
Sampler.hpp
Go to the documentation of this file.
1 #ifndef MOBILERT_SAMPLER_HPP
2 #define MOBILERT_SAMPLER_HPP
3 
6 #include <atomic>
7 #include <limits>
8 
9 namespace MobileRT {
13  class Sampler {
14  public:
15  ::std::atomic<::std::uint32_t> sample_ {};
16  const ::std::uint32_t domainSize_ {::std::numeric_limits<::std::uint32_t>::max()};
17  ::std::uint32_t samples_ {::std::numeric_limits<::std::uint32_t>::max()};
18 
19  public:
20  explicit Sampler() = default;
21 
22  explicit Sampler(::std::uint32_t width, ::std::uint32_t height,
23  ::std::uint32_t samples);
24 
25  Sampler(const Sampler &sampler) = delete;
26 
27  Sampler(Sampler &&sampler) noexcept = delete;
28 
29  virtual ~Sampler();
30 
31  Sampler &operator=(const Sampler &sampler) = delete;
32 
33  Sampler &operator=(Sampler &&sampler) noexcept = delete;
34 
35  void resetSampling();
36 
37  void stopSampling();
38 
45  virtual float getSample(::std::uint32_t sample) = 0;
46 
47  float getSample();
48 
49  protected:
58  template <const ::std::size_t S>
59  float getSampleFromArray(const ::std::array<float, S> &values) {
60  const ::std::uint32_t selectedSample {this->sample_.fetch_add(1, ::std::memory_order_relaxed)};
61  const auto itSample {values.cbegin() + (selectedSample & ::MobileRT::ArrayMask)};
62  return *itSample;
63  }
64  };
65 }//namespace MobileRT
66 
67 #endif //MOBILERT_SAMPLER_HPP
::std::uint32_t samples_
Definition: Sampler.hpp:17
::std::atomic<::std::uint32_t > sample_
Definition: Sampler.hpp:15
const ::std::uint32_t domainSize_
Definition: Sampler.hpp:16
Definition: Sampler.hpp:13
void stopSampling()
Definition: Sampler.cpp:35
float getSampleFromArray(const ::std::array< float, S > &values)
Definition: Sampler.hpp:59
Sampler & operator=(const Sampler &sampler)=delete
float getSample()
Definition: Sampler.cpp:44
const ::std::uint32_t ArrayMask
Definition: Constants.hpp:70
virtual ~Sampler()
Definition: Sampler.cpp:22
void resetSampling()
Definition: Sampler.cpp:28
Definition: AABB.cpp:105