Allegro.cc - Online Community

Allegro.cc Forums » Allegro Development » More than 4 XInput controllers

This thread is locked; no one can reply to it. rss feed Print
 1   2 
More than 4 XInput controllers
Andrew Gillett
Member #15,868
January 2015

I am in the final stages of finishing my game, but it has just been reported to me that if eight Xbox One controllers are connected, only four of them can be used. What I would have thought should be happening is that the first four are recognised as XInput controllers, and the rest are recognised as DirectInput controllers. Does Allegro do this?

I don't currently have 4+ XInput controllers to test with, but I've experienced a similar issue using Steam Remote Play Together, which streams the host's screen to the clients, and their controller inputs to the host. It's supposed to emulate XInput controllers until all four slots are full, and then emulate DirectInput controllers for the rest. But in practice what I'm seeing is that four XInput controllers show up for the host, but after that clients can't connect any more controllers.

One thing I'm going to try is using the Steam Input API, bypassing Allegro for controller input.

Added as an issue on GitHub:
https://github.com/liballeg/allegro5/issues/1194

Chris Katko
Member #1,881
January 2002
avatar

Xinput, by design, only supports 4 controllers. If Allegro has a DirectInput driver, I'd use that.

https://en.wikipedia.org/wiki/DirectInput#:~:text=XInput%20supports%20a%20maximum%20of,%2C%20or%20mouse%2Dtype%20devices.

Quote:

XInput supports a maximum of four controllers at a time. This is an Xbox limit, carried over to Windows. Although as of 2010 few PC games require more than four controllers at once, DirectInput itself has no such limitation.

If there's some newer version of Xinput that removes that limitation, I haven't seen it.

The Steam API seems like a great idea, although a problem if you want to sell on alternative platforms like GOG, or port to consoles.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Andrew Gillett
Member #15,868
January 2015

I'm aware of the 4 XInput controllers limit, but as I said before: "What I would have thought should be happening is that the first four are recognised as XInput controllers, and the rest are recognised as DirectInput controllers."

One option would be to turn off XInput support in Allegro and fall back to DirectInput only, but this is not ideal because DirectInput does not allow accurate reporting of button names, which my game shows. Also I'm not sure but there might be controllers which have XInput but not DirectInput drivers.

I have implemented the Steam Input API in my game, but that has a limit of 16 controllers, fine for most games but mine supports more. Also I have found that one of my third party controllers does not work with it.

Chris Katko
Member #1,881
January 2002
avatar

"What I would have thought should be happening is that the first four are recognised as XInput controllers, and the rest are recognised as DirectInput controllers."

It's kind of odd to expect Allegro (or anyone else) to use two drivers at the same time. I've literally never seen that in any application. That would cause many problems because each driver might have different resolution / timing / scaling for analog values.

a limit of 16 controllers, fine for most games but mine supports more.

That's a very niche oddball case. How important is it to have 1) named buttons, and 2) more than 16 controllers for a single application? 16 controllers in a single room? At this point wouldn't it be better if people just brought and used their cellphones as input devices? (Which IIRC You Don't Know Jack or some other modern quiz games use.) Have them connect to Wifi, presto, done.

Quote:

DirectInput does not allow accurate reporting of button names, which my game shows.

How about 1) hard coding them for the most common controllers 2) allowing custom controller profiles if people NEED their weird controllers? That's basically what Allegro 5 does internally anyway.

So far, what you're asking seems to be so niche its beyond what any one API provides. You're really going to have to ask some Stack Overflow magician to see if there's some super-obscure hack or API that would let you do this. But I looked at Raw Input API and AFAICT, it doesn't support named buttons--the names are coming from drivers and the driver is likely interfacing at a higher level (ala Raw Input API never even sees it).

You haven't really explained what your game/product is actually trying to do, so I assume it's a quiz or other party game (or not a game at all). If S.O. can't give you help, it would look like you need to rethink your game mechanics / decisions and decide what's most important. There's probably a reason you don't see many games supporting more than 16 players on a single PC. That's the price of living on the edge.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Andrew Gillett
Member #15,868
January 2015

You're right, it probably is a bit of a niche request. When my game was using Allegro 4, it was purely using DirectInput so there was no limit on the number of controllers. When I upgraded to Allegro 5, a side benefit was the ability to show actual button names. It's a Bomberman game, and there is a "join screen" which shows every connected controller and which button you have to press to join the game with that controller. It's unlikely that any players will connect more than 16 controllers to a PC (the most players I've had playing at once is 12), but it's nice to be able to advertise support for more.

