diff options
Diffstat (limited to 'opentrack-dinput/dinput.cpp')
-rw-r--r-- | opentrack-dinput/dinput.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/opentrack-dinput/dinput.cpp b/opentrack-dinput/dinput.cpp new file mode 100644 index 00000000..ce80fe0e --- /dev/null +++ b/opentrack-dinput/dinput.cpp @@ -0,0 +1,47 @@ +#ifdef _WIN32 + +#include "dinput.hpp" +#include <QDebug> + +dinput_handle dinput_handle::self; + +dinput_handle::dinput_handle() : handle(init_di()) +{ +} + +dinput_handle::~dinput_handle() +{ + if (handle) + { + handle->Release(); + handle = nullptr; + } +} + +dinput_handle::di_t dinput_handle::init_di() +{ + HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); + if (FAILED(hr)) + qDebug() << "dinput: failed CoInitializeEx" << hr << GetLastError(); + + static LPDIRECTINPUT8 di_ = nullptr; + if (di_ == nullptr) + { + if (SUCCEEDED(DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&di_, NULL))) + { + return di_; + } + else + { + return di_ = nullptr; + } + } + return di_; +} + +dinput_handle::di_t dinput_handle::make_di() +{ + return self.handle; +} + +#endif |