summaryrefslogtreecommitdiffhomepage
path: root/opentrack-dinput/dinput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'opentrack-dinput/dinput.cpp')
-rw-r--r--opentrack-dinput/dinput.cpp47
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