There is also Steam Remote Play Together, which turns local multiplayer games into networked games by streaming the host's screen to the clients, and streaming their control inputs to the host – the host machine sees them as additional XInput or DirectInput controllers. This mode is a more plausible way of reaching 16 players, although it does require additional upload bandwidth for each connected client. I first realised something was not quite right when I was doing an online multiplayer test but only four remote players could use their controllers. Shortly afterwards, my game (due to be released in 3 weeks) failed Steam's build review because their review team connected eight Xbox One controllers, but only four of them worked. It's now obvious why this happened, but I hadn't anticipated it or seen it before because although I own about 10 controllers, most of them are DirectInput only – I'd never tested with more than four controllers which supported both XInput and DirectInput.

I initially assumed that other games or libraries must do something like what I suggested – detecting additional XInput controllers as DirectInput ones. But perhaps they do just use DirectInput.

I have now implemented Steam Input and it mostly works, although sometimes controllers randomly disconnect for a few frames and then reconnect. The limit of 16 is something I can live with for now – later on I can look at giving players the option of using DirectInput for controllers.

I should perhaps add a note to the docs to mention this issue so that it doesn't surprise anyone else in future.

UPDATE 29th Nov
It turns out that Steam Input also doesn't support more than 4 XInput controllers, although there is supposed to be a fix in the works for this.

So now my remaining option, assuming I can't rely on the Steam Input fix to come soon, is to switch to 100% DirectInput. On the joysticks page in the docs, it says:

"On Windows there are two joystick drivers, a DirectInput one and an Xinput one. If support for XInput was compiled in, then it can be enabled by calling al_set_config_value(al_get_system_config(), “joystick”, “driver”, “xinput”) before calling al_install_joystick, or by setting the same option in the allegro5.cfg configuration file. The Xinput and DirectInput drivers are mutually exclusive. The haptics subsystem will use the same driver as the joystick system does."

This seems outdated, as XInput and DirectInput are not mutually exclusive in Allegro, and there is no need to enable XInput manually. It would be nice to be able to disable XInput through al_set_config_value, but setting the driver to directinput means that devices supporting both drivers don't appear.

So I compiled out support for XInput by undefining ALLEGRO_CFG_XINPUT. And the result is that it can recognise 5 Xbox controllers, but every single time, as I connect the controllers in sequence, one of them will fail to respond to inputs - but if I press inputs on one of the previous controllers, it's as if I pressed the input on both that controller AND the newly connected controller!

I have attached a log file which includes DEBUGMODE output from Allegro.

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

Peter Hull
Member #1,136
March 2001

