Wayverb
soft_source.h
1 #pragma once
2 
3 #include "core/cl/common.h"
4 
5 namespace wayverb {
6 namespace waveguide {
7 namespace preprocessor {
8 
9 template <typename It>
10 class soft_source final {
11 public:
12  soft_source(size_t node, It begin, It end)
13  : node_{node}
14  , begin_{begin}
15  , end_{end} {}
16 
17  bool operator()(cl::CommandQueue& queue, cl::Buffer& buffer, size_t) {
18  if (begin_ == end_) {
19  return false;
20  }
21  const auto current_pressure =
22  core::read_value<cl_float>(queue, buffer, node_);
23  core::write_value(queue, buffer, node_, current_pressure + *begin_++);
24  return true;
25  }
26 
27 private:
28  size_t node_;
29  It begin_;
30  It end_;
31 };
32 
33 template <typename It>
34 auto make_soft_source(size_t node, It begin, It end) {
35  return soft_source<It>{node, begin, end};
36 }
37 
38 } // namespace preprocessor
39 } // namespace waveguide
40 } // namespace wayverb
Definition: capsule_base.h:9