Browse Source

Do not probe joypads if DirectInput cannot be initialized.

(cherry picked from commit 97a529b1d817aff085777d1bc25272fad60b60b2)
Marcel Admiraal 5 years ago
parent
commit
6c9c6885a2
1 changed files with 9 additions and 6 deletions
  1. 9 6
      platform/windows/joypad_windows.cpp

+ 9 - 6
platform/windows/joypad_windows.cpp

@@ -67,13 +67,16 @@ JoypadWindows::JoypadWindows(InputDefault *_input, HWND *hwnd) {
 	for (int i = 0; i < JOYPADS_MAX; i++)
 		attached_joypads[i] = false;
 
-	HRESULT result;
-	result = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&dinput, NULL);
-	if (FAILED(result)) {
-		printf("Couldn't initialize DirectInput: %ld\n", result);
-		printf("Rebooting your PC may solve this issue.\n");
+	HRESULT result = DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&dinput, nullptr);
+	if (result == DI_OK) {
+		probe_joypads();
+	} else {
+		ERR_PRINT("Couldn't initialize DirectInput. Error: " + itos(result));
+		if (result == DIERR_OUTOFMEMORY) {
+			ERR_PRINT("The Windows DirectInput subsystem could not allocate sufficient memory.");
+			ERR_PRINT("Rebooting your PC may solve this issue.");
+		}
 	}
-	probe_joypads();
 }
 
 JoypadWindows::~JoypadWindows() {