(Thanks for the bump Edgar, I hadn't seen the edit to this.)

This is going to be tricky as I don't think anyone has as many troublesome joysticks as you!
First it would be handy to know what exact version of Allegro you have because the line numbers in your debug output don't match up to the 5.2.6 code.
Second if you're up for some rebuilding I would be interested to know if any or all of your joysticks need polling. It's towards the bottom of joystick_enum_callback, line 952 in the stock 5.2.6 source code. You could maybe adapt the ALLEGRO_INFO that follows a bit later to print whether they are polling or not. - just because some of the code looks a bit strange to me.
Finally it ought to be possible to select DI or XI or the combined driver just from the config file, see win_get_joystick_driver in wsystem.c. Do you think this isn't working as it should? That would be something else to fix.

Rodolfo Lam
Member #16,045
August 2015

Bumping thread in case a soul knows anything about this...

Chris Katko
Member #1,881
January 2002
avatar

great. now i'm gonna go pull all the stacks of packed boxes out of my apartment and try and find some controllers.

and re-installing MSVC for the 13-billionth-time. I had to re-install windows... again... because a windows update bricked while my HDD was full (no HDD space checks?!?) and broke Windows Updates no matter how many fixes I tried.

[edit]

Where do you get Allegro debug symbols with nuget?

It's definitely doing something strange. i have 5 joysticks, i press one button on each in same order. second time around, it freezes for awhile inside a Allegro function.

That or someone tell me where I can download (or send to me) the allegro.pdb file for this exact nuget version (newest?). Because I imagine the normal Allegro5.zip doesn't have it, and there's only MinGW windows releases on github.

FYI to devs if you don't publish them, it appears you can as of ~2016, to a separate nuget server:

https://devblogs.microsoft.com/nuget/improved-package-debugging-experience-with-the-nuget-org-symbol-server/

It's "possible" (the wording is strange) that this only works for .NET packages. Hopefully not.

[edit] So I download DirectX SDK and the Allegro source so I can at least compile my own debugging symbols.

cmake .

explodes on finding DirectX and Xinput

#SelectExpand
1-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19042. 2- Guessed MSVC directory: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe 3-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) 4-- Performing Test ALLEGRO_HAVE_PROCFS_ARGCV 5-- Performing Test ALLEGRO_HAVE_PROCFS_ARGCV - Failed 6-- Performing Test ALLEGRO_HAVE_SV_PROCFS_H 7-- Performing Test ALLEGRO_HAVE_SV_PROCFS_H - Failed 8Using OpenGL 9CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 10 The package name passed to `find_package_handle_standard_args` (DINPUT) 11 does not match the name of the calling package (DirectX). This can lead to 12 problems in calling code that expects `find_package` result variables 13 (e.g., `_FOUND`) to follow a certain pattern. 14Call Stack (most recent call first): 15 cmake/FindDirectX.cmake:88 (find_package_handle_standard_args) 16 cmake/FindDirectX.cmake:100 (find_component) 17 CMakeLists.txt:809 (find_package) 18This warning is for project developers. Use -Wno-dev to suppress it. 19 20-- Could NOT find DINPUT (missing: DINPUT_INCLUDE_DIR DINPUT_LIBRARY) 21CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 22 The package name passed to `find_package_handle_standard_args` (D3D9) does 23 not match the name of the calling package (DirectX). This can lead to 24 problems in calling code that expects `find_package` result variables 25 (e.g., `_FOUND`) to follow a certain pattern. 26Call Stack (most recent call first): 27 cmake/FindDirectX.cmake:88 (find_package_handle_standard_args) 28 cmake/FindDirectX.cmake:101 (find_component) 29 CMakeLists.txt:809 (find_package) 30This warning is for project developers. Use -Wno-dev to suppress it. 31 32-- Could NOT find D3D9 (missing: D3D9_INCLUDE_DIR D3D9_LIBRARY) 33CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 34 The package name passed to `find_package_handle_standard_args` (D3DX9) does 35 not match the name of the calling package (DirectX). This can lead to 36 problems in calling code that expects `find_package` result variables 37 (e.g., `_FOUND`) to follow a certain pattern. 38Call Stack (most recent call first): 39 cmake/FindDirectX.cmake:88 (find_package_handle_standard_args) 40 cmake/FindDirectX.cmake:102 (find_component) 41 CMakeLists.txt:809 (find_package) 42This warning is for project developers. Use -Wno-dev to suppress it. 43 44-- Could NOT find D3DX9 (missing: D3DX9_INCLUDE_DIR D3DX9_LIBRARY) 45CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 46 The package name passed to `find_package_handle_standard_args` (DSOUND) 47 does not match the name of the calling package (DirectX). This can lead to 48 problems in calling code that expects `find_package` result variables 49 (e.g., `_FOUND`) to follow a certain pattern. 50Call Stack (most recent call first): 51 cmake/FindDirectX.cmake:88 (find_package_handle_standard_args) 52 cmake/FindDirectX.cmake:103 (find_component) 53 CMakeLists.txt:809 (find_package) 54This warning is for project developers. Use -Wno-dev to suppress it. 55 56-- Could NOT find DSOUND (missing: DSOUND_INCLUDE_DIR DSOUND_LIBRARY) 57CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 58 The package name passed to `find_package_handle_standard_args` (XINPUT) 59 does not match the name of the calling package (DirectX). This can lead to 60 problems in calling code that expects `find_package` result variables 61 (e.g., `_FOUND`) to follow a certain pattern. 62Call Stack (most recent call first): 63 cmake/FindDirectX.cmake:88 (find_package_handle_standard_args) 64 cmake/FindDirectX.cmake:104 (find_component) 65 CMakeLists.txt:809 (find_package) 66This warning is for project developers. Use -Wno-dev to suppress it. 67 68-- Could NOT find XINPUT (missing: XINPUT_INCLUDE_DIR XINPUT_LIBRARY) 69CMake Error at CMakeLists.txt:817 (message): 70 Windows port requires DirectInput (not found). 71 72 73-- Configuring incomplete, errors occurred! 74See also "C:/Users/cmkat/Downloads/allegro-5.2.6.0/allegro/CMakeFiles/CMakeOutput.log". 75See also "C:/Users/cmkat/Downloads/allegro-5.2.6.0/allegro/CMakeFiles/CMakeError.log".

:-/:-/:-/:-/

I tried installing this SDK (550 MB)

https://www.microsoft.com/en-us/download/details.aspx?id=6812

as well as the Windows SDK in the MSVC Installer menu (though that was only 5 MB so not really).

[edit] God, downloading DX9 SDK from here... i feel so... dirty... downloading from one of those "DLL" websites. Even the URL fills me with terror.

https://directx-software-development-kit.en.lo4d.com/download/mirror-ex1

If DX9 is really a "requirement" then ya'll need to just update it. [edit] Nope, link goes back to microsoft, which is now intentionally removed so you HAVE to install the modern DirectX SDK.

[edit] Welp, I just found and compiled and ran DirectX 9 samples. So your makefile sucks. :P

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Peter Hull
Member #1,136
March 2001

:-/ indeed.

