mirror of
https://github.com/Rosalie241/RMG.git
synced 2026-07-11 17:44:02 +02:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6e2a77b542 | |||
| 0833630619 | |||
| caa2da2900 | |||
| 33b3c3b1b0 | |||
| e16d50c368 | |||
| 402870048b | |||
| 0597a71a03 | |||
| 85265575ea | |||
| 02eef161e7 | |||
| 8552e07ed8 | |||
| bd3f8f081c | |||
| a9cb954f3a | |||
| 5fb1fd22c5 | |||
| 95d4b3a85b | |||
| 94a7aa76c6 | |||
| c49d6e8b6f | |||
| cb5910142a | |||
| bcc3f03a50 |
@@ -50,7 +50,7 @@ fi
|
||||
|
||||
cp "$bin_dir/usr/share/applications/com.github.Rosalie241.RMG.desktop" "$bin_dir"
|
||||
cp "$bin_dir/usr/share/icons/hicolor/scalable/apps/com.github.Rosalie241.RMG.svg" "$bin_dir"
|
||||
ln -s ./com.github.Rosalie241.RMG.svg "$bin_dir"/.DirIcon
|
||||
ln -s com.github.Rosalie241.RMG.svg "$bin_dir"/.DirIcon
|
||||
mv "$bin_dir/usr/share" "$bin_dir/share"
|
||||
mv "$bin_dir/usr" "$bin_dir/shared"
|
||||
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:/gabomdq/SDL_GameControllerDB.git
|
||||
branch = master
|
||||
commit = 38fc811c715365e963a6942092cae147eddddc90
|
||||
parent = f0bc3df81827953535b8d8702be34a0ed1edd227
|
||||
commit = 65490d3c39825a84f9c2cb4fa9bc359284f37ca2
|
||||
parent = 8552e07ed8d2d06bf9638aa76ac30c06d58ff147
|
||||
method = merge
|
||||
cmdver = 0.4.9
|
||||
|
||||
+10
-4
@@ -2,7 +2,7 @@
|
||||
|
||||
A community sourced database of game controller mappings to be used with SDL2 and SDL3 Game Controller functionality.
|
||||
|
||||
# Usage
|
||||
## Usage
|
||||
Download gamecontrollerdb.txt, place it in your app's directory and load it.
|
||||
|
||||
SDL2:
|
||||
@@ -41,9 +41,15 @@ Third party cross-platform tool with GUI (Windows, macOS and Linux)
|
||||
### [SDL](https://github.com/libsdl-org/SDL/releases/latest)
|
||||
[testcontroller (SDL3)](https://github.com/libsdl-org/SDL/blob/main/test/testcontroller.c) and [controllermap (SDL2)](https://github.com/libsdl-org/SDL/blob/SDL2/test/controllermap.c) utilities are the official tools to create these mappings on all SDL supported platforms (Windows, Mac, Linux, iOS, Android, etc).
|
||||
|
||||
```
|
||||
"SDL_GamepadBind" "030000004c050000c405000000010000,PS4 Controller,platform:Windows,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,"
|
||||
```
|
||||
## Contributing
|
||||
|
||||
First, please confirm for yourself
|
||||
- Your device is a gamepad
|
||||
- Your mapping best represents the Xbox layout per the [mapping guide](https://github.com/mdqinc/SDL_GameControllerDB/blob/master/mapping_guide.png)
|
||||
- An acceptable mapping is not [already present in the DB](https://github.com/mdqinc/SDL_GameControllerDB/blob/master/gamecontrollerdb.txt), searching by platform and GUID
|
||||
- Adding the mapping to the db improves, and does not degrade, the experience of using the gamepad
|
||||
|
||||
Contribute by [opening a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request), or [creating an issue](https://github.com/mdqinc/SDL_GameControllerDB/issues/new)
|
||||
|
||||
## Resources
|
||||
|
||||
|
||||
+23
-6
@@ -1,5 +1,5 @@
|
||||
# Game Controller DB for SDL in 2.0.16 format
|
||||
# Source: https://github.com/gabomdq/SDL_GameControllerDB
|
||||
# Source: https://github.com/mdqinc/SDL_GameControllerDB
|
||||
|
||||
# Windows
|
||||
03000000300f00000a01000000000000,3 In 1 Conversion Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows,
|
||||
@@ -78,6 +78,7 @@
|
||||
03000000c82d00001230000000000000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001260000000000000,8BitDo Ultimate 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001b30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001c30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001d30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001530000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001630000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
@@ -175,7 +176,6 @@
|
||||
030000001a1c00000001000000000000,Datel Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000791d00000103000000000000,Dual Box Wii,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000c0160000e105000000000000,Dual Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows,
|
||||
030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
|
||||
030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
|
||||
@@ -245,7 +245,8 @@
|
||||
03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows,
|
||||
030000008f0e00001411000000000000,Gamo2 Divaller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000120c0000a857000000000000,Gator Claw,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000c9110000f055000000000000,GC100XF,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000c21100000791000000000000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000c9110000f055000000000000,Be1 GC100XF Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
@@ -253,7 +254,6 @@
|
||||
03000000300f00000b01000000000000,GGE909 Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f0250000c283000000000000,Gioteck PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f025000021c1000010010000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000f025000031c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f0250000c383000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f0250000c483000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
@@ -696,6 +696,7 @@
|
||||
03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
|
||||
03000000b40400000a01000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
|
||||
030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows,
|
||||
03000000632500002705000000000000,ShanWan Q36,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,platform:Windows,
|
||||
03000000f82100001900000000000000,Shogun Bros Chameleon X1,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
|
||||
03000000120c00001c1e000000000000,SnakeByte 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows,
|
||||
03000000140300000918000000000000,SNES Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
|
||||
@@ -840,6 +841,7 @@
|
||||
03000000172700004431000000000000,Xiaomi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000172700003350000000000000,Xiaomi XMGP01YM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000bc2000005060000000000000,Xiaomi XMGP01YM,+lefty:+a2,+righty:+a5,-lefty:-a1,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c0160000e105000000000000,XinMo Dual Arcade,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000007d0400000340000000000000,Xterminator Digital Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:-a4,lefttrigger:+a4,leftx:a0,lefty:a1,paddle1:b7,paddle2:b6,rightshoulder:b5,rightstick:b9,righttrigger:b2,rightx:a3,righty:a5,start:b8,x:b3,y:b4,platform:Windows,
|
||||
030000002c3600000100000000000000,Yawman Arrow,+rightx:h0.2,+righty:h0.4,-rightx:h0.8,-righty:h0.1,a:b4,b:b5,back:b6,dpdown:b15,dpleft:b14,dpright:b16,dpup:b13,leftshoulder:b10,leftstick:b0,lefttrigger:-a4,leftx:a0,lefty:a1,paddle1:b11,paddle2:b12,rightshoulder:b8,rightstick:b9,righttrigger:+a4,start:b3,x:b1,y:b2,platform:Windows,
|
||||
@@ -850,6 +852,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
|
||||
# Mac OS X
|
||||
030000008f0e00000300000009010000,2 In 1 Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000c82d00001930000000000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
|
||||
03000000c82d00001930000000020000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
|
||||
03000000c82d00001930000001000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
|
||||
03000000c82d00000031000001000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
@@ -895,7 +898,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00004028000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000260000001000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00000261000000010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c82d00001230000000010000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
@@ -985,6 +988,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000242f00002d00000007010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
030000006d04000019c2000000000000,Logitech Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000006d04000019c2000000020000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -1120,6 +1124,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000005f140000c501000000020000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X,
|
||||
03000000632500002605000000010000,Uberwith Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000c0160000e105000000040000,Ultimate Atari Fight Stick,a:b2,b:b4,back:b18,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,rightshoulder:b8,righttrigger:b10,start:b16,x:b0,y:b6,platform:Mac OS X,
|
||||
03000000151900005678000010010000,Uniplay U6,a:b3,b:b6,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,leftstick:b31,lefttrigger:b21,leftx:a1,lefty:a3,rightshoulder:b19,rightstick:b33,righttrigger:b23,rightx:a4,righty:a5,start:b27,x:b11,y:b13,platform:Mac OS X,
|
||||
030000006f0e00000302000025040000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X,
|
||||
030000006f0e00000702000003060000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -1153,6 +1158,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000005e040000130b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000130b000022050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
030000005e040000220b000021050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -1197,6 +1203,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
03000000c82d00000020000000000000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
06000000c82d00000020000006010000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000c82d00000960000011010000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
03000000c82d00000131000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
03000000c82d00000231000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
03000000c82d00000331000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
@@ -1331,6 +1338,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000f025000021c1000010010000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000f0250000c283000010010000,Gioteck VX2 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
190000004b4800000010000000010000,GO-Advance Controller,a:b1,b:b0,back:b10,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b13,start:b15,x:b2,y:b3,platform:Linux,
|
||||
190000004b4800000010000001010000,GO-Advance Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b13,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b16,righttrigger:b15,start:b17,x:b2,y:b3,platform:Linux,
|
||||
@@ -1390,6 +1398,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000f00300008d03000011010000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000830500006020000010010000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
|
||||
03000000d80400004bea000011010000,icedragon.io STAC Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux,
|
||||
03000000d80400004aea000011010000,icedragon.io STAC Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux,
|
||||
030000008a2e0000d910000011010000,icedragon.io STAC2 Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux,
|
||||
030000008a2e0000e910000011010000,icedragon.io STAC2 Dance Pad,a:b8,b:b9,x:b10,y:b11,back:b12,platform:Linux,
|
||||
030000008f0e00001330000001010000,iCode Retro Adapter,b:b3,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b1,start:b7,x:b2,y:b0,platform:Linux,
|
||||
050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
|
||||
@@ -1492,6 +1504,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000d6200000e589000001000000,Moga 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
03000000c82d00000960000000000000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000c62400002b89000011010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000c62400001a89000000010000,MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
@@ -1586,6 +1599,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000250900000017000010010000,PS/SS/N64 Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b5,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2~,righty:a3,start:b8,platform:Linux,
|
||||
03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000120c0000160e000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
|
||||
030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
|
||||
@@ -1696,7 +1710,6 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000952e00004e43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000a30c00002500000011010000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux,
|
||||
03000000790000001100000011010000,Sega Saturn,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000790000002201000011010000,Sega Saturn,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000b40400000a01000000010000,Sega Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux,
|
||||
03000000632500002305000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000632500002605000010010000,ShanWan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
@@ -1773,6 +1786,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000005f140000c501000010010000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
06000000f51000000870000003010000,Turtle Beach Recon,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000100800000100000010010000,Twin PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000c0160000e105000010010000,Ultimate Atari Fight Stick,a:b1,b:b2,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b8,x:b0,y:b3,platform:Linux,
|
||||
03000000151900005678000010010000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
|
||||
@@ -1852,6 +1866,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000182e000011010000,Zeroplus PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000790000002201000011010000,ZhiXu GuliKit D,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
|
||||
# Android
|
||||
38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
|
||||
@@ -2175,6 +2190,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS,
|
||||
050000007e05000009200000df870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS,
|
||||
050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b3,y:b2,platform:iOS,
|
||||
05000000ac050000040000008e586d04,PlayStation VR2 Sense Controller (L),+leftx:+a3,+lefty:+a1,-leftx:+a2,-lefty:+a4,back:b2,leftstick:b4,lefttrigger:+a7,paddle2:b3,x:b0,y:b1,platform:iOS,
|
||||
05000000ac050000040000000eb86d04,PlayStation VR2 Sense Controller (R),+rightx:+a3,+righty:+a1,-rightx:+a2,-righty:+a4,a:b0,b:b1,paddle1:b3,rightstick:b4,righttrigger:+a7,start:b2,platform:iOS,
|
||||
050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
|
||||
050000004c050000cc090000df870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
|
||||
050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ jobs:
|
||||
${{ matrix.platform.msys-env }}-ninja
|
||||
${{ matrix.platform.msys-env }}-perl
|
||||
- name: Get SDL3_net sources
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
- name: Install Ninja
|
||||
if: ${{ !contains(matrix.platform.shell, 'msys2') }}
|
||||
uses: aseprite/get-ninja@main
|
||||
|
||||
+242
-241
@@ -24,12 +24,12 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
- name: 'Set up SDL sources'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
path: 'SDL'
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
--github \
|
||||
--debug
|
||||
- name: 'Store source archives'
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace}}/dist'
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '/tmp'
|
||||
@@ -97,7 +97,7 @@ jobs:
|
||||
run: |
|
||||
${{ steps.tar.outputs.path }}/build-scripts/test-versioning.sh
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
@@ -139,224 +139,225 @@ jobs:
|
||||
cmake --build /tmp/build --verbose
|
||||
# ctest --test-dir /tmp/build --no-tests=error --output-on-failure
|
||||
|
||||
# dmg:
|
||||
# needs: [src]
|
||||
# runs-on: macos-latest
|
||||
# outputs:
|
||||
# dmg: ${{ steps.releaser.outputs.dmg }}
|
||||
# steps:
|
||||
# - name: 'Set up Python'
|
||||
# uses: actions/setup-python@v5
|
||||
# with:
|
||||
# python-version: '3.11'
|
||||
# - name: 'Fetch build-release.py'
|
||||
# uses: actions/checkout@v4
|
||||
# with:
|
||||
# ref: ${{ inputs.commit }}
|
||||
# sparse-checkout: 'build-scripts/build-release.py'
|
||||
# - name: 'Download source archives'
|
||||
# uses: actions/download-artifact@v4
|
||||
# with:
|
||||
# name: sources
|
||||
# path: '${{ github.workspace }}'
|
||||
# - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||
# id: tar
|
||||
dmg:
|
||||
needs: [src]
|
||||
runs-on: macos-latest
|
||||
outputs:
|
||||
dmg: ${{ steps.releaser.outputs.dmg }}
|
||||
steps:
|
||||
- name: 'Set up Python'
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||
id: tar
|
||||
run: |
|
||||
mkdir -p "${{ github.workspace }}/tardir"
|
||||
tar -C "${{ github.workspace }}/tardir" -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||
echo "path=${{ github.workspace }}/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||
# - name: 'Download external dependencies'
|
||||
# run: |
|
||||
# mkdir -p "${{ github.workspace }}/tardir"
|
||||
# tar -C "${{ github.workspace }}/tardir" -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||
# echo "path=${{ github.workspace }}/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||
## - name: 'Download external dependencies'
|
||||
## run: |
|
||||
## sh "${{ steps.tar.outputs.path }}/external/download.sh" --depth 1
|
||||
# - name: 'Build SDL3_net.dmg'
|
||||
# id: releaser
|
||||
# shell: bash
|
||||
# env:
|
||||
# GH_TOKEN: ${{ github.token }}
|
||||
# run: |
|
||||
# python build-scripts/build-release.py \
|
||||
# --actions dmg \
|
||||
# --commit ${{ inputs.commit }} \
|
||||
# --root "${{ steps.tar.outputs.path }}" \
|
||||
# --github \
|
||||
# --debug
|
||||
# - name: 'Store DMG image file'
|
||||
# uses: actions/upload-artifact@v4
|
||||
# with:
|
||||
# name: dmg
|
||||
# path: '${{ github.workspace }}/dist'
|
||||
#
|
||||
# dmg-verify:
|
||||
# needs: [dmg, src]
|
||||
# runs-on: macos-latest
|
||||
# steps:
|
||||
# - name: 'Set up Python'
|
||||
# uses: actions/setup-python@v5
|
||||
# with:
|
||||
# python-version: '3.11'
|
||||
# - name: 'Fetch build-release.py'
|
||||
# uses: actions/checkout@v4
|
||||
# with:
|
||||
# ref: ${{ inputs.commit }}
|
||||
# sparse-checkout: 'build-scripts/build-release.py'
|
||||
# - name: 'Download source archives'
|
||||
# uses: actions/download-artifact@v4
|
||||
# with:
|
||||
# name: sources
|
||||
# path: '${{ github.workspace }}'
|
||||
# - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||
# id: src
|
||||
# run: |
|
||||
# mkdir -p /tmp/tardir
|
||||
# tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||
# echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||
# - name: 'Download dependencies'
|
||||
# id: deps
|
||||
# env:
|
||||
# GH_TOKEN: ${{ github.token }}
|
||||
# run: |
|
||||
# python build-scripts/build-release.py \
|
||||
# --actions download \
|
||||
# --commit ${{ inputs.commit }} \
|
||||
# --root "${{ steps.src.outputs.path }}" \
|
||||
# --github \
|
||||
# --debug
|
||||
# - name: 'Mount dependencies'
|
||||
# id: deps-mount
|
||||
# run: |
|
||||
# hdiutil attach "${{ steps.deps.outputs.dep-path }}/SDL3-${{ steps.deps.outputs.dep-sdl-version }}.dmg"
|
||||
# sdl_mount_pount="/Volumes/SDL3"
|
||||
# if [ ! -d "$sdl_mount_pount/SDL3.xcframework" ]; then
|
||||
# echo "Cannot find SDL3.xcframework!"
|
||||
# exit 1
|
||||
# fi
|
||||
# echo "path=${sdl_mount_pount}" >>$GITHUB_OUTPUT
|
||||
# - name: 'Download ${{ needs.dmg.outputs.dmg }}'
|
||||
# uses: actions/download-artifact@v4
|
||||
# with:
|
||||
# name: dmg
|
||||
# path: '${{ github.workspace }}'
|
||||
# - name: 'Mount ${{ needs.dmg.outputs.dmg }}'
|
||||
# id: mount
|
||||
# run: |
|
||||
# hdiutil attach '${{ github.workspace }}/${{ needs.dmg.outputs.dmg }}'
|
||||
# mount_point="/Volumes/${{ needs.src.outputs.project }}"
|
||||
# if [ ! -d "$mount_point/${{ needs.src.outputs.project }}.xcframework" ]; then
|
||||
# echo "Cannot find ${{ needs.src.outputs.project }}.xcframework!"
|
||||
# exit 1
|
||||
# fi
|
||||
# echo "mount-point=${mount_point}">>$GITHUB_OUTPUT
|
||||
# - name: 'CMake (configure + build) Darwin'
|
||||
# run: |
|
||||
# set -e
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
# -DCMAKE_SYSTEM_NAME=Darwin \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
# -Werror=dev \
|
||||
# -B build_darwin
|
||||
# cmake --build build_darwin --config Release --verbose
|
||||
#
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/macos-arm64_x86_64;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/macos-arm64_x86_64" \
|
||||
# -DCMAKE_SYSTEM_NAME=Darwin \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
# -B build_darwin2
|
||||
# cmake --build build_darwin2 --config Release --verbose
|
||||
#
|
||||
# - name: 'CMake (configure + build) iOS'
|
||||
# run: |
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
# -DCMAKE_SYSTEM_NAME=iOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
# -Werror=dev \
|
||||
# -B build_ios
|
||||
# cmake --build build_ios --config Release --verbose
|
||||
#
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/ios-arm64;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/ios-arm64" \
|
||||
# -DCMAKE_SYSTEM_NAME=iOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
# -B build_ios2
|
||||
# cmake --build build_ios2 --config Release --verbose
|
||||
# - name: 'CMake (configure + build) tvOS'
|
||||
# run: |
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
# -DCMAKE_SYSTEM_NAME=tvOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
# -Werror=dev \
|
||||
# -B build_tvos
|
||||
# cmake --build build_tvos --config Release --verbose
|
||||
#
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/tvos-arm64;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/tvos-arm64" \
|
||||
# -DCMAKE_SYSTEM_NAME=tvOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
# -B build_tvos2
|
||||
# cmake --build build_tvos2 --config Release --verbose
|
||||
# - name: 'CMake (configure + build) iOS simulator'
|
||||
# run: |
|
||||
# sysroot=$(xcodebuild -version -sdk iphonesimulator Path)
|
||||
# echo "sysroot=$sysroot"
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
# -DCMAKE_SYSTEM_NAME=iOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
# -DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
# -Werror=dev \
|
||||
# -B build_ios_simulator
|
||||
# cmake --build build_ios_simulator --config Release --verbose
|
||||
#
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/ios-arm64_x86_64-simulator;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/ios-arm64_x86_64-simulator" \
|
||||
# -DCMAKE_SYSTEM_NAME=iOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
# -DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
# -B build_ios_simulator2
|
||||
# cmake --build build_ios_simulator2 --config Release --verbose
|
||||
# - name: 'CMake (configure + build) tvOS simulator'
|
||||
# run: |
|
||||
# sysroot=$(xcodebuild -version -sdk appletvsimulator Path)
|
||||
# echo "sysroot=$sysroot"
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
# -DCMAKE_SYSTEM_NAME=tvOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
# -DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
# -Werror=dev \
|
||||
# -B build_tvos_simulator
|
||||
# cmake --build build_tvos_simulator --config Release --verbose
|
||||
#
|
||||
# cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
# -DTEST_SHARED=TRUE \
|
||||
# -DTEST_STATIC=FALSE \
|
||||
# -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/tvos-arm64_x86_64-simulator;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/tvos-arm64_x86_64-simulator" \
|
||||
# -DCMAKE_SYSTEM_NAME=tvOS \
|
||||
# -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
# -DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
# -B build_tvos_simulator2
|
||||
# cmake --build build_tvos_simulator2 --config Release --verbose
|
||||
# sh "${{ steps.tar.outputs.path }}/external/download.sh" --depth 1
|
||||
- name: 'Build SDL3_net.dmg'
|
||||
id: releaser
|
||||
shell: bash
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
python build-scripts/build-release.py \
|
||||
--actions dmg \
|
||||
--commit ${{ inputs.commit }} \
|
||||
--root "${{ steps.tar.outputs.path }}" \
|
||||
--github \
|
||||
--debug
|
||||
- name: 'Store DMG image file'
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: dmg
|
||||
path: '${{ github.workspace }}/dist'
|
||||
|
||||
dmg-verify:
|
||||
needs: [dmg, src]
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: 'Set up Python'
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||
id: src
|
||||
run: |
|
||||
mkdir -p /tmp/tardir
|
||||
tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||
echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||
- name: 'Download dependencies'
|
||||
id: deps
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
python build-scripts/build-release.py \
|
||||
--actions download \
|
||||
--commit ${{ inputs.commit }} \
|
||||
--root "${{ steps.src.outputs.path }}" \
|
||||
--github \
|
||||
--debug
|
||||
- name: 'Mount dependencies'
|
||||
id: deps-mount
|
||||
run: |
|
||||
hdiutil attach "${{ steps.deps.outputs.dep-path }}/SDL3-${{ steps.deps.outputs.dep-sdl-version }}.dmg"
|
||||
sdl_mount_pount="/Volumes/SDL3"
|
||||
if [ ! -d "$sdl_mount_pount/SDL3.xcframework" ]; then
|
||||
echo "Cannot find SDL3.xcframework!"
|
||||
exit 1
|
||||
fi
|
||||
echo "path=${sdl_mount_pount}" >>$GITHUB_OUTPUT
|
||||
- name: 'Download ${{ needs.dmg.outputs.dmg }}'
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: dmg
|
||||
path: '${{ github.workspace }}'
|
||||
- name: 'Mount ${{ needs.dmg.outputs.dmg }}'
|
||||
id: mount
|
||||
run: |
|
||||
hdiutil attach '${{ github.workspace }}/${{ needs.dmg.outputs.dmg }}'
|
||||
mount_point="/Volumes/${{ needs.src.outputs.project }}"
|
||||
if [ ! -d "$mount_point/${{ needs.src.outputs.project }}.xcframework" ]; then
|
||||
echo "Cannot find ${{ needs.src.outputs.project }}.xcframework!"
|
||||
exit 1
|
||||
fi
|
||||
echo "mount-point=${mount_point}">>$GITHUB_OUTPUT
|
||||
- name: 'CMake (configure + build) Darwin'
|
||||
run: |
|
||||
set -e
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
-DCMAKE_SYSTEM_NAME=Darwin \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-Werror=dev \
|
||||
-B build_darwin
|
||||
cmake --build build_darwin --config Release --verbose
|
||||
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/macos-arm64_x86_64;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/macos-arm64_x86_64" \
|
||||
-DCMAKE_SYSTEM_NAME=Darwin \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-B build_darwin2
|
||||
cmake --build build_darwin2 --config Release --verbose
|
||||
|
||||
- name: 'CMake (configure + build) iOS'
|
||||
run: |
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
-Werror=dev \
|
||||
-B build_ios
|
||||
cmake --build build_ios --config Release --verbose
|
||||
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/ios-arm64;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/ios-arm64" \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
-B build_ios2
|
||||
cmake --build build_ios2 --config Release --verbose
|
||||
- name: 'CMake (configure + build) tvOS'
|
||||
run: |
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
-DCMAKE_SYSTEM_NAME=tvOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
-Werror=dev \
|
||||
-B build_tvos
|
||||
cmake --build build_tvos --config Release --verbose
|
||||
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/tvos-arm64;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/tvos-arm64" \
|
||||
-DCMAKE_SYSTEM_NAME=tvOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
-B build_tvos2
|
||||
cmake --build build_tvos2 --config Release --verbose
|
||||
- name: 'CMake (configure + build) iOS simulator'
|
||||
run: |
|
||||
sysroot=$(xcodebuild -version -sdk iphonesimulator Path)
|
||||
echo "sysroot=$sysroot"
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
-Werror=dev \
|
||||
-B build_ios_simulator
|
||||
cmake --build build_ios_simulator --config Release --verbose
|
||||
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/ios-arm64_x86_64-simulator;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/ios-arm64_x86_64-simulator" \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
-B build_ios_simulator2
|
||||
cmake --build build_ios_simulator2 --config Release --verbose
|
||||
- name: 'CMake (configure + build) tvOS simulator'
|
||||
run: |
|
||||
sysroot=$(xcodebuild -version -sdk appletvsimulator Path)
|
||||
echo "sysroot=$sysroot"
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \
|
||||
-DCMAKE_SYSTEM_NAME=tvOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
-Werror=dev \
|
||||
-B build_tvos_simulator
|
||||
cmake --build build_tvos_simulator --config Release --verbose
|
||||
|
||||
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||
-DTEST_SHARED=TRUE \
|
||||
-DTEST_STATIC=FALSE \
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }}/SDL3_net.xcframework/tvos-arm64_x86_64-simulator;${{ steps.deps-mount.outputs.path }}/SDL3.xcframework/tvos-arm64_x86_64-simulator" \
|
||||
-DCMAKE_SYSTEM_NAME=tvOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
-B build_tvos_simulator2
|
||||
cmake --build build_tvos_simulator2 --config Release --verbose
|
||||
|
||||
msvc:
|
||||
needs: [src]
|
||||
runs-on: windows-2025
|
||||
@@ -370,12 +371,12 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -401,7 +402,7 @@ jobs:
|
||||
--github `
|
||||
--debug
|
||||
- name: 'Store MSVC archives'
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: msvc
|
||||
path: '${{ github.workspace }}/dist'
|
||||
@@ -411,7 +412,7 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: 'Fetch .github/actions/setup-ninja/action.yml'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: |
|
||||
@@ -424,7 +425,7 @@ jobs:
|
||||
- name: Set up ninja
|
||||
uses: ./.github/actions/setup-ninja
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -454,7 +455,7 @@ jobs:
|
||||
unzip "${{ steps.deps.outputs.dep-path }}/SDL3-devel-${{ steps.deps.outputs.dep-sdl-version }}-VC.zip"
|
||||
echo "path=${{ github.workspace }}/deps-vc" >>$env:GITHUB_OUTPUT
|
||||
- name: 'Download MSVC binaries'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: msvc
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -529,7 +530,7 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
@@ -538,7 +539,7 @@ jobs:
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y gcc-mingw-w64 g++-mingw-w64 ninja-build
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -560,7 +561,7 @@ jobs:
|
||||
--github \
|
||||
--debug
|
||||
- name: 'Store MinGW archives'
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: mingw
|
||||
path: '${{ github.workspace }}/dist'
|
||||
@@ -574,7 +575,7 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.commit }}
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
@@ -583,7 +584,7 @@ jobs:
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y gcc-mingw-w64 g++-mingw-w64 ninja-build
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -619,7 +620,7 @@ jobs:
|
||||
mkdir -p /tmp/deps-mingw/cmake
|
||||
cp -rv /tmp/deps-mingw-extract/sdl3/SDL3-${{ steps.deps.outputs.dep-sdl-version }}/cmake/* /tmp/deps-mingw/cmake
|
||||
- name: 'Download MinGW binaries'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: mingw
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -665,7 +666,7 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: 'Fetch build-release.py'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
sparse-checkout: 'build-scripts/build-release.py'
|
||||
- name: 'Setup Android NDK'
|
||||
@@ -675,7 +676,7 @@ jobs:
|
||||
local-cache: false
|
||||
ndk-version: r28c
|
||||
- name: 'Setup Java JDK'
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '11'
|
||||
@@ -684,7 +685,7 @@ jobs:
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y ninja-build
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
@@ -708,7 +709,7 @@ jobs:
|
||||
--github \
|
||||
--debug
|
||||
- name: 'Store Android archive(s)'
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: android
|
||||
path: '${{ github.workspace }}/dist'
|
||||
@@ -721,17 +722,17 @@ jobs:
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- uses: actions/setup-java@v4
|
||||
- uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
- name: 'Download source archives'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace }}'
|
||||
- name: 'Download Android .aar archive'
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
name: android
|
||||
path: '${{ github.workspace }}'
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
build/
|
||||
buildbot/
|
||||
!build-scripts/
|
||||
/VERSION.txt
|
||||
|
||||
*.so
|
||||
|
||||
Vendored
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:libsdl-org/SDL_net.git
|
||||
branch = main
|
||||
commit = cb287ed74f612f137e29fab9dfc08b3dc87a67e4
|
||||
parent = d23f381dfa7d85acfa198a20d5cf5b202676b297
|
||||
commit = 4dd85af45d8597f93796815fba0defa5d499be21
|
||||
parent = 02eef161e7f4ac7a4deebd0115574b7a27c5f58f
|
||||
method = merge
|
||||
cmdver = 0.4.9
|
||||
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
|
||||
+34
-22
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# Simple DirectMedia Layer
|
||||
# Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||
# Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
|
||||
#
|
||||
# This software is provided 'as-is', without any express or implied
|
||||
# warranty. In no event will the authors be held liable for any damages
|
||||
@@ -37,6 +37,11 @@ my $versionfname = 'include/SDL_version.h';
|
||||
my $versionmajorregex = '\A\#define\s+SDL_MAJOR_VERSION\s+(\d+)\Z';
|
||||
my $versionminorregex = '\A\#define\s+SDL_MINOR_VERSION\s+(\d+)\Z';
|
||||
my $versionmicroregex = '\A\#define\s+SDL_MICRO_VERSION\s+(\d+)\Z';
|
||||
my $wikidocsectionsym = 'SDL_WIKI_DOCUMENTATION_SECTION';
|
||||
my $forceinlinesym = 'SDL_FORCE_INLINE';
|
||||
my $deprecatedsym = 'SDL_DEPRECATED';
|
||||
my $declspecsym = '(?:SDLMAIN_|SDL_)?DECLSPEC';
|
||||
my $callconvsym = 'SDLCALL';
|
||||
my $mainincludefname = 'SDL.h';
|
||||
my $selectheaderregex = '\ASDL.*?\.h\Z';
|
||||
my $projecturl = 'https://libsdl.org/';
|
||||
@@ -147,6 +152,12 @@ if (defined $optionsfname) {
|
||||
$envvardesc = $val, next if $key eq 'envvardesc';
|
||||
$envvarsymregex = $val, next if $key eq 'envvarsymregex';
|
||||
$envvarsymreplace = $val, next if $key eq 'envvarsymreplace';
|
||||
$wikidocsectionsym = $val, next if $key eq 'wikidocsectionsym';
|
||||
$forceinlinesym = $val, next if $key eq 'forceinlinesym';
|
||||
$deprecatedsym = $val, next if $key eq 'deprecatedsym';
|
||||
$declspecsym = $val, next if $key eq 'declspecsym';
|
||||
$callconvsym = $val, next if $key eq 'callconvsym';
|
||||
|
||||
}
|
||||
}
|
||||
close(OPTIONS);
|
||||
@@ -750,6 +761,7 @@ sub print_undocumented_section {
|
||||
}
|
||||
}
|
||||
|
||||
# !!! FIXME: generalize this for other libraries to use.
|
||||
sub strip_fn_declaration_metadata {
|
||||
my $decl = shift;
|
||||
$decl =~ s/SDL_(PRINTF|SCANF)_FORMAT_STRING\s*//; # don't want this metadata as part of the documentation.
|
||||
@@ -1153,7 +1165,7 @@ while (my $d = readdir(DH)) {
|
||||
} elsif ($ignoring_lines) {
|
||||
push @contents, $_;
|
||||
next;
|
||||
} elsif (/\A\s*\#\s*ifndef\s+SDL_WIKI_DOCUMENTATION_SECTION\s*\Z/) {
|
||||
} elsif (/\A\s*\#\s*ifndef\s+$wikidocsectionsym\s*\Z/) {
|
||||
$ignoring_lines = 1;
|
||||
push @contents, $_;
|
||||
next;
|
||||
@@ -1162,13 +1174,13 @@ while (my $d = readdir(DH)) {
|
||||
#print("CATEGORY FOR '$dent' CHANGED TO " . (defined($current_wiki_category) ? "'$current_wiki_category'" : '(undef)') . "\n");
|
||||
push @contents, $_;
|
||||
next;
|
||||
} elsif (/\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC/) { # a function declaration without a doxygen comment?
|
||||
} elsif (/\A\s*extern\s+(?:$deprecatedsym\s+|)$declspecsym/) { # a function declaration without a doxygen comment?
|
||||
$symtype = 1; # function declaration
|
||||
@templines = ();
|
||||
$decl = $_;
|
||||
$str = '';
|
||||
$has_doxygen = 0;
|
||||
} elsif (/\A\s*SDL_FORCE_INLINE/) { # a (forced-inline) function declaration without a doxygen comment?
|
||||
} elsif (/\A\s*$forceinlinesym/) { # a (forced-inline) function declaration without a doxygen comment?
|
||||
$symtype = 1; # function declaration
|
||||
@templines = ();
|
||||
$decl = $_;
|
||||
@@ -1235,9 +1247,9 @@ while (my $d = readdir(DH)) {
|
||||
$lineno++ if defined $decl;
|
||||
$decl = '' if not defined $decl;
|
||||
chomp($decl);
|
||||
if ($decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC/) {
|
||||
if ($decl =~ /\A\s*extern\s+(?:$deprecatedsym\s+|)$declspecsym/) {
|
||||
$symtype = 1; # function declaration
|
||||
} elsif ($decl =~ /\A\s*SDL_FORCE_INLINE/) {
|
||||
} elsif ($decl =~ /\A\s*$forceinlinesym/) {
|
||||
$symtype = 1; # (forced-inline) function declaration
|
||||
} elsif ($decl =~ /\A\s*\#\s*define\s+/) {
|
||||
$symtype = 2; # macro
|
||||
@@ -1274,7 +1286,7 @@ while (my $d = readdir(DH)) {
|
||||
}
|
||||
$headercategorydocs{$current_wiki_category} = $sym;
|
||||
} elsif ($symtype == 1) { # a function
|
||||
my $is_forced_inline = ($decl =~ /\A\s*SDL_FORCE_INLINE/);
|
||||
my $is_forced_inline = ($decl =~ /\A\s*$forceinlinesym/);
|
||||
|
||||
if ($is_forced_inline) {
|
||||
if (not $decl =~ /\)\s*(\{.*|)\s*\Z/) {
|
||||
@@ -1311,14 +1323,14 @@ while (my $d = readdir(DH)) {
|
||||
|
||||
my $paramsstr = undef;
|
||||
|
||||
if (!$is_forced_inline && $decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC\w*\s+(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(\*?)\s*SDLCALL\s+(.*?)\s*\((.*?)\);/) {
|
||||
$sym = $8;
|
||||
$rettype = "$3$4$5$6";
|
||||
$paramsstr = $9;
|
||||
} elsif ($is_forced_inline && $decl =~ /\A\s*SDL_FORCE_INLINE\s+(SDL_DEPRECATED\s+|)(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(.*?)\s*\((.*?)\);/) {
|
||||
if (!$is_forced_inline && $decl =~ /\A\s*extern\s+(?:$deprecatedsym\s+|)$declspecsym\w*\s+(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(\*?)\s*$callconvsym\s+(.*?)\s*\((.*?)\);/) {
|
||||
$sym = $6;
|
||||
$rettype = "$2$3$4$5";
|
||||
$rettype = "$1$2$3$4$5";
|
||||
$paramsstr = $7;
|
||||
} elsif ($is_forced_inline && $decl =~ /\A\s*$forceinlinesym\s+(?:$deprecatedsym\s+|)(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(.*?)\s*\((.*?)\);/) {
|
||||
$sym = $5;
|
||||
$rettype = "$1$2$3$4";
|
||||
$paramsstr = $6;
|
||||
} else {
|
||||
#print "Found doxygen but no function sig:\n$str\n\n";
|
||||
foreach (@templines) {
|
||||
@@ -1384,7 +1396,7 @@ while (my $d = readdir(DH)) {
|
||||
|
||||
$decl = $_;
|
||||
$temp = $decl;
|
||||
$temp =~ s/\Aextern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC\w*\s+(.*?)\s+(\*?)SDLCALL\s+/$3$4 /;
|
||||
$temp =~ s/\Aextern\s+(?:$deprecatedsym\s+|)$declspecsym\w*\s+(.*?)\s+(\*?)$callconvsym\s+/$1$2 /;
|
||||
$shrink_length = length($decl) - length($temp);
|
||||
$decl = $temp;
|
||||
} else {
|
||||
@@ -2259,10 +2271,10 @@ if ($copy_direction == 1) { # --copy-to-headers
|
||||
|
||||
$desc =~ s/[\s\n]+\Z//ms;
|
||||
|
||||
if (0) { # !!! FIXME: disabled because it's not currently suitable for general use, but for manually inspecting the output, it can be useful.
|
||||
if (($desc =~ /\A[A-Z]/) && (not $desc =~ /\ASDL_/)) {
|
||||
print STDERR "WARNING: $sym\'s '\\param $arg' text starts with a capital letter: '$desc'. Fixing.\n";
|
||||
$desc = lcfirst($desc);
|
||||
if (0) {
|
||||
if (($desc =~ /\A[a-z]/) && (not $desc =~ /$apiprefixregex/)) {
|
||||
print STDERR "WARNING: $sym\'s '\\param $arg' text starts with a lowercase letter: '$desc'. Fixing.\n";
|
||||
$desc = ucfirst($desc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2306,8 +2318,8 @@ if ($copy_direction == 1) { # --copy-to-headers
|
||||
}
|
||||
$desc =~ s/[\s\n]+\Z//ms;
|
||||
|
||||
if (0) { # !!! FIXME: disabled because it's not currently suitable for general use, but for manually inspecting the output, it can be useful.
|
||||
if (($desc =~ /\A[A-Z]/) && (not $desc =~ /\ASDL_/)) {
|
||||
if (0) {
|
||||
if (($desc =~ /\A[A-Z]/) && (not $desc =~ /$apiprefixregex/)) {
|
||||
print STDERR "WARNING: $sym\'s '\\returns' text starts with a capital letter: '$desc'. Fixing.\n";
|
||||
$desc = lcfirst($desc);
|
||||
}
|
||||
@@ -2451,7 +2463,7 @@ if ($copy_direction == 1) { # --copy-to-headers
|
||||
} else {
|
||||
die("Unexpected symbol type $symtype!");
|
||||
}
|
||||
my $str = "This $symtypename is available since SDL 3.0.0.";
|
||||
my $str = "This $symtypename is available since $projectshortname 3.0.0.";
|
||||
$sections{'Version'} = wordwrap(wikify($wikitype, $str)) . "\n";
|
||||
}
|
||||
}
|
||||
@@ -2916,7 +2928,7 @@ __EOF__
|
||||
$str .= ".\\\" Please report issues in this manpage's content at:\n";
|
||||
$str .= ".\\\" $bugreporturl\n";
|
||||
$str .= ".\\\" Please report issues in the generation of this manpage from the wiki at:\n";
|
||||
$str .= ".\\\" https://github.com/libsdl-org/SDL/issues/new?title=Misgenerated%20manpage%20for%20$sym\n";
|
||||
$str .= ".\\\" https://github.com/libsdl-org/SDL/issues/new?title=Misgenerated%20manpage%20for%20$sym\n"; # !!! FIXME: if this becomes a problem for other projects, we'll generalize this.
|
||||
$str .= ".\\\" $projectshortname can be found at $projecturl\n";
|
||||
|
||||
# Define a .URL macro. The "www.tmac" thing decides if we're using GNU roff (which has a .URL macro already), and if so, overrides the macro we just created.
|
||||
|
||||
@@ -164,6 +164,22 @@ function(get_git_head_revision _refspecvar _hashvar)
|
||||
"${GIT_DATA}/grabRef.cmake" @ONLY)
|
||||
include("${GIT_DATA}/grabRef.cmake")
|
||||
|
||||
# Fallback for reftable or other storage formats
|
||||
if(NOT HEAD_HASH OR HEAD_HASH STREQUAL "")
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND)
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE HEAD_HASH
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT res EQUAL 0)
|
||||
set(HEAD_HASH "")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(${_refspecvar}
|
||||
"${HEAD_REF}"
|
||||
PARENT_SCOPE)
|
||||
|
||||
@@ -25,19 +25,21 @@ if(HEAD_CONTENTS MATCHES "ref")
|
||||
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
||||
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
||||
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
||||
else()
|
||||
elseif(EXISTS "@GIT_DIR@/packed-refs")
|
||||
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
||||
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
||||
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
||||
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
elseif(EXISTS "@GIT_DIR@/reftable/tables.list")
|
||||
configure_file("@GIT_DIR@/reftable/tables.list" "@GIT_DATA@/reftable-tables.list" COPYONLY)
|
||||
endif()
|
||||
else()
|
||||
# detached HEAD
|
||||
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
||||
endif()
|
||||
|
||||
if(NOT HEAD_HASH)
|
||||
if(NOT HEAD_HASH AND EXISTS "@GIT_DATA@/head-ref")
|
||||
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
||||
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
||||
endif()
|
||||
|
||||
+20
-6
@@ -3,6 +3,9 @@
|
||||
include(CheckCCompilerFlag)
|
||||
include(CheckCSourceCompiles)
|
||||
include(CMakePushCheckState)
|
||||
if(NOT CMAKE_VERSION VERSION_LESS "3.18")
|
||||
include(CheckLinkerFlag)
|
||||
endif()
|
||||
|
||||
macro(sdl_calculate_derived_version_variables MAJOR MINOR MICRO)
|
||||
set(SO_VERSION_MAJOR "0")
|
||||
@@ -241,11 +244,14 @@ function(sdl_check_project_in_subfolder relative_subfolder name vendored_option)
|
||||
endfunction()
|
||||
|
||||
macro(sdl_check_linker_flag flag var)
|
||||
# FIXME: Use CheckLinkerFlag module once cmake minimum version >= 3.18
|
||||
cmake_push_check_state(RESET)
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS "${flag}")
|
||||
check_c_source_compiles("int main() { return 0; }" ${var} FAIL_REGEX "(unsupported|syntax error|unrecognized option)")
|
||||
cmake_pop_check_state()
|
||||
if(NOT CMAKE_VERSION VERSION_LESS "3.18")
|
||||
check_linker_flag(C "${flag}" "${var}")
|
||||
else()
|
||||
cmake_push_check_state(RESET)
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS "${flag}")
|
||||
check_c_source_compiles("int main() { return 0; }" ${var} FAIL_REGEX "(unsupported|syntax error|unrecognized option)")
|
||||
cmake_pop_check_state()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(SDL_detect_linker)
|
||||
@@ -283,7 +289,6 @@ endfunction()
|
||||
function(sdl_target_link_options_no_undefined TARGET)
|
||||
if(NOT MSVC AND NOT CMAKE_SYSTEM_NAME MATCHES ".*OpenBSD.*")
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang")
|
||||
target_link_options(${TARGET} PRIVATE "-Wl,-undefined,error")
|
||||
else()
|
||||
sdl_check_linker_flag("-Wl,--no-undefined" HAVE_WL_NO_UNDEFINED)
|
||||
if(HAVE_WL_NO_UNDEFINED AND NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") AND WIN32))
|
||||
@@ -318,6 +323,15 @@ function(sdl_add_warning_options TARGET)
|
||||
else()
|
||||
target_compile_options(${TARGET} PRIVATE -Werror)
|
||||
endif()
|
||||
get_property(target_type TARGET ${TARGET} PROPERTY TYPE)
|
||||
if(NOT (APPLE OR MSVC))
|
||||
if(target_type MATCHES "SHARED_LIBRARY|MODULE_LIBRARY")
|
||||
sdl_check_linker_flag("-Wl,-fatal-warnings" HAVE_WL_FATAL_WARNINGS)
|
||||
if(HAVE_WL_FATAL_WARNINGS)
|
||||
target_link_options(${TARGET} PRIVATE "-Wl,-fatal-warnings")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
SDL_net: A simple networking library for use with SDL
|
||||
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
|
||||
+532
-253
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
SDL_net: A simple networking library for use with SDL
|
||||
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
@@ -171,6 +171,7 @@ static int WindowsPoll(struct pollfd *fds, unsigned int nfds, int timeout)
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <net/if.h>
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
@@ -179,7 +180,11 @@ static int WindowsPoll(struct pollfd *fds, unsigned int nfds, int timeout)
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef SDL_PLATFORM_ANDROID
|
||||
#if defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_ANDROID)
|
||||
#define USE_NETLINK 1
|
||||
#endif
|
||||
|
||||
#ifdef USE_NETLINK
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
#else
|
||||
@@ -206,6 +211,14 @@ int NET_Version(void)
|
||||
return SDL_NET_VERSION;
|
||||
}
|
||||
|
||||
typedef enum NET_AddressType
|
||||
{
|
||||
NET_ADDRTYPE_UNKNOWN=-1,
|
||||
NET_ADDRTYPE_UNICAST,
|
||||
NET_ADDRTYPE_MULTICAST,
|
||||
NET_ADDRTYPE_BROADCAST
|
||||
} NET_AddressType;
|
||||
|
||||
struct NET_Address
|
||||
{
|
||||
char *hostname;
|
||||
@@ -213,13 +226,24 @@ struct NET_Address
|
||||
char *errstr;
|
||||
SDL_AtomicInt refcount;
|
||||
SDL_AtomicInt status; // This is actually a NET_Status.
|
||||
NET_AddressType type;
|
||||
struct addrinfo *ainfo;
|
||||
NET_Address *resolver_next; // a linked list for the resolution job queue.
|
||||
};
|
||||
|
||||
typedef struct NetworkInterfaces
|
||||
{
|
||||
char *name;
|
||||
int index;
|
||||
NET_Address *address;
|
||||
NET_Address *broadcast;
|
||||
} NetworkInterfaces;
|
||||
|
||||
|
||||
#define MIN_RESOLVER_THREADS 2
|
||||
#define MAX_RESOLVER_THREADS 10
|
||||
|
||||
// Address resolver state...
|
||||
static NET_Address *resolver_queue = NULL;
|
||||
static SDL_Thread *resolver_threads[MAX_RESOLVER_THREADS];
|
||||
static SDL_Mutex *resolver_lock = NULL;
|
||||
@@ -229,6 +253,13 @@ static SDL_AtomicInt resolver_num_threads;
|
||||
static SDL_AtomicInt resolver_num_requests;
|
||||
static SDL_AtomicInt resolver_percent_loss;
|
||||
|
||||
// Network interface state...
|
||||
static SDL_InitState interface_init;
|
||||
static SDL_RWLock *interface_rwlock = NULL;
|
||||
static int num_interfaces = 0;
|
||||
static NetworkInterfaces *interfaces = NULL;
|
||||
static SDL_AtomicInt interfaces_have_changed;
|
||||
|
||||
// between lo and hi (inclusive; it can return lo or hi itself, too!).
|
||||
static int RandomNumberBetween(const int lo, const int hi)
|
||||
{
|
||||
@@ -326,6 +357,470 @@ static bool SetGetAddrInfoErrorBool(const char *msg, int err)
|
||||
return false;
|
||||
}
|
||||
|
||||
static int MakeSocketNonblocking(Socket handle)
|
||||
{
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
DWORD one = 1;
|
||||
return ioctlsocket(handle, FIONBIO, &one);
|
||||
#else
|
||||
return fcntl(handle, F_SETFL, fcntl(handle, F_GETFL, 0) | O_NONBLOCK);
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool WouldBlock(const int err)
|
||||
{
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
return (err == WSAEWOULDBLOCK);
|
||||
#else
|
||||
return ((err == EWOULDBLOCK) || (err == EAGAIN) || (err == EINPROGRESS));
|
||||
#endif
|
||||
}
|
||||
|
||||
static NET_Address *CreateSDLNetAddrFromSockAddr(const struct sockaddr *saddr, SockLen saddrlen);
|
||||
|
||||
|
||||
|
||||
/* Network interface enumeration... */
|
||||
static void FreeNetworkInterfaces(NetworkInterfaces *ifaces, int num_ifaces)
|
||||
{
|
||||
for (int i = 0; i < num_ifaces; i++) {
|
||||
NET_UnrefAddress(ifaces[i].address);
|
||||
NET_UnrefAddress(ifaces[i].broadcast);
|
||||
SDL_free(ifaces[i].name);
|
||||
}
|
||||
SDL_free(ifaces);
|
||||
}
|
||||
|
||||
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
static HANDLE interface_change_notifications_handle;
|
||||
|
||||
static VOID WINAPI NetworkInterfaceChangedCallback(PVOID ctx, PMIB_IPINTERFACE_ROW row, MIB_NOTIFICATION_TYPE type)
|
||||
{
|
||||
SDL_SetAtomicInt(&interfaces_have_changed, 1);
|
||||
}
|
||||
|
||||
static bool InitInterfaceChangeNotifications(void) // WINDOWS VERSION
|
||||
{
|
||||
// this would need to use NotifyAddrChange for Windows XP, but it doesn't work with IPv6 before Vista.
|
||||
//return (NotifyAddrChange(&addr_change_notification_handle, &overlapped) == ERROR_IO_PENDING);
|
||||
|
||||
// !!! FIXME: this function is available on Vista and later.
|
||||
return (NotifyIpInterfaceChange(AF_UNSPEC, NetworkInterfaceChangedCallback, NULL, FALSE, &interface_change_notifications_handle) == NO_ERROR);
|
||||
}
|
||||
|
||||
static void QuitInterfaceChangeNotifications(void) // WINDOWS VERSION
|
||||
{
|
||||
CancelMibChangeNotify2(interface_change_notifications_handle);
|
||||
interface_change_notifications_handle = 0;
|
||||
}
|
||||
|
||||
static void RefreshInterfaces(void) // WINDOWS VERSION
|
||||
{
|
||||
// MSDN docs say start with a 15K buffer, which usually works on the first
|
||||
// try, instead of trying to query for size, allocate, and then retry,
|
||||
// since this tends to be more expensive.
|
||||
ULONG buflen = 15 * 1024;
|
||||
IP_ADAPTER_ADDRESSES *addrs = NULL;
|
||||
ULONG rc;
|
||||
|
||||
do {
|
||||
SDL_free(addrs);
|
||||
addrs = (IP_ADAPTER_ADDRESSES *) SDL_malloc(buflen);
|
||||
if (!addrs) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ULONG flags = GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_FRIENDLY_NAME;
|
||||
rc = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, addrs, &buflen);
|
||||
} while (rc == ERROR_BUFFER_OVERFLOW);
|
||||
|
||||
if (rc != NO_ERROR) {
|
||||
SDL_free(addrs);
|
||||
return;
|
||||
}
|
||||
|
||||
int new_num_interfaces = 0;
|
||||
for (IP_ADAPTER_ADDRESSES *i = addrs; i != NULL; i = i->Next) {
|
||||
for (IP_ADAPTER_UNICAST_ADDRESS *j = i->FirstUnicastAddress; j != NULL; j = j->Next) {
|
||||
new_num_interfaces++;
|
||||
}
|
||||
}
|
||||
|
||||
NetworkInterfaces *new_interfaces = (NetworkInterfaces *) SDL_calloc(new_num_interfaces + 1, sizeof (*new_interfaces));
|
||||
if (!new_interfaces) {
|
||||
SDL_free(addrs);
|
||||
return;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
for (IP_ADAPTER_ADDRESSES *i = addrs; i != NULL; i = i->Next) {
|
||||
for (IP_ADAPTER_UNICAST_ADDRESS *j = i->FirstUnicastAddress; j != NULL; j = j->Next) {
|
||||
NET_Address *addr = CreateSDLNetAddrFromSockAddr(j->Address.lpSockaddr, j->Address.iSockaddrLength);
|
||||
if (addr) {
|
||||
new_interfaces[count].address = addr;
|
||||
if (j->Address.lpSockaddr->sa_family == AF_INET6) {
|
||||
new_interfaces[count].index = i->Ipv6IfIndex;
|
||||
} else if (j->Address.lpSockaddr->sa_family == AF_INET) { // if this is IPv4, calculate the broadcast address.
|
||||
SOCKADDR_IN bcast;
|
||||
SDL_assert(j->Address.iSockaddrLength == sizeof (bcast));
|
||||
SDL_memcpy(&bcast, (const SOCKADDR_IN *) j->Address.lpSockaddr, sizeof (SOCKADDR_IN));
|
||||
bcast.sin_addr.S_un.S_addr |= htonl(~((1 << (32 - j->OnLinkPrefixLength)) - 1));
|
||||
new_interfaces[count].broadcast = CreateSDLNetAddrFromSockAddr((const struct sockaddr *) &bcast, sizeof (bcast));
|
||||
new_interfaces[count].broadcast->type = NET_ADDRTYPE_BROADCAST;
|
||||
new_interfaces[count].index = i->IfIndex;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new_num_interfaces = count; // in case we dropped one somewhere.
|
||||
|
||||
SDL_LockRWLockForWriting(interface_rwlock);
|
||||
NetworkInterfaces *old_interfaces = interfaces;
|
||||
const int old_num_interfaces = num_interfaces;
|
||||
interfaces = new_interfaces;
|
||||
num_interfaces = new_num_interfaces;
|
||||
SDL_UnlockRWLock(interface_rwlock);
|
||||
FreeNetworkInterfaces(old_interfaces, old_num_interfaces);
|
||||
|
||||
SDL_free(addrs);
|
||||
}
|
||||
|
||||
#elif defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_ANDROID) || defined(SDL_PLATFORM_APPLE) || defined(SDL_PLATFORM_FREEBSD) || defined(SDL_PLATFORM_OPENBSD) || defined(SDL_PLATFORM_NETBSD)
|
||||
|
||||
// AF_NETLINK covers Linux (and by extension Android). PF_ROUTE covers the BSDs (and by extension Apple platforms).
|
||||
// This doesn't cover all Unix platforms that ever existed, but this hits just about everything that is still being maintained seriously.
|
||||
|
||||
static SDL_Thread *interface_change_notifications_thread = NULL;
|
||||
static SDL_AtomicInt interface_change_notifications_flag; // !!! FIXME
|
||||
|
||||
static int SDLCALL LinuxInterfaceChangeNotificationThread(void *data)
|
||||
{
|
||||
#ifdef USE_NETLINK
|
||||
const int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
|
||||
#else
|
||||
const int fd = socket(PF_ROUTE, SOCK_RAW, 0);
|
||||
#endif
|
||||
if (fd == -1) {
|
||||
return 0; // oh well.
|
||||
}
|
||||
|
||||
// !!! FIXME: don't make this non-blocking, find a more efficient way to terminate the thread.
|
||||
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
#ifdef USE_NETLINK
|
||||
struct sockaddr_nl addr;
|
||||
SDL_zero(addr);
|
||||
addr.nl_family = AF_NETLINK;
|
||||
addr.nl_pid = getpid();
|
||||
addr.nl_groups = RTMGRP_LINK|RTMGRP_IPV4_IFADDR|RTMGRP_IPV6_IFADDR;
|
||||
if (bind(fd, (struct sockaddr *) &addr, sizeof (addr)) == -1) {
|
||||
close(fd);
|
||||
return 0; // oh well.
|
||||
}
|
||||
#elif defined(RO_MSGFILTER)
|
||||
const unsigned char filter[] = { RTM_IFANNOUNCE, RTM_IFINFO, RTM_NEWADDR, RTM_DELADDR, RTM_CHGADDR };
|
||||
setsockopt(fd, PF_ROUTE, RO_MSGFILTER, &filter, sizeof (filter));
|
||||
#endif
|
||||
|
||||
while (SDL_GetAtomicInt(&interface_change_notifications_flag) == 0) {
|
||||
Uint8 buf[8192];
|
||||
struct iovec iov = { buf, sizeof (buf) };
|
||||
struct msghdr msg;
|
||||
SDL_zero(msg);
|
||||
msg.msg_iov = &iov;
|
||||
msg.msg_iovlen = 1;
|
||||
|
||||
#ifdef USE_NETLINK
|
||||
struct sockaddr_nl sa;
|
||||
SDL_zero(sa);
|
||||
msg.msg_name = &sa;
|
||||
msg.msg_namelen = sizeof (sa);
|
||||
#endif
|
||||
|
||||
const ssize_t br = recvmsg(fd, &msg, 0);
|
||||
if (br < 0) {
|
||||
if (WouldBlock(LastSocketError())) {
|
||||
SDL_Delay(300);
|
||||
continue;
|
||||
}
|
||||
// quit if there's a failure. Presumably this is because another thread close()'d the socket, to unblock the thread and request termination.
|
||||
break;
|
||||
}
|
||||
|
||||
// we don't currently bother parsing for specifics, we just use this as a signal to reenumerate interfaces.
|
||||
//for (struct nlmsghdr *i = buf; NLMSG_OK(i, br); i = NLMSG_NEXT(i, br)) {}
|
||||
SDL_Log("Network interfaces changed!");
|
||||
SDL_SetAtomicInt(&interfaces_have_changed, 1);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool InitInterfaceChangeNotifications(void) // LINUX/BSD VERSION
|
||||
{
|
||||
interface_change_notifications_thread = SDL_CreateThread(LinuxInterfaceChangeNotificationThread, "SDLNetIfaceEnum", NULL);
|
||||
return (interface_change_notifications_thread != NULL);
|
||||
}
|
||||
|
||||
static void QuitInterfaceChangeNotifications(void) // LINUX/BSD VERSION
|
||||
{
|
||||
if (interface_change_notifications_thread) {
|
||||
SDL_SetAtomicInt(&interface_change_notifications_flag, 1);
|
||||
SDL_WaitThread(interface_change_notifications_thread, NULL);
|
||||
SDL_SetAtomicInt(&interface_change_notifications_flag, 0);
|
||||
}
|
||||
interface_change_notifications_thread = NULL;
|
||||
}
|
||||
|
||||
static void RefreshInterfaces(void) // LINUX/BSD VERSION
|
||||
{
|
||||
#ifdef USE_NETLINK
|
||||
// Android has getifaddrs() in Android 24, but we still target 21, so do it the hard way. Since this works on normal Linux, we'll just use it there, too.
|
||||
const int sock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
|
||||
if (sock < 0) {
|
||||
return; // oh well.
|
||||
}
|
||||
|
||||
fcntl(sock, F_SETFL, fcntl(sock, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
// Ask for the address information.
|
||||
typedef struct reqstruct
|
||||
{
|
||||
struct nlmsghdr header;
|
||||
struct ifaddrmsg msg;
|
||||
} reqstruct;
|
||||
|
||||
reqstruct req;
|
||||
SDL_zero(req);
|
||||
req.header.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
|
||||
req.header.nlmsg_type = RTM_GETADDR;
|
||||
req.header.nlmsg_len = NLMSG_LENGTH(sizeof (req.msg));
|
||||
req.msg.ifa_family = AF_UNSPEC;
|
||||
|
||||
if (send(sock, &req, req.header.nlmsg_len, 0) != req.header.nlmsg_len) {
|
||||
close(sock);
|
||||
return; // oh well.
|
||||
}
|
||||
|
||||
int new_num_interfaces = 0;
|
||||
NetworkInterfaces *new_interfaces = NULL;
|
||||
|
||||
Uint8 buffer[64 * 1024];
|
||||
ssize_t br;
|
||||
while ((br = recv(sock, buffer, sizeof (buffer), 0)) > 0) {
|
||||
for (const struct nlmsghdr *header = (const struct nlmsghdr *) buffer; NLMSG_OK(header, (size_t) br); header = NLMSG_NEXT(header, br)) {
|
||||
if (header->nlmsg_type == NLMSG_DONE) {
|
||||
goto succeeded; // we got it all.
|
||||
} else if (header->nlmsg_type == NLMSG_ERROR) {
|
||||
goto failed; // uhoh.
|
||||
} else if (header->nlmsg_type == RTM_NEWADDR) {
|
||||
// strictly speaking, one interface can have multiple IP addresses, so you might have multiple addresses with the same interface index.
|
||||
void *ptr = SDL_realloc(new_interfaces, sizeof (*new_interfaces) * (new_num_interfaces + 1));
|
||||
if (!ptr) {
|
||||
goto failed;
|
||||
}
|
||||
new_interfaces = (NetworkInterfaces *) ptr;
|
||||
NetworkInterfaces *iface = &new_interfaces[new_num_interfaces];
|
||||
SDL_zerop(iface);
|
||||
|
||||
const struct ifaddrmsg *msg = (const struct ifaddrmsg *) (NLMSG_DATA(header));
|
||||
size_t payload_len = IFA_PAYLOAD(header);
|
||||
for (const struct rtattr *attr = IFA_RTA(msg); RTA_OK(attr, payload_len); attr = RTA_NEXT(attr, payload_len)) {
|
||||
const bool isbroadcast = (attr->rta_type == IFA_BROADCAST);
|
||||
if (isbroadcast || (attr->rta_type == IFA_ADDRESS)) {
|
||||
// this gives us the raw bytes of an address, but not the actual sockaddr_* layout, so we have to go with known protocols. :/
|
||||
AddressStorage addrstorage;
|
||||
SockLen addrlen = 0;
|
||||
SDL_zero(addrstorage);
|
||||
addrstorage.ss_family = msg->ifa_family;
|
||||
if (addrstorage.ss_family == AF_INET) {
|
||||
struct sockaddr_in *sa = (struct sockaddr_in *) &addrstorage;
|
||||
SDL_memcpy(&sa->sin_addr, RTA_DATA(attr), RTA_PAYLOAD(attr));
|
||||
addrlen = sizeof (*sa);
|
||||
} else if (addrstorage.ss_family == AF_INET6) {
|
||||
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &addrstorage;
|
||||
SDL_memcpy(&sa6->sin6_addr, RTA_DATA(attr), RTA_PAYLOAD(attr));
|
||||
addrlen = sizeof (*sa6);
|
||||
} else {
|
||||
continue; // unknown protocol family.
|
||||
}
|
||||
|
||||
NET_Address **paddr = isbroadcast ? &iface->broadcast : &iface->address;
|
||||
SDL_assert(*paddr == NULL); // shouldn't be two of these attributes on a single RTM_NEWADDR.
|
||||
*paddr = CreateSDLNetAddrFromSockAddr((const struct sockaddr *) &addrstorage, addrlen);
|
||||
}
|
||||
}
|
||||
|
||||
if (iface->address) {
|
||||
iface->index = msg->ifa_index;
|
||||
if (iface->broadcast) {
|
||||
iface->broadcast->type = NET_ADDRTYPE_BROADCAST;
|
||||
}
|
||||
|
||||
char interface_name[IF_NAMESIZE];
|
||||
if (if_indextoname((unsigned int) iface->index, interface_name) == NULL) { // miraculously, this function is in Android 21; nothing else is, though! We could have done this with netlink too, but this is the easy button.
|
||||
interface_name[0] = '\0';
|
||||
}
|
||||
|
||||
iface->name = SDL_strdup(interface_name);
|
||||
if (!iface->name) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
new_num_interfaces++;
|
||||
} else {
|
||||
NET_UnrefAddress(iface->broadcast); // just in case.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
succeeded:
|
||||
close(sock);
|
||||
SDL_LockRWLockForWriting(interface_rwlock);
|
||||
NetworkInterfaces *old_interfaces = interfaces;
|
||||
const int old_num_interfaces = num_interfaces;
|
||||
interfaces = new_interfaces;
|
||||
num_interfaces = new_num_interfaces;
|
||||
SDL_UnlockRWLock(interface_rwlock);
|
||||
FreeNetworkInterfaces(old_interfaces, old_num_interfaces);
|
||||
return;
|
||||
|
||||
failed:
|
||||
close(sock);
|
||||
FreeNetworkInterfaces(new_interfaces, new_num_interfaces);
|
||||
// if this was a failure case, oh well, old (maybe incorrect) ones will have to stand.
|
||||
#else
|
||||
struct ifaddrs *ifaddr = NULL;
|
||||
if (getifaddrs(&ifaddr) == -1) {
|
||||
return; // oh well.
|
||||
}
|
||||
|
||||
NetworkInterfaces *new_interfaces = NULL;
|
||||
int new_num_interfaces = 0;
|
||||
for (struct ifaddrs *i = ifaddr; i != NULL; i = i->ifa_next) {
|
||||
if (i->ifa_name != NULL) {
|
||||
new_num_interfaces++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!new_num_interfaces) {
|
||||
goto succeeded;
|
||||
}
|
||||
|
||||
new_interfaces = SDL_calloc(new_num_interfaces, sizeof (*new_interfaces));
|
||||
if (!new_interfaces) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
NetworkInterfaces *iface = &new_interfaces[0];
|
||||
for (struct ifaddrs *i = ifaddr; i != NULL; i = i->ifa_next, iface++) {
|
||||
if (i->ifa_name == NULL) {
|
||||
continue; // i guess.
|
||||
}
|
||||
|
||||
// !!! FIXME: getifaddrs doesn't return the sockaddr length, so we have to go with known protocols. :/
|
||||
if (i->ifa_addr->sa_family == AF_INET) {
|
||||
iface->address = CreateSDLNetAddrFromSockAddr(i->ifa_addr, sizeof (struct sockaddr_in));
|
||||
if (i->ifa_flags & IFF_BROADCAST) {
|
||||
iface->broadcast = CreateSDLNetAddrFromSockAddr(i->ifa_broadaddr, sizeof (struct sockaddr_in));
|
||||
}
|
||||
} else if (i->ifa_addr->sa_family == AF_INET6) {
|
||||
iface->address = CreateSDLNetAddrFromSockAddr(i->ifa_addr, sizeof (struct sockaddr_in6));
|
||||
} else {
|
||||
new_num_interfaces--;
|
||||
iface--;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (iface->address) {
|
||||
if (iface->broadcast) {
|
||||
iface->broadcast->type = NET_ADDRTYPE_BROADCAST;
|
||||
}
|
||||
|
||||
iface->index = (int) if_nametoindex(i->ifa_name);
|
||||
iface->name = SDL_strdup(i->ifa_name);
|
||||
if (!iface->name) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
char *ptr = SDL_strchr(iface->address->human_readable, '%'); // chop off interface name.
|
||||
if (ptr) {
|
||||
*ptr = '\0';
|
||||
}
|
||||
} else {
|
||||
NET_UnrefAddress(iface->broadcast); // just in case.
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
succeeded:
|
||||
if (ifaddr) {
|
||||
freeifaddrs(ifaddr);
|
||||
}
|
||||
|
||||
SDL_LockRWLockForWriting(interface_rwlock);
|
||||
NetworkInterfaces *old_interfaces = interfaces;
|
||||
const int old_num_interfaces = num_interfaces;
|
||||
interfaces = new_interfaces;
|
||||
num_interfaces = new_num_interfaces;
|
||||
SDL_UnlockRWLock(interface_rwlock);
|
||||
FreeNetworkInterfaces(old_interfaces, old_num_interfaces);
|
||||
return;
|
||||
|
||||
failed:
|
||||
if (ifaddr) {
|
||||
freeifaddrs(ifaddr);
|
||||
}
|
||||
FreeNetworkInterfaces(new_interfaces, new_num_interfaces);
|
||||
// if this was a failure case, oh well, old (maybe incorrect) ones will have to stand.
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
#error implement me for your platform.
|
||||
#endif
|
||||
|
||||
|
||||
static bool InterfacesReady(void)
|
||||
{
|
||||
if (SDL_ShouldInit(&interface_init)) {
|
||||
if (!interface_rwlock) {
|
||||
interface_rwlock = SDL_CreateRWLock();
|
||||
}
|
||||
if (!interface_rwlock || !InitInterfaceChangeNotifications()) {
|
||||
SDL_SetInitialized(&interface_init, false);
|
||||
return false;
|
||||
}
|
||||
SDL_SetAtomicInt(&interfaces_have_changed, 1); // force refresh at start.
|
||||
SDL_SetInitialized(&interface_init, true);
|
||||
}
|
||||
|
||||
// if there were changes, mark it as unchanged and then we'll enumerate. So if it changes again while enumerating, we'll pick that up next time.
|
||||
if (SDL_CompareAndSwapAtomicInt(&interfaces_have_changed, 1, 0)) {
|
||||
RefreshInterfaces();
|
||||
#if 0
|
||||
SDL_Log("NETWORK INTERFACE REFRESH");
|
||||
for (int i = 0; i < num_interfaces; i++) {
|
||||
const NetworkInterfaces *iface = &interfaces[i];
|
||||
SDL_Log("Interface %d ('%s')", iface->index, iface->name);
|
||||
SDL_Log(" - address %s", iface->address->human_readable);
|
||||
if (iface->broadcast) {
|
||||
SDL_Log(" - broadcast %s", iface->broadcast->human_readable);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// this blocks!
|
||||
static NET_Status ResolveAddress(NET_Address *addr)
|
||||
{
|
||||
@@ -354,6 +849,8 @@ static NET_Status ResolveAddress(NET_Address *addr)
|
||||
|
||||
addr->human_readable = SDL_strdup(buf);
|
||||
addr->ainfo = ainfo;
|
||||
addr->type = NET_ADDRTYPE_UNICAST;
|
||||
|
||||
return NET_SUCCESS; // success (zero means "still in progress").
|
||||
}
|
||||
|
||||
@@ -479,6 +976,8 @@ static NET_Address *CreateSDLNetAddrFromSockAddr(const struct sockaddr *saddr, S
|
||||
return NULL;
|
||||
}
|
||||
|
||||
addr->type = NET_ADDRTYPE_UNICAST; // until told otherwise.
|
||||
|
||||
addr->human_readable = SDL_strdup(hostbuf);
|
||||
if (!addr->human_readable) {
|
||||
freeaddrinfo(addr->ainfo);
|
||||
@@ -588,6 +1087,26 @@ void NET_Quit(void)
|
||||
|
||||
resolver_queue = NULL;
|
||||
|
||||
if (SDL_ShouldQuit(&interface_init)) {
|
||||
QuitInterfaceChangeNotifications();
|
||||
SDL_SetAtomicInt(&interfaces_have_changed, 0);
|
||||
if (interfaces) {
|
||||
FreeNetworkInterfaces(interfaces, num_interfaces);
|
||||
}
|
||||
if (interface_rwlock) {
|
||||
SDL_DestroyRWLock(interface_rwlock);
|
||||
}
|
||||
interfaces = NULL;
|
||||
num_interfaces = 0;
|
||||
interface_rwlock = NULL;
|
||||
SDL_SetInitialized(&interface_init, false);
|
||||
}
|
||||
|
||||
// asserts to catch that these shouldn't have ever been set if we never initialized interface_init...
|
||||
SDL_assert(!interfaces);
|
||||
SDL_assert(!interface_rwlock);
|
||||
SDL_assert(num_interfaces == 0);
|
||||
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
WSACleanup();
|
||||
#endif
|
||||
@@ -770,41 +1289,9 @@ void NET_SimulateAddressResolutionLoss(int percent_loss)
|
||||
SDL_SetAtomicInt(&resolver_percent_loss, SDL_clamp(percent_loss, 0, 100));
|
||||
}
|
||||
|
||||
#ifdef SDL_PLATFORM_ANDROID
|
||||
typedef struct EnumerateNetAddrTableData
|
||||
{
|
||||
NET_Address **retval;
|
||||
int count;
|
||||
int real_count;
|
||||
} EnumerateNetAddrTableData;
|
||||
|
||||
static void SDLCALL EnumerateNetAddrTable(void *userdata, SDL_PropertiesID props, const char *name)
|
||||
{
|
||||
NET_Address *netaddr = SDL_GetPointerProperty(props, name, NULL);
|
||||
if (netaddr) {
|
||||
NET_RefAddress(netaddr);
|
||||
EnumerateNetAddrTableData *data = (EnumerateNetAddrTableData *) userdata;
|
||||
SDL_assert(data->real_count < data->count);
|
||||
data->retval[data->real_count++] = netaddr;
|
||||
}
|
||||
}
|
||||
|
||||
static void SDLCALL CleanupNetAddrTable(void *userdata, void *value)
|
||||
{
|
||||
NET_UnrefAddress((NET_Address *) value);
|
||||
}
|
||||
|
||||
static int SDLCALL CompareNetAddrQsort(const void *a, const void *b)
|
||||
{
|
||||
return NET_CompareAddresses(*(NET_Address **) a, *(NET_Address **) b);
|
||||
}
|
||||
#endif
|
||||
|
||||
NET_Address **NET_GetLocalAddresses(int *num_addresses)
|
||||
{
|
||||
int count = 0;
|
||||
NET_Address **retval = NULL;
|
||||
|
||||
int dummy_addresses;
|
||||
if (!num_addresses) {
|
||||
num_addresses = &dummy_addresses;
|
||||
@@ -812,209 +1299,20 @@ NET_Address **NET_GetLocalAddresses(int *num_addresses)
|
||||
|
||||
*num_addresses = 0;
|
||||
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
// !!! FIXME: maybe LoadLibrary(iphlpapi) on the first call, since most
|
||||
// !!! FIXME: things won't ever use this.
|
||||
NET_Address **retval = NULL;
|
||||
|
||||
// MSDN docs say start with a 15K buffer, which usually works on the first
|
||||
// try, instead of trying to query for size, allocate, and then retry,
|
||||
// since this tends to be more expensive.
|
||||
ULONG buflen = 15 * 1024;
|
||||
IP_ADAPTER_ADDRESSES *addrs = NULL;
|
||||
ULONG rc;
|
||||
|
||||
do {
|
||||
SDL_free(addrs);
|
||||
addrs = (IP_ADAPTER_ADDRESSES *) SDL_malloc(buflen);
|
||||
if (!addrs) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const ULONG flags = GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_FRIENDLY_NAME;
|
||||
rc = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, addrs, &buflen);
|
||||
} while (rc == ERROR_BUFFER_OVERFLOW);
|
||||
|
||||
if (rc != NO_ERROR) {
|
||||
SetSocketError("GetAdaptersAddresses failed", rc);
|
||||
SDL_free(addrs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (IP_ADAPTER_ADDRESSES *i = addrs; i != NULL; i = i->Next) {
|
||||
for (IP_ADAPTER_UNICAST_ADDRESS *j = i->FirstUnicastAddress; j != NULL; j = j->Next) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
retval = (NET_Address **) SDL_calloc(((size_t)count) + 1, sizeof (NET_Address *));
|
||||
if (!retval) {
|
||||
SDL_free(addrs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
count = 0;
|
||||
for (IP_ADAPTER_ADDRESSES *i = addrs; i != NULL; i = i->Next) {
|
||||
for (IP_ADAPTER_UNICAST_ADDRESS *j = i->FirstUnicastAddress; j != NULL; j = j->Next) {
|
||||
NET_Address *addr = CreateSDLNetAddrFromSockAddr(j->Address.lpSockaddr, j->Address.iSockaddrLength);
|
||||
if (addr) {
|
||||
retval[count++] = addr;
|
||||
if (InterfacesReady()) {
|
||||
SDL_LockRWLockForReading(interface_rwlock);
|
||||
const int total = num_interfaces;
|
||||
retval = (NET_Address **) SDL_malloc((total + 1) * sizeof (NET_Address *));
|
||||
if (retval) {
|
||||
for (int i = 0; i < total; i++) {
|
||||
retval[i] = NET_RefAddress(interfaces[i].address);
|
||||
}
|
||||
retval[total] = NULL;
|
||||
*num_addresses = total;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_free(addrs);
|
||||
|
||||
#elif defined(SDL_PLATFORM_ANDROID)
|
||||
// Android has getifaddrs() in Android 24, but we still target 21, so do it the hard way.
|
||||
const int sock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
|
||||
if (sock < 0) {
|
||||
SetLastSocketError("Failed to create AF_NETLINK socket");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fcntl(sock, F_SETFL, fcntl(sock, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
// Ask for the address information.
|
||||
typedef struct reqstruct
|
||||
{
|
||||
struct nlmsghdr header;
|
||||
struct ifaddrmsg msg;
|
||||
} reqstruct;
|
||||
|
||||
reqstruct req;
|
||||
SDL_zero(req);
|
||||
req.header.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
|
||||
req.header.nlmsg_type = RTM_GETADDR;
|
||||
req.header.nlmsg_len = NLMSG_LENGTH(sizeof (req.msg));
|
||||
req.msg.ifa_family = AF_UNSPEC;
|
||||
|
||||
if (send(sock, &req, req.header.nlmsg_len, 0) != req.header.nlmsg_len) {
|
||||
SetLastSocketError("Failed to send request to AF_NETLINK socket");
|
||||
close(sock);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// this can produce duplicate entries for various reasons; use an SDL_PropertiesID to keep a unique table.
|
||||
const SDL_PropertiesID addr_table = SDL_CreateProperties();
|
||||
if (!addr_table) {
|
||||
close(sock);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Uint8 buffer[64 * 1024];
|
||||
ssize_t br;
|
||||
while ((br = recv(sock, buffer, sizeof (buffer), 0)) > 0) {
|
||||
for (const struct nlmsghdr *header = (const struct nlmsghdr *) buffer; NLMSG_OK(header, (size_t) br); header = NLMSG_NEXT(header, br)) {
|
||||
if (header->nlmsg_type == NLMSG_DONE) {
|
||||
break; // we got it all.
|
||||
} else if (header->nlmsg_type == NLMSG_ERROR) {
|
||||
// uhoh.
|
||||
NET_FreeLocalAddresses(retval);
|
||||
retval = NULL;
|
||||
break;
|
||||
} else if (header->nlmsg_type == RTM_NEWADDR) {
|
||||
const struct ifaddrmsg *msg = (const struct ifaddrmsg *) (NLMSG_DATA(header));
|
||||
size_t payload_len = IFA_PAYLOAD(header);
|
||||
for (const struct rtattr *attr = IFA_RTA(msg); RTA_OK(attr, payload_len); attr = RTA_NEXT(attr, payload_len)) {
|
||||
if ((attr->rta_type != IFA_ADDRESS) && (attr->rta_type != IFA_LOCAL)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// this gives us the raw bytes of an address, but not the actual sockaddr_* layout, so we have to go with known protocols. :/
|
||||
AddressStorage addrstorage;
|
||||
SockLen addrlen = 0;
|
||||
SDL_zero(addrstorage);
|
||||
addrstorage.ss_family = msg->ifa_family;
|
||||
if (addrstorage.ss_family == AF_INET) {
|
||||
struct sockaddr_in *sa = (struct sockaddr_in *) &addrstorage;
|
||||
SDL_memcpy(&sa->sin_addr, RTA_DATA(attr), RTA_PAYLOAD(attr));
|
||||
addrlen = sizeof (*sa);
|
||||
} else if (addrstorage.ss_family == AF_INET6) {
|
||||
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &addrstorage;
|
||||
SDL_memcpy(&sa6->sin6_addr, RTA_DATA(attr), RTA_PAYLOAD(attr));
|
||||
addrlen = sizeof (*sa6);
|
||||
} else {
|
||||
continue; // unknown protocol family.
|
||||
}
|
||||
|
||||
NET_Address *netaddr = CreateSDLNetAddrFromSockAddr((const struct sockaddr *) &addrstorage, addrlen);
|
||||
if (!netaddr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const char *key = NET_GetAddressString(netaddr);
|
||||
if (!key) {
|
||||
NET_UnrefAddress(netaddr);
|
||||
} else {
|
||||
SDL_SetPointerPropertyWithCleanup(addr_table, key, netaddr, CleanupNetAddrTable, NULL);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close(sock);
|
||||
|
||||
retval = (NET_Address **) SDL_calloc(count + 1, sizeof (NET_Address *));
|
||||
if (retval) {
|
||||
EnumerateNetAddrTableData data = { retval, count, 0 };
|
||||
SDL_EnumerateProperties(addr_table, EnumerateNetAddrTable, &data);
|
||||
count = data.real_count;
|
||||
SDL_qsort(retval, count, sizeof (*retval), CompareNetAddrQsort);
|
||||
}
|
||||
|
||||
SDL_DestroyProperties(addr_table); // will unref all addresses still in the table, but we took a reference too.
|
||||
|
||||
#else
|
||||
struct ifaddrs *ifaddr;
|
||||
if (getifaddrs(&ifaddr) == -1) {
|
||||
SDL_SetError("getifaddrs failed: %s", strerror(errno));
|
||||
return NULL; // oh well.
|
||||
}
|
||||
|
||||
for (struct ifaddrs *i = ifaddr; i != NULL; i = i->ifa_next) {
|
||||
if (i->ifa_name != NULL) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
retval = (NET_Address **) SDL_calloc(count + 1, sizeof (NET_Address *));
|
||||
if (!retval) {
|
||||
if (ifaddr) {
|
||||
freeifaddrs(ifaddr);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
count = 0;
|
||||
for (struct ifaddrs *i = ifaddr; i != NULL; i = i->ifa_next) {
|
||||
if (i->ifa_name != NULL) {
|
||||
NET_Address *addr = NULL;
|
||||
// !!! FIXME: getifaddrs doesn't return the sockaddr length, so we have to go with known protocols. :/
|
||||
if (i->ifa_addr->sa_family == AF_INET) {
|
||||
addr = CreateSDLNetAddrFromSockAddr(i->ifa_addr, sizeof (struct sockaddr_in));
|
||||
} else if (i->ifa_addr->sa_family == AF_INET6) {
|
||||
addr = CreateSDLNetAddrFromSockAddr(i->ifa_addr, sizeof (struct sockaddr_in6));
|
||||
}
|
||||
|
||||
if (addr) {
|
||||
retval[count++] = addr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ifaddr) {
|
||||
freeifaddrs(ifaddr);
|
||||
}
|
||||
#endif
|
||||
|
||||
*num_addresses = count;
|
||||
|
||||
// try to shrink allocation.
|
||||
void *ptr = SDL_realloc(retval, (((size_t) count) + 1) * sizeof (NET_Address *));
|
||||
if (ptr) {
|
||||
retval = (NET_Address **) ptr;
|
||||
SDL_UnlockRWLock(interface_rwlock);
|
||||
}
|
||||
|
||||
return retval;
|
||||
@@ -1074,25 +1372,6 @@ struct NET_StreamSocket
|
||||
Uint64 simulated_failure_until;
|
||||
};
|
||||
|
||||
static int MakeSocketNonblocking(Socket handle)
|
||||
{
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
DWORD one = 1;
|
||||
return ioctlsocket(handle, FIONBIO, &one);
|
||||
#else
|
||||
return fcntl(handle, F_SETFL, fcntl(handle, F_GETFL, 0) | O_NONBLOCK);
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool WouldBlock(const int err)
|
||||
{
|
||||
#ifdef SDL_PLATFORM_WINDOWS
|
||||
return (err == WSAEWOULDBLOCK) ? true : false;
|
||||
#else
|
||||
return ((err == EWOULDBLOCK) || (err == EAGAIN) || (err == EINPROGRESS)) ? true : false;
|
||||
#endif
|
||||
}
|
||||
|
||||
NET_StreamSocket *NET_CreateClient(NET_Address *addr, Uint16 port)
|
||||
{
|
||||
if (addr == NULL) {
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Simple DirectMedia Layer
|
||||
# Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||
# Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
|
||||
#
|
||||
# This software is provided 'as-is', without any express or implied
|
||||
# warranty. In no event will the authors be held liable for any damages
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ BEGIN
|
||||
VALUE "FileDescription", "SDL_net\0"
|
||||
VALUE "FileVersion", "3, 0, 0, 0\0"
|
||||
VALUE "InternalName", "SDL_net\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2025 Sam Lantinga\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2026 Sam Lantinga\0"
|
||||
VALUE "OriginalFilename", "SDL3_net.dll\0"
|
||||
VALUE "ProductName", "Simple DirectMedia Layer\0"
|
||||
VALUE "ProductVersion", "3, 0, 0, 0\0"
|
||||
|
||||
@@ -124,8 +124,10 @@ static void file_storage_save(void* storage, size_t start, size_t size)
|
||||
|
||||
static void file_storage_parent_save(void* storage, size_t start, size_t size)
|
||||
{
|
||||
struct file_storage* fstorage = (struct file_storage*)((struct file_storage*)storage)->filename;
|
||||
file_storage_save(fstorage, start, size);
|
||||
struct file_storage* fstorage = (struct file_storage*)storage;
|
||||
struct file_storage* fstorage_parent = (struct file_storage*)fstorage->filename;
|
||||
|
||||
file_storage_save(fstorage_parent, fstorage->offset + start, size);
|
||||
}
|
||||
|
||||
static void dummy_save(void* storage, size_t start, size_t size)
|
||||
|
||||
@@ -29,6 +29,7 @@ struct file_storage
|
||||
{
|
||||
uint8_t* data;
|
||||
size_t size;
|
||||
size_t offset;
|
||||
const char* filename;
|
||||
int first_access;
|
||||
};
|
||||
|
||||
@@ -1827,6 +1827,7 @@ m64p_error main_run(void)
|
||||
else if (l_ipaks[k] == &g_imempak) {
|
||||
mpk_storages[i].data = mpk.data + i * MEMPAK_SIZE;
|
||||
mpk_storages[i].size = MEMPAK_SIZE;
|
||||
mpk_storages[i].offset = i * MEMPAK_SIZE;
|
||||
mpk_storages[i].filename = (void*)&mpk; /* OK for isubfile_storage */
|
||||
|
||||
init_mempak(&g_dev.mempaks[i], &mpk_storages[i], &g_isubfile_storage);
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = git@github.com:/gonetz/GLideN64.git
|
||||
branch = master
|
||||
commit = 0ab1c5b819c96353a8571d8d5c324cc0cf0ff9f2
|
||||
parent = 0dce7ddaf4540b2df4f219bd8481268a2e69d004
|
||||
commit = 89617ddc015d75adb760dbc1a8ce4c40ad1b7b6a
|
||||
parent = 43a44e4d01af47d36b2b6c8c671460d88ae64ef4
|
||||
method = merge
|
||||
cmdver = 0.4.9
|
||||
|
||||
@@ -525,6 +525,14 @@ if(EGL)
|
||||
set(OPENGL_LIBRARIES ${EGL_LIB})
|
||||
else(EGL)
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||
add_compile_definitions(OS_FREEBSD)
|
||||
if(OPENGL_FOUND)
|
||||
include_directories(${OPENGL_INCLUDE_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include_directories(${OpenGL_INCLUDE_DIRS})
|
||||
link_directories(${OpenGL_LIBRARY_DIRS})
|
||||
add_definitions(${OpenGL_DEFINITIONS})
|
||||
|
||||
@@ -110,6 +110,11 @@ void DisplayWindow::closeWindow()
|
||||
m_bToggleFullscreen = false;
|
||||
}
|
||||
|
||||
void DisplayWindow::setInitialWindowSize(u32 width, u32 height)
|
||||
{
|
||||
m_initialWidth = width;
|
||||
m_initialHeight = height;
|
||||
}
|
||||
|
||||
void DisplayWindow::setWindowSize(u32 _width, u32 _height)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@ public:
|
||||
bool changeWindow();
|
||||
bool resizeWindow();
|
||||
void closeWindow();
|
||||
void setInitialWindowSize(u32 width, u32 height);
|
||||
void setWindowSize(u32 _width, u32 _height);
|
||||
void setCaptureScreen(const char * const _strDirectory);
|
||||
void setToggleFullscreen() { m_bToggleFullscreen = true; }
|
||||
@@ -55,6 +56,8 @@ protected:
|
||||
bool m_bAdjustScreen = false;
|
||||
|
||||
u32 m_buffersSwapCount = 0;
|
||||
u32 m_initialWidth = 0;
|
||||
u32 m_initialHeight = 0;
|
||||
u32 m_width = 0;
|
||||
u32 m_height = 0;
|
||||
u32 m_heightOffset = 0;
|
||||
|
||||
@@ -623,7 +623,7 @@ TxFilter::dmptx(uint8 *src, int width, int height, int rowStridePixel,
|
||||
if (!osal_path_existsW(tmpbuf.c_str()) && osal_mkdirp(tmpbuf.c_str()) != 0)
|
||||
return 0;
|
||||
|
||||
if (n64FmtSz._format == 0x2) {
|
||||
if ((n64FmtSz._format == 0x0 && n64FmtSz._size == 0x0) || n64FmtSz._format == 0x2) {
|
||||
wchar_t wbuf[256];
|
||||
tx_swprintf(wbuf, 256, wst("/%ls#%08X#%01X#%01X#%08X_ciByRGBA.png"), _ident.c_str(), r_crc64._texture, n64FmtSz._format, n64FmtSz._size, r_crc64._palette);
|
||||
tmpbuf.append(wbuf);
|
||||
|
||||
@@ -501,13 +501,12 @@ void ConfigDialog::setIniPath(const QString & _strIniPath, const QString & _strS
|
||||
|
||||
#ifdef M64P_GLIDENUI
|
||||
if (translationFiles.empty())
|
||||
ui->userInterfaceGroupBox->hide();
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ui->verticalLayout_4->removeItem(ui->userInterfaceSpacer);
|
||||
delete ui->userInterfaceSpacer;
|
||||
ui->userInterfaceGroupBox->hide();
|
||||
QSpacerItem* verticalSpacer = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||
ui->verticalLayout_4->addItem(verticalSpacer);
|
||||
}
|
||||
#endif
|
||||
|
||||
const QString currentTranslation = getTranslationFile();
|
||||
int listIndex = 0;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<class>ConfigDialog</class>
|
||||
<widget class="QDialog" name="ConfigDialog">
|
||||
<property name="windowModality">
|
||||
<enum>Qt::WindowModality::WindowModal</enum>
|
||||
<enum>Qt::WindowModal</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
@@ -25,7 +25,7 @@
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
@@ -389,7 +389,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -484,7 +484,7 @@
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item alignment="Qt::AlignmentFlag::AlignTop">
|
||||
<item alignment="Qt::AlignTop">
|
||||
<widget class="QLabel" name="aliasingOffLabel">
|
||||
<property name="text">
|
||||
<string>Off</string>
|
||||
@@ -510,10 +510,10 @@
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TickPosition::TicksBelow</enum>
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>1</number>
|
||||
@@ -528,10 +528,10 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -570,10 +570,10 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -592,7 +592,7 @@
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item alignment="Qt::AlignmentFlag::AlignTop">
|
||||
<item alignment="Qt::AlignTop">
|
||||
<widget class="QLabel" name="aliasingHighLabel">
|
||||
<property name="text">
|
||||
<string extracomment="The highest of a set of numbers">High</string>
|
||||
@@ -644,7 +644,7 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextInteractionFlag::LinksAccessibleByKeyboard|Qt::TextInteractionFlag::LinksAccessibleByMouse</set>
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -698,7 +698,7 @@
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item alignment="Qt::AlignmentFlag::AlignTop">
|
||||
<item alignment="Qt::AlignTop">
|
||||
<widget class="QLabel" name="anisotropicOffLabel">
|
||||
<property name="text">
|
||||
<string>Off</string>
|
||||
@@ -724,7 +724,7 @@
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="invertedAppearance">
|
||||
<bool>false</bool>
|
||||
@@ -733,7 +733,7 @@
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TickPosition::TicksBelow</enum>
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>2</number>
|
||||
@@ -748,10 +748,10 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -790,10 +790,10 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -812,7 +812,7 @@
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item alignment="Qt::AlignmentFlag::AlignTop">
|
||||
<item alignment="Qt::AlignTop">
|
||||
<widget class="QLabel" name="anisotropicHighLabel">
|
||||
<property name="text">
|
||||
<string extracomment="The highest of a set of numbers">High</string>
|
||||
@@ -881,7 +881,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_9">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -951,7 +951,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_11">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1029,7 +1029,7 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextInteractionFlag::LinksAccessibleByKeyboard|Qt::TextInteractionFlag::LinksAccessibleByMouse</set>
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -1225,7 +1225,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1285,10 +1285,10 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::Fixed</enum>
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1303,7 +1303,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1362,7 +1362,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_15">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1629,10 +1629,10 @@
|
||||
<string notr="true">color: rgba(0, 0, 0, 15%);</string>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Shadow::Plain</enum>
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -1681,10 +1681,10 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_13">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::Preferred</enum>
|
||||
<enum>QSizePolicy::Preferred</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1707,7 +1707,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1760,7 +1760,7 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextInteractionFlag::LinksAccessibleByKeyboard|Qt::TextInteractionFlag::LinksAccessibleByMouse</set>
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -1844,7 +1844,7 @@
|
||||
<string><html><head/><body><p>Unchecking this option disables many effects including cropping, aspect ratio, N64 resolution factor, N64-style depth compare and more. Don't uncheck this option unless you have performance issues.</p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::TextFormat::RichText</enum>
|
||||
<enum>Qt::RichText</enum>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
@@ -1860,10 +1860,10 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::Fixed</enum>
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -1876,10 +1876,10 @@
|
||||
<item>
|
||||
<widget class="QFrame" name="frameBufferOptionsFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Shape::NoFrame</enum>
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Shadow::Plain</enum>
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_61">
|
||||
<property name="spacing">
|
||||
@@ -2082,10 +2082,10 @@
|
||||
<string><html><head/><body><p>The depth buffer is used to emulate some effects (e.g. coronas):</p><p><span style=" font-weight:600;">Never</span>: Depth buffer is disabled.</p><p><span style=" font-weight:600;">From VRAM</span>: Your video card's depth buffer is copied to N64 memory each frame, which can be slow on some games.</p><p><span style=" font-weight:600;">In software</span>: Generally faster than copying from VRAM, but the result can be imperfect.</p><p>[Recommended:<span style=" font-style:italic;"> In software</span>]</p></body></html></string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Shape::NoFrame</enum>
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Shadow::Plain</enum>
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_58">
|
||||
<property name="spacing">
|
||||
@@ -2212,7 +2212,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -2235,7 +2235,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_9">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -2449,7 +2449,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_12">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -2467,10 +2467,10 @@
|
||||
<string notr="true">color: rgba(0, 0, 0, 15%);</string>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Shadow::Plain</enum>
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -2782,7 +2782,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_11">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -2798,10 +2798,10 @@
|
||||
<item>
|
||||
<widget class="QFrame" name="textureFilterLimitFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Shape::NoFrame</enum>
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Shadow::Plain</enum>
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_28">
|
||||
<property name="spacing">
|
||||
@@ -2842,7 +2842,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -2898,7 +2898,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3459,7 +3459,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3553,10 +3553,10 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_13">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::Fixed</enum>
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3616,7 +3616,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_12">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3631,7 +3631,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_24">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3647,7 +3647,7 @@
|
||||
<string>Preview</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>2</number>
|
||||
@@ -3710,7 +3710,7 @@ The font's full name can be found in Settings>Personalization>Fonts</strin
|
||||
<item>
|
||||
<spacer name="verticalSpacer_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3723,7 +3723,7 @@ The font's full name can be found in Settings>Personalization>Fonts</strin
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3741,7 +3741,7 @@ The font's full name can be found in Settings>Personalization>Fonts</strin
|
||||
<item>
|
||||
<spacer name="verticalSpacer_14">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3799,7 +3799,7 @@ The font's full name can be found in Settings>Personalization>Fonts</strin
|
||||
<item>
|
||||
<spacer name="verticalSpacer_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3900,7 +3900,7 @@ The font's full name can be found in Settings>Personalization>Fonts</strin
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_14">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -3919,7 +3919,7 @@ The font's full name can be found in Settings>Personalization>Fonts</strin
|
||||
<string notr="true">padding:4px 1em;min-width:47px</string>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::StandardButton::Close|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save</set>
|
||||
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults|QDialogButtonBox::Save</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
+10
@@ -59,6 +59,16 @@ static void* IOSGLGetProcAddress (const char *name)
|
||||
#define glGetProcAddress IOSGLGetProcAddress
|
||||
#define GL_GET_PROC_ADR(proc_type, proc_name) ptr##proc_name = (proc_type)glGetProcAddress("gl"#proc_name)
|
||||
|
||||
#elif defined(OS_FREEBSD)
|
||||
#include <GL/glx.h>
|
||||
|
||||
#ifndef glGetProcAddress
|
||||
#define glGetProcAddress glXGetProcAddress
|
||||
#endif
|
||||
|
||||
#undef GL_GET_PROC_ADR
|
||||
#define GL_GET_PROC_ADR(proc_type, proc_name) \
|
||||
ptr##proc_name = (proc_type) glGetProcAddress((const GLubyte*)"gl" #proc_name)
|
||||
#endif
|
||||
|
||||
//GL Functions
|
||||
|
||||
+2
-2
@@ -90,8 +90,8 @@ bool DisplayWindowMupen64plus::_start()
|
||||
_setAttributes();
|
||||
|
||||
m_bFullscreen = config.video.fullscreen > 0;
|
||||
m_screenWidth = config.video.windowedWidth;
|
||||
m_screenHeight = config.video.windowedHeight;
|
||||
m_screenWidth = m_initialWidth > 0 ? m_initialWidth : config.video.windowedWidth;
|
||||
m_screenHeight = m_initialHeight > 0 ? m_initialHeight : config.video.windowedHeight;
|
||||
m_screenRefresh = config.video.fullscreenRefresh;
|
||||
|
||||
_getDisplaySize();
|
||||
|
||||
@@ -57,6 +57,11 @@ EXPORT void CALL SetRenderingCallback(void (*callback)(int))
|
||||
api().SetRenderingCallback(callback);
|
||||
}
|
||||
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
api().SetInitialVideoSize(width, height);
|
||||
}
|
||||
|
||||
EXPORT void CALL ResizeVideoOutput(int width, int height)
|
||||
{
|
||||
api().ResizeVideoOutput(width, height);
|
||||
|
||||
@@ -80,6 +80,9 @@ public:
|
||||
void FBGetFrameBufferInfo(void *pinfo);
|
||||
#else
|
||||
// MupenPlus
|
||||
#ifdef M64P_GLIDENUI
|
||||
void SetInitialVideoSize(int width, int height);
|
||||
#endif
|
||||
void ResizeVideoOutput(int _Width, int _Height);
|
||||
void ReadScreen2(void * _dest, int * _width, int * _height, int _front);
|
||||
|
||||
|
||||
@@ -166,6 +166,13 @@ void PluginAPI::SetRenderingCallback(void (*callback)(int))
|
||||
renderCallback = callback;
|
||||
}
|
||||
|
||||
#ifdef M64P_GLIDENUI
|
||||
void PluginAPI::SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
dwnd().setInitialWindowSize(width, height);
|
||||
}
|
||||
#endif
|
||||
|
||||
void PluginAPI::ResizeVideoOutput(int _Width, int _Height)
|
||||
{
|
||||
dwnd().setWindowSize(_Width, _Height);
|
||||
|
||||
@@ -16,6 +16,7 @@ ViStatusChanged;
|
||||
ViWidthChanged;
|
||||
ReadScreen2;
|
||||
SetRenderingCallback;
|
||||
SetInitialVideoSize;
|
||||
ResizeVideoOutput;
|
||||
FBRead;
|
||||
FBWrite;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+9
@@ -68,6 +68,9 @@ extern int32_t win_width;
|
||||
extern int32_t win_height;
|
||||
extern int32_t win_fullscreen;
|
||||
|
||||
extern int32_t init_win_width;
|
||||
extern int32_t init_win_height;
|
||||
|
||||
EXPORT m64p_error CALL PluginStartup(m64p_dynlib_handle _CoreLibHandle, void *Context,
|
||||
void (*DebugCallback)(void *, int, const char *))
|
||||
{
|
||||
@@ -169,6 +172,12 @@ extern "C"
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
init_win_width = width;
|
||||
init_win_height = height;
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT int CALL InitiateGFX (GFX_INFO Gfx_Info)
|
||||
|
||||
+5
@@ -23,6 +23,8 @@ static ptr_VidExt_GL_GetAttribute CoreVideo_GL_GetAttribute = NULL;
|
||||
static ptr_VidExt_GL_SwapBuffers CoreVideo_GL_SwapBuffers = NULL;
|
||||
|
||||
// framebuffer texture states
|
||||
int32_t init_win_width = 0;
|
||||
int32_t init_win_height = 0;
|
||||
int32_t win_width;
|
||||
int32_t win_height;
|
||||
int32_t win_fullscreen;
|
||||
@@ -62,6 +64,9 @@ void screen_init(struct n64video_config* config)
|
||||
|
||||
CoreVideo_GL_SetAttribute(M64P_GL_SWAP_CONTROL, config->vi.vsync);
|
||||
|
||||
win_width = init_win_width > 0 ? init_win_width : win_width;
|
||||
win_height = init_win_height > 0 ? init_win_height : win_height;
|
||||
|
||||
CoreVideo_SetVideoMode(win_width, win_height, 0, win_fullscreen ? M64VIDEO_FULLSCREEN : M64VIDEO_WINDOWED, M64VIDEOFLAG_SUPPORT_RESIZING);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,10 @@ m64p_handle configVideoParallel = NULL;
|
||||
uint32_t rdram_size;
|
||||
static ptr_PluginGetVersion CoreGetVersion = NULL;
|
||||
|
||||
static int initialWidth = 0;
|
||||
static int initialHeight = 0;
|
||||
static bool initialSizeSet = false;
|
||||
|
||||
void plugin_init(void)
|
||||
{
|
||||
CoreGetVersion = (ptr_PluginGetVersion)DLSYM(CoreLibHandle, "PluginGetVersion");
|
||||
@@ -268,6 +272,13 @@ extern "C"
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
EXPORT void CALL SetInitialVideoSize(int width, int height)
|
||||
{
|
||||
initialWidth = width;
|
||||
initialHeight = height;
|
||||
initialSizeSet = true;
|
||||
}
|
||||
}
|
||||
#endif // CONFIG_GUI
|
||||
|
||||
@@ -326,6 +337,12 @@ EXPORT int CALL RomOpen(void)
|
||||
vk_ssreadbacks = 0; // can cause desyncs
|
||||
}
|
||||
|
||||
if (initialSizeSet)
|
||||
{
|
||||
window_width = initialWidth;
|
||||
window_height = initialHeight;
|
||||
}
|
||||
|
||||
plugin_init();
|
||||
|
||||
if (vk_init())
|
||||
@@ -347,6 +364,8 @@ EXPORT void CALL RomClosed(void)
|
||||
{
|
||||
vk_destroy();
|
||||
}
|
||||
|
||||
initialSizeSet = false;
|
||||
}
|
||||
|
||||
EXPORT void CALL ShowCFB(void)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
@@ -511,6 +511,17 @@ CORE_EXPORT bool CorePluginsOpenROMConfig(CorePluginType type, void* parent, std
|
||||
return open_plugin_config(type, parent, true, file);
|
||||
}
|
||||
|
||||
CORE_EXPORT void CoreSetInitialVideoSize(int width, int height)
|
||||
{
|
||||
m64p::PluginApi& plugin = get_plugin(CorePluginType::Gfx);
|
||||
if (!plugin.IsHooked() || plugin.SetInitialVideoSize == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.SetInitialVideoSize(width, height);
|
||||
}
|
||||
|
||||
CORE_EXPORT bool CoreAttachPlugins(void)
|
||||
{
|
||||
std::string error;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
@@ -62,6 +62,9 @@ bool CorePluginsHasROMConfig(CorePluginType type);
|
||||
// used plugin of given type
|
||||
bool CorePluginsOpenROMConfig(CorePluginType type, void* parent = nullptr, std::filesystem::path file = "");
|
||||
|
||||
// sets initial video size for the video plugin
|
||||
void CoreSetInitialVideoSize(int width, int height);
|
||||
|
||||
// attaches all used plugins
|
||||
bool CoreAttachPlugins(void);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Rosalie's Mupen GUI - https://github.com/Rosalie241/RMG
|
||||
* Copyright (C) 2020-2025 Rosalie Wanders <rosalie@mailbox.org>
|
||||
* Copyright (C) 2020-2026 Rosalie Wanders <rosalie@mailbox.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user