OGLplus  (0.59.0) a C++ wrapper for rendering APIs

api.hpp
Go to the documentation of this file.
1 #ifndef OALPLUS_AL_API_API_HPP
9 #define OALPLUS_AL_API_API_HPP
10 
11 #include "c_api.hpp"
12 #include "enum_types.hpp"
13 #include "object_name.hpp"
14 #include <eagine/scope_exit.hpp>
15 #include <eagine/string_list.hpp>
16 
17 namespace eagine::oalp {
18 //------------------------------------------------------------------------------
19 #define OALPAFP(FUNC) decltype(c_api::FUNC), &c_api::FUNC
20 //------------------------------------------------------------------------------
25 template <typename ApiTraits>
26 class basic_al_operations : public basic_al_c_api<ApiTraits> {
27 
28 public:
29  using api_traits = ApiTraits;
31 
32  using int_type = typename al_types::int_type;
33  using bool_type = typename al_types::char_type;
34  using char_type = typename al_types::char_type;
35  using enum_type = typename al_types::enum_type;
36  using name_type = typename al_types::name_type;
37  using size_type = typename al_types::size_type;
38  using float_type = typename al_types::float_type;
39 
40  struct derived_func : derived_c_api_function<c_api, api_traits, nothing_t> {
41  using base = derived_c_api_function<c_api, api_traits, nothing_t>;
42  using base::base;
43 
44  template <typename Res>
45  constexpr auto _check(Res&& res) const noexcept {
46  res.error_code(this->api().GetError());
47  return std::forward<Res>(res);
48  }
49  };
50 
51  template <typename W, W c_api::*F, typename Signature = typename W::signature>
52  class func;
53 
54  template <typename W, W c_api::*F, typename RVC, typename... Params>
55  class func<W, F, RVC(Params...)>
56  : public wrapped_c_api_function<c_api, api_traits, nothing_t, W, F> {
57  using base = wrapped_c_api_function<c_api, api_traits, nothing_t, W, F>;
58 
59  private:
60  template <typename Res>
61  constexpr auto _check(Res&& res) const noexcept {
62  res.error_code(this->api().GetError());
63  return std::forward<Res>(res);
64  }
65 
66  protected:
67  template <typename... Args>
68  constexpr auto _chkcall(Args&&... args) const noexcept {
69  return this->_check(this->_call(std::forward<Args>(args)...));
70  }
71 
72  using base::_conv;
73 
74  public:
75  using base::base;
76 
77  constexpr auto operator()(Params... params) const noexcept {
78  return this->_chkcall(_conv(params)...)
79  .cast_to(type_identity<RVC>{});
80  }
81  };
82 
83  template <typename ObjTag, typename W, W c_api::*GenObjects>
84  struct gen_object_func : func<W, GenObjects> {
85  using func<W, GenObjects>::func;
86 
87  constexpr auto operator()(span<name_type> names) const noexcept {
88  return this->_chkcall(size_type(names.size()), names.data());
89  }
90 
91  constexpr auto operator()() const noexcept {
92  name_type n{};
93  return this->_chkcall(1, &n).transformed(
94  [&n]() { return al_owned_object_name<ObjTag>(n); });
95  }
96  };
97 
98  // gen_sources
99  gen_object_func<source_tag, OALPAFP(GenSources)> gen_sources;
100 
101  // gen_buffers
102  gen_object_func<buffer_tag, OALPAFP(GenBuffers)> gen_buffers;
103 
104  // gen_effects
105  gen_object_func<effect_tag, OALPAFP(GenEffects)> gen_effects;
106 
107  // gen_filters
108  gen_object_func<filter_tag, OALPAFP(GenFilters)> gen_filters;
109 
110  // gen_auxiliary_effect_slots
111  gen_object_func<auxiliary_effect_slot_tag, OALPAFP(GenAuxiliaryEffectSlots)>
112  gen_auxiliary_effect_slots;
113 
114  template <typename ObjTag, typename W, W c_api::*DeleteObjects>
115  struct delete_object_func : func<W, DeleteObjects> {
116  using func<W, DeleteObjects>::func;
117 
118  constexpr auto operator()(span<const name_type> names) const noexcept {
119  return this->_chkcall(size_type(names.size()), names.data());
120  }
121 
122  constexpr auto
123  operator()(al_owned_object_name<ObjTag>& name) const noexcept {
124  auto n = name.release();
125  return this->_chkcall(1, &n);
126  }
127 
128  auto raii(al_owned_object_name<ObjTag>& name) noexcept {
129  return eagine::finally([this, &name]() { (*this)(name); });
130  }
131 
132  template <typename Res>
133  auto raii_opt(Res& res) noexcept {
134  return eagine::finally([this, &res]() {
135  if(res) {
136  (*this)(extract(res));
137  }
138  });
139  }
140  };
141 
142  // delete_sources
143  delete_object_func<source_tag, OALPAFP(DeleteSources)> delete_sources;
144 
145  // delete_buffers
146  delete_object_func<buffer_tag, OALPAFP(DeleteBuffers)> delete_buffers;
147 
148  // delete_effects
149  delete_object_func<effect_tag, OALPAFP(DeleteEffects)> delete_effects;
150 
151  // delete_filters
152  delete_object_func<filter_tag, OALPAFP(DeleteFilters)> delete_filters;
153 
154  // delete_auxiliary_effect_slots
155  delete_object_func<
156  auxiliary_effect_slot_tag,
158  delete_auxiliary_effect_slots;
159 
160  template <typename ObjTag, typename W, W c_api::*IsObject>
161  struct is_object_func : func<W, IsObject> {
162  using func<W, IsObject>::func;
163 
164  constexpr auto operator()(al_object_name<ObjTag> name) const noexcept {
165  return this->_chkcall(name_type(name));
166  }
167  };
168 
169  // is_source
170  is_object_func<source_tag, OALPAFP(IsSource)> is_source;
171 
172  // is_buffer
173  is_object_func<buffer_tag, OALPAFP(IsBuffer)> is_buffer;
174 
175  // is_effect
176  is_object_func<effect_tag, OALPAFP(IsEffect)> is_effect;
177 
178  // is_filter
179  is_object_func<filter_tag, OALPAFP(IsFilter)> is_filter;
180 
181  // is_auxiliary_effect_slot
182  is_object_func<auxiliary_effect_slot_tag, OALPAFP(IsAuxiliaryEffectSlot)>
183  is_auxiliary_effect_slot;
184 
185  // listener_i
186  struct : derived_func {
187  using derived_func::derived_func;
188 
189  explicit constexpr operator bool() const noexcept {
190  return bool(this->api().Listeneri) &&
191  bool(this->api().Listener3i) && bool(this->api().Listeneriv);
192  }
193 
194  constexpr auto
195  operator()(listener_attribute attr, int_type v0) const noexcept {
196  return this->_check(
197  this->_call(this->api().Listeneri, enum_type(attr), v0));
198  }
199 
200  constexpr auto operator()(
201  listener_attribute attr,
202  int_type v0,
203  int_type v1,
204  int_type v2) const noexcept {
205  return this->_check(
206  this->_call(this->api().Listener3i, enum_type(attr), v0, v1, v2));
207  }
208 
209  constexpr auto operator()(
210  listener_attribute attr,
211  span<const int_type> v) const noexcept {
212  return this->_check(
213  this->_call(this->api().Listeneriv, enum_type(attr), v.data()));
214  }
215  } listener_i;
216 
217  // listener_f
218  struct : derived_func {
219  using derived_func::derived_func;
220 
221  explicit constexpr operator bool() const noexcept {
222  return bool(this->api().Listenerf) &&
223  bool(this->api().Listener3f) && bool(this->api().Listenerfv);
224  }
225 
226  constexpr auto
227  operator()(listener_attribute attr, float_type v0) const noexcept {
228  return this->_check(
229  this->_call(this->api().Listenerf, enum_type(attr), v0));
230  }
231 
232  constexpr auto operator()(
233  listener_attribute attr,
234  float_type v0,
235  float_type v1,
236  float_type v2) const noexcept {
237  return this->_check(
238  this->_call(this->api().Listener3f, enum_type(attr), v0, v1, v2));
239  }
240 
241  constexpr auto operator()(
242  listener_attribute attr,
243  span<const float_type> v) const noexcept {
244  return this->_check(
245  this->_call(this->api().Listenerfv, enum_type(attr), v.data()));
246  }
247  } listener_f;
248 
249  // get_listener_i
250  struct : func<OALPAFP(GetListeneriv)> {
251  using func<OALPAFP(GetListeneriv)>::func;
252 
253  constexpr auto
254  operator()(listener_attribute attr, span<int_type> v) const noexcept {
255  return this->_chkcall(enum_type(attr), v.data());
256  }
257  } get_listener_i;
258 
259  // get_listener_f
260  struct : func<OALPAFP(GetListenerfv)> {
261  using func<OALPAFP(GetListenerfv)>::func;
262 
263  constexpr auto
264  operator()(listener_attribute attr, span<float_type> v) const noexcept {
265  return this->_chkcall(enum_type(attr), v.data());
266  }
267  } get_listener_f;
268 
269  // buffer_i
270  struct : derived_func {
271  using derived_func::derived_func;
272 
273  explicit constexpr operator bool() const noexcept {
274  return bool(this->api().Bufferi) && bool(this->api().Buffer3i) &&
275  bool(this->api().Bufferiv);
276  }
277 
278  constexpr auto operator()(
279  buffer_name src,
280  buffer_attribute attr,
281  int_type v0) const noexcept {
282  return this->_check(this->_call(
283  this->api().Bufferi, name_type(src), enum_type(attr), v0));
284  }
285 
286  constexpr auto operator()(
287  buffer_name src,
288  buffer_attribute attr,
289  int_type v0,
290  int_type v1,
291  int_type v2) const noexcept {
292  return this->_check(this->_call(
293  this->api().Buffer3i,
294  name_type(src),
295  enum_type(attr),
296  v0,
297  v1,
298  v2));
299  }
300 
301  constexpr auto operator()(
302  buffer_name src,
303  buffer_attribute attr,
304  span<const int_type> v) const noexcept {
305  return this->_check(this->_call(
306  this->api().Bufferiv, name_type(src), enum_type(attr), v.data()));
307  }
308  } buffer_i;
309 
310  // buffer_f
311  struct : derived_func {
312  using derived_func::derived_func;
313 
314  explicit constexpr operator bool() const noexcept {
315  return bool(this->api().Bufferf) && bool(this->api().Buffer3f) &&
316  bool(this->api().Bufferfv);
317  }
318 
319  constexpr auto operator()(
320  buffer_name src,
321  buffer_attribute attr,
322  float_type v0) const noexcept {
323  return this->_check(this->_call(
324  this->api().Bufferf, name_type(src), enum_type(attr), v0));
325  }
326 
327  constexpr auto operator()(
328  buffer_name src,
329  buffer_attribute attr,
330  float_type v0,
331  float_type v1,
332  float_type v2) const noexcept {
333  return this->_check(this->_call(
334  this->api().Buffer3f,
335  name_type(src),
336  enum_type(attr),
337  v0,
338  v1,
339  v2));
340  }
341 
342  constexpr auto operator()(
343  buffer_name src,
344  buffer_attribute attr,
345  span<const float_type> v) const noexcept {
346  return this->_check(this->_call(
347  this->api().Bufferfv, name_type(src), enum_type(attr), v.data()));
348  }
349  } buffer_f;
350 
351  // get_buffer_i
352  struct : func<OALPAFP(GetBufferiv)> {
353  using func<OALPAFP(GetBufferiv)>::func;
354 
355  constexpr auto operator()(
356  buffer_name src,
357  buffer_attribute attr,
358  span<int_type> v) const noexcept {
359  return this->_chkcall(name_type(src), enum_type(attr), v.data());
360  }
361  } get_buffer_i;
362 
363  // get_buffer_f
364  struct : func<OALPAFP(GetBufferfv)> {
365  using func<OALPAFP(GetBufferfv)>::func;
366 
367  constexpr auto operator()(
368  buffer_name src,
369  buffer_attribute attr,
370  span<float_type> v) const noexcept {
371  return this->_chkcall(name_type(src), enum_type(attr), v.data());
372  }
373  } get_buffer_f;
374 
375  // source_i
376  struct : derived_func {
377  using derived_func::derived_func;
378 
379  explicit constexpr operator bool() const noexcept {
380  return bool(this->api().Sourcei) && bool(this->api().Source3i) &&
381  bool(this->api().Sourceiv);
382  }
383 
384  constexpr auto operator()(
385  source_name src,
386  source_attribute attr,
387  int_type v0) const noexcept {
388  return this->_check(this->_call(
389  this->api().Sourcei, name_type(src), enum_type(attr), v0));
390  }
391 
392  constexpr auto operator()(
393  source_name src,
394  source_attribute attr,
395  int_type v0,
396  int_type v1,
397  int_type v2) const noexcept {
398  return this->_check(this->_call(
399  this->api().Source3i,
400  name_type(src),
401  enum_type(attr),
402  v0,
403  v1,
404  v2));
405  }
406 
407  constexpr auto operator()(
408  source_name src,
409  source_attribute attr,
410  span<const int_type> v) const noexcept {
411  return this->_check(this->_call(
412  this->api().Sourceiv, name_type(src), enum_type(attr), v.data()));
413  }
414  } source_i;
415 
416  // source_f
417  struct : derived_func {
418  using derived_func::derived_func;
419 
420  explicit constexpr operator bool() const noexcept {
421  return bool(this->api().Sourcef) && bool(this->api().Source3f) &&
422  bool(this->api().Sourcefv);
423  }
424 
425  constexpr auto operator()(
426  source_name src,
427  source_attribute attr,
428  float_type v0) const noexcept {
429  return this->_check(this->_call(
430  this->api().Sourcef, name_type(src), enum_type(attr), v0));
431  }
432 
433  constexpr auto operator()(
434  source_name src,
435  source_attribute attr,
436  float_type v0,
437  float_type v1,
438  float_type v2) const noexcept {
439  return this->_check(this->_call(
440  this->api().Source3f,
441  name_type(src),
442  enum_type(attr),
443  v0,
444  v1,
445  v2));
446  }
447 
448  constexpr auto operator()(
449  source_name src,
450  source_attribute attr,
451  span<const float_type> v) const noexcept {
452  return this->_check(this->_call(
453  this->api().Sourcefv, name_type(src), enum_type(attr), v.data()));
454  }
455  } source_f;
456 
457  // get_source_i
458  struct : func<OALPAFP(GetSourceiv)> {
459  using func<OALPAFP(GetSourceiv)>::func;
460 
461  constexpr auto operator()(
462  source_name src,
463  source_attribute attr,
464  span<int_type> v) const noexcept {
465  return this->_chkcall(name_type(src), enum_type(attr), v.data());
466  }
467  } get_source_i;
468 
469  // get_source_f
470  struct : func<OALPAFP(GetSourcefv)> {
471  using func<OALPAFP(GetSourcefv)>::func;
472 
473  constexpr auto operator()(
474  source_name src,
475  source_attribute attr,
476  span<float_type> v) const noexcept {
477  return this->_chkcall(name_type(src), enum_type(attr), v.data());
478  }
479  } get_source_f;
480 
481  // source_queue_buffers
482  struct : func<OALPAFP(SourceQueueBuffers)> {
483  using func<OALPAFP(SourceQueueBuffers)>::func;
484 
485  constexpr auto
486  operator()(source_name src, buffer_name buf) const noexcept {
487  const auto n = name_type(buf);
488  return this->_chkcall(name_type(src), 1, &n);
489  }
490 
491  constexpr auto
492  operator()(source_name src, span<const name_type> bufs) const noexcept {
493  return this->_chkcall(
494  name_type(src), size_type(bufs.size()), bufs.data());
495  }
496  } source_queue_buffers;
497 
498  // source_unqueue_buffers
499  struct : func<OALPAFP(SourceUnqueueBuffers)> {
500  using func<OALPAFP(SourceUnqueueBuffers)>::func;
501 
502  constexpr auto
503  operator()(source_name src, buffer_name buf) const noexcept {
504  auto n = name_type(buf);
505  return this->_chkcall(name_type(src), 1, &n);
506  }
507 
508  constexpr auto
509  operator()(source_name src, span<name_type> bufs) const noexcept {
510  return this->_chkcall(
511  name_type(src), size_type(bufs.size()), bufs.data());
512  }
513  } source_unqueue_buffers;
514 
515  // source_play
516  struct : derived_func {
517  using derived_func::derived_func;
518 
519  explicit constexpr operator bool() const noexcept {
520  return bool(this->api().SourcePlay) &&
521  bool(this->api().SourcePlayv);
522  }
523 
524  constexpr auto operator()(source_name src) const noexcept {
525  return this->_check(
526  this->_call(this->api().SourcePlay, name_type(src)));
527  }
528 
529  constexpr auto operator()(span<const name_type> srcs) const noexcept {
530  return this->_check(this->_call(
531  this->api().SourcePlayv, size_type(srcs.size()), srcs.data()));
532  }
533  } source_play;
534 
535  // source_pause
536  struct : derived_func {
537  using derived_func::derived_func;
538 
539  explicit constexpr operator bool() const noexcept {
540  return bool(this->api().SourcePause) &&
541  bool(this->api().SourcePausev);
542  }
543 
544  constexpr auto operator()(source_name src) const noexcept {
545  return this->_check(
546  this->_call(this->api().SourcePause, name_type(src)));
547  }
548 
549  constexpr auto operator()(span<const name_type> srcs) const noexcept {
550  return this->_check(this->_call(
551  this->api().SourcePausev, size_type(srcs.size()), srcs.data()));
552  }
553  } source_pause;
554 
555  // source_stop
556  struct : derived_func {
557  using derived_func::derived_func;
558 
559  explicit constexpr operator bool() const noexcept {
560  return bool(this->api().SourceStop) &&
561  bool(this->api().SourceStopv);
562  }
563 
564  constexpr auto operator()(source_name src) const noexcept {
565  return this->_check(
566  this->_call(this->api().SourceStop, name_type(src)));
567  }
568 
569  constexpr auto operator()(span<const name_type> srcs) const noexcept {
570  return this->_check(this->_call(
571  this->api().SourceStopv, size_type(srcs.size()), srcs.data()));
572  }
573  } source_stop;
574 
575  // source_rewind
576  struct : derived_func {
577  using derived_func::derived_func;
578 
579  explicit constexpr operator bool() const noexcept {
580  return bool(this->api().SourceRewind) &&
581  bool(this->api().SourceRewindv);
582  }
583 
584  constexpr auto operator()(source_name src) const noexcept {
585  return this->_check(
586  this->_call(this->api().SourceRewind, name_type(src)));
587  }
588 
589  constexpr auto operator()(span<const name_type> srcs) const noexcept {
590  return this->_check(this->_call(
591  this->api().SourceRewindv, size_type(srcs.size()), srcs.data()));
592  }
593  } source_rewind;
594 
595  // get_string
596  struct : func<OALPAFP(GetString)> {
597  using func<OALPAFP(GetString)>::func;
598 
599  constexpr auto operator()(al_string_query query) const noexcept {
600  return this->_chkcall(enum_type(query))
601  .cast_to(type_identity<string_view>{});
602  }
603 
604  constexpr auto operator()() const noexcept {
605  return this->_fake_empty_c_str().cast_to(
607  }
608  } get_string;
609 
610  // get_strings
611  auto get_strings(al_string_query query, char separator) noexcept {
612  return get_string(query).transformed([separator](auto src) {
613  return split_into_string_list(src, separator);
614  });
615  }
616 
617  // get_extensions
618  auto get_extensions() noexcept {
619 #ifdef AL_EXTENSIONS
620  return get_string(al_string_query(AL_EXTENSIONS))
621 #else
622  return get_string()
623 #endif
624  .transformed(
625  [](auto src) { return split_into_string_list(src, ' '); });
626  }
627 
628  basic_al_operations(api_traits& traits);
629 };
630 //------------------------------------------------------------------------------
631 #undef OALPAFP
632 //------------------------------------------------------------------------------
633 } // namespace eagine::oalp
634 
635 #endif // OALPLUS_AL_API_API_HPP
al_api_function< void(name_type, enum_type, const float_type *), nullptr > Sourcefv
Definition: c_api.hpp:396
al_api_function< void(name_type), nullptr > SourceRewind
Definition: c_api.hpp:418
al_api_function< void(name_type, enum_type, int_type *), nullptr > GetBufferiv
Definition: c_api.hpp:300
al_api_function< void(enum_type, const int_type *), nullptr > Listeneriv
Definition: c_api.hpp:211
al_api_function< void(name_type, enum_type, float_type *), nullptr > GetBufferfv
Definition: c_api.hpp:328
auto release() noexcept -> Handle
Releases the underlying handle value.
Definition: handle.hpp:134
al_api_function< void(enum_type, const float_type *), nullptr > Listenerfv
Definition: c_api.hpp:239
al_api_function< void(size_type, name_type *), nullptr > GenSources
Definition: c_api.hpp:335
al_api_function< void(name_type, enum_type, const float_type *), nullptr > Bufferfv
Definition: c_api.hpp:321
static constexpr auto extract(api_result_value< Result, api_result_validity::never > &) noexcept -> Result &
Overload of extract for api_result_value.
Definition: c_api_wrap.hpp:270
al_api_function< void(size_type, const name_type *), nullptr > SourcePausev
Definition: c_api.hpp:451
Typed enumeration for AL string query constants.
Definition: enum_types.hpp:50
al_api_function< void(size_type, const name_type *), nullptr > DeleteEffects
Definition: c_api.hpp:473
Typed enumeration for AL listener attribute constants.
Definition: enum_types.hpp:62
al_api_function< void(size_type, name_type *), nullptr > GenBuffers
Definition: c_api.hpp:253
Non-owning wrapper for C-API opaque handle types.
Definition: handle.hpp:26
al_api_function< void(name_type), nullptr > SourceStop
Definition: c_api.hpp:413
al_api_function< void(size_type, name_type *), nullptr > GenEffects
Definition: c_api.hpp:469
al_api_function< void(name_type, enum_type, int_type, int_type, int_type), nullptr > Source3i
Definition: c_api.hpp:361
Class wrapping the functions from the AL API.
Definition: api.hpp:26
al_api_function< bool_type(name_type), nullptr > IsAuxiliaryEffectSlot
Definition: c_api.hpp:573
al_api_function< enum_type(), nullptr > GetError
Definition: c_api.hpp:95
al_api_function< void(enum_type, float_type), nullptr > Listenerf
Definition: c_api.hpp:225
static auto finally(Func func) -> func_on_scope_exit< Func >
Function constructing on-scope-exit actions.
Definition: scope_exit.hpp:144
al_api_function< void(size_type, const name_type *), nullptr > SourceRewindv
Definition: c_api.hpp:444
al_api_function< void(enum_type, float_type *), nullptr > GetListenerfv
Definition: c_api.hpp:246
al_api_function< void(name_type, enum_type, float_type, float_type, float_type), nullptr > Source3f
Definition: c_api.hpp:389
al_api_function< void(name_type), nullptr > SourcePlay
Definition: c_api.hpp:408
al_api_function< void(size_type, name_type *), nullptr > GenFilters
Definition: c_api.hpp:516
al_api_function< void(enum_type, int_type), nullptr > Listeneri
Definition: c_api.hpp:197
al_api_function< void(enum_type, int_type *), nullptr > GetListeneriv
Definition: c_api.hpp:218
al_api_function< const char_type *(enum_type), nullptr > GetString
Definition: c_api.hpp:177
al_api_function< void(size_type, name_type *), nullptr > GenAuxiliaryEffectSlots
Definition: c_api.hpp:564
al_api_function< void(enum_type, float_type, float_type, float_type), nullptr > Listener3f
Definition: c_api.hpp:232
al_api_function< void(size_type, const name_type *), nullptr > DeleteSources
Definition: c_api.hpp:342
al_api_function< bool_type(name_type), nullptr > IsFilter
Definition: c_api.hpp:524
al_api_function< void(size_type, const name_type *), nullptr > DeleteFilters
Definition: c_api.hpp:520
Typed enumeration for AL buffer attribute constants.
Definition: enum_types.hpp:69
Typed enumeration for AL source attribute constants.
Definition: enum_types.hpp:82
al_api_function< bool_type(name_type), nullptr > IsEffect
Definition: c_api.hpp:477
al_api_function< void(size_type, const name_type *), nullptr > SourcePlayv
Definition: c_api.hpp:430
al_api_function< bool_type(name_type), nullptr > IsBuffer
Definition: c_api.hpp:265
al_api_function< void(name_type, enum_type, const int_type *), nullptr > Sourceiv
Definition: c_api.hpp:368
al_api_function< void(enum_type, int_type, int_type, int_type), nullptr > Listener3i
Definition: c_api.hpp:204
al_api_function< void(name_type, size_type, const name_type *), nullptr > SourceQueueBuffers
Definition: c_api.hpp:458
Owning wrapper for C-API opaque handle types.
Definition: handle.hpp:98
al_api_function< void(name_type, size_type, name_type *), nullptr > SourceUnqueueBuffers
Definition: c_api.hpp:465
Template type used mostly for function type-tag dispatching.
Definition: type_identity.hpp:19
al_api_function< void(name_type, enum_type, float_type), nullptr > Sourcef
Definition: c_api.hpp:382
al_api_function< void(name_type, enum_type, int_type *), nullptr > GetSourceiv
Definition: c_api.hpp:375
AL-related code is placed in this namespace.
Definition: oalplus.hpp:11
al_api_function< void(name_type, enum_type, float_type, float_type, float_type), nullptr > Buffer3f
Definition: c_api.hpp:314
al_api_function< void(size_type, const name_type *), nullptr > SourceStopv
Definition: c_api.hpp:437
al_api_function< void(name_type, enum_type, int_type), nullptr > Sourcei
Definition: c_api.hpp:354
al_api_function< void(name_type, enum_type, int_type, int_type, int_type), nullptr > Buffer3i
Definition: c_api.hpp:286
al_api_function< void(name_type, enum_type, float_type *), nullptr > GetSourcefv
Definition: c_api.hpp:403
al_api_function< void(name_type), nullptr > SourcePause
Definition: c_api.hpp:423
al_api_function< bool_type(name_type), nullptr > IsSource
Definition: c_api.hpp:347
al_api_function< void(size_type, const name_type *), nullptr > DeleteBuffers
Definition: c_api.hpp:260
al_api_function< void(name_type, enum_type, int_type), nullptr > Bufferi
Definition: c_api.hpp:279
al_api_function< void(name_type, enum_type, const int_type *), nullptr > Bufferiv
Definition: c_api.hpp:293
Class wrapping the C-functions from the AL API.
Definition: c_api.hpp:31
al_api_function< void(name_type, enum_type, float_type), nullptr > Bufferf
Definition: c_api.hpp:307
al_api_function< void(size_type, const name_type *), nullptr > DeleteAuxiliaryEffectSlots
Definition: c_api.hpp:569

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).