I built Allegro from git using Visual Studio just yesterday and I didn't get any issues like you're seeing. I'll try and figure out if I did anything different. I don't remember having to download any 'dodgy' files.

Chris Katko
Member #1,881
January 2002
avatar

I went to releases and got the Allegro zip. It's possible you already have whatever dependencies / file paths cmake is assuming that aren't valid.

This is a 100% fresh install (1 day old) of Windows 20H0, Visual Studio newest from website, etc. No weird stuff. No old stuff either. Just installed cmake from 64-bit installer.

I'll try git next but I don't see it changing cmake dependencies.

My DirectX appears to be here:

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x86
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64

whereas FindDirectX.cmake

check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.0;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.0A;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.1;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.1A;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\DirectX SDK\\\\Installed Roots;KitsRoot]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\DirectX SDK\\\\]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\Installed Roots;KitsRoot]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\Installed Roots;KitsRoot81]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\10\\\\Installed Roots;KitsRoot]")

I can't decipher it exactly. Does the semicolon mean multiple end-of-directory entries? And 81? Is that 8.1 even though there's no period? Also, why on the end? (And how do you end up with quad-backslashes? )

I have a:

C:\Program Files (x86)\Windows Kits\8.1

but it's almost empty. And 8.1 shouldn't be DirectX 9, right? A quick Google doesn't appear to show that.

Google search for "Directx 9 cmake config" yields this:

https://gist.github.com/billyquith/3a509315722fc822c8e904bc903364b8

And I don't know if your registry based HKEY_LOCAL_MACHINE thing automatically yields Program Files vs Program File (x86). Mine is Program Files (x86). I wonder if that's a clue. Am I building x86 or x64 Allegro by default?

[edit] cmake-gui shows CMAKE_AR as in program files (x86) but... runs /x64/lib.exe and /x64/cl.exe. So maybe I only have x86 DirectX SDK?

[edit] https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/

This Windows SDK (directx sdk is now inside Windows SDK) pops up an installer that lets you choose x64. Though the main page says you can just use the [Visual Studio Installer] to install DirectX... which I did previously. Maybe I never loaded an X64 project so it never "auto downloaded" those files?...no... my sample project files say Debug X64. This is so stupid. Currently proceeding with the aforementioned link installer.

[edit] NOPE. NO DICE. I really thought that was gonna fix it.

Running Cmake from a MSVC Terminal (as per docs):

