MTek-GDL 0.100.4-muffintrap
Loading...
Searching...
No Matches
mgdl-openal.h
1#pragma once
2
3#include <mgdl/mgdl-types.h>
4
5#ifdef __cplusplus
6#include <limits>
7#include <cstdio>
8#include <type_traits>
9#include <utility>
10#else
11#include <stdio.h>
12#endif
13
14// includes the OpenAL needed by platform
15#ifdef GEKKO
16
17/* Wii does not have OpenAL */
18
19#else // PC platform
20
21 #ifdef __APPLE__
22 #include <OpenAL/al.h>
23 #include <OpenAL/alc.h>
24 #else
25 // Needed on windows
26 #ifdef __cplusplus
27 #include <cstdint>
28 #else
29 #include <stdint.h>
30 #endif
31 #include <AL/al.h>
32 #include <AL/alc.h>
33 #endif
34
35// Error checking functions
36
37void check_al_errors(const char* filename, const sizetype line);
38
39#ifdef __cplusplus
40
41template<typename alFunction, typename... Params>
42auto alCallImpl(const char* filename, const std::uint_fast32_t line, alFunction function, Params... params)
43->typename std::enable_if<std::is_same<void,decltype(function(params...))>::value,decltype(function(params...))>::type
44{
45 function(std::forward<Params>(params)...);
46 check_al_errors(filename,line);
47}
48
49template<typename alFunction, typename... Params>
50auto alCallImpl(const char* filename, const std::uint_fast32_t line, alFunction function, Params... params)
51->typename std::enable_if<!std::is_same<void,decltype(function(params...))>::value,decltype(function(params...))>::type
52{
53 auto ret = function(std::forward<Params>(params)...);
54 check_al_errors(filename,line);
55 return ret;
56}
57
58// Wrapper to always error check Open AL calls
59#define alCall(function, ...) alCallImpl(__FILE__, __LINE__, function, __VA_ARGS__)
60#define alcCall(function, device, ...) alcCallImpl(__FILE__, __LINE__, function, device, __VA_ARGS__)
61
62#else
63// Wrapper to always error check Open AL calls
64#define alCall(function, ...) function(__VA_ARGS__); check_al_errors(__FILE__, __LINE__);
65#define alcCall(function, device, ...) return function(__VA_ARGS__);
66#endif
67
68#endif // PC platform
typedef void(ConnectCallbackFunc(bool))
Keyboard and mouse connect/disconnect callback.
Library types, macros, defines and enums header.