#SelectExpand
1CMake Error: The source directory "C:/Users/cmkat/Downloads/allegro-5.2.6.0/allegro/Build" does not appear to contain CMakeLists.txt. 2Specify --help for usage, or press the help button on the CMake GUI. 3 4C:\Users\cmkat\Downloads\allegro-5.2.6.0\allegro\Build>cmake .. 5-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19042. 6-- Guessed MSVC directory: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe 7-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) 8-- Performing Test ALLEGRO_HAVE_PROCFS_ARGCV 9-- Performing Test ALLEGRO_HAVE_PROCFS_ARGCV - Failed 10-- Performing Test ALLEGRO_HAVE_SV_PROCFS_H 11-- Performing Test ALLEGRO_HAVE_SV_PROCFS_H - Failed 12Using OpenGL 13CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 14 The package name passed to `find_package_handle_standard_args` (DINPUT) 15 does not match the name of the calling package (DirectX). This can lead to 16 problems in calling code that expects `find_package` result variables 17 (e.g., `_FOUND`) to follow a certain pattern. 18Call Stack (most recent call first): 19 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 20 cmake/FindDirectX.cmake:106 (find_component) 21 CMakeLists.txt:809 (find_package) 22This warning is for project developers. Use -Wno-dev to suppress it. 23 24CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 25 The package name passed to `find_package_handle_standard_args` (D3D9) does 26 not match the name of the calling package (DirectX). This can lead to 27 problems in calling code that expects `find_package` result variables 28 (e.g., `_FOUND`) to follow a certain pattern. 29Call Stack (most recent call first): 30 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 31 cmake/FindDirectX.cmake:107 (find_component) 32 CMakeLists.txt:809 (find_package) 33This warning is for project developers. Use -Wno-dev to suppress it. 34 35CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 36 The package name passed to `find_package_handle_standard_args` (D3DX9) does 37 not match the name of the calling package (DirectX). This can lead to 38 problems in calling code that expects `find_package` result variables 39 (e.g., `_FOUND`) to follow a certain pattern. 40Call Stack (most recent call first): 41 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 42 cmake/FindDirectX.cmake:108 (find_component) 43 CMakeLists.txt:809 (find_package) 44This warning is for project developers. Use -Wno-dev to suppress it. 45 46CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 47 The package name passed to `find_package_handle_standard_args` (DSOUND) 48 does not match the name of the calling package (DirectX). This can lead to 49 problems in calling code that expects `find_package` result variables 50 (e.g., `_FOUND`) to follow a certain pattern. 51Call Stack (most recent call first): 52 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 53 cmake/FindDirectX.cmake:109 (find_component) 54 CMakeLists.txt:809 (find_package) 55This warning is for project developers. Use -Wno-dev to suppress it. 56 57CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 58 The package name passed to `find_package_handle_standard_args` (XINPUT) 59 does not match the name of the calling package (DirectX). This can lead to 60 problems in calling code that expects `find_package` result variables 61 (e.g., `_FOUND`) to follow a certain pattern. 62Call Stack (most recent call first): 63 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 64 cmake/FindDirectX.cmake:110 (find_component) 65 CMakeLists.txt:809 (find_package) 66This warning is for project developers. Use -Wno-dev to suppress it. 67 68WARNING: FreeImage not found, disabling support 69-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) 70-- Could NOT find WebP (missing: WEBP_INCLUDE_DIRS WEBP_LIBRARIES) 71WARNING: libwebp not found, disabling support 72CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 73 The package name passed to `find_package_handle_standard_args` (DINPUT) 74 does not match the name of the calling package (DirectX). This can lead to 75 problems in calling code that expects `find_package` result variables 76 (e.g., `_FOUND`) to follow a certain pattern. 77Call Stack (most recent call first): 78 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 79 cmake/FindDirectX.cmake:106 (find_component) 80 addons/audio/CMakeLists.txt:92 (find_package) 81This warning is for project developers. Use -Wno-dev to suppress it. 82 83CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 84 The package name passed to `find_package_handle_standard_args` (D3D9) does 85 not match the name of the calling package (DirectX). This can lead to 86 problems in calling code that expects `find_package` result variables 87 (e.g., `_FOUND`) to follow a certain pattern. 88Call Stack (most recent call first): 89 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 90 cmake/FindDirectX.cmake:107 (find_component) 91 addons/audio/CMakeLists.txt:92 (find_package) 92This warning is for project developers. Use -Wno-dev to suppress it. 93 94CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 95 The package name passed to `find_package_handle_standard_args` (D3DX9) does 96 not match the name of the calling package (DirectX). This can lead to 97 problems in calling code that expects `find_package` result variables 98 (e.g., `_FOUND`) to follow a certain pattern. 99Call Stack (most recent call first): 100 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 101 cmake/FindDirectX.cmake:108 (find_component) 102 addons/audio/CMakeLists.txt:92 (find_package) 103This warning is for project developers. Use -Wno-dev to suppress it. 104 105CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 106 The package name passed to `find_package_handle_standard_args` (DSOUND) 107 does not match the name of the calling package (DirectX). This can lead to 108 problems in calling code that expects `find_package` result variables 109 (e.g., `_FOUND`) to follow a certain pattern. 110Call Stack (most recent call first): 111 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 112 cmake/FindDirectX.cmake:109 (find_component) 113 addons/audio/CMakeLists.txt:92 (find_package) 114This warning is for project developers. Use -Wno-dev to suppress it. 115 116CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 117 The package name passed to `find_package_handle_standard_args` (XINPUT) 118 does not match the name of the calling package (DirectX). This can lead to 119 problems in calling code that expects `find_package` result variables 120 (e.g., `_FOUND`) to follow a certain pattern. 121Call Stack (most recent call first): 122 cmake/FindDirectX.cmake:94 (find_package_handle_standard_args) 123 cmake/FindDirectX.cmake:110 (find_component) 124 addons/audio/CMakeLists.txt:92 (find_package) 125This warning is for project developers. Use -Wno-dev to suppress it. 126 127-- Could NOT find OpenAL (missing: OPENAL_LIBRARY OPENAL_INCLUDE_DIR) 128CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 129 The package name passed to `find_package_handle_standard_args` (OPENSL) 130 does not match the name of the calling package (OpenSL). This can lead to 131 problems in calling code that expects `find_package` result variables 132 (e.g., `_FOUND`) to follow a certain pattern. 133Call Stack (most recent call first): 134 cmake/FindOpenSL.cmake:20 (find_package_handle_standard_args) 135 addons/audio/CMakeLists.txt:145 (find_package) 136This warning is for project developers. Use -Wno-dev to suppress it. 137 138-- Could NOT find OPENSL (missing: OPENSL_INCLUDE_DIR OPENSL_LIBRARY) 139-- Could NOT find FLAC (missing: FLAC_INCLUDE_DIR OGG_LIBRARY FLAC_LIBRARY) 140WARNING: libFLAC not found or compile test failed, disabling support. 141-- Could NOT find DUMB (missing: DUMB_INCLUDE_DIR DUMB_LIBRARY) 142WARNING: libdumb >= 2.0 or <= 0.9.3 not found or compile test failed, disabling support. See <https://github.com/kode54/dumb> for 2.0 or <http://dumb.sourceforge.net/> for 0.9.3. 143CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 144 The package name passed to `find_package_handle_standard_args` (OGG) does 145 not match the name of the calling package (Ogg). This can lead to problems 146 in calling code that expects `find_package` result variables (e.g., 147 `_FOUND`) to follow a certain pattern. 148Call Stack (most recent call first): 149 cmake/FindOgg.cmake:19 (find_package_handle_standard_args) 150 cmake/FindVorbis.cmake:13 (find_package) 151 addons/acodec/CMakeLists.txt:225 (find_package) 152This warning is for project developers. Use -Wno-dev to suppress it. 153 154-- Could NOT find OGG (missing: OGG_INCLUDE_DIR OGG_LIBRARY) 155WARNING: libvorbis not found or compile test failed, disabling support. 156CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 157 The package name passed to `find_package_handle_standard_args` (OGG) does 158 not match the name of the calling package (Ogg). This can lead to problems 159 in calling code that expects `find_package` result variables (e.g., 160 `_FOUND`) to follow a certain pattern. 161Call Stack (most recent call first): 162 cmake/FindOgg.cmake:19 (find_package_handle_standard_args) 163 cmake/FindOpus.cmake:13 (find_package) 164 addons/acodec/CMakeLists.txt:284 (find_package) 165This warning is for project developers. Use -Wno-dev to suppress it. 166 167-- Could NOT find OGG (missing: OGG_INCLUDE_DIR OGG_LIBRARY) 168WARNING: libopus not found or compile test failed, disabling support. 169-- Could NOT find MiniMP3 (missing: MINIMP3_INCLUDE_DIRS) 170WARNING: minimp3 was not found 171-- Could NOT find Freetype (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS) 172WARNING: FreeType not found, disabling support. 173-- Could NOT find PhysFS (missing: PHYSFS_LIBRARY PHYSFS_INCLUDE_DIR) 174-- Could NOT find PHYSFS (missing: PHYSFS_LIBRARY PHYSFS_INCLUDE_DIR) 175-- Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR) 176CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 177 The package name passed to `find_package_handle_standard_args` (OGG) does 178 not match the name of the calling package (Ogg). This can lead to problems 179 in calling code that expects `find_package` result variables (e.g., 180 `_FOUND`) to follow a certain pattern. 181Call Stack (most recent call first): 182 cmake/FindOgg.cmake:19 (find_package_handle_standard_args) 183 cmake/FindTheora.cmake:13 (find_package) 184 addons/video/CMakeLists.txt:17 (find_package) 185This warning is for project developers. Use -Wno-dev to suppress it. 186 187-- Could NOT find OGG (missing: OGG_INCLUDE_DIR OGG_LIBRARY) 188CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 189 The package name passed to `find_package_handle_standard_args` (OGG) does 190 not match the name of the calling package (Ogg). This can lead to problems 191 in calling code that expects `find_package` result variables (e.g., 192 `_FOUND`) to follow a certain pattern. 193Call Stack (most recent call first): 194 cmake/FindOgg.cmake:19 (find_package_handle_standard_args) 195 cmake/FindVorbis.cmake:13 (find_package) 196 addons/video/CMakeLists.txt:18 (find_package) 197This warning is for project developers. Use -Wno-dev to suppress it. 198 199-- Could NOT find OGG (missing: OGG_INCLUDE_DIR OGG_LIBRARY) 200WARNING: allegro_video wanted but no supported backend found 201-- Not building ex_color 202-- Not building ex_depth_mask 203-- Not building ex_haptic2 204-- Not building ex_physfs 205-- Not building ex_video 206-- Not building ex_font_justify 207-- Not building ex_font_multiline 208-- Not building ex_logo 209-- Not building ex_projection 210-- Not building ex_ttf 211-- Not building ex_audio_chain 212-- Not building ex_synth 213CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:424 (message): 214 The package name passed to `find_package_handle_standard_args` (ENET) does 215 not match the name of the calling package (ENet). This can lead to 216 problems in calling code that expects `find_package` result variables 217 (e.g., `_FOUND`) to follow a certain pattern. 218Call Stack (most recent call first): 219 cmake/FindENet.cmake:20 (find_package_handle_standard_args) 220 examples/CMakeLists.txt:258 (find_package) 221This warning is for project developers. Use -Wno-dev to suppress it. 222 223-- Could NOT find ENET (missing: ENET_INCLUDE_DIR ENET_LIBRARY) 224-- Not building tests due to missing library. Have: allegro allegro_main allegro_image allegro_color allegro_font allegro_primitives 225-- Could NOT find LATEX (missing: LATEX_COMPILER) 226-- Could NOT find Git (missing: GIT_EXECUTABLE) 227-- Using master as the git ref for source links in the documentation. 228-- Configuring done 229CMake Warning (dev) at demos/cosmic_protector/CMakeLists.txt:136 (add_dependencies): 230 Policy CMP0046 is not set: Error on non-existent dependency in 231 add_dependencies. Run "cmake --help-policy CMP0046" for policy details. 232 Use the cmake_policy command to set the policy and suppress this warning. 233 234 The dependency target "copy_demo_data" of target "cosmic_protector" does 235 not exist. 236This warning is for project developers. Use -Wno-dev to suppress it. 237 238CMake Warning (dev) at demos/skater/CMakeLists.txt:144 (add_dependencies): 239 Policy CMP0046 is not set: Error on non-existent dependency in 240 add_dependencies. Run "cmake --help-policy CMP0046" for policy details. 241 Use the cmake_policy command to set the policy and suppress this warning. 242 243 The dependency target "copy_example_data" of target "skater" does not 244 exist. 245This warning is for project developers. Use -Wno-dev to suppress it. 246 247CMake Warning (dev) at demos/skater/CMakeLists.txt:144 (add_dependencies): 248 Policy CMP0046 is not set: Error on non-existent dependency in 249 add_dependencies. Run "cmake --help-policy CMP0046" for policy details. 250 Use the cmake_policy command to set the policy and suppress this warning. 251 252 The dependency target "copy_skater_data" of target "skater" does not exist. 253This warning is for project developers. Use -Wno-dev to suppress it. 254 255-- Generating done 256-- Build files have been written to: C:/Users/cmkat/Downloads/allegro-5.2.6.0/allegro

Now I have 10.0.18362.0 and 10.0.19041.0. Both have X86 and X64 libraries in:

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.###.0\um\x86
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.###.0\um\x64

Alright, so I'm officially exhausted for the night... err morning, since it's nearing 4 AM. So when someone tells me "building Allegro 5 on Windows is broken" I'm inclined to believe them. ... All this and all I wanted was some debug symbols! :o

[edit] WHY AM I STILL DOING THIS

Throwing

check_winsdk_root_dir("C:\\\\Program Files (x86)\\\\Windows Kits\\\\10\\\\Lib\\\\10.0.18362.0\\\\um\\\\x64")
 // my install directory (note the build number will be different for anyone reading this days later)

at the end of this set of lines in FindDirectX.cmake

check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.0;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.0A;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.1;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Microsoft SDKs\\\\Windows\\\\v7.1A;InstallationFolder]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\DirectX SDK\\\\Installed Roots;KitsRoot]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\DirectX SDK\\\\]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\Installed Roots;KitsRoot]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\Installed Roots;KitsRoot81]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\Installed Roots;KitsRoot10]")
check_winsdk_root_dir("[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\10\\\\Installed Roots;KitsRoot]")
// then add it here

Basically, I just gave it the exact directory. But I know there's a way to do some sort of regex/template substitution for the build number as this one here:

https://gist.github.com/billyquith/3a509315722fc822c8e904bc903364b8

Uses asterisks and some sort of file globbing rules.

Anyhow, I got it to spit out a MSVC project file (minus all my other missing dependencies like OpenAL/OGG/etc) which succeeded in compiling in MSVC. That's a good stopping point for now.

I'll look into making a proper solution for cmake and submit a pull request tomorrow. Also gonna build full allegro and try to debug joysticks.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

GullRaDriel
Member #3,861
September 2003
avatar

I awakened the great Christ Katko. I'm happy ;D

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Peter Hull
Member #1,136
March 2001

I awakened the great Christ Katko.

He's not the messiah, he's a very naughty boy!

I've not done one of those "no sleep until this is sorted out" for years, but it sounds like you're making progress.

Still weird though, I downloaded a new allegro 5.2.6 zip and I still didn't see any errors. I got my Windows SDK from the Visual Studio Installer, is that what you did in the end?

I tried it two ways, first by opening the directory in the VS IDE, then using the built-in CMake support to open CMakeLists.txt, second by running cmake in the shell and building the generated project with MSBuild. Both were OK.

If I had to guess, it looks like your SDK installation has not put the correct entries in the registry so that FindDirectX.cmake can find it. But I don't know what the entries should be (I will check my installation when I get time)

[edit]
Interesting, my system doesn't have any of the registry keys mentioned in FindDirectX.cmake
It does have the equivalent of [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows Kits\\\\Installed Roots;KitsRoot10] though. That points to C:\Program Files (x86)\Windows Kits\10\.
The DirectX libs are found in, for example, C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/um/x64/dinput8.lib

Also (this may be where it actually gets the locations from) because I am using the "x64 Native Command Tools Prompt" from VS, the following environment variables are defined:

WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17763.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.17763.0
WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
WindowsSDKLibVersion=10.0.17763.0\
WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\
WindowsSDKVersion=10.0.17763.0\
WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\
WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\

So (if you didn't already) can you try running cmake from one of those Command Tools prompts?
In any case, seems like FindDirectX.cmake needs a little maintenance.

GullRaDriel
Member #3,861
September 2003
avatar

@Peter and who said I worship the good ? ;-p

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Chris Katko
Member #1,881
January 2002
avatar

This is so stupid. I can't get allegro 5 cmake to detect other installed dependencies, so I compile with just the gfx and input. So I have to use a local compiled allegro instead of installing it to my normal DLL folder (since it's a half empty Allegro). Too bad MSVC can't find it. And I setup C++ and linker folders. Nope. So I copy all that crap to the root folder of the project (not the EXE which would actually make sense). Except it can only find allegro.h, not all the allegro includes in the same folder.

You want me to debug this crap, release a debug nuget package. ::)

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

Chris - instead of struggling with garbage like VS, why don't you just use MinGW-W64 and CB? 3 downloads and you would have been up and running already. Just sayin.

Chris Katko
Member #1,881
January 2002
avatar


instead of struggling with garbage like [the one of the most popular, supported compilers in the world]

really??? ::)

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

Yes. Really.

VS is a heaping pile of garbage. Sure it's a great compiler if you can figure out how it works from the command line, but VS "Solutions" and "Projects" and the whole IDE is just shite.

We shouldn't derail this further though, but you could have been debugging the first day if you had used CB and my binaries.

Chris Katko
Member #1,881
January 2002
avatar

I have no words.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Peter Hull
Member #1,136
March 2001

Tryin' to stay positive :)

I wrote down what I did, maybe Chris if you have a look you will see if there's a difference between your setup and mine.

https://gist.github.com/pedro-w/83372cf27c0a09ab289d3ab3590806fb

Rodolfo Lam
Member #16,045
August 2015

Try using VCPKG to build and use Allegro on Visual Studio

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

I have no words.

I believe your words were...

[edit] WHY AM I STILL DOING THIS

8-)

Tell you what Chris Katko. I'll make you lib files from latest git, with all the dependencies.

Guess what, I'll make it super simple for you. You can use my binaries, and use MSVC. Happy now? Just run the included dllfolder2lib.bat file on the command line. Read it first so you know what it does. It has to be run from a VS prompt so take note.

https://github.com/EdgarReynaldo/EagleGUI/releases/tag/0pt8pt1

;D

Peter Hull
Member #1,136
March 2001

Just to recap, Andrew Gillett is on the verge of releasing a game, and is having trouble with Allegro. Chris has made a sincere offer to help with debugging.

So, pissing contests about whose compiler is better ARE NOT HELPFUL. More practically, precompiled symbol databases (whether downloaded from vcpkg or no) are not helpful because they become invalid as soon as any changes are made.

I think it would be great if we could work together and fix this.

Peter

Andrew Gillett
Member #15,868
January 2015

Sorry, I didn't see the recent posts on this thread until now. Steam are currently in the process of adding support for 5+ XInput controllers to their Steam Input API. I understand they're writing a custom driver for this, which will be an optional install for users. So I've scheduled my game's release for the end of the month, on the understanding that the update should be ready by then.

Regarding the issue with two DirectInput controllers becoming entangled with each other, I posted some logs to the mailing list earlier in the month, although I couldn't see a cause within the logs. I have attached the emails to this post.

You can watch my game's trailer and wishlist it here!
https://store.steampowered.com/app/1068720/Partition_Sector/

EDIT
"First it would be handy to know what exact version of Allegro you have because the line numbers in your debug output don't match up to the 5.2.6 code."
I am using a custom build. My main branch is https://github.com/arganoid/allegro5/tree/psector and the DirectInput debugging branch is https://github.com/arganoid/allegro5/tree/psectorDInputDebug

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

Let's be realistic here. He could have easily recompiled allegro using my custom dependencies. It's liballeg's fault there is no debugging nuget package. VS is notoriously hard to configure for beginners, mingw is a tiny download compared to VS, CB code completion competes with VS IntelliSense. VS UX is trash and so is their UI. It's entirely too convoluted compared to CB to be of any use to me. CB has integration with the GDB debugger. It works fine. Not to mention compiling the dependencies for VS is dubious at best, and not all deps provide cmake scripts, some only provide MSYS, or *NIX, so you have to use auto tools, and auto tools and VS don't work together.

The whole point is, Chris could have been debugging this a week ago. I only have one joystick, so, too bad.

I offered up my help, but if you think I'm here to compete for biggest dick then you're wrong.
:(

 1   2 


Go to: