mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-03-21 08:11:07 +01:00
Compare commits
815 Commits
preview-3.
...
prerelease
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b96bb152c2 | ||
|
|
5a564a718d | ||
|
|
9f6eeb1095 | ||
|
|
274bc95dfd | ||
|
|
07f7c40464 | ||
|
|
22d8e73530 | ||
|
|
21a42d2b0d | ||
|
|
1006236aa6 | ||
|
|
326ce9bb8d | ||
|
|
c95b842b30 | ||
|
|
d8e1ad0ebc | ||
|
|
7ee2ab3830 | ||
|
|
1dd8fadca2 | ||
|
|
9225a421b7 | ||
|
|
3ffb1a8cbd | ||
|
|
874c07f8de | ||
|
|
67664a0427 | ||
|
|
eb793dede7 | ||
|
|
87e1b0eb89 | ||
|
|
e98ee9bb04 | ||
|
|
3424ec948c | ||
|
|
05877f2cea | ||
|
|
4d63a2b882 | ||
|
|
ea642fe9ff | ||
|
|
5f4696ce63 | ||
|
|
2c7b7d1d33 | ||
|
|
355f69ebfe | ||
|
|
c9d602307c | ||
|
|
dd0bdc2561 | ||
|
|
84d35587ee | ||
|
|
fc9b2478d8 | ||
|
|
18d21b36fe | ||
|
|
1995471927 | ||
|
|
67382e9c83 | ||
|
|
23410debf7 | ||
|
|
8ce176b59a | ||
|
|
51fa076fdc | ||
|
|
a446381ea9 | ||
|
|
ebb24eedc8 | ||
|
|
dabc93a631 | ||
|
|
169c8d5140 | ||
|
|
8e9c44bc3b | ||
|
|
4dd585fb62 | ||
|
|
81e57147f8 | ||
|
|
3bea84531d | ||
|
|
9ed23a4b79 | ||
|
|
e19a56f4d5 | ||
|
|
1ab61635a9 | ||
|
|
29c684c626 | ||
|
|
0eaa6197c5 | ||
|
|
ffe194c52e | ||
|
|
a4547fe77a | ||
|
|
49dd24e195 | ||
|
|
191a6417d5 | ||
|
|
bf793bf439 | ||
|
|
9e60a8994f | ||
|
|
b2793a2ce2 | ||
|
|
04e3b67707 | ||
|
|
a41f93bd10 | ||
|
|
5ca735b40f | ||
|
|
cdde6dd7bb | ||
|
|
8f8af918ba | ||
|
|
8feb21a1d1 | ||
|
|
4294c06836 | ||
|
|
31dd4fe81f | ||
|
|
417ed7f35f | ||
|
|
0aa319e4f9 | ||
|
|
5815372206 | ||
|
|
5d079c9a26 | ||
|
|
d590e1f122 | ||
|
|
7098e525d0 | ||
|
|
fb6df93384 | ||
|
|
a2b0ddcca6 | ||
|
|
d28e953222 | ||
|
|
f731741ead | ||
|
|
0eaa8c6d81 | ||
|
|
21b433536a | ||
|
|
6bc7e88ca6 | ||
|
|
e4e76ac72e | ||
|
|
1b30a01b44 | ||
|
|
191b9d5021 | ||
|
|
7d2a1c5f8f | ||
|
|
b6b9390444 | ||
|
|
55e094f7ac | ||
|
|
584c1d5791 | ||
|
|
995a6a0333 | ||
|
|
86b46c678c | ||
|
|
96414fa56a | ||
|
|
670db4d248 | ||
|
|
b08d045811 | ||
|
|
2ad0f1e1fe | ||
|
|
41d48db4ae | ||
|
|
922b73195c | ||
|
|
5e4a2974aa | ||
|
|
3766a39409 | ||
|
|
e10e42c814 | ||
|
|
2b8fb0bdd4 | ||
|
|
efaf3739c6 | ||
|
|
4bddf521dd | ||
|
|
569de84907 | ||
|
|
e5a4f09363 | ||
|
|
7d7a76c077 | ||
|
|
66408308b8 | ||
|
|
438075a83a | ||
|
|
b4562c0243 | ||
|
|
611f132fd0 | ||
|
|
03a3c19c27 | ||
|
|
307e6f2ca6 | ||
|
|
f79083d9bb | ||
|
|
4ba4f0a106 | ||
|
|
c4f2f7b352 | ||
|
|
949ec0c501 | ||
|
|
839227b4b0 | ||
|
|
c04b739df6 | ||
|
|
3df0767e34 | ||
|
|
307dac97ac | ||
|
|
21cc1878f1 | ||
|
|
b524af1b43 | ||
|
|
9a83fa026d | ||
|
|
ea859fba3a | ||
|
|
551510c0eb | ||
|
|
95c1584386 | ||
|
|
f0af6c348a | ||
|
|
3ad9c38a46 | ||
|
|
d42b4ed961 | ||
|
|
9a7cfbc2d0 | ||
|
|
82125ec1d8 | ||
|
|
4231848791 | ||
|
|
61f13b94d1 | ||
|
|
d14c93c4b1 | ||
|
|
c64197be1a | ||
|
|
042898995c | ||
|
|
fb0f6a1196 | ||
|
|
38176bfe9a | ||
|
|
0e2ca934b5 | ||
|
|
715897aea7 | ||
|
|
a8a65b6fca | ||
|
|
1f3b40797d | ||
|
|
fb94a79f89 | ||
|
|
bda90c3cb6 | ||
|
|
90aff306c1 | ||
|
|
00b23a012c | ||
|
|
6b776a9989 | ||
|
|
e5966bbdb1 | ||
|
|
73ee99978d | ||
|
|
ebaa30d339 | ||
|
|
c8f3f1b461 | ||
|
|
a78104a47f | ||
|
|
6cdde10edb | ||
|
|
dd0dc64d51 | ||
|
|
c688853a82 | ||
|
|
507593f485 | ||
|
|
7acf78ba92 | ||
|
|
037cd25a22 | ||
|
|
e8916b2608 | ||
|
|
d2090d1c80 | ||
|
|
3f7f632e14 | ||
|
|
f61860fa93 | ||
|
|
4bb3c2a1c7 | ||
|
|
61bdbacdae | ||
|
|
f044a3d6ca | ||
|
|
fa7a529912 | ||
|
|
1636009511 | ||
|
|
bf85320947 | ||
|
|
f2f04e825d | ||
|
|
cbdbd66e18 | ||
|
|
ef1fdf11bd | ||
|
|
e6bb50a710 | ||
|
|
6b34c9fe7f | ||
|
|
22422f7748 | ||
|
|
d7b10d05b1 | ||
|
|
4290fc8bda | ||
|
|
6b38d250aa | ||
|
|
bba066c44c | ||
|
|
0bc370dfba | ||
|
|
6934c910b3 | ||
|
|
0176a19aee | ||
|
|
0180ca541e | ||
|
|
8ec576ddab | ||
|
|
748f0b3201 | ||
|
|
ba1a980535 | ||
|
|
28389f1c38 | ||
|
|
ef52a4d4df | ||
|
|
8d8649b33f | ||
|
|
f8b13dadd7 | ||
|
|
1167cf54e1 | ||
|
|
8a9b7ae8d1 | ||
|
|
fb4ec07119 | ||
|
|
b674b715f5 | ||
|
|
1e1442ed4a | ||
|
|
d8c7006a42 | ||
|
|
6473de59b7 | ||
|
|
c7584df999 | ||
|
|
1f54b228ff | ||
|
|
7c9f6c6313 | ||
|
|
19ddb29d2d | ||
|
|
d16f76e3d4 | ||
|
|
742f2a2fad | ||
|
|
2b375d9704 | ||
|
|
dcc645e413 | ||
|
|
ece6a6ed8f | ||
|
|
7f9ee31024 | ||
|
|
16ad3e5af6 | ||
|
|
0ae57f1d90 | ||
|
|
6a0405b933 | ||
|
|
9f2186ad52 | ||
|
|
181995b44f | ||
|
|
8509041a09 | ||
|
|
344e394bf4 | ||
|
|
d8c679416b | ||
|
|
b6dc44b133 | ||
|
|
7673b84f52 | ||
|
|
a58bc3eaf4 | ||
|
|
0a5d2f3da2 | ||
|
|
3519ef3b3b | ||
|
|
56d7cc7a02 | ||
|
|
04f3bdb118 | ||
|
|
18c6958cae | ||
|
|
522682cd6e | ||
|
|
a4cd17cce5 | ||
|
|
efba42a67b | ||
|
|
156b3b4a8c | ||
|
|
53aaf8c26b | ||
|
|
9b40d43b1f | ||
|
|
85851459d6 | ||
|
|
db97da4ccb | ||
|
|
5579010b6a | ||
|
|
2d37903323 | ||
|
|
ef21ccf080 | ||
|
|
49663bfb58 | ||
|
|
a8c41135aa | ||
|
|
8b83a57847 | ||
|
|
e484182765 | ||
|
|
011454b237 | ||
|
|
efc390d7e2 | ||
|
|
c077b7a918 | ||
|
|
0b520cd4b4 | ||
|
|
9f7b2c3595 | ||
|
|
2c0a8363a5 | ||
|
|
95d44f11c7 | ||
|
|
16dfaca728 | ||
|
|
32ab09ba21 | ||
|
|
1461f893c3 | ||
|
|
a63052db96 | ||
|
|
dd6b484359 | ||
|
|
ecf8dd054d | ||
|
|
4797970bfa | ||
|
|
6b4b9b5f2b | ||
|
|
8ea4b326b3 | ||
|
|
67ea67f191 | ||
|
|
c6b5c21aaf | ||
|
|
f8f8d87bfa | ||
|
|
b713e7581b | ||
|
|
54752f8d1c | ||
|
|
3842384a38 | ||
|
|
6cf6b160cd | ||
|
|
62bc2c4c92 | ||
|
|
4fccfb142e | ||
|
|
4fbf59ac3a | ||
|
|
578ac0ef52 | ||
|
|
31a4c92ee5 | ||
|
|
02e85a153f | ||
|
|
9955e1dc0d | ||
|
|
0281071243 | ||
|
|
c68ed04a06 | ||
|
|
2b1d809b21 | ||
|
|
6d554a9ea3 | ||
|
|
9fbc767d4f | ||
|
|
e43aa12b49 | ||
|
|
c0e5901c42 | ||
|
|
f2074d7af3 | ||
|
|
3197e27b59 | ||
|
|
f18e023317 | ||
|
|
54d4e48539 | ||
|
|
6575b8157b | ||
|
|
30a22d3fed | ||
|
|
d666c2d189 | ||
|
|
196e2c6662 | ||
|
|
b902b0527b | ||
|
|
a767952617 | ||
|
|
54c555e394 | ||
|
|
8b155708ff | ||
|
|
1d417ab27f | ||
|
|
643281d022 | ||
|
|
2be89f0dd1 | ||
|
|
a37f993a07 | ||
|
|
65e0fed5b3 | ||
|
|
dd83908109 | ||
|
|
99ad53ec3f | ||
|
|
df97ccf283 | ||
|
|
4f0a056b95 | ||
|
|
18fc13c20d | ||
|
|
6d20b65a9e | ||
|
|
3cd3c9317e | ||
|
|
6ca2a48595 | ||
|
|
fa9c3331d5 | ||
|
|
cd1bd0ac2e | ||
|
|
0be5b8070d | ||
|
|
1c04ebe423 | ||
|
|
d4d5faedab | ||
|
|
8704ab8422 | ||
|
|
60deaf5f0f | ||
|
|
5340f2e3fe | ||
|
|
e91c37f4dd | ||
|
|
f3cbd04a81 | ||
|
|
5f25691c85 | ||
|
|
8cc4735d74 | ||
|
|
2d91f096ca | ||
|
|
78c1dc3e2c | ||
|
|
0410328b15 | ||
|
|
d5f08b8f4b | ||
|
|
543f244965 | ||
|
|
c2121dd9a2 | ||
|
|
5c84d38822 | ||
|
|
6e1177ac03 | ||
|
|
c030e6f782 | ||
|
|
0ad3a18937 | ||
|
|
f6143da617 | ||
|
|
774e38d073 | ||
|
|
5acd7fe208 | ||
|
|
c714b1a38b | ||
|
|
cf439d5c63 | ||
|
|
ec29d3fd66 | ||
|
|
92b7054870 | ||
|
|
1a466b5548 | ||
|
|
ec8a780ad4 | ||
|
|
cc723c9e4b | ||
|
|
0cb4a94c88 | ||
|
|
4ffcb8ebab | ||
|
|
49153ebfc4 | ||
|
|
1b99467c71 | ||
|
|
0be6dc5734 | ||
|
|
4fbd6cba60 | ||
|
|
e25cc7a88f | ||
|
|
38dd6bcd32 | ||
|
|
f1232de3d2 | ||
|
|
2664d36faf | ||
|
|
609b147432 | ||
|
|
cc24518c41 | ||
|
|
a0e537b9c0 | ||
|
|
df1f1c2e12 | ||
|
|
af3d97dcac | ||
|
|
bc448fa445 | ||
|
|
599b4ef254 | ||
|
|
1c52e290a3 | ||
|
|
9a4d29699d | ||
|
|
75a24116b5 | ||
|
|
22f6eed1d9 | ||
|
|
c148837546 | ||
|
|
82a1e9f6df | ||
|
|
ba5cf2b152 | ||
|
|
567b828e18 | ||
|
|
1701208f32 | ||
|
|
622c3ebb94 | ||
|
|
0461180e25 | ||
|
|
ff139fe71b | ||
|
|
e9290eeedf | ||
|
|
578509c326 | ||
|
|
05932e05da | ||
|
|
e2323c1367 | ||
|
|
f5fbdf7ed5 | ||
|
|
a5e8fc21b2 | ||
|
|
80c39f2ff4 | ||
|
|
e3c99e3bd3 | ||
|
|
1413bfb185 | ||
|
|
948b16533c | ||
|
|
cd1bb6247b | ||
|
|
a773558517 | ||
|
|
50fbae9302 | ||
|
|
c744c8fc0b | ||
|
|
a8d585aac3 | ||
|
|
ca17d19f90 | ||
|
|
7bbe6025be | ||
|
|
ffed1c50c0 | ||
|
|
1a6e139dde | ||
|
|
cf220ea4f1 | ||
|
|
17ef0c1237 | ||
|
|
8fde28813e | ||
|
|
17df3fe836 | ||
|
|
eb1be89e70 | ||
|
|
7647f16ae1 | ||
|
|
eadc64973a | ||
|
|
b2c2a483e8 | ||
|
|
fe39509b85 | ||
|
|
b8036bdd41 | ||
|
|
ca4f5dd40d | ||
|
|
b7dac5072b | ||
|
|
0becdad392 | ||
|
|
5bf742daa6 | ||
|
|
bed16f77d1 | ||
|
|
b2178857dc | ||
|
|
f40a530fd9 | ||
|
|
cf946e32ba | ||
|
|
4c70aa33ae | ||
|
|
76920a230f | ||
|
|
01b9b0edb7 | ||
|
|
17a029502a | ||
|
|
a27c139b12 | ||
|
|
aa817a67d1 | ||
|
|
8653a5821b | ||
|
|
60dce94583 | ||
|
|
440d5754f8 | ||
|
|
052cb5773e | ||
|
|
42c67756cc | ||
|
|
286cc2ebd0 | ||
|
|
c2508d5d99 | ||
|
|
f2b7495adc | ||
|
|
ade829d7ca | ||
|
|
e73d98ad72 | ||
|
|
7f1c9c9053 | ||
|
|
6f462e244f | ||
|
|
ddd7d0f927 | ||
|
|
483e79bf82 | ||
|
|
ed75d9d22a | ||
|
|
024e5da6fb | ||
|
|
8a0f649363 | ||
|
|
af2dbbcb53 | ||
|
|
4d301b88d6 | ||
|
|
5a2eb60389 | ||
|
|
969f03d9f0 | ||
|
|
7a22076a7c | ||
|
|
3a1810f9a9 | ||
|
|
49610fd1e8 | ||
|
|
62124e2c28 | ||
|
|
18115ef6bd | ||
|
|
8691408baf | ||
|
|
37b87f79fb | ||
|
|
9a43c08146 | ||
|
|
225c0e2ad9 | ||
|
|
4add7e2005 | ||
|
|
3ac28bae6a | ||
|
|
da37e1541b | ||
|
|
ecea3471f6 | ||
|
|
f8d8bf8066 | ||
|
|
a33144fbc9 | ||
|
|
2e4dc9c109 | ||
|
|
80c1b1e1a0 | ||
|
|
478ac0b9bf | ||
|
|
03d6e4b69e | ||
|
|
ca4ffc8a00 | ||
|
|
8475c496b4 | ||
|
|
56cf8d8dc9 | ||
|
|
f0fad41f2c | ||
|
|
4d8f5758cf | ||
|
|
c080bb8417 | ||
|
|
33442701ca | ||
|
|
7e298f50fe | ||
|
|
34974d4d2b | ||
|
|
cadeec9cc9 | ||
|
|
f37eef948c | ||
|
|
d07bb0e679 | ||
|
|
c44fa5bb07 | ||
|
|
1025087c2e | ||
|
|
a47b62d1fe | ||
|
|
f3c194f39a | ||
|
|
7e8576fd19 | ||
|
|
f7580374a1 | ||
|
|
232c2970d3 | ||
|
|
5ec5f23fff | ||
|
|
b815123cf2 | ||
|
|
819e1cc95b | ||
|
|
b2eb23a617 | ||
|
|
0b401137d2 | ||
|
|
b83dd793fd | ||
|
|
a0864799f2 | ||
|
|
5d9ccb6296 | ||
|
|
e992522cb2 | ||
|
|
b2c15a8c2a | ||
|
|
0f9e86fe1c | ||
|
|
c9e22d4672 | ||
|
|
ff366fba87 | ||
|
|
e46d8756e5 | ||
|
|
401c8f8e4e | ||
|
|
2f9a45af60 | ||
|
|
0c42891826 | ||
|
|
3ce68f80bc | ||
|
|
7c8171da92 | ||
|
|
4bfc8f84f7 | ||
|
|
8c849ecc6c | ||
|
|
fce922b66c | ||
|
|
d6a95ae198 | ||
|
|
42de2ac6a9 | ||
|
|
e08f34c3be | ||
|
|
6e0df0af24 | ||
|
|
519923ea80 | ||
|
|
624a4d5f26 | ||
|
|
5c0f8dc179 | ||
|
|
345cab1e36 | ||
|
|
35a9d156a6 | ||
|
|
3739749404 | ||
|
|
10f868abf4 | ||
|
|
f81472d767 | ||
|
|
3001c61de0 | ||
|
|
835b6e0c1a | ||
|
|
da80b9bce5 | ||
|
|
2ce21d1fed | ||
|
|
0ca8027205 | ||
|
|
4d9e7a2a68 | ||
|
|
b5eea03d1e | ||
|
|
7dd523fbb1 | ||
|
|
48a0adb2ac | ||
|
|
4d4a2786bb | ||
|
|
6abebca943 | ||
|
|
1d0e28a5b3 | ||
|
|
5608bf5866 | ||
|
|
0fbcd0d586 | ||
|
|
e957840d34 | ||
|
|
684098fac3 | ||
|
|
bc9c86bcc2 | ||
|
|
b58e6d7274 | ||
|
|
c9ab8ad8d9 | ||
|
|
d38c09e5c4 | ||
|
|
6730cf7bed | ||
|
|
2f68efda83 | ||
|
|
19bdc01b8c | ||
|
|
eda0261c4e | ||
|
|
6fa6297441 | ||
|
|
b84f150d06 | ||
|
|
c52a96ca8e | ||
|
|
080b3002c6 | ||
|
|
d0d1414836 | ||
|
|
a92eade183 | ||
|
|
0bb42cb023 | ||
|
|
483ceb5355 | ||
|
|
35360ec4d7 | ||
|
|
576f13ac7c | ||
|
|
ff96c59df4 | ||
|
|
b108b54c6a | ||
|
|
639855b7e5 | ||
|
|
a4a1dff219 | ||
|
|
b9c062c858 | ||
|
|
76e7bc4c04 | ||
|
|
3fa0537565 | ||
|
|
79316ca36e | ||
|
|
9aca97f4e7 | ||
|
|
c0803f7683 | ||
|
|
a55686ce61 | ||
|
|
eb3fc0684c | ||
|
|
6cc9ce183d | ||
|
|
8b6d3c88cf | ||
|
|
313d522f39 | ||
|
|
ac2edad809 | ||
|
|
9a9616894d | ||
|
|
9628549c7c | ||
|
|
80b9986418 | ||
|
|
1944bc7407 | ||
|
|
63a498c966 | ||
|
|
ce9dddfde2 | ||
|
|
43a61fec91 | ||
|
|
61511c48a4 | ||
|
|
e0cee83a3a | ||
|
|
2635239bbc | ||
|
|
ce7cb10541 | ||
|
|
cf59fc797f | ||
|
|
af6c641b8c | ||
|
|
4c86511035 | ||
|
|
ff82238172 | ||
|
|
c5acbef3bf | ||
|
|
6fe09e3aa4 | ||
|
|
a1e8d5c327 | ||
|
|
3ee39f6c3f | ||
|
|
bbd4eeb287 | ||
|
|
f45ce45603 | ||
|
|
3f425b6f20 | ||
|
|
1fbb8e1824 | ||
|
|
e6e468d0c4 | ||
|
|
962268ca21 | ||
|
|
ac92af02ea | ||
|
|
be5fba963a | ||
|
|
7c5c88a3ad | ||
|
|
d4225070ad | ||
|
|
48b6b93fb6 | ||
|
|
5447cb6d38 | ||
|
|
e4215a04d9 | ||
|
|
fb71b44231 | ||
|
|
0370b92d80 | ||
|
|
5c020b9930 | ||
|
|
279836d259 | ||
|
|
1d5d948ccf | ||
|
|
19cc04a162 | ||
|
|
b5c05b6e29 | ||
|
|
1e7c7c69c5 | ||
|
|
09428688b9 | ||
|
|
972c6d0b82 | ||
|
|
5d09656afa | ||
|
|
72895a6994 | ||
|
|
f64e9a52dc | ||
|
|
ddb1e66d90 | ||
|
|
caf0348b26 | ||
|
|
900627f7fc | ||
|
|
6d1dac1404 | ||
|
|
d25cdc0fef | ||
|
|
df48af22d4 | ||
|
|
08de6656fc | ||
|
|
2ac62d8c67 | ||
|
|
846eb9a886 | ||
|
|
7278399366 | ||
|
|
d0f1910918 | ||
|
|
2c4fc2e549 | ||
|
|
8d8578785c | ||
|
|
fa5f84fb6e | ||
|
|
47429227ab | ||
|
|
0f228de48a | ||
|
|
ffb9b30e84 | ||
|
|
1a5b0796b4 | ||
|
|
d1b8fcd692 | ||
|
|
9b82d46259 | ||
|
|
5229b520af | ||
|
|
b79e3ac830 | ||
|
|
90efb63e52 | ||
|
|
e50dc7265b | ||
|
|
7ddda4fe18 | ||
|
|
3060105cfa | ||
|
|
2e5208f353 | ||
|
|
c49f4ceeb2 | ||
|
|
23828b62d4 | ||
|
|
bc4185c685 | ||
|
|
fffa6c7a2b | ||
|
|
235e5c6a6c | ||
|
|
9f8157f42c | ||
|
|
a0b8b57afe | ||
|
|
951ca96dc9 | ||
|
|
58f8e259d1 | ||
|
|
56da4e81d8 | ||
|
|
9784e10a75 | ||
|
|
5bfece34f9 | ||
|
|
045e31178f | ||
|
|
a74693c9a5 | ||
|
|
a4852f3a10 | ||
|
|
dc5a2ddfd0 | ||
|
|
efb59bd0bf | ||
|
|
45869d6177 | ||
|
|
d8eb68a6c5 | ||
|
|
24ed947cc3 | ||
|
|
31128b6cdd | ||
|
|
123306b18c | ||
|
|
d320d7143d | ||
|
|
830b132cd4 | ||
|
|
4ac78706bf | ||
|
|
2ad5836d02 | ||
|
|
31d09909b6 | ||
|
|
1377cdb3f2 | ||
|
|
46f43c2e6e | ||
|
|
4745aa3324 | ||
|
|
3ca629ceb5 | ||
|
|
022a6a9f97 | ||
|
|
e79ce2a200 | ||
|
|
7293c18314 | ||
|
|
401187eb6c | ||
|
|
b7a31ead08 | ||
|
|
9fb8661684 | ||
|
|
6aab5a089d | ||
|
|
65c9a58f5e | ||
|
|
ec2ef5f9b5 | ||
|
|
2762644e96 | ||
|
|
068d9cc7d6 | ||
|
|
2f59a1ce44 | ||
|
|
acf0f09320 | ||
|
|
3a1d76d298 | ||
|
|
ce573b01f8 | ||
|
|
d53241a299 | ||
|
|
5cd188bdbc | ||
|
|
7099de4ae8 | ||
|
|
bf9fa38920 | ||
|
|
f5ad66ef4b | ||
|
|
3303e9843f | ||
|
|
f852038384 | ||
|
|
16113374ff | ||
|
|
c0f1fe8e7f | ||
|
|
f022501d52 | ||
|
|
b8233aff8e | ||
|
|
b8bbd29ce9 | ||
|
|
bbc9c75618 | ||
|
|
5c8bed3780 | ||
|
|
03d15c031b | ||
|
|
d55e6dfc5e | ||
|
|
3c13bae64f | ||
|
|
e0e61775b8 | ||
|
|
6fab61b69d | ||
|
|
e9fdcf6c60 | ||
|
|
1720fc77fe | ||
|
|
a07a88c1b4 | ||
|
|
c508396e33 | ||
|
|
7a3f5ef129 | ||
|
|
10e2ce9ba4 | ||
|
|
88926f2b73 | ||
|
|
e14d939ead | ||
|
|
bbe843fd80 | ||
|
|
79f6f766d4 | ||
|
|
fdafa266d8 | ||
|
|
61ba8010d3 | ||
|
|
212f0dcdb1 | ||
|
|
41b0d36a6c | ||
|
|
f9ddb0bdea | ||
|
|
7bf3cae02e | ||
|
|
51637495e4 | ||
|
|
566f3dc138 | ||
|
|
b02285d495 | ||
|
|
97ddc9adf2 | ||
|
|
465881d560 | ||
|
|
c135386f58 | ||
|
|
615c935d11 | ||
|
|
848fd1eab4 | ||
|
|
0007451222 | ||
|
|
3a2b595c4f | ||
|
|
e94ba6e700 | ||
|
|
631c30527b | ||
|
|
2e70944c44 | ||
|
|
df73cae2b0 | ||
|
|
a4006e654e | ||
|
|
5ee4d176f1 | ||
|
|
a0591ec4a3 | ||
|
|
fef001cb48 | ||
|
|
e770b4e266 | ||
|
|
795ceae520 | ||
|
|
ecae3789ab | ||
|
|
587384756f | ||
|
|
2b744c7df3 | ||
|
|
932bb968d7 | ||
|
|
1413848f41 | ||
|
|
35e6c92c3c | ||
|
|
4fb955c80b | ||
|
|
aa352837d5 | ||
|
|
18b7a2315c | ||
|
|
014196d98d | ||
|
|
7a074f582e | ||
|
|
d2dc0fa920 | ||
|
|
0c53d9a1ee | ||
|
|
d8f8cf3e99 | ||
|
|
184da780f5 | ||
|
|
70fe38bcb2 | ||
|
|
e027b85cc4 | ||
|
|
bd57cfdb55 | ||
|
|
0f9e551d71 | ||
|
|
af6ce629c4 | ||
|
|
2b10a040ff | ||
|
|
572cc7af63 | ||
|
|
7d7ee43ddb | ||
|
|
e9f7a1b359 | ||
|
|
25390d6c21 | ||
|
|
e0166256ff | ||
|
|
8657fa8b3b | ||
|
|
f8468d580d | ||
|
|
eaef956a9a | ||
|
|
b54f6044a5 | ||
|
|
b43b333d25 | ||
|
|
7f14eb33c6 | ||
|
|
b71151a697 | ||
|
|
e4778d53d3 | ||
|
|
d48d4c8c48 | ||
|
|
f0b61c69e7 | ||
|
|
fe3566ca46 | ||
|
|
7959b08a4d | ||
|
|
6ca8269b96 | ||
|
|
0f9505256d | ||
|
|
140aba9e5d | ||
|
|
68c2cf84f6 | ||
|
|
1a311bc638 | ||
|
|
e67ae274a5 | ||
|
|
7c5a2cd462 | ||
|
|
95c8a1cf7c | ||
|
|
7007b4762b | ||
|
|
6049ca4fb1 | ||
|
|
c021c75737 | ||
|
|
d20936b544 | ||
|
|
3877bf55a3 | ||
|
|
c26dda10e0 | ||
|
|
9a4ae4b9ed | ||
|
|
20cd4290d7 | ||
|
|
dcf6dd19c3 | ||
|
|
6c99a4b783 | ||
|
|
a85f0b49f4 | ||
|
|
5a74aadac9 | ||
|
|
32cc92dceb | ||
|
|
119b4fa5f5 | ||
|
|
fc12cc6dfd | ||
|
|
559223ff9d | ||
|
|
332fd824f0 | ||
|
|
1ed1bc1d5d | ||
|
|
8a2cac7aaa | ||
|
|
54ff1f35bd | ||
|
|
37b49c98dc | ||
|
|
dbe82e685d | ||
|
|
3e2ef64c98 | ||
|
|
b0140fb1b4 | ||
|
|
97dac37373 | ||
|
|
6836ef8fd2 | ||
|
|
908bd84c5e | ||
|
|
1ea4edddec | ||
|
|
588e32ea5a | ||
|
|
ecfd143a26 | ||
|
|
908b42f2b9 | ||
|
|
028194286c | ||
|
|
0ef7a1d901 | ||
|
|
ed943318e2 | ||
|
|
27b828754a | ||
|
|
5a7b75607a | ||
|
|
c1246e31a4 | ||
|
|
d3b882b4f9 | ||
|
|
fb2145f731 | ||
|
|
96729e745a | ||
|
|
683991ab71 | ||
|
|
6823e3f005 | ||
|
|
458f616c53 | ||
|
|
73e0e8cf5b | ||
|
|
8026866994 | ||
|
|
cacfdc8cfa | ||
|
|
7031b240df | ||
|
|
c56a3f60fe | ||
|
|
615d2dcd5b | ||
|
|
e001a309be | ||
|
|
27f69c772c | ||
|
|
87dade4421 | ||
|
|
0508f100e2 | ||
|
|
927d297161 |
34
.github/workflows/create-test-plan.py
vendored
34
.github/workflows/create-test-plan.py
vendored
@@ -46,6 +46,7 @@ class SdlPlatform(Enum):
|
||||
Tvos = "tvos"
|
||||
Msvc = "msvc"
|
||||
N3ds = "n3ds"
|
||||
PowerPC = "powerpc"
|
||||
PowerPC64 = "powerpc64"
|
||||
Ps2 = "ps2"
|
||||
Psp = "psp"
|
||||
@@ -126,10 +127,11 @@ JOB_SPECS = {
|
||||
"android-cmake-lean": JobSpec(name="Android (CMake, lean)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Android, artifact="SDL-lean-android-arm64", android_abi="arm64-v8a", android_arch="aarch64", android_platform=23, lean=True, ),
|
||||
"android-mk": JobSpec(name="Android (Android.mk)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Android, artifact=None, no_cmake=True, android_mk=True, ),
|
||||
"android-gradle": JobSpec(name="Android (Gradle)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Android, artifact=None, no_cmake=True, android_gradle=True, ),
|
||||
"emscripten": JobSpec(name="Emscripten", os=JobOs.UbuntuLatest, platform=SdlPlatform.Emscripten, artifact="SDL-emscripten", ),
|
||||
"emscripten": JobSpec(name="Emscripten", os=JobOs.Ubuntu22_04, platform=SdlPlatform.Emscripten, artifact="SDL-emscripten", ),
|
||||
"haiku": JobSpec(name="Haiku", os=JobOs.UbuntuLatest, platform=SdlPlatform.Haiku, artifact="SDL-haiku-x64", container="ghcr.io/haiku/cross-compiler:x86_64-r1beta5", ),
|
||||
"loongarch64": JobSpec(name="LoongArch64", os=JobOs.UbuntuLatest, platform=SdlPlatform.LoongArch64, artifact="SDL-loongarch64", ),
|
||||
"n3ds": JobSpec(name="Nintendo 3DS", os=JobOs.UbuntuLatest, platform=SdlPlatform.N3ds, artifact="SDL-n3ds", container="devkitpro/devkitarm:latest", ),
|
||||
"ppc": JobSpec(name="PowerPC", os=JobOs.UbuntuLatest, platform=SdlPlatform.PowerPC, artifact="SDL-ppc", container="dockcross/linux-ppc:latest", ),
|
||||
"ppc64": JobSpec(name="PowerPC64", os=JobOs.UbuntuLatest, platform=SdlPlatform.PowerPC64, artifact="SDL-ppc64le", container="dockcross/linux-ppc64le:latest", ),
|
||||
"ps2": JobSpec(name="Sony PlayStation 2", os=JobOs.UbuntuLatest, platform=SdlPlatform.Ps2, artifact="SDL-ps2", container="ps2dev/ps2dev:latest", ),
|
||||
"psp": JobSpec(name="Sony PlayStation Portable", os=JobOs.UbuntuLatest, platform=SdlPlatform.Psp, artifact="SDL-psp", container="pspdev/pspdev:latest", ),
|
||||
@@ -203,7 +205,8 @@ class JobDetails:
|
||||
msys2_env: str = ""
|
||||
msys2_no_perl: bool = False
|
||||
werror: bool = True
|
||||
msvc_vcvars: str = ""
|
||||
msvc_vcvars_arch: str = ""
|
||||
msvc_vcvars_sdk: str = ""
|
||||
msvc_project: str = ""
|
||||
msvc_project_flags: list[str] = dataclasses.field(default_factory=list)
|
||||
setup_ninja: bool = False
|
||||
@@ -265,7 +268,8 @@ class JobDetails:
|
||||
"android-mk": self.android_mk,
|
||||
"werror": self.werror,
|
||||
"sudo": self.sudo,
|
||||
"msvc-vcvars": self.msvc_vcvars,
|
||||
"msvc-vcvars-arch": self.msvc_vcvars_arch,
|
||||
"msvc-vcvars-sdk": self.msvc_vcvars_sdk,
|
||||
"msvc-project": self.msvc_project,
|
||||
"msvc-project-flags": my_shlex_join(self.msvc_project_flags),
|
||||
"setup-ninja": self.setup_ninja,
|
||||
@@ -389,14 +393,15 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
job.msvc_project_flags.append(f"-p:Platform={msvc_platform}")
|
||||
match spec.msvc_arch:
|
||||
case MsvcArch.X86:
|
||||
job.msvc_vcvars = "x64_x86"
|
||||
job.msvc_vcvars_arch = "x64_x86"
|
||||
case MsvcArch.X64:
|
||||
job.msvc_vcvars = "x64"
|
||||
job.msvc_vcvars_arch = "x64"
|
||||
case MsvcArch.Arm32:
|
||||
job.msvc_vcvars = "x64_arm"
|
||||
job.msvc_vcvars_arch = "x64_arm"
|
||||
job.msvc_vcvars_sdk = "10.0.22621.0" # 10.0.26100.0 dropped ARM32 um and ucrt libraries
|
||||
job.run_tests = False
|
||||
case MsvcArch.Arm64:
|
||||
job.msvc_vcvars = "x64_arm64"
|
||||
job.msvc_vcvars_arch = "x64_arm64"
|
||||
job.run_tests = False
|
||||
if spec.gdk:
|
||||
job.setup_gdk_folder = "VisualC-GDK"
|
||||
@@ -451,7 +456,6 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
case SdlPlatform.Ios | SdlPlatform.Tvos:
|
||||
job.brew_packages.extend([
|
||||
"ninja",
|
||||
"pkg-config",
|
||||
])
|
||||
job.clang_tidy = False
|
||||
job.run_tests = False
|
||||
@@ -465,7 +469,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
job.cmake_arguments.extend([
|
||||
"-DCMAKE_SYSTEM_NAME=iOS",
|
||||
"-DCMAKE_OSX_ARCHITECTURES=\"arm64\"",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0",
|
||||
])
|
||||
case SdlPlatform.Tvos:
|
||||
if spec.xcode:
|
||||
@@ -473,7 +477,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
job.cmake_arguments.extend([
|
||||
"-DCMAKE_SYSTEM_NAME=tvOS",
|
||||
"-DCMAKE_OSX_ARCHITECTURES=\"arm64\"",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0",
|
||||
])
|
||||
case SdlPlatform.MacOS:
|
||||
if spec.apple_framework:
|
||||
@@ -482,7 +486,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
job.test_pkg_config = False
|
||||
job.cmake_arguments.extend((
|
||||
"'-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13",
|
||||
"-DSDL_FRAMEWORK=ON",
|
||||
))
|
||||
job.shared_lib = SharedLibType.FRAMEWORK
|
||||
@@ -490,15 +494,13 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
job.clang_tidy = True
|
||||
job.cmake_arguments.extend((
|
||||
"-DCMAKE_OSX_ARCHITECTURES=arm64",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11",
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13",
|
||||
"-DCLANG_TIDY_BINARY=$(brew --prefix llvm)/bin/clang-tidy",
|
||||
))
|
||||
job.shared_lib = SharedLibType.DYLIB
|
||||
job.static_lib = StaticLibType.A
|
||||
job.apt_packages = []
|
||||
job.brew_packages.append("ninja")
|
||||
if job.test_pkg_config:
|
||||
job.brew_packages.append("pkg-config")
|
||||
if job.clang_tidy:
|
||||
job.brew_packages.append("llvm")
|
||||
if spec.xcode:
|
||||
@@ -618,7 +620,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
))
|
||||
job.shared_lib = SharedLibType.SO_0
|
||||
job.static_lib = StaticLibType.A
|
||||
case SdlPlatform.PowerPC64:
|
||||
case SdlPlatform.PowerPC64 | SdlPlatform.PowerPC:
|
||||
# FIXME: Enable SDL_WERROR
|
||||
job.werror = False
|
||||
job.clang_tidy = False
|
||||
@@ -689,7 +691,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
||||
match spec.platform:
|
||||
case SdlPlatform.FreeBSD:
|
||||
job.cpactions_os = "freebsd"
|
||||
job.cpactions_version = "13.3"
|
||||
job.cpactions_version = "14.2"
|
||||
job.cpactions_arch = "x86-64"
|
||||
job.cpactions_setup_cmd = "sudo pkg update"
|
||||
job.cpactions_install_cmd = "sudo pkg install -y cmake ninja pkgconf libXcursor libXext libXinerama libXi libXfixes libXrandr libXScrnSaver libXxf86vm wayland wayland-protocols libxkbcommon mesa-libs libglvnd evdev-proto libinotify alsa-lib jackit pipewire pulseaudio sndio dbus zh-fcitx ibus libudev-devd"
|
||||
|
||||
25
.github/workflows/generic.yml
vendored
25
.github/workflows/generic.yml
vendored
@@ -90,7 +90,8 @@ jobs:
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
if: ${{ matrix.platform.platform == 'msvc' }}
|
||||
with:
|
||||
arch: ${{ matrix.platform.msvc-vcvars }}
|
||||
arch: ${{ matrix.platform.msvc-vcvars-arch }}
|
||||
sdk: ${{ matrix.platform.msvc-vcvars-sdk }}
|
||||
- name: 'Set up Windows GDK Desktop'
|
||||
uses: ./.github/actions/setup-gdk-desktop
|
||||
if: ${{ matrix.platform.setup-gdk-folder != '' }}
|
||||
@@ -169,9 +170,9 @@ jobs:
|
||||
-DSDLTEST_TRACKMEM=ON \
|
||||
-DSDL_INSTALL_TESTS=${{ matrix.platform.build-tests }} \
|
||||
-DSDL_CLANG_TIDY=${{ matrix.platform.clang-tidy }} \
|
||||
-DSDL_DISABLE_INSTALL_DOCS=OFF \
|
||||
-DSDL_DISABLE_INSTALL_CPACK=OFF \
|
||||
-DSDL_DISABLE_INSTALL_DOCS=OFF \
|
||||
-DSDL_INSTALL_DOCS=ON \
|
||||
-DSDL_INSTALL_CPACK=ON \
|
||||
-DSDL_INSTALL_DOCS=ON \
|
||||
${{ matrix.platform.cmake-arguments }} \
|
||||
-DSDL_SHARED=${{ matrix.platform.shared }} \
|
||||
-DSDL_STATIC=${{ matrix.platform.static }} \
|
||||
@@ -206,7 +207,7 @@ jobs:
|
||||
ctest -VV --test-dir build/ -j2
|
||||
- name: "Build test apk's (CMake)"
|
||||
id: apks
|
||||
if: ${{ steps.build.outcome == 'success' && matrix.platform.android-apks != '' }}
|
||||
if: ${{ always() && steps.build.outcome == 'success' && matrix.platform.android-apks != '' }}
|
||||
# shell: ${{ matrix.platform.shell }}
|
||||
run: |
|
||||
${{ matrix.platform.source-cmd }}
|
||||
@@ -217,7 +218,7 @@ jobs:
|
||||
-- ${{ matrix.platform.cmake-build-arguments }}
|
||||
- name: 'Install (CMake)'
|
||||
id: install
|
||||
if: ${{ steps.build.outcome == 'success' }}
|
||||
if: ${{ always() && steps.build.outcome == 'success' }}
|
||||
# shell: ${{ matrix.platform.shell }}
|
||||
run: |
|
||||
${{ matrix.platform.source-cmd }}
|
||||
@@ -226,7 +227,7 @@ jobs:
|
||||
( cd prefix; find . ) | LC_ALL=C sort -u
|
||||
- name: 'Package (CPack)'
|
||||
id: package
|
||||
if: ${{ steps.build.outcome == 'success' }}
|
||||
if: ${{ always() && steps.build.outcome == 'success' }}
|
||||
# shell: ${{ matrix.platform.shell }}
|
||||
run: |
|
||||
# DMG creation on macOS occasionally fails, so try multiple times
|
||||
@@ -280,11 +281,11 @@ jobs:
|
||||
- name: 'Build (cross-platform-actions, BSD)'
|
||||
id: cpactions
|
||||
if: ${{ matrix.platform.cpactions }}
|
||||
uses: cross-platform-actions/action@v0.25.0
|
||||
uses: cross-platform-actions/action@v0.26.0
|
||||
with:
|
||||
operating_system: ${{ matrix.platform.cpactions-os }}
|
||||
architecture: ${{ matrix.platform.cpactions-arch }}
|
||||
version: ${{ matrix.platform.cpactions-version }}
|
||||
operating_system: '${{ matrix.platform.cpactions-os }}'
|
||||
architecture: '${{ matrix.platform.cpactions-arch }}'
|
||||
version: '${{ matrix.platform.cpactions-version }}'
|
||||
run: |
|
||||
${{ matrix.platform.cpactions-setup-cmd }}
|
||||
${{ matrix.platform.cpactions-install-cmd }}
|
||||
@@ -292,7 +293,7 @@ jobs:
|
||||
${{ matrix.platform.cmake-toolchain-file != '' && format('-DCMAKE_TOOLCHAIN_FILE={0}', matrix.platform.cmake-toolchain-file) || '' }} \
|
||||
-Wdeprecated -Wdev -Werror \
|
||||
-DSDL_WERROR=${{ matrix.platform.werror }} \
|
||||
-DSDL_DISABLE_INSTALL_DOCS=OFF \
|
||||
-DSDL_INSTALL_DOCS=ON \
|
||||
${{ matrix.platform.cmake-arguments }} \
|
||||
-DSDL_SHARED=${{ matrix.platform.shared }} \
|
||||
-DSDL_STATIC=${{ matrix.platform.static }} \
|
||||
|
||||
36
.github/workflows/release.yml
vendored
36
.github/workflows/release.yml
vendored
@@ -47,6 +47,14 @@ jobs:
|
||||
with:
|
||||
name: sources
|
||||
path: '${{ github.workspace}}/dist'
|
||||
- name: 'Generate summary'
|
||||
run: |
|
||||
echo "Run the following commands to download all artifacts:" >> $GITHUB_STEP_SUMMARY
|
||||
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||
echo "mkdir -p /tmp/${{ steps.releaser.outputs.project }}-${{ steps.releaser.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "cd /tmp/${{ steps.releaser.outputs.project }}-${{ steps.releaser.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "gh run -R ${{ github.repository }} download ${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
linux-verify:
|
||||
needs: [src]
|
||||
@@ -77,6 +85,14 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
${{ steps.tar.outputs.path }}/build-scripts/test-versioning.sh
|
||||
- name: 'Install Linux dependencies'
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y \
|
||||
gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev \
|
||||
libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev \
|
||||
libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
|
||||
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev
|
||||
- name: 'CMake (configure + build + tests + examples)'
|
||||
run: |
|
||||
cmake -S ${{ steps.tar.outputs.path }} -B /tmp/build -DSDL_TEST_LIBRARY=TRUE -DSDL_TESTS=TRUE -DSDL_EXAMPLES=TRUE
|
||||
@@ -163,7 +179,7 @@ jobs:
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \
|
||||
-DCMAKE_SYSTEM_NAME=Darwin \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
|
||||
-Werror=dev \
|
||||
-B build_darwin
|
||||
cmake --build build_darwin --config Release --verbose
|
||||
@@ -175,7 +191,7 @@ jobs:
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}/SDL3.xcframework/macos-arm64_x86_64" \
|
||||
-DCMAKE_SYSTEM_NAME=Darwin \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
|
||||
-Werror=dev \
|
||||
-B build_darwin_2
|
||||
cmake --build build_darwin --config Release --verbose
|
||||
@@ -188,7 +204,7 @@ jobs:
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
|
||||
-Werror=dev \
|
||||
-B build_ios
|
||||
cmake --build build_ios --config Release --verbose
|
||||
@@ -201,7 +217,7 @@ jobs:
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \
|
||||
-DCMAKE_SYSTEM_NAME=tvOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
|
||||
-Werror=dev \
|
||||
-B build_tvos
|
||||
cmake --build build_tvos --config Release --verbose
|
||||
@@ -217,7 +233,7 @@ jobs:
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
|
||||
-Werror=dev \
|
||||
-B build_ios_simulator
|
||||
cmake --build build_ios_simulator --config Release --verbose
|
||||
@@ -233,7 +249,7 @@ jobs:
|
||||
-DCMAKE_SYSTEM_NAME=tvOS \
|
||||
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||
-DCMAKE_OSX_SYSROOT="${sysroot}" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
|
||||
-Werror=dev \
|
||||
-B build_tvos_simulator
|
||||
cmake --build build_tvos_simulator --config Release --verbose
|
||||
@@ -586,8 +602,11 @@ jobs:
|
||||
- name: 'Extract Android SDK from AAR'
|
||||
id: sdk
|
||||
run: |
|
||||
python "${{ github.workspace }}/${{ needs.android.outputs.android-aar }}" -o /tmp/SDL3-android
|
||||
cd /tmp
|
||||
unzip "${{ github.workspace }}/${{ needs.android.outputs.android-aar }}"
|
||||
python "${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}.aar" -o /tmp/SDL3-android
|
||||
echo "prefix=/tmp/SDL3-android" >>$GITHUB_OUTPUT
|
||||
echo "sdl3-aar=/tmp/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}.aar" >>$GITHUB_OUTPUT
|
||||
- name: 'CMake (configure + build) x86, x64, arm32, arm64'
|
||||
run: |
|
||||
android_abis="x86 x86_64 armeabi-v7a arm64-v8a"
|
||||
@@ -600,7 +619,6 @@ jobs:
|
||||
-DCMAKE_PREFIX_PATH="${{ steps.sdk.outputs.prefix }}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake \
|
||||
-DANDROID_ABI=${android_abi} \
|
||||
-Werror=dev \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-B "${android_abi}"
|
||||
echo "Building ${android_abi}..."
|
||||
@@ -618,7 +636,7 @@ jobs:
|
||||
echo "path=/tmp/projects/org.libsdl.testspriteminimal" >>$GITHUB_OUTPUT
|
||||
- name: 'Copy SDL3 aar into Gradle project'
|
||||
run: |
|
||||
cp "${{ github.workspace }}/${{ needs.android.outputs.android-aar }}" "${{ steps.create-gradle-project.outputs.path }}/app/libs"
|
||||
cp "${{ steps.sdk.outputs.sdl3-aar }}" "${{ steps.create-gradle-project.outputs.path }}/app/libs"
|
||||
|
||||
echo ""
|
||||
echo "Project contents:"
|
||||
|
||||
@@ -3,7 +3,7 @@ projectshortname = SDL
|
||||
incsubdir = include/SDL3
|
||||
wikisubdir =
|
||||
readmesubdir = docs
|
||||
apiprefixregex = (SDL_|SDLK_)
|
||||
apiprefixregex = (SDL_|SDLK_|[US]int\d+)
|
||||
mainincludefname = SDL3/SDL.h
|
||||
versionfname = include/SDL3/SDL_version.h
|
||||
versionmajorregex = \A\#define\s+SDL_MAJOR_VERSION\s+(\d+)\Z
|
||||
@@ -16,8 +16,17 @@ bugreporturl = https://github.com/libsdl-org/sdlwiki/issues/new
|
||||
warn_about_missing = 0
|
||||
wikipreamble = (This is the documentation for SDL3, which is the current stable version. [SDL2](https://wiki.libsdl.org/SDL2/) was the previous version!)
|
||||
wikiheaderfiletext = Defined in [<SDL3/%fname%>](https://github.com/libsdl-org/SDL/blob/main/include/SDL3/%fname%)
|
||||
|
||||
manpageheaderfiletext = Defined in SDL3/%fname%
|
||||
manpagesymbolfilterregex = \A[US]int\d+\Z
|
||||
|
||||
# All SDL_test_* headers become undefined categories, everything else just converts like SDL_audio.h -> Audio
|
||||
# A handful of others we fix up in the header itself with /* WIKI CATEGORY: x */ comments.
|
||||
headercategoryeval = s/\ASDL_test_?.*?\.h\Z//; s/\ASDL_?(.*?)\.h\Z/$1/; ucfirst();
|
||||
|
||||
quickrefenabled = 1
|
||||
quickrefcategoryorder = Init,Hints,Error,Version,Properties,Log,Video,Events,Keyboard,Mouse,Touch,Gamepad,Joystick,Haptic,Audio,Time,Timer,Render,SharedObject,Thread,Mutex,Atomic,Filesystem,IOStream,AsyncIO,Storage,Pixels,Surface,Blendmode,Rect,Camera,Clipboard,Dialog,GPU,Messagebox,Vulkan,Metal,Platform,Power,Sensor,Process,Bits,Endian,Assert,CPUInfo,Intrinsics,Locale,System,Misc,GUID,Main,Stdinc
|
||||
quickreftitle = SDL3 API Quick Reference
|
||||
quickrefurl = https://libsdl.org/
|
||||
quickrefdesc = The latest version of this document can be found at https://wiki.libsdl.org/SDL3/QuickReference
|
||||
quickrefmacroregex = \A(SDL_PLATFORM_.*|SDL_.*_INTRINSICS|SDL_Atomic...Ref|SDL_assert.*?|SDL_COMPILE_TIME_ASSERT|SDL_arraysize|SDL_Swap[BL]E\d\d|SDL_[a-z]+_cast)\Z
|
||||
|
||||
@@ -30,11 +30,13 @@ LOCAL_SRC_FILES := \
|
||||
$(wildcard $(LOCAL_PATH)/src/core/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/core/android/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \
|
||||
$(LOCAL_PATH)/src/dialog/SDL_dialog.c \
|
||||
$(LOCAL_PATH)/src/dialog/SDL_dialog_utils.c \
|
||||
$(LOCAL_PATH)/src/dialog/android/SDL_androiddialog.c \
|
||||
$(wildcard $(LOCAL_PATH)/src/dynapi/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/events/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/file/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/io/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/io/generic/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/gpu/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/gpu/vulkan/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
|
||||
@@ -76,6 +78,8 @@ LOCAL_SRC_FILES := \
|
||||
$(wildcard $(LOCAL_PATH)/src/time/unix/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/timer/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/tray/dummy/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/tray/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/video/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/video/android/*.c) \
|
||||
$(wildcard $(LOCAL_PATH)/src/video/yuv2rgb/*.c))
|
||||
|
||||
7
BUGS.txt
7
BUGS.txt
@@ -11,6 +11,9 @@ You may also find help at the SDL forums/mailing list:
|
||||
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
Bug reports are welcome here, but we really appreciate if you use the issue
|
||||
tracker, as bugs discussed on the mailing list may be forgotten or missed.
|
||||
or on Discord:
|
||||
|
||||
https://discord.com/invite/BwpFGBWsv8
|
||||
|
||||
Bug reports are welcome here, but we really appreciate if you use the issue tracker, as bugs discussed on the mailing list or Discord may be forgotten or missed.
|
||||
|
||||
|
||||
221
CMakeLists.txt
221
CMakeLists.txt
@@ -1,12 +1,33 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(cmake_build_type_undefined 1)
|
||||
endif()
|
||||
|
||||
# See docs/release_checklist.md
|
||||
project(SDL3 LANGUAGES C VERSION "3.1.6")
|
||||
project(SDL3 LANGUAGES C VERSION "3.1.10")
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||
set(SDL3_SUBPROJECT OFF)
|
||||
set(SDL3_MAINPROJECT ON)
|
||||
else()
|
||||
set(SDL3_SUBPROJECT ON)
|
||||
set(SDL3_MAINPROJECT OFF)
|
||||
endif()
|
||||
|
||||
# By default, configure SDL3 in RelWithDebInfo configuration
|
||||
if(SDL3_MAINPROJECT)
|
||||
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(is_multi_config)
|
||||
# The first item in CMAKE_CONFIGURATION_TYPES is the default configuration
|
||||
if(DEFINED CMAKE_CONFIGURATION_TYPES AND "RelWithDebInfo" IN_LIST CMAKE_CONFIGURATION_TYPES)
|
||||
list(REMOVE_ITEM CMAKE_CONFIGURATION_TYPES "RelWithDebInfo")
|
||||
list(INSERT CMAKE_CONFIGURATION_TYPES 0 "RelWithDebInfo")
|
||||
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "CMake configuration types" FORCE)
|
||||
endif()
|
||||
else()
|
||||
if(cmake_build_type_undefined)
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "CMake build type" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# CMake 3.0 expands the "if(${A})" in "set(OFF 1);set(A OFF);if(${A})" to "if(1)"
|
||||
@@ -151,6 +172,11 @@ if(WINDOWS OR MACOS OR IOS OR TVOS OR VISIONOS OR WATCHOS)
|
||||
set(SDL_SYSTEM_ICONV_DEFAULT OFF)
|
||||
endif()
|
||||
|
||||
set(SDL_RELOCATABLE_DEFAULT OFF)
|
||||
if(MSVC)
|
||||
set(SDL_RELOCATABLE_DEFAULT ON)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
if(NOT SDL_LIBC)
|
||||
# Make sure /RTC1 is disabled, otherwise it will use functions from the CRT
|
||||
@@ -255,14 +281,20 @@ if(COMMAND SDL_Preseed_CMakeCache)
|
||||
set(SDL_PRESEED_AVAILABLE ON)
|
||||
endif()
|
||||
|
||||
# Allow some projects to be built conditionally.
|
||||
set_option(SDL_DISABLE_INSTALL "Disable installation of SDL3" ${SDL3_SUBPROJECT})
|
||||
cmake_dependent_option(SDL_DISABLE_INSTALL_CPACK "Create binary SDL3 archive using CPack" ${SDL3_SUBPROJECT} "NOT SDL_DISABLE_INSTALL" ON)
|
||||
cmake_dependent_option(SDL_DISABLE_INSTALL_DOCS "Install docs for SDL3" ON "NOT SDL_DISABLE_INSTALL;NOT SDL_FRAMEWORK" ON)
|
||||
set_option(SDL_DISABLE_UNINSTALL "Disable uninstallation of SDL3" OFF)
|
||||
cmake_dependent_option(SDL_PRESEED "Preseed CMake cache to speed up configuration" ON "${SDL_PRESEED_AVAILABLE}" OFF)
|
||||
set(SDL_X11_XRANDR_DEFAULT ON)
|
||||
if(SOLARIS)
|
||||
set(SDL_X11_XRANDR_DEFAULT OFF)
|
||||
endif()
|
||||
|
||||
cmake_dependent_option(SDL_DISABLE_ANDROID_JAR "Disable creation of SDL3.jar" ${SDL3_SUBPROJECT} "ANDROID" ON)
|
||||
# Allow some projects to be built conditionally.
|
||||
set_option(SDL_INSTALL "Enable installation of SDL3" ${SDL3_MAINPROJECT})
|
||||
cmake_dependent_option(SDL_INSTALL_CPACK "Create binary SDL3 archive using CPack" ${SDL3_MAINPROJECT} "SDL_INSTALL" ON)
|
||||
cmake_dependent_option(SDL_INSTALL_DOCS "Install docs for SDL3" OFF "SDL_INSTALL;NOT SDL_FRAMEWORK" ON)
|
||||
set_option(SDL_UNINSTALL "Enable uninstallation of SDL3" ${SDL3_MAINPROJECT})
|
||||
cmake_dependent_option(SDL_PRESEED "Preseed CMake cache to speed up configuration" ON "${SDL_PRESEED_AVAILABLE}" OFF)
|
||||
cmake_dependent_option(SDL_RELOCATABLE "Create relocatable SDL package" ${SDL_RELOCATABLE_DEFAULT} "SDL_INSTALL" OFF)
|
||||
|
||||
cmake_dependent_option(SDL_ANDROID_JAR "Enable creation of SDL3.jar" ${SDL3_MAINPROJECT} "ANDROID" ON)
|
||||
|
||||
option_string(SDL_ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
|
||||
set_option(SDL_ASSEMBLY "Enable assembly routines" ${SDL_ASSEMBLY_DEFAULT})
|
||||
@@ -276,7 +308,6 @@ dep_option(SDL_SSE4_1 "Use SSE4.1 assembly routines" ON "SDL_ASSEMB
|
||||
dep_option(SDL_SSE4_2 "Use SSE4.2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
||||
dep_option(SDL_MMX "Use MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
||||
dep_option(SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_POWERPC32 OR SDL_CPU_POWERPC64" OFF)
|
||||
dep_option(SDL_ARMSIMD "Use SIMD assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF)
|
||||
dep_option(SDL_ARMNEON "Use NEON assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
|
||||
dep_option(SDL_LSX "Use LSX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF)
|
||||
dep_option(SDL_LASX "Use LASX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF)
|
||||
@@ -286,6 +317,7 @@ set_option(SDL_SYSTEM_ICONV "Use iconv() from system-installed libraries"
|
||||
set_option(SDL_LIBICONV "Prefer iconv() from libiconv, if available, over libc version" OFF)
|
||||
set_option(SDL_GCC_ATOMICS "Use gcc builtin atomics" ${SDL_GCC_ATOMICS_DEFAULT})
|
||||
dep_option(SDL_DBUS "Enable D-Bus support" ON "${UNIX_SYS}" OFF)
|
||||
dep_option(SDL_LIBURING "Enable liburing support" ON "${UNIX_SYS}" OFF)
|
||||
dep_option(SDL_DISKAUDIO "Support the disk writer audio driver" ON "SDL_AUDIO" OFF)
|
||||
dep_option(SDL_DUMMYAUDIO "Support the dummy audio driver" ON "SDL_AUDIO" OFF)
|
||||
dep_option(SDL_DUMMYVIDEO "Use dummy video driver" ON "SDL_VIDEO" OFF)
|
||||
@@ -309,11 +341,14 @@ set_option(SDL_RPATH "Use an rpath when linking SDL" ${SDL_RPATH_D
|
||||
set_option(SDL_CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" ${SDL_CLOCK_GETTIME_DEFAULT})
|
||||
dep_option(SDL_X11 "Use X11 video driver" ${UNIX_SYS} "SDL_VIDEO" OFF)
|
||||
dep_option(SDL_X11_SHARED "Dynamically load X11 support" ON "SDL_X11" OFF)
|
||||
set(SDL_X11_OPTIONS Xcursor Xdbe XInput Xfixes Xrandr Xscrnsaver XShape)
|
||||
foreach(_SUB ${SDL_X11_OPTIONS})
|
||||
string(TOUPPER "SDL_X11_${_SUB}" _OPT)
|
||||
dep_option(${_OPT} "Enable ${_SUB} support" ON "SDL_X11" OFF)
|
||||
endforeach()
|
||||
dep_option(SDL_X11_XCURSOR "Enable Xcursor support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XDBE "Enable Xdbe support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XINPUT "Enable XInput support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XFIXES "Enable Xfixes support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XRANDR "Enable Xrandr support" "${SDL_X11_XRANDR_DEFAULT}" SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XSCRNSAVER "Enable Xscrnsaver support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XSHAPE "Enable XShape support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_X11_XSYNC "Enable Xsync support" ON SDL_X11 OFF)
|
||||
dep_option(SDL_WAYLAND "Use Wayland video driver" ${UNIX_SYS} "SDL_VIDEO" OFF)
|
||||
dep_option(SDL_WAYLAND_SHARED "Dynamically load Wayland support" ON "SDL_WAYLAND" OFF)
|
||||
dep_option(SDL_WAYLAND_LIBDECOR "Use client-side window decorations on Wayland" ON "SDL_WAYLAND" OFF)
|
||||
@@ -358,7 +393,7 @@ cmake_dependent_option(SDL_STATIC "Build a static version of the library" ${SDL_
|
||||
option(SDL_TEST_LIBRARY "Build the SDL3_test library" ON)
|
||||
|
||||
dep_option(SDL_TESTS "Build the test directory" OFF SDL_TEST_LIBRARY OFF)
|
||||
dep_option(SDL_INSTALL_TESTS "Install test-cases" OFF "NOT SDL_DISABLE_INSTALL;NOT SDL_FRAMEWORK" OFF)
|
||||
dep_option(SDL_INSTALL_TESTS "Install test-cases" OFF "SDL_INSTALL;NOT SDL_FRAMEWORK" OFF)
|
||||
dep_option(SDL_TESTS_LINK_SHARED "link tests to shared SDL library" "${SDL_SHARED}" "SDL_SHARED;SDL_STATIC" "${SDL_SHARED}")
|
||||
set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account for really slow machines")
|
||||
|
||||
@@ -462,16 +497,21 @@ else()
|
||||
sdl_include_directories(NO_EXPORT SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src/video/khronos>")
|
||||
endif()
|
||||
|
||||
if(MSVC AND TARGET SDL3-shared)
|
||||
if(MSVC AND TARGET SDL3-shared AND NOT SDL_LIBC)
|
||||
if(SDL_CPU_X64)
|
||||
enable_language(ASM_MASM)
|
||||
set(asm_src "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc_x64.masm")
|
||||
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MASM>:/nologo>")
|
||||
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MASM")
|
||||
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
||||
elseif(SDL_CPU_ARM32 OR SDL_CPU_ARM64)
|
||||
# FIXME: ARM assembler (armasm.exe/armasm64.exe) is NOT ASM_MASM, and does currently not work with CMake
|
||||
# (https://gitlab.kitware.com/cmake/cmake/-/issues/18912)
|
||||
elseif(SDL_CPU_ARM64)
|
||||
enable_language(ASM_MARMASM)
|
||||
set(asm_src "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc_arm64.masm")
|
||||
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MARMASM>:/nologo>")
|
||||
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MARMASM")
|
||||
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
||||
elseif(SDL_CPU_ARM32)
|
||||
# FIXME
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -915,7 +955,7 @@ endif()
|
||||
set(SDL_DISABLE_ALLOCA 0)
|
||||
check_include_file("alloca.h" "HAVE_ALLOCA_H")
|
||||
if(MSVC)
|
||||
check_include_file("malloc.h" "HAVE_MALLOC")
|
||||
check_include_file("malloc.h" "HAVE_MALLOC_H")
|
||||
check_symbol_exists("_alloca" "malloc.h" _ALLOCA_IN_MALLOC_H)
|
||||
if(NOT HAVE_ALLOCA_H AND NOT _ALLOCA_IN_MALLOC_H)
|
||||
set(SDL_DISABLE_ALLOCA 1)
|
||||
@@ -961,15 +1001,15 @@ if(SDL_LIBC)
|
||||
set(symbols_to_check
|
||||
abs acos acosf asin asinf atan atan2 atan2f atanf atof atoi
|
||||
bcopy
|
||||
calloc ceil ceilf copysign copysignf cos cosf
|
||||
ceil ceilf copysign copysignf cos cosf
|
||||
_Exit exp expf
|
||||
fabs fabsf floor floorf fmod fmodf fopen64 free fseeko fseeko64
|
||||
fabs fabsf floor floorf fmod fmodf fopen64 fseeko fseeko64
|
||||
getenv
|
||||
_i64toa index itoa
|
||||
log log10 log10f logf lround lroundf _ltoa
|
||||
malloc memcmp memcpy memmove memset modf modff
|
||||
pow powf putenv
|
||||
realloc rindex round roundf
|
||||
rindex round roundf
|
||||
scalbn scalbnf setenv sin sinf sqr sqrt sqrtf sscanf strchr
|
||||
strcmp strlcat strlcpy strlen strncmp strnlen strpbrk
|
||||
strrchr strstr strnstr strtod strtok_r strtol strtoll strtoul strtoull
|
||||
@@ -980,7 +1020,7 @@ if(SDL_LIBC)
|
||||
)
|
||||
if(WINDOWS)
|
||||
list(APPEND symbols_to_check
|
||||
_strrev _ui64toa _uitoa _ultoa _wcsdup
|
||||
_copysign _fseeki64 _strrev _ui64toa _uitoa _ultoa _wcsdup
|
||||
)
|
||||
else()
|
||||
list(APPEND symbols_to_check
|
||||
@@ -1118,7 +1158,8 @@ sdl_glob_sources(
|
||||
"${SDL3_SOURCE_DIR}/src/cpuinfo/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/dynapi/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/events/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/file/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/io/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/io/generic/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/filesystem/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/gpu/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/joystick/*.c"
|
||||
@@ -1295,7 +1336,6 @@ if(ANDROID)
|
||||
set(SDL_JOYSTICK_ANDROID 1)
|
||||
sdl_glob_sources(
|
||||
"${SDL3_SOURCE_DIR}/src/joystick/android/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/joystick/steam/*.c"
|
||||
)
|
||||
set(HAVE_SDL_JOYSTICK TRUE)
|
||||
endif()
|
||||
@@ -1378,7 +1418,7 @@ if(ANDROID)
|
||||
set(HAVE_CLOCK_GETTIME 1)
|
||||
endif()
|
||||
|
||||
if(NOT SDL_DISABLE_ANDROID_JAR)
|
||||
if(SDL_ANDROID_JAR)
|
||||
find_package(Java)
|
||||
find_package(SdlAndroidPlatform MODULE)
|
||||
|
||||
@@ -1408,7 +1448,7 @@ if(ANDROID)
|
||||
DEPENDS ${SDL_JAVA_SOURCES}
|
||||
)
|
||||
add_custom_target(SDL3-javasources ALL DEPENDS "${javasourcesjar}")
|
||||
if(NOT SDL_DISABLE_INSTALL_DOCS)
|
||||
if(SDL_INSTALL_DOCS)
|
||||
set(javadocdir "${SDL3_BINARY_DIR}/docs/javadoc")
|
||||
set(javadocjar "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-javadoc.jar")
|
||||
set(javadoc_index_html "${javadocdir}/index.html")
|
||||
@@ -1545,6 +1585,9 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
||||
CheckVivante()
|
||||
CheckVulkan()
|
||||
CheckQNXScreen()
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/tray/unix/*.c")
|
||||
set(HAVE_SDL_TRAY TRUE)
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
@@ -1657,6 +1700,16 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
||||
set(SDL_USE_IME 1)
|
||||
endif()
|
||||
|
||||
if(SDL_LIBURING)
|
||||
pkg_search_module(LIBURING liburing-ffi)
|
||||
find_path(HAVE_LIBURING_H NAMES liburing.h)
|
||||
if(LIBURING_FOUND AND HAVE_LIBURING_H)
|
||||
set(HAVE_LIBURING_LIBURING_H TRUE)
|
||||
sdl_include_directories(PRIVATE SYSTEM ${LIBURING_INCLUDE_DIRS})
|
||||
set(HAVE_LIBURING TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if((FREEBSD OR NETBSD) AND NOT HAVE_INOTIFY)
|
||||
set(LibInotify_PKG_CONFIG_SPEC libinotify)
|
||||
pkg_check_modules(PC_LIBINOTIFY IMPORTED_TARGET ${LibInotify_PKG_CONFIG_SPEC})
|
||||
@@ -1720,6 +1773,10 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(HAVE_LIBURING_H)
|
||||
sdl_sources("${SDL3_SOURCE_DIR}/src/io/io_uring/SDL_asyncio_liburing.c")
|
||||
endif()
|
||||
|
||||
# Always compiled for Linux, unconditionally:
|
||||
sdl_sources(
|
||||
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_capabilities.c"
|
||||
@@ -1741,7 +1798,6 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
||||
set(SDL_JOYSTICK_LINUX 1)
|
||||
sdl_glob_sources(
|
||||
"${SDL3_SOURCE_DIR}/src/joystick/linux/*.c"
|
||||
"${SDL3_SOURCE_DIR}/src/joystick/steam/*.c"
|
||||
)
|
||||
set(HAVE_SDL_JOYSTICK TRUE)
|
||||
endif()
|
||||
@@ -1833,12 +1889,15 @@ elseif(WINDOWS)
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c")
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/windows/*.c")
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/io/windows/*.c")
|
||||
|
||||
if(TARGET SDL3-shared AND MSVC AND NOT SDL_LIBC)
|
||||
# Prevent codegen that would use the VC runtime libraries.
|
||||
target_compile_options(SDL3-shared PRIVATE $<$<COMPILE_LANGUAGE:C,CXX>:/GS-> $<$<COMPILE_LANGUAGE:C,CXX>:/Gs1048576>)
|
||||
target_compile_options(SDL_uclibc PRIVATE $<$<COMPILE_LANGUAGE:C,CXX>:/GS-> $<$<COMPILE_LANGUAGE:C,CXX>:/Gs1048576>)
|
||||
if(SDL_CPU_X86)
|
||||
target_compile_options(SDL3-shared PRIVATE "/arch:SSE")
|
||||
target_compile_options(SDL3-SDL_uclibc PRIVATE "/arch:SSE")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -2040,6 +2099,9 @@ elseif(WINDOWS)
|
||||
set(HAVE_RENDER_VULKAN TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/tray/windows/*.c")
|
||||
set(HAVE_SDL_TRAY TRUE)
|
||||
endif()
|
||||
|
||||
if(SDL_HIDAPI)
|
||||
@@ -2113,8 +2175,6 @@ elseif(APPLE)
|
||||
set(HAVE_SDL_MAIN_CALLBACKS TRUE)
|
||||
endif()
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/file/cocoa/*.m")
|
||||
|
||||
if(SDL_CAMERA)
|
||||
if(MACOS OR IOS)
|
||||
set(SDL_CAMERA_DRIVER_COREMEDIA 1)
|
||||
@@ -2146,7 +2206,6 @@ elseif(APPLE)
|
||||
if(SDL_JOYSTICK)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/apple/*.m")
|
||||
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/steam/*.c")
|
||||
set(SDL_JOYSTICK_MFI 1)
|
||||
if(IOS OR VISIONOS OR WATCHOS)
|
||||
set(SDL_FRAMEWORK_COREMOTION 1)
|
||||
@@ -2319,6 +2378,11 @@ elseif(APPLE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MACOS)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/tray/cocoa/*.m")
|
||||
set(HAVE_SDL_TRAY TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Minimum version for $<LINK_LIBRARY:feature,library-list>
|
||||
@@ -2334,6 +2398,8 @@ elseif(APPLE)
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_COCOA)
|
||||
sdl_link_dependency(cocoa LIBS "$<LINK_LIBRARY:FRAMEWORK,Cocoa>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Cocoa")
|
||||
# macOS 11.0+ iOS 14.0+ tvOS 14.0+
|
||||
sdl_link_dependency(uniformtypeidentifiers LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,UniformTypeIdentifiers>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,UniformTypeIdentifiers")
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_IOKIT)
|
||||
sdl_link_dependency(iokit LIBS "$<LINK_LIBRARY:FRAMEWORK,IOKit>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,IOKit")
|
||||
@@ -2368,25 +2434,17 @@ elseif(APPLE)
|
||||
if(SDL_FRAMEWORK_GAMECONTROLLER)
|
||||
find_library(GAMECONTROLLER GameController)
|
||||
if(GAMECONTROLLER)
|
||||
sdl_link_dependency(game_controller LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,GameController>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,GameController")
|
||||
sdl_link_dependency(game_controller LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,GameController>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,GameController")
|
||||
endif()
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_METAL)
|
||||
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
||||
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:FRAMEWORK,Metal>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Metal")
|
||||
else()
|
||||
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,Metal>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,Metal")
|
||||
endif()
|
||||
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:FRAMEWORK,Metal>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Metal")
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_OPENGLES)
|
||||
sdl_link_dependency(opengles LIBS "$<LINK_LIBRARY:FRAMEWORK,OpenGLES>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,OpenGLES")
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_QUARTZCORE)
|
||||
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
||||
sdl_link_dependency(quartz_core LIBS "$<LINK_LIBRARY:FRAMEWORK,QuartzCore>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,QuartzCore")
|
||||
else()
|
||||
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,QuartzCore>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,QuartzCore")
|
||||
endif()
|
||||
sdl_link_dependency(quartz_core LIBS "$<LINK_LIBRARY:FRAMEWORK,QuartzCore>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,QuartzCore")
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_UIKIT)
|
||||
sdl_link_dependency(ui_kit LIBS "$<LINK_LIBRARY:FRAMEWORK,UIKit>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,UIKit")
|
||||
@@ -2394,7 +2452,8 @@ elseif(APPLE)
|
||||
if(SDL_FRAMEWORK_COREHAPTICS)
|
||||
find_library(COREHAPTICS CoreHaptics)
|
||||
if(COREHAPTICS)
|
||||
sdl_link_dependency(core_haptics LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreHaptics>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreHaptics")
|
||||
# macOS 10.15+ iOS 13.0+ tvOS 14.0+
|
||||
sdl_link_dependency(core_haptics LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreHaptics>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,CoreHaptics")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -2675,7 +2734,9 @@ elseif(PSP)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/psp/*.c")
|
||||
set(HAVE_SDL_FILESYSTEM TRUE)
|
||||
|
||||
# !!! FIXME: do we need a FSops implementation for this?
|
||||
set(SDL_FSOPS_POSIX 1)
|
||||
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
||||
set(HAVE_SDL_FSOPS TRUE)
|
||||
|
||||
if(SDL_JOYSTICK)
|
||||
set(SDL_JOYSTICK_PSP 1)
|
||||
@@ -2698,6 +2759,9 @@ elseif(PSP)
|
||||
)
|
||||
set(HAVE_SDL_THREADS TRUE)
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/psp/*.c")
|
||||
set(HAVE_SDL_LOCALE TRUE)
|
||||
|
||||
set(SDL_TIME_PSP 1)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/psp/*.c")
|
||||
set(HAVE_SDL_TIME TRUE)
|
||||
@@ -2729,10 +2793,6 @@ elseif(PSP)
|
||||
)
|
||||
|
||||
elseif(PS2)
|
||||
sdl_compile_definitions(PRIVATE "PS2" "__PS2__")
|
||||
sdl_include_directories(PRIVATE SYSTEM "$ENV{PS2SDK}/ports/include" "$ENV{PS2DEV}/gsKit/include")
|
||||
target_include_directories(SDL_uclibc PRIVATE "$ENV{PS2SDK}/ports/include" "$ENV{PS2DEV}/gsKit/include")
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/ps2/*.c")
|
||||
|
||||
if(SDL_AUDIO)
|
||||
@@ -2745,7 +2805,9 @@ elseif(PS2)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/ps2/*.c")
|
||||
set(HAVE_SDL_FILESYSTEM TRUE)
|
||||
|
||||
# !!! FIXME: do we need a FSops implementation for this?
|
||||
set(SDL_FSOPS_POSIX 1)
|
||||
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
||||
set(HAVE_SDL_FSOPS TRUE)
|
||||
|
||||
if(SDL_JOYSTICK)
|
||||
set(SDL_JOYSTICK_PS2 1)
|
||||
@@ -2851,9 +2913,10 @@ elseif(N3DS)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/n3ds/*.c")
|
||||
set(HAVE_SDL_LOCALE TRUE)
|
||||
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/file/n3ds/*.c")
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/io/n3ds/*.c")
|
||||
endif()
|
||||
|
||||
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog.c)
|
||||
if (SDL_DIALOG)
|
||||
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog_utils.c)
|
||||
if(ANDROID)
|
||||
@@ -2872,7 +2935,6 @@ if (SDL_DIALOG)
|
||||
set(HAVE_SDL_DIALOG TRUE)
|
||||
elseif(MACOS)
|
||||
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/cocoa/SDL_cocoadialog.m)
|
||||
sdl_link_dependency(uniformtypeidentifiers LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,UniformTypeIdentifiers>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,UniformTypeIdentifiers")
|
||||
set(HAVE_SDL_DIALOG TRUE)
|
||||
endif()
|
||||
endif()
|
||||
@@ -2937,6 +2999,8 @@ if(SDL_VIDEO)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
sdl_glob_sources(${SDL3_SOURCE_DIR}/src/tray/*.c)
|
||||
|
||||
if(SDL_GPU)
|
||||
if(HAVE_D3D11_H)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/gpu/d3d11/*.c")
|
||||
@@ -3019,6 +3083,10 @@ if(NOT HAVE_SDL_PROCESS)
|
||||
set(SDL_PROCESS_DUMMY 1)
|
||||
sdl_glob_sources(${SDL3_SOURCE_DIR}/src/process/dummy/*.c)
|
||||
endif()
|
||||
if(NOT HAVE_SDL_TRAY)
|
||||
set(SDL_TRAY_DUMMY 1)
|
||||
sdl_glob_sources(${SDL3_SOURCE_DIR}/src/tray/dummy/*.c)
|
||||
endif()
|
||||
if(NOT HAVE_CAMERA)
|
||||
set(SDL_CAMERA_DRIVER_DUMMY 1)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/dummy/*.c")
|
||||
@@ -3063,15 +3131,17 @@ endforeach()
|
||||
|
||||
# If REVISION.txt exists, then we are building from a SDL release.
|
||||
# SDL_revision.h(.cmake) in source releases have SDL_REVISION baked into them.
|
||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/REVISION.txt")
|
||||
set(SDL_REVISION "" CACHE STRING "Custom SDL revision")
|
||||
if(SDL_REVISION)
|
||||
set(SDL_REVISION_CENTER "${SDL_VERSION_MAJOR}.${SDL_VERSION_MINOR}.${SDL_VERSION_MICRO}-${SDL_REVISION}")
|
||||
else()
|
||||
# If SDL_REVISION is not overrided, use git to describe
|
||||
git_describe(SDL_REVISION_CENTER)
|
||||
endif()
|
||||
set(SDL_REVISION "SDL3-${SDL_REVISION_CENTER}")
|
||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/REVISION.txt")
|
||||
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/REVISION.txt" revisions)
|
||||
list(GET revisions 0 revisions_0)
|
||||
string(STRIP "${revisions_0}" SDL_REVISION)
|
||||
else()
|
||||
set(SDL_REVISION "" CACHE STRING "Custom SDL revision (only used when REVISION.txt does not exist)")
|
||||
endif()
|
||||
if(NOT SDL_REVISION)
|
||||
# If SDL_REVISION is not overrided, use git to describe
|
||||
git_describe(SDL_REVISION_GIT)
|
||||
set(SDL_REVISION "SDL3-${SDL3_VERSION}-${SDL_REVISION_GIT}")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${SDL3_BINARY_DIR}/include-revision/SDL3")
|
||||
@@ -3261,8 +3331,8 @@ endif()
|
||||
set_source_files_properties(src/dynapi/SDL_dynapi.c PROPERTIES SKIP_PRECOMPILE_HEADERS 1)
|
||||
|
||||
set(SDL_FRAMEWORK_RESOURCES
|
||||
Xcode/SDL/pkg-support/resources/ReadMe.txt
|
||||
LICENSE.txt
|
||||
README.md
|
||||
)
|
||||
if(SDL_FRAMEWORK)
|
||||
sdl_sources(${SDL_FRAMEWORK_RESOURCES})
|
||||
@@ -3319,6 +3389,17 @@ if(SDL_SHARED)
|
||||
# (__rt_sdiv, __rt_udiv, __rt_sdiv64, _rt_udiv64, __dtou64, __u64tod, __i64tos)
|
||||
target_link_libraries(SDL3-shared PRIVATE msvcrt.lib)
|
||||
endif()
|
||||
find_library(HAVE_ONECORE_LIB NAMES "onecore.lib")
|
||||
if(HAVE_ONECORE_LIB)
|
||||
# SDL_malloc.c: __imp_MapViewOfFileNuma2 referenced in function MapViewOfFile2
|
||||
target_link_libraries(SDL3-shared PRIVATE onecore.lib)
|
||||
endif()
|
||||
find_library(HAVE_VOLATILEACCESSU_LIB NAMES "volatileaccessu.lib")
|
||||
if(HAVE_VOLATILEACCESSU_LIB)
|
||||
# SDL_malloc.c : RtlSetVolatileMemory referenced in function RtlFillVolatileMemory
|
||||
# SDL_malloc.c : RtlFillDeviceMemory referenced in function RtlZeroDeviceMemory
|
||||
target_link_libraries(SDL3-shared PRIVATE volatileaccessu.lib)
|
||||
endif()
|
||||
endif()
|
||||
if(HAS_Q_NO_USE_LIBIRC)
|
||||
target_compile_options(SDL3-shared PRIVATE /Q_no-use-libirc)
|
||||
@@ -3435,7 +3516,7 @@ endif()
|
||||
if(WINDOWS AND NOT MINGW)
|
||||
set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "cmake")
|
||||
else()
|
||||
set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake")
|
||||
set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake/SDL3")
|
||||
endif()
|
||||
set(SDL_INSTALL_CMAKEDIR_ROOT "${SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3Config.cmake related files (SDL3 subfolder for MSVC projects)")
|
||||
|
||||
@@ -3455,7 +3536,7 @@ elseif(SDL_FRAMEWORK)
|
||||
set(SDL_INSTALL_LICENSEDIR "Resources")
|
||||
set(SDL_INSTALL_HEADERSDIR "Headers")
|
||||
else()
|
||||
set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}/SDL3")
|
||||
set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}")
|
||||
set(SDL_INSTALL_LICENSEDIR "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}")
|
||||
set(SDL_INSTALL_HEADERSDIR "${CMAKE_INSTALL_INCLUDEDIR}/SDL3")
|
||||
endif()
|
||||
@@ -3522,7 +3603,7 @@ if(sdl_cmake_modules)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${sdl_cmake_modules} "${SDL3_BINARY_DIR}")
|
||||
endif()
|
||||
|
||||
if(NOT SDL_DISABLE_INSTALL)
|
||||
if(SDL_INSTALL)
|
||||
|
||||
##### sdl3.pc #####
|
||||
configure_sdl3_pc()
|
||||
@@ -3622,7 +3703,7 @@ if(NOT SDL_DISABLE_INSTALL)
|
||||
install(FILES "LICENSE.txt" DESTINATION "${SDL_INSTALL_LICENSEDIR}")
|
||||
endif()
|
||||
|
||||
if(NOT SDL_DISABLE_INSTALL_CPACK)
|
||||
if(SDL_INSTALL_CPACK)
|
||||
if(SDL_FRAMEWORK)
|
||||
set(CPACK_GENERATOR "DragNDrop")
|
||||
elseif(MSVC)
|
||||
@@ -3663,7 +3744,7 @@ if(NOT SDL_DISABLE_INSTALL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT SDL_DISABLE_INSTALL_DOCS)
|
||||
if(SDL_INSTALL_DOCS)
|
||||
SDL_generate_manpages(
|
||||
HEADERS_DIR "${PROJECT_SOURCE_DIR}/include/SDL3"
|
||||
SYMBOL "SDL_Init"
|
||||
@@ -3680,7 +3761,7 @@ endif()
|
||||
|
||||
##### Uninstall target #####
|
||||
|
||||
if(NOT SDL_DISABLE_UNINSTALL)
|
||||
if(SDL_UNINSTALL)
|
||||
if(NOT TARGET uninstall)
|
||||
configure_file(cmake/cmake_uninstall.cmake.in cmake_uninstall.cmake IMMEDIATE @ONLY)
|
||||
|
||||
|
||||
@@ -4,6 +4,10 @@ Thanks to everyone who made this possible, including:
|
||||
|
||||
- Cliff Matthews, for giving me a reason to start this project. :) -- Executor rocks! *grin*
|
||||
- Ryan Gordon for helping everybody out and keeping the dream alive. :)
|
||||
- Frank Praznik for his Wayland support and general windowing development.
|
||||
- Ozkan Sezer for sanity checks and make sure the i's are dotted and t's are crossed.
|
||||
- Anonymous Maarten for CMake support and build system development.
|
||||
- Evan Hemsley, Caleb Cornett, and Ethan Lee for SDL GPU development.
|
||||
- Gabriel Jacobo for his work on the Android port and generally helping out all around.
|
||||
- Philipp Wiesemann for his attention to detail reviewing the entire SDL code base and proposes patches.
|
||||
- Andreas Schiffler for his dedication to unit tests, Visual Studio projects, and managing the Google Summer of Code.
|
||||
@@ -24,7 +28,7 @@ Thanks to everyone who made this possible, including:
|
||||
- Holmes Futrell for his port of SDL to the iPhone and iPod Touch during the
|
||||
Google Summer of Code 2008.
|
||||
- Jon Atkins for SDL_image, SDL_mixer and SDL_net documentation.
|
||||
- Everybody at Loki Software, Inc. for their great contributions!
|
||||
- Everybody at Loki Software, Inc. and Valve Corporation for their great contributions!
|
||||
|
||||
And a big hand to everyone else who has contributed over the years.
|
||||
|
||||
|
||||
73
INSTALL.md
73
INSTALL.md
@@ -1,68 +1,47 @@
|
||||
# To compile and install SDL:
|
||||
# To build and use SDL:
|
||||
|
||||
## Windows with Visual Studio:
|
||||
SDL supports a number of development environments:
|
||||
- [CMake](docs/INTRO-cmake.md)
|
||||
- [Visual Studio on Windows](docs/INTRO-visualstudio.md)
|
||||
- [Xcode on Apple platforms](docs/INTRO-xcode.md)
|
||||
- [Android Studio](docs/INTRO-androidstudio.md)
|
||||
- [Emscripten for web](docs/INTRO-emscripten.md)
|
||||
|
||||
Read ./docs/README-visualc.md
|
||||
SDL is also usable in other environments. The basic steps are to use CMake to build the library and then use the headers and library that you built in your project. You can search online to see if anyone has specific steps for your setup.
|
||||
|
||||
## Windows building with mingw-w64 for x86:
|
||||
# Documentation
|
||||
|
||||
Run: `cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-i686.cmake && cmake --build build && cmake --install build`
|
||||
An API reference, tutorials, and additional documentation is available at:
|
||||
|
||||
## Windows building with mingw-w64 for x64:
|
||||
|
||||
Run: `cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-x86_64.cmake && cmake --build build && cmake --install build`
|
||||
|
||||
## macOS with Xcode:
|
||||
|
||||
Read docs/README-macos.md
|
||||
|
||||
## macOS from the command line:
|
||||
|
||||
Run: `cmake -S . -B build && cmake --build build && cmake --install build`
|
||||
|
||||
### macOS for universal architecture:
|
||||
|
||||
Run: `cmake -S . -B build -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" && cmake --build build && cmake --install build`
|
||||
|
||||
## Linux and other UNIX systems:
|
||||
|
||||
Run: `cmake -S . -B build && cmake --build build && cmake --install build`
|
||||
|
||||
## Android:
|
||||
|
||||
Read docs/README-android.md
|
||||
|
||||
## iOS:
|
||||
|
||||
Read docs/README-ios.md
|
||||
|
||||
## Using CMake:
|
||||
|
||||
Read docs/README-cmake.md
|
||||
https://wiki.libsdl.org/SDL3
|
||||
|
||||
# Example code
|
||||
|
||||
Look at the example programs in ./test, and check out the online
|
||||
documentation at https://wiki.libsdl.org/SDL3/
|
||||
There are simple example programs in the examples directory, and you can view them online at:
|
||||
|
||||
# Discussion
|
||||
https://examples.libsdl.org/SDL3
|
||||
|
||||
More in-depth test programs are available in the tests directory and can be built by adding `-DSDL_TESTS=ON` to the CMake command line when building SDL.
|
||||
|
||||
# Discussions
|
||||
|
||||
## Discord
|
||||
|
||||
You can join the official Discord server at:
|
||||
|
||||
https://discord.com/invite/BwpFGBWsv8
|
||||
|
||||
## Forums/mailing lists
|
||||
|
||||
Join the SDL developer discussions, sign up on
|
||||
You can join SDL development discussions at:
|
||||
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
and go to the development forum
|
||||
|
||||
https://discourse.libsdl.org/c/sdl-development/6
|
||||
|
||||
Once you sign up, you can use the forum through the website, or as a mailing
|
||||
list from your email client.
|
||||
Once you sign up, you can use the forum through the website or as a mailing list from your email client.
|
||||
|
||||
## Announcement list
|
||||
|
||||
Sign up for the announcement list through the web interface:
|
||||
You can sign up for the low traffic announcement list at:
|
||||
|
||||
https://www.libsdl.org/mailing-list.php
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2025 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,13 +0,0 @@
|
||||
|
||||
Please distribute this file with the SDL runtime environment:
|
||||
|
||||
The Simple DirectMedia Layer (SDL for short) is a cross-platform library
|
||||
designed to make it easy to write multi-media software, such as games
|
||||
and emulators.
|
||||
|
||||
The Simple DirectMedia Layer library source code is available from:
|
||||
https://www.libsdl.org/
|
||||
|
||||
This library is distributed under the terms of the zlib license:
|
||||
http://www.zlib.net/zlib_license.html
|
||||
|
||||
16
README.md
16
README.md
@@ -1,16 +1,16 @@
|
||||
|
||||
# Simple DirectMedia Layer (SDL) Version 3.0
|
||||
Simple DirectMedia Layer (SDL for short) is a cross-platform library
|
||||
designed to make it easy to write multi-media software, such as games
|
||||
and emulators.
|
||||
|
||||
You can find the latest release and additional information at:
|
||||
https://www.libsdl.org/
|
||||
|
||||
Simple DirectMedia Layer is a cross-platform development library designed
|
||||
to provide low level access to audio, keyboard, mouse, joystick, and graphics
|
||||
hardware. It is used by video playback software, emulators, and popular games
|
||||
including Valve's award winning catalog and many Humble Bundle games.
|
||||
Installation instructions and a quick introduction is available in
|
||||
[INSTALL.md](INSTALL.md)
|
||||
|
||||
More extensive documentation is available in the docs directory, starting
|
||||
with [README.md](docs/README.md). If you are migrating to SDL 3.0 from SDL 2.0,
|
||||
the changes are extensively documented in [README-migration.md](docs/README-migration.md).
|
||||
This library is distributed under the terms of the zlib license,
|
||||
available in [LICENSE.txt](LICENSE.txt).
|
||||
|
||||
Enjoy!
|
||||
|
||||
|
||||
@@ -102,10 +102,10 @@
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'" />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'">
|
||||
<IncludePath>$(SolutionDir)/../src;$(IncludePath)</IncludePath>
|
||||
<IncludePath>$(ProjectDir)../../src;$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'">
|
||||
<IncludePath>$(SolutionDir)/../src;$(IncludePath)</IncludePath>
|
||||
<IncludePath>$(ProjectDir)../../src;$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'">
|
||||
<Midl>
|
||||
@@ -165,8 +165,10 @@
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>$(SolutionDir)..\src\render\direct3d12\compile_shaders_xbox.bat $(SolutionDir)</Command>
|
||||
<Command>$(SolutionDir)..\src\gpu\d3d12\compile_shaders_xbox.bat $(SolutionDir)</Command>
|
||||
<Command>
|
||||
call $(ProjectDir)..\..\src\render\direct3d12\compile_shaders_xbox.bat $(ProjectDir)..\
|
||||
call $(ProjectDir)..\..\src\gpu\d3d12\compile_shaders_xbox.bat $(ProjectDir)..\
|
||||
</Command>
|
||||
</PreBuildEvent>
|
||||
<PreBuildEvent>
|
||||
<Message>Building shader blobs (Xbox Series)</Message>
|
||||
@@ -200,8 +202,10 @@
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>$(SolutionDir)..\src\render\direct3d12\compile_shaders_xbox.bat $(SolutionDir) one</Command>
|
||||
<Command>$(SolutionDir)..\src\gpu\d3d12\compile_shaders_xbox.bat $(SolutionDir) one</Command>
|
||||
<Command>
|
||||
call $(ProjectDir)..\..\src\render\direct3d12\compile_shaders_xbox.bat $(ProjectDir)..\ one
|
||||
call $(ProjectDir)..\..\src\gpu\d3d12\compile_shaders_xbox.bat $(ProjectDir)..\ one
|
||||
</Command>
|
||||
</PreBuildEvent>
|
||||
<PreBuildEvent>
|
||||
<Message>Building shader blobs (Xbox One)</Message>
|
||||
@@ -267,8 +271,10 @@
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>$(SolutionDir)..\src\render\direct3d12\compile_shaders_xbox.bat $(SolutionDir)</Command>
|
||||
<Command>$(SolutionDir)..\src\gpu\d3d12\compile_shaders_xbox.bat $(SolutionDir)</Command>
|
||||
<Command>
|
||||
call $(ProjectDir)..\..\src\render\direct3d12\compile_shaders_xbox.bat $(ProjectDir)..\
|
||||
call $(ProjectDir)..\..\src\gpu\d3d12\compile_shaders_xbox.bat $(ProjectDir)..\
|
||||
</Command>
|
||||
</PreBuildEvent>
|
||||
<PreBuildEvent>
|
||||
<Message>Building shader blobs (Xbox Series)</Message>
|
||||
@@ -303,8 +309,10 @@
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>$(SolutionDir)..\src\render\direct3d12\compile_shaders_xbox.bat $(SolutionDir) one</Command>
|
||||
<Command>$(SolutionDir)..\src\gpu\d3d12\compile_shaders_xbox.bat $(SolutionDir) one</Command>
|
||||
<Command>
|
||||
call $(ProjectDir)..\..\src\render\direct3d12\compile_shaders_xbox.bat $(ProjectDir)..\ one
|
||||
call $(ProjectDir)..\..\src\gpu\d3d12\compile_shaders_xbox.bat $(ProjectDir)..\ one
|
||||
</Command>
|
||||
</PreBuildEvent>
|
||||
<PreBuildEvent>
|
||||
<Message>Building shader blobs (Xbox One)</Message>
|
||||
@@ -339,6 +347,7 @@
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_haptic.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_hints.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_hidapi.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_asyncio.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_joystick.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_keyboard.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_keycode.h" />
|
||||
@@ -432,6 +441,8 @@
|
||||
<ClInclude Include="..\..\src\events\SDL_windowevents_c.h" />
|
||||
<ClInclude Include="..\..\src\filesystem\SDL_sysfilesystem.h" />
|
||||
<ClInclude Include="..\..\src\gpu\SDL_sysgpu.h" />
|
||||
<ClInclude Include="..\..\src\io\SDL_asyncio_c.h" />
|
||||
<ClInclude Include="..\..\src\io\SDL_sysasyncio.h" />
|
||||
<ClInclude Include="..\..\src\haptic\SDL_haptic_c.h" />
|
||||
<ClInclude Include="..\..\src\haptic\SDL_syshaptic.h" />
|
||||
<ClInclude Include="..\..\src\haptic\windows\SDL_dinputhaptic_c.h" />
|
||||
@@ -514,9 +525,13 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\camera\dummy\SDL_camera_dummy.c" />
|
||||
<ClCompile Include="..\..\src\camera\SDL_camera.c" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog.c" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog_utils.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\SDL_filesystem.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfsops.c" />
|
||||
<ClCompile Include="..\..\src\io\generic\SDL_asyncio_generic.c" />
|
||||
<ClCompile Include="..\..\src\io\SDL_asyncio.c" />
|
||||
<ClCompile Include="..\..\src\io\windows\SDL_asyncio_windows_ioring.c" />
|
||||
<ClCompile Include="..\..\src\main\gdk\SDL_sysmain_runapp.cpp" />
|
||||
<ClCompile Include="..\..\src\main\generic\SDL_sysmain_callbacks.c" />
|
||||
<ClCompile Include="..\..\src\main\SDL_main_callbacks.c" />
|
||||
@@ -577,6 +592,7 @@
|
||||
<ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" />
|
||||
<ClInclude Include="..\..\src\video\SDL_yuv_c.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_msctf.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_surface_utils.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsclipboard.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsevents.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsframebuffer.h" />
|
||||
@@ -616,7 +632,6 @@
|
||||
<ClCompile Include="..\..\src\audio\SDL_mixer.c" />
|
||||
<ClCompile Include="..\..\src\audio\SDL_wave.c" />
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c" />
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi_win32.c" />
|
||||
<ClCompile Include="..\..\src\core\SDL_core_unsupported.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\SDL_hid.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\SDL_immdevice.c" />
|
||||
@@ -658,7 +673,7 @@
|
||||
<ClCompile Include="..\..\src\events\SDL_quit.c" />
|
||||
<ClCompile Include="..\..\src\events\SDL_touch.c" />
|
||||
<ClCompile Include="..\..\src\events\SDL_windowevents.c" />
|
||||
<ClCompile Include="..\..\src\file\SDL_iostream.c" />
|
||||
<ClCompile Include="..\..\src\io\SDL_iostream.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\gdk\SDL_sysfilesystem.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'">true</ExcludedFromBuild>
|
||||
@@ -725,31 +740,7 @@
|
||||
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'">CompileAsCpp</CompileAs>
|
||||
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'">CompileAsCpp</CompileAs>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_atan2.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_exp.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_fmod.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_log.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_log10.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_pow.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_rem_pio2.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_sqrt.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_cos.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_rem_pio2.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_sin.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_tan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_atan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_copysign.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_cos.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isinf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isinff.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isnan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isnanf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
||||
<ClCompile Include="..\..\src\loadso\windows\SDL_sysloadso.c" />
|
||||
<ClCompile Include="..\..\src\locale\SDL_locale.c" />
|
||||
<ClCompile Include="..\..\src\locale\windows\SDL_syslocale.c" />
|
||||
@@ -837,6 +828,17 @@
|
||||
<ClCompile Include="..\..\src\timer\windows\SDL_systimer.c" />
|
||||
<ClCompile Include="..\..\src\time\SDL_time.c" />
|
||||
<ClCompile Include="..\..\src\time\windows\SDL_systime.c" />
|
||||
<ClCompile Include="..\..\src\tray\dummy\SDL_tray.c">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\tray\windows\SDL_tray.c">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\tray\SDL_tray_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullevents.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullframebuffer.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullvideo.c" />
|
||||
@@ -865,6 +867,7 @@
|
||||
<ClCompile Include="..\..\src\video\SDL_video_unsupported.c" />
|
||||
<ClCompile Include="..\..\src\video\SDL_vulkan_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\SDL_yuv.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_surface_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsclipboard.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsevents.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsframebuffer.c" />
|
||||
@@ -884,7 +887,6 @@
|
||||
<ClCompile Include="..\..\src\video\yuv2rgb\yuv_rgb_sse.c" />
|
||||
<ClCompile Include="..\..\src\video\yuv2rgb\yuv_rgb_std.c" />
|
||||
<ClCompile Include="..\..\src\gpu\SDL_gpu.c" />
|
||||
<ClCompile Include="..\..\src\gpu\d3d11\SDL_gpu_d3d11.c" />
|
||||
<ClCompile Include="..\..\src\gpu\d3d12\SDL_gpu_d3d12.c">
|
||||
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">CompileAsCpp</CompileAs>
|
||||
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">CompileAsCpp</CompileAs>
|
||||
|
||||
@@ -4,15 +4,6 @@
|
||||
<ClCompile Include="..\..\src\core\gdk\SDL_gdk.cpp" />
|
||||
<ClCompile Include="..\..\src\core\windows\pch.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\pch_cpp.cpp" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog_utils.c">
|
||||
<Filter>dialog</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\filesystem\SDL_filesystem.c">
|
||||
<Filter>filesystem</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfsops.c">
|
||||
<Filter>filesystem\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\render\direct3d12\SDL_render_d3d12_xbox.cpp" />
|
||||
<ClCompile Include="..\..\src\render\direct3d12\SDL_shaders_d3d12_xboxone.cpp" />
|
||||
<ClCompile Include="..\..\src\render\direct3d12\SDL_shaders_d3d12_xboxseries.cpp" />
|
||||
@@ -35,7 +26,6 @@
|
||||
<ClCompile Include="..\..\src\audio\SDL_mixer.c" />
|
||||
<ClCompile Include="..\..\src\audio\SDL_wave.c" />
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c" />
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi_win32.c" />
|
||||
<ClCompile Include="..\..\src\core\SDL_core_unsupported.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\SDL_hid.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\SDL_immdevice.c" />
|
||||
@@ -55,10 +45,9 @@
|
||||
<ClCompile Include="..\..\src\events\SDL_quit.c" />
|
||||
<ClCompile Include="..\..\src\events\SDL_touch.c" />
|
||||
<ClCompile Include="..\..\src\events\SDL_windowevents.c" />
|
||||
<ClCompile Include="..\..\src\file\SDL_iostream.c" />
|
||||
<ClCompile Include="..\..\src\io\SDL_iostream.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\gdk\SDL_sysfilesystem.cpp" />
|
||||
<ClCompile Include="..\..\src\gpu\SDL_gpu.c" />
|
||||
<ClCompile Include="..\..\src\gpu\d3d11\SDL_gpu_d3d11.c" />
|
||||
<ClCompile Include="..\..\src\gpu\d3d12\SDL_gpu_d3d12.c" />
|
||||
<ClCompile Include="..\..\src\gpu\vulkan\SDL_gpu_vulkan.c" />
|
||||
<ClCompile Include="..\..\src\haptic\dummy\SDL_syshaptic.c" />
|
||||
@@ -96,31 +85,7 @@
|
||||
<ClCompile Include="..\..\src\joystick\windows\SDL_windowsjoystick.c" />
|
||||
<ClCompile Include="..\..\src\joystick\windows\SDL_windows_gaming_input.c" />
|
||||
<ClCompile Include="..\..\src\joystick\windows\SDL_xinputjoystick.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_atan2.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_exp.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_fmod.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_log.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_log10.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_pow.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_rem_pio2.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_sqrt.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_cos.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_rem_pio2.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_sin.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_tan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_atan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_copysign.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_cos.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isinf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isinff.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isnan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isnanf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
||||
<ClCompile Include="..\..\src\loadso\windows\SDL_sysloadso.c" />
|
||||
<ClCompile Include="..\..\src\locale\SDL_locale.c" />
|
||||
<ClCompile Include="..\..\src\locale\windows\SDL_syslocale.c" />
|
||||
@@ -191,12 +156,6 @@
|
||||
<ClCompile Include="..\..\src\thread\windows\SDL_systls.c" />
|
||||
<ClCompile Include="..\..\src\timer\SDL_timer.c" />
|
||||
<ClCompile Include="..\..\src\timer\windows\SDL_systimer.c" />
|
||||
<ClCompile Include="..\..\src\time\SDL_time.c">
|
||||
<Filter>time</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\time\windows\SDL_systime.c">
|
||||
<Filter>time\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullevents.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullframebuffer.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullvideo.c" />
|
||||
@@ -222,6 +181,7 @@
|
||||
<ClCompile Include="..\..\src\video\SDL_video_unsupported.c" />
|
||||
<ClCompile Include="..\..\src\video\SDL_vulkan_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\SDL_yuv.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_surface_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsclipboard.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsevents.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsframebuffer.c" />
|
||||
@@ -237,8 +197,33 @@
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsvideo.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsvulkan.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowswindow.c" />
|
||||
<ClCompile Include="..\..\src\video\yuv2rgb\yuv_rgb.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfilesystem.c" />
|
||||
<ClCompile Include="..\..\src\camera\dummy\SDL_camera_dummy.c" />
|
||||
<ClCompile Include="..\..\src\camera\SDL_camera.c" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog.c" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog_utils.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\SDL_filesystem.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfsops.c" />
|
||||
<ClCompile Include="..\..\src\io\generic\SDL_asyncio_generic.c" />
|
||||
<ClCompile Include="..\..\src\io\SDL_asyncio.c" />
|
||||
<ClCompile Include="..\..\src\io\windows\SDL_asyncio_windows_ioring.c" />
|
||||
<ClCompile Include="..\..\src\dialog\dummy\SDL_dummydialog.c" />
|
||||
<ClCompile Include="..\..\src\dialog\windows\SDL_windowsdialog.c" />
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_pipeline_gpu.c" />
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_render_gpu.c" />
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_shaders_gpu.c" />
|
||||
<ClCompile Include="..\..\src\render\vulkan\SDL_render_vulkan.c" />
|
||||
<ClCompile Include="..\..\src\render\vulkan\SDL_shaders_vulkan.c" />
|
||||
<ClCompile Include="..\..\src\storage\generic\SDL_genericstorage.c" />
|
||||
<ClCompile Include="..\..\src\storage\SDL_storage.c" />
|
||||
<ClCompile Include="..\..\src\time\SDL_time.c" />
|
||||
<ClCompile Include="..\..\src\time\windows\SDL_systime.c" />
|
||||
<ClCompile Include="..\..\src\tray\dummy\SDL_tray.c" />
|
||||
<ClCompile Include="..\..\src\tray\windows\SDL_tray.c" />
|
||||
<ClCompile Include="..\..\src\tray\SDL_tray_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\yuv2rgb\yuv_rgb_lsx.c" />
|
||||
<ClCompile Include="..\..\src\video\yuv2rgb\yuv_rgb_sse.c" />
|
||||
<ClCompile Include="..\..\src\video\yuv2rgb\yuv_rgb_std.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_begin_code.h" />
|
||||
@@ -350,9 +335,6 @@
|
||||
<ClInclude Include="..\..\src\events\SDL_mouse_c.h" />
|
||||
<ClInclude Include="..\..\src\events\SDL_touch_c.h" />
|
||||
<ClInclude Include="..\..\src\events\SDL_windowevents_c.h" />
|
||||
<ClInclude Include="..\..\src\filesystem\SDL_sysfilesystem.h">
|
||||
<Filter>filesystem</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\gpu\SDL_sysgpu.h" />
|
||||
<ClInclude Include="..\..\src\haptic\SDL_haptic_c.h" />
|
||||
<ClInclude Include="..\..\src\haptic\SDL_syshaptic.h" />
|
||||
@@ -457,6 +439,7 @@
|
||||
<ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" />
|
||||
<ClInclude Include="..\..\src\video\SDL_yuv_c.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_msctf.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_surface_utils.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsclipboard.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsevents.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsframebuffer.h" />
|
||||
@@ -476,6 +459,21 @@
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_sse_func.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_std_func.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_camera.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_asyncio.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_storage.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_time.h" />
|
||||
<ClInclude Include="..\..\src\camera\SDL_camera_c.h" />
|
||||
<ClInclude Include="..\..\src\camera\SDL_syscamera.h" />
|
||||
<ClInclude Include="..\..\src\filesystem\SDL_sysfilesystem.h" />
|
||||
<ClInclude Include="..\..\src\io\SDL_asyncio_c.h" />
|
||||
<ClInclude Include="..\..\src\io\SDL_sysasyncio.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_common.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_internal.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_lsx.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_lsx_func.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_sse.h" />
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_std.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\..\src\core\windows\version.rc" />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2025 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
|
||||
|
||||
@@ -71,7 +71,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "01-read-and-draw", "example
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "game", "game", "{D1BF59F6-22DC-493B-BDEB-451A50DA793D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "01-snake", "examples\game\01-snake\01-snake.vcxproj", "{7820969A-5B7B-4046-BB0A-82905D457FC5}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "01-snake", "examples\demo\01-snake\01-snake.vcxproj", "{7820969A-5B7B-4046-BB0A-82905D457FC5}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pen", "pen", "{F2247885-8EE8-42F4-A702-4155587620E0}"
|
||||
EndProject
|
||||
@@ -111,9 +111,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "18-debug-text", "examples\r
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03-load-wav", "examples\audio\03-load-wav\03-load-wav.vcxproj", "{608C6C67-7766-471F-BBFF-8B00086039AF}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "02-woodeneye-008", "examples\game\02-woodeneye-008\02-woodeneye-008.vcxproj", "{A3F601E0-B54C-4DD8-8A97-FDEF7624EE60}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "02-woodeneye-008", "examples\demo\02-woodeneye-008\02-woodeneye-008.vcxproj", "{A3F601E0-B54C-4DD8-8A97-FDEF7624EE60}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03-infinite-monkeys", "examples\game\03-infinite-monkeys\03-infinite-monkeys.vcxproj", "{75AEE75A-C016-4497-960B-D767B822237D}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03-infinite-monkeys", "examples\demo\03-infinite-monkeys\03-infinite-monkeys.vcxproj", "{75AEE75A-C016-4497-960B-D767B822237D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
@@ -113,13 +112,14 @@
|
||||
<PreprocessorDefinitions>DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<DebugInformationFormat>OldStyle</DebugInformationFormat>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>SDL_internal.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<DisableSpecificWarnings>4100;4127;4152;4201</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@@ -144,13 +144,14 @@
|
||||
<AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<PreprocessorDefinitions>DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<DebugInformationFormat>OldStyle</DebugInformationFormat>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>SDL_internal.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<DisableSpecificWarnings>4100;4127;4152;4201</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@@ -179,13 +180,14 @@
|
||||
<PreprocessorDefinitions>DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>SDL_internal.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<DisableSpecificWarnings>4100;4127;4152;4201</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@@ -211,13 +213,14 @@
|
||||
<AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
<PreprocessorDefinitions>DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>SDL_internal.h</PrecompiledHeaderFile>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<DisableSpecificWarnings>4100;4127;4152;4201</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@@ -259,6 +262,7 @@
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_haptic.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_hints.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_hidapi.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_asyncio.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_joystick.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_keyboard.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_keycode.h" />
|
||||
@@ -352,6 +356,8 @@
|
||||
<ClInclude Include="..\..\src\filesystem\SDL_sysfilesystem.h" />
|
||||
<ClInclude Include="..\..\src\gpu\SDL_sysgpu.h" />
|
||||
<ClInclude Include="..\..\src\gpu\vulkan\SDL_gpu_vulkan_vkfuncs.h" />
|
||||
<ClInclude Include="..\..\src\io\SDL_asyncio_c.h" />
|
||||
<ClInclude Include="..\..\src\io\SDL_sysasyncio.h" />
|
||||
<ClInclude Include="..\..\src\haptic\SDL_haptic_c.h" />
|
||||
<ClInclude Include="..\..\src\haptic\SDL_syshaptic.h" />
|
||||
<ClInclude Include="..\..\src\haptic\windows\SDL_dinputhaptic_c.h" />
|
||||
@@ -409,13 +415,16 @@
|
||||
<ClCompile Include="..\..\src\camera\dummy\SDL_camera_dummy.c" />
|
||||
<ClCompile Include="..\..\src\camera\mediafoundation\SDL_camera_mediafoundation.c" />
|
||||
<ClCompile Include="..\..\src\camera\SDL_camera.c" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog.c" />
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog_utils.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\SDL_filesystem.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfsops.c" />
|
||||
<ClCompile Include="..\..\src\io\windows\SDL_asyncio_windows_ioring.c" />
|
||||
<ClCompile Include="..\..\src\gpu\SDL_gpu.c" />
|
||||
<ClCompile Include="..\..\src\gpu\d3d11\SDL_gpu_d3d11.c" />
|
||||
<ClCompile Include="..\..\src\gpu\d3d12\SDL_gpu_d3d12.c" />
|
||||
<ClCompile Include="..\..\src\gpu\vulkan\SDL_gpu_vulkan.c" />
|
||||
<ClCompile Include="..\..\src\io\generic\SDL_asyncio_generic.c" />
|
||||
<ClCompile Include="..\..\src\io\SDL_asyncio.c" />
|
||||
<ClCompile Include="..\..\src\main\generic\SDL_sysmain_callbacks.c" />
|
||||
<ClCompile Include="..\..\src\main\SDL_main_callbacks.c" />
|
||||
<ClCompile Include="..\..\src\main\SDL_runapp.c" />
|
||||
@@ -483,6 +492,7 @@
|
||||
<ClInclude Include="..\..\src\video\SDL_vulkan_internal.h" />
|
||||
<ClInclude Include="..\..\src\video\SDL_yuv_c.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_msctf.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_surface_utils.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsclipboard.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsevents.h" />
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsframebuffer.h" />
|
||||
@@ -522,7 +532,6 @@
|
||||
<ClCompile Include="..\..\src\audio\SDL_mixer.c" />
|
||||
<ClCompile Include="..\..\src\audio\SDL_wave.c" />
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c" />
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi_win32.c" />
|
||||
<ClCompile Include="..\..\src\core\SDL_core_unsupported.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\SDL_hid.c" />
|
||||
<ClCompile Include="..\..\src\core\windows\SDL_immdevice.c" />
|
||||
@@ -548,7 +557,7 @@
|
||||
<ClCompile Include="..\..\src\events\SDL_quit.c" />
|
||||
<ClCompile Include="..\..\src\events\SDL_touch.c" />
|
||||
<ClCompile Include="..\..\src\events\SDL_windowevents.c" />
|
||||
<ClCompile Include="..\..\src\file\SDL_iostream.c" />
|
||||
<ClCompile Include="..\..\src\io\SDL_iostream.c" />
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfilesystem.c" />
|
||||
<ClCompile Include="..\..\src\haptic\dummy\SDL_syshaptic.c" />
|
||||
<ClCompile Include="..\..\src\haptic\SDL_haptic.c" />
|
||||
@@ -585,31 +594,7 @@
|
||||
<ClCompile Include="..\..\src\joystick\windows\SDL_windowsjoystick.c" />
|
||||
<ClCompile Include="..\..\src\joystick\windows\SDL_windows_gaming_input.c" />
|
||||
<ClCompile Include="..\..\src\joystick\windows\SDL_xinputjoystick.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_atan2.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_exp.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_fmod.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_log.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_log10.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_pow.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_rem_pio2.c" />
|
||||
<ClCompile Include="..\..\src\libm\e_sqrt.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_cos.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_rem_pio2.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_sin.c" />
|
||||
<ClCompile Include="..\..\src\libm\k_tan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_atan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_copysign.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_cos.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isinf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isinff.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isnan.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_isnanf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
||||
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
||||
<ClCompile Include="..\..\src\loadso\windows\SDL_sysloadso.c" />
|
||||
<ClCompile Include="..\..\src\locale\SDL_locale.c" />
|
||||
<ClCompile Include="..\..\src\locale\windows\SDL_syslocale.c" />
|
||||
@@ -665,9 +650,6 @@
|
||||
<ClCompile Include="..\..\src\stdlib\SDL_memmove.c" />
|
||||
<ClCompile Include="..\..\src\stdlib\SDL_memset.c" />
|
||||
<ClCompile Include="..\..\src\stdlib\SDL_mslibc.c" />
|
||||
<MASM Condition="'$(Platform)'=='x64'" Include="..\..\src\stdlib\SDL_mslibc_x64.masm">
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
</MASM>
|
||||
<ClCompile Include="..\..\src\stdlib\SDL_murmur3.c" />
|
||||
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
|
||||
<ClCompile Include="..\..\src\stdlib\SDL_random.c" />
|
||||
@@ -690,6 +672,8 @@
|
||||
<ClCompile Include="..\..\src\timer\windows\SDL_systimer.c" />
|
||||
<ClCompile Include="..\..\src\time\SDL_time.c" />
|
||||
<ClCompile Include="..\..\src\time\windows\SDL_systime.c" />
|
||||
<ClCompile Include="..\..\src\tray\windows\SDL_tray.c" />
|
||||
<ClCompile Include="..\..\src\tray\SDL_tray_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullevents.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullframebuffer.c" />
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullvideo.c" />
|
||||
@@ -720,6 +704,7 @@
|
||||
<ClCompile Include="..\..\src\video\SDL_video_unsupported.c" />
|
||||
<ClCompile Include="..\..\src\video\SDL_vulkan_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\SDL_yuv.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_surface_utils.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsclipboard.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsevents.c" />
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsframebuffer.c" />
|
||||
@@ -744,6 +729,5 @@
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<Filter Include="events">
|
||||
<UniqueIdentifier>{5e27e19f-b3f8-4e2d-b323-b00b2040ec86}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="file">
|
||||
<Filter Include="io">
|
||||
<UniqueIdentifier>{a3ab9cff-8495-4a5c-8af6-27e43199a712}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="filesystem">
|
||||
@@ -211,6 +211,12 @@
|
||||
<Filter Include="main\windows">
|
||||
<UniqueIdentifier>{00009d5ded166cc6c6680ec771a30000}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="io\generic">
|
||||
<UniqueIdentifier>{00004d6806b6238cae0ed62db5440000}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="io\windows">
|
||||
<UniqueIdentifier>{000028b2ea36d7190d13777a4dc70000}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_begin_code.h">
|
||||
@@ -279,6 +285,9 @@
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_hidapi.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_asyncio.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_joystick.h">
|
||||
<Filter>API Headers</Filter>
|
||||
</ClInclude>
|
||||
@@ -438,6 +447,12 @@
|
||||
<ClInclude Include="..\..\src\filesystem\SDL_sysfilesystem.h">
|
||||
<Filter>filesystem</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\io\SDL_asyncio_c.h">
|
||||
<Filter>io</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\io\SDL_sysasyncio.h">
|
||||
<Filter>io</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\main\SDL_main_callbacks.h">
|
||||
<Filter>main</Filter>
|
||||
</ClInclude>
|
||||
@@ -501,9 +516,6 @@
|
||||
<ClInclude Include="..\..\src\dynapi\SDL_dynapi_unsupported.h">
|
||||
<Filter>dynapi</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\events\SDL_categories.h">
|
||||
<Filter>events</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\events\SDL_clipboardevents_c.h">
|
||||
<Filter>events</Filter>
|
||||
</ClInclude>
|
||||
@@ -678,6 +690,9 @@
|
||||
<ClInclude Include="..\..\src\video\yuv2rgb\yuv_rgb_std_func.h">
|
||||
<Filter>video\yuv2rgb</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_surface_utils.h">
|
||||
<Filter>video\windows</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\video\windows\SDL_windowsclipboard.h">
|
||||
<Filter>video\windows</Filter>
|
||||
</ClInclude>
|
||||
@@ -923,6 +938,9 @@
|
||||
<ClInclude Include="..\..\src\gpu\vulkan\SDL_gpu_vulkan_vkfuncs.h">
|
||||
<Filter>gpu</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_storage.h" />
|
||||
<ClInclude Include="..\..\include\SDL3\SDL_time.h" />
|
||||
<ClInclude Include="..\..\src\events\SDL_categories_c.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c" />
|
||||
@@ -935,6 +953,9 @@
|
||||
<ClCompile Include="..\..\src\camera\SDL_camera.c">
|
||||
<Filter>camera</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog.c">
|
||||
<Filter>dialog</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\dialog\SDL_dialog_utils.c">
|
||||
<Filter>dialog</Filter>
|
||||
</ClCompile>
|
||||
@@ -944,6 +965,15 @@
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfsops.c">
|
||||
<Filter>filesystem\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\io\generic\SDL_asyncio_generic.c">
|
||||
<Filter>io\generic</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\io\SDL_asyncio.c">
|
||||
<Filter>io</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\io\windows\SDL_asyncio_windows_ioring.c">
|
||||
<Filter>io\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\main\generic\SDL_sysmain_callbacks.c">
|
||||
<Filter>main\generic</Filter>
|
||||
</ClCompile>
|
||||
@@ -1055,8 +1085,8 @@
|
||||
<ClCompile Include="..\..\src\events\SDL_windowevents.c">
|
||||
<Filter>events</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\file\SDL_iostream.c">
|
||||
<Filter>file</Filter>
|
||||
<ClCompile Include="..\..\src\io\SDL_iostream.c">
|
||||
<Filter>io</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\filesystem\windows\SDL_sysfilesystem.c">
|
||||
<Filter>filesystem\windows</Filter>
|
||||
@@ -1079,81 +1109,9 @@
|
||||
<ClCompile Include="..\..\src\joystick\SDL_steam_virtual_gamepad.c">
|
||||
<Filter>joystick</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_atan2.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_exp.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_fmod.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_log.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_log10.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_pow.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_sqrt.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\e_rem_pio2.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\k_cos.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\k_rem_pio2.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\k_sin.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\k_tan.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_atan.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_copysign.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_cos.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_fabs.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_floor.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_isinf.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_isinff.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_isnan.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_isnanf.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_modf.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_scalbn.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_sin.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\libm\s_tan.c">
|
||||
<Filter>libm</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\loadso\windows\SDL_sysloadso.c">
|
||||
<Filter>loadso\windows</Filter>
|
||||
</ClCompile>
|
||||
@@ -1178,9 +1136,6 @@
|
||||
<ClCompile Include="..\..\src\audio\dummy\SDL_dummyaudio.c">
|
||||
<Filter>audio\dummy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi_win32.c">
|
||||
<Filter>audio\wasapi</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c">
|
||||
<Filter>audio\wasapi</Filter>
|
||||
</ClCompile>
|
||||
@@ -1277,6 +1232,12 @@
|
||||
<ClCompile Include="..\..\src\time\windows\SDL_systime.c">
|
||||
<Filter>time\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\tray\windows\SDL_tray.c">
|
||||
<Filter>video</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\tray\SDL_tray_utils.c">
|
||||
<Filter>video</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\video\SDL_RLEaccel.c">
|
||||
<Filter>video</Filter>
|
||||
</ClCompile>
|
||||
@@ -1349,6 +1310,9 @@
|
||||
<ClCompile Include="..\..\src\video\dummy\SDL_nullvideo.c">
|
||||
<Filter>video\dummy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_surface_utils.c">
|
||||
<Filter>video\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\video\windows\SDL_windowsclipboard.c">
|
||||
<Filter>video\windows</Filter>
|
||||
</ClCompile>
|
||||
@@ -1499,15 +1463,6 @@
|
||||
<ClCompile Include="..\..\src\render\direct3d11\SDL_shaders_d3d11.c">
|
||||
<Filter>render\direct3d11</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_pipeline_gpu.c">
|
||||
<Filter>render\gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_render_gpu.c">
|
||||
<Filter>render\gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_shaders_gpu.c">
|
||||
<Filter>render\gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\render\opengl\SDL_render_gl.c">
|
||||
<Filter>render\opengl</Filter>
|
||||
</ClCompile>
|
||||
@@ -1550,12 +1505,6 @@
|
||||
<ClCompile Include="..\..\src\power\windows\SDL_syspower.c">
|
||||
<Filter>power\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\process\SDL_process.c">
|
||||
<Filter>process</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\process\windows\SDL_windowsprocess.c">
|
||||
<Filter>process\windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\SDL_log.c" />
|
||||
<ClCompile Include="..\..\src\render\direct3d12\SDL_render_d3d12.c">
|
||||
<Filter>render\direct3d12</Filter>
|
||||
@@ -1601,15 +1550,20 @@
|
||||
<ClCompile Include="..\..\src\gpu\SDL_gpu.c">
|
||||
<Filter>gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\gpu\d3d11\SDL_gpu_d3d11.c">
|
||||
<Filter>gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\gpu\d3d12\SDL_gpu_d3d12.c">
|
||||
<Filter>gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\gpu\vulkan\SDL_gpu_vulkan.c">
|
||||
<Filter>gpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\process\SDL_process.c" />
|
||||
<ClCompile Include="..\..\src\process\windows\SDL_windowsprocess.c" />
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_pipeline_gpu.c" />
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_render_gpu.c" />
|
||||
<ClCompile Include="..\..\src\render\gpu\SDL_shaders_gpu.c" />
|
||||
<ClCompile Include="..\..\src\storage\generic\SDL_genericstorage.c" />
|
||||
<ClCompile Include="..\..\src\storage\steam\SDL_steamstorage.c" />
|
||||
<ClCompile Include="..\..\src\storage\SDL_storage.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\..\src\core\windows\version.rc" />
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)\..\examples\game\01-snake\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\game\01-snake\*.c" />
|
||||
<None Include="$(SolutionDir)\..\examples\demo\01-snake\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\demo\01-snake\*.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
||||
@@ -6,8 +6,8 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)\..\examples\game\01-snake\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\game\01-snake\snake.c" />
|
||||
<None Include="$(SolutionDir)\..\examples\demo\01-snake\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\demo\01-snake\snake.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
||||
@@ -6,8 +6,8 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)\..\examples\game\02-woodeneye-008\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\game\02-woodeneye-008\woodeneye-008.c" />
|
||||
<None Include="$(SolutionDir)\..\examples\demo\02-woodeneye-008\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\demo\02-woodeneye-008\woodeneye-008.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
||||
@@ -6,8 +6,8 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)\..\examples\game\03-infinite-monkeys\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\game\03-infinite-monkeys\infinite-monkeys.c" />
|
||||
<None Include="$(SolutionDir)\..\examples\demo\03-infinite-monkeys\README.txt" />
|
||||
<ClCompile Include="$(SolutionDir)\..\examples\demo\03-infinite-monkeys\infinite-monkeys.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
||||
25
WhatsNew.txt
25
WhatsNew.txt
@@ -2,32 +2,13 @@
|
||||
This is a list of major changes in SDL's version history.
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
3.1.0:
|
||||
3.2.0:
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
This is a preview release of the new SDL 3.0 API.
|
||||
|
||||
The ABI hasn't been locked down yet, but it's fairly stable and feedback is welcome!
|
||||
|
||||
Check out [migration guide](docs/README-migration.md) for details on API changes since SDL 2.0, and tips on transitioning your code from SDL2 code to SDL3.
|
||||
|
||||
There have been too many changes to list them all, but here are some of the highlights:
|
||||
* The API has been significantly reworked to be easier to use and more consistent
|
||||
* The 2D rendering API now has support for more advanced colorspaces and HDR rendering
|
||||
* The 2D rendering API now has a Vulkan backend
|
||||
* An example of hardware accelerated video playback using ffmpeg has been added in test/testffmpeg.c
|
||||
* The shaped window API has been replaced with transparent windows
|
||||
* Time and date functions have been added in SDL_time.h
|
||||
* Support for webcam video recording has been added in SDL_camera.h
|
||||
* Support for handling pens and tablets has been added in SDL_pen.h
|
||||
* Support for file open and save dialogs has been added in SDL_dialog.h
|
||||
* Cross-platform functions for working with files and directories are available in SDL_filesystem.h
|
||||
* A cross-platform abstraction for working with user and game data has been added in SDL_storage.h
|
||||
* Handling of main() has been moved to a header library and an optional callback-based program flow is available
|
||||
* Support for simple object properties has been added in SDL_properties.h. These properties are available on many SDL objects, and can be used for more advanced functionality.
|
||||
|
||||
Please let us know about issues and feedback at: https://github.com/libsdl-org/SDL/issues
|
||||
https://wiki.libsdl.org/SDL3/NewFeatures
|
||||
|
||||
The development team is focused on code, moving towards the final release, and we would love volunteers to help improve the documentation. Please send e-mail to slouken@libsdl.org if you'd like to help out!
|
||||
|
||||
Finally, a giant thank you to all the people who have contributed code and feedback to the SDL 3.0 improvements!
|
||||
Thank you to all the people who have contributed code and feedback to the SDL 3.0 release!
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.1.6</string>
|
||||
<string>3.1.10</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>SDLX</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.1.6</string>
|
||||
<string>3.1.10</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
Title SDL 3.1.6
|
||||
Title SDL 3.1.10
|
||||
Version 1
|
||||
Description SDL Library for macOS (http://www.libsdl.org)
|
||||
DefaultLocation /Library/Frameworks
|
||||
|
||||
41
Xcode/SDL/pkg-support/resources/INSTALL.md
Normal file
41
Xcode/SDL/pkg-support/resources/INSTALL.md
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains SDL built for Xcode, and includes support for macOS, iOS and tvOS.
|
||||
|
||||
To use this package, drag SDL3.xcframework into your project.
|
||||
|
||||
# Documentation
|
||||
|
||||
An API reference, tutorials, and additional documentation is available at:
|
||||
|
||||
https://wiki.libsdl.org/SDL3
|
||||
|
||||
# Example code
|
||||
|
||||
There are simple example programs available at:
|
||||
|
||||
https://examples.libsdl.org/SDL3
|
||||
|
||||
# Discussions
|
||||
|
||||
## Discord
|
||||
|
||||
You can join the official Discord server at:
|
||||
|
||||
https://discord.com/invite/BwpFGBWsv8
|
||||
|
||||
## Forums/mailing lists
|
||||
|
||||
You can join SDL development discussions at:
|
||||
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
Once you sign up, you can use the forum through the website or as a mailing list from your email client.
|
||||
|
||||
## Announcement list
|
||||
|
||||
You can sign up for the low traffic announcement list at:
|
||||
|
||||
https://www.libsdl.org/mailing-list.php
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 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
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
@@ -1,44 +0,0 @@
|
||||
The Simple DirectMedia Layer (SDL for short) is a cross-platform
|
||||
library designed to make it easy to write multi-media software,
|
||||
such as games and emulators.
|
||||
|
||||
The Simple DirectMedia Layer library source code is available from:
|
||||
http://www.libsdl.org/
|
||||
|
||||
This library is distributed under the terms of the zlib license:
|
||||
http://zlib.net/zlib_license.html
|
||||
|
||||
|
||||
This packages contains the SDL framework for macOS.
|
||||
Conforming with Apple guidelines, this framework
|
||||
contains both the SDL runtime component and development header files.
|
||||
|
||||
|
||||
To Install:
|
||||
Copy "SDL3.xcframework" and "share" to /Library/Frameworks
|
||||
|
||||
You may alternatively install it in <Your home directory>/Library/Frameworks
|
||||
if your access privileges are not high enough.
|
||||
|
||||
|
||||
Use in CMake projects:
|
||||
SDL3.xcframework can be used in CMake projects using the following pattern:
|
||||
```cmake
|
||||
find_package(SDL3 REQUIRED COMPONENTS SDL3)
|
||||
add_executable(my_game ${MY_SOURCES})
|
||||
target_link_libraries(my_game PRIVATE SDL3::SDL3)
|
||||
```
|
||||
If SDL3.framework is installed in a non-standard location,
|
||||
please refer to the following link for ways to configure CMake:
|
||||
https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure
|
||||
|
||||
|
||||
Additional References:
|
||||
|
||||
- Screencast tutorials for getting started with OpenSceneGraph/macOS are
|
||||
available at:
|
||||
http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/MacOSXTips
|
||||
Though these are OpenSceneGraph centric, the same exact concepts apply to
|
||||
SDL, thus the videos are recommended for everybody getting started with
|
||||
developing on macOS. (You can skim over the PlugIns stuff since SDL
|
||||
doesn't have any PlugIns to worry about.)
|
||||
Binary file not shown.
@@ -112,7 +112,7 @@ if(NOT TARGET SDL3::SDL3-shared)
|
||||
set_target_properties(SDL3::SDL3-shared
|
||||
PROPERTIES
|
||||
FRAMEWORK "TRUE"
|
||||
IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3"
|
||||
IMPORTED_LOCATION "${_sdl3_framework_path}"
|
||||
INTERFACE_LINK_LIBRARIES "SDL3::Headers"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -6,10 +6,10 @@ def buildWithCMake = project.hasProperty('BUILD_WITH_CMAKE');
|
||||
|
||||
android {
|
||||
namespace "org.libsdl.app"
|
||||
compileSdkVersion 34
|
||||
compileSdkVersion 35
|
||||
defaultConfig {
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 34
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 35
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
externalNativeBuild {
|
||||
|
||||
1
android-project/app/proguard-rules.pro
vendored
1
android-project/app/proguard-rules.pro
vendored
@@ -36,6 +36,7 @@
|
||||
int messageboxShowMessageBox(int, java.lang.String, java.lang.String, int[], int[], java.lang.String[], int[]);
|
||||
void minimizeWindow();
|
||||
boolean openURL(java.lang.String);
|
||||
void onNativePen(int, int, int , float , float , float);
|
||||
void requestPermission(java.lang.String, int);
|
||||
boolean showToast(java.lang.String, int, int, int, int);
|
||||
boolean sendMessage(int, int);
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Replace com.test.game with the identifier of your game below, e.g.
|
||||
com.gamemaker.game
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0"
|
||||
|
||||
@@ -470,7 +470,7 @@ class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDe
|
||||
// Only register controller with the native side once it has been fully configured
|
||||
if (!isRegistered()) {
|
||||
Log.v(TAG, "Registering Steam Controller with ID: " + getId());
|
||||
mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0);
|
||||
mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0, true);
|
||||
setRegistered();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,7 +355,7 @@ public class HIDDeviceManager {
|
||||
HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index);
|
||||
int id = device.getId();
|
||||
mDevicesById.put(id, device);
|
||||
HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol());
|
||||
HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -679,7 +679,7 @@ public class HIDDeviceManager {
|
||||
private native void HIDDeviceRegisterCallback();
|
||||
private native void HIDDeviceReleaseCallback();
|
||||
|
||||
native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
|
||||
native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol, boolean bBluetooth);
|
||||
native void HIDDeviceOpenPending(int deviceID);
|
||||
native void HIDDeviceOpenResult(int deviceID, boolean opened);
|
||||
native void HIDDeviceDisconnected(int deviceID);
|
||||
|
||||
@@ -154,6 +154,11 @@ class HIDDeviceUSB implements HIDDevice {
|
||||
|
||||
@Override
|
||||
public int writeReport(byte[] report, boolean feature) {
|
||||
if (mConnection == null) {
|
||||
Log.w(TAG, "writeReport() called with no device connection");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (feature) {
|
||||
int res = -1;
|
||||
int offset = 0;
|
||||
@@ -201,6 +206,11 @@ class HIDDeviceUSB implements HIDDevice {
|
||||
boolean skipped_report_id = false;
|
||||
byte report_number = report[0];
|
||||
|
||||
if (mConnection == null) {
|
||||
Log.w(TAG, "readReport() called with no device connection");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (report_number == 0x0) {
|
||||
/* Offset the return buffer by 1, so that the report ID
|
||||
will remain in byte 0. */
|
||||
|
||||
@@ -60,7 +60,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
private static final String TAG = "SDL";
|
||||
private static final int SDL_MAJOR_VERSION = 3;
|
||||
private static final int SDL_MINOR_VERSION = 1;
|
||||
private static final int SDL_MICRO_VERSION = 6;
|
||||
private static final int SDL_MICRO_VERSION = 10;
|
||||
/*
|
||||
// Display InputType.SOURCE/CLASS of events and devices
|
||||
//
|
||||
@@ -223,7 +223,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
protected static SDLClipboardHandler mClipboardHandler;
|
||||
protected static Hashtable<Integer, PointerIcon> mCursors;
|
||||
protected static int mLastCursorID;
|
||||
protected static SDLGenericMotionListener_API12 mMotionListener;
|
||||
protected static SDLGenericMotionListener_API14 mMotionListener;
|
||||
protected static HIDDeviceManager mHIDDeviceManager;
|
||||
|
||||
// This is what SDL runs in. It invokes SDL_main(), eventually
|
||||
@@ -231,15 +231,16 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
protected static boolean mSDLMainFinished = false;
|
||||
protected static boolean mActivityCreated = false;
|
||||
private static SDLFileDialogState mFileDialogState = null;
|
||||
protected static boolean mDispatchingKeyEvent = false;
|
||||
|
||||
protected static SDLGenericMotionListener_API12 getMotionListener() {
|
||||
protected static SDLGenericMotionListener_API14 getMotionListener() {
|
||||
if (mMotionListener == null) {
|
||||
if (Build.VERSION.SDK_INT >= 26 /* Android 8.0 (O) */) {
|
||||
mMotionListener = new SDLGenericMotionListener_API26();
|
||||
} else if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
|
||||
mMotionListener = new SDLGenericMotionListener_API24();
|
||||
} else {
|
||||
mMotionListener = new SDLGenericMotionListener_API12();
|
||||
mMotionListener = new SDLGenericMotionListener_API14();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -807,7 +808,14 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return super.dispatchKeyEvent(event);
|
||||
mDispatchingKeyEvent = true;
|
||||
boolean result = super.dispatchKeyEvent(event);
|
||||
mDispatchingKeyEvent = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
public static boolean dispatchingKeyEvent() {
|
||||
return mDispatchingKeyEvent;
|
||||
}
|
||||
|
||||
/* Transition to next state */
|
||||
@@ -928,6 +936,10 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
if (Build.VERSION.SDK_INT >= 28 /* Android 9 (Pie) */) {
|
||||
window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 30 /* Android 11 (R) */ &&
|
||||
Build.VERSION.SDK_INT < 35 /* Android 15 */) {
|
||||
SDLActivity.onNativeInsetsChanged(0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "error handling message, getContext() returned no Activity");
|
||||
@@ -1059,6 +1071,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
public static native void onNativeTouch(int touchDevId, int pointerFingerId,
|
||||
int action, float x,
|
||||
float y, float p);
|
||||
public static native void onNativePen(int penId, int button, int action, float x, float y, float p);
|
||||
public static native void onNativeAccel(float x, float y, float z);
|
||||
public static native void onNativeClipboardChanged();
|
||||
public static native void onNativeSurfaceCreated();
|
||||
@@ -1490,7 +1503,6 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
// on some devices key events are sent for mouse BUTTON_BACK/FORWARD presses
|
||||
// they are ignored here because sending them as mouse input to SDL is messy
|
||||
if ((keyCode == KeyEvent.KEYCODE_BACK) || (keyCode == KeyEvent.KEYCODE_FORWARD)) {
|
||||
Log.v("SDL", "keycode is back or forward");
|
||||
switch (event.getAction()) {
|
||||
case KeyEvent.ACTION_DOWN:
|
||||
case KeyEvent.ACTION_UP:
|
||||
@@ -1503,6 +1515,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
}
|
||||
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN) {
|
||||
onNativeKeyDown(keyCode);
|
||||
|
||||
if (isTextInputEvent(event)) {
|
||||
if (ic != null) {
|
||||
ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1);
|
||||
@@ -1510,7 +1524,6 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
SDLInputConnection.nativeCommitText(String.valueOf((char) event.getUnicodeChar()), 1);
|
||||
}
|
||||
}
|
||||
onNativeKeyDown(keyCode);
|
||||
return true;
|
||||
} else if (event.getAction() == KeyEvent.ACTION_UP) {
|
||||
onNativeKeyUp(keyCode);
|
||||
|
||||
@@ -662,44 +662,61 @@ class SDLHapticHandler {
|
||||
}
|
||||
}
|
||||
|
||||
class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener {
|
||||
class SDLGenericMotionListener_API14 implements View.OnGenericMotionListener {
|
||||
// Generic Motion (mouse hover, joystick...) events go here
|
||||
@Override
|
||||
public boolean onGenericMotion(View v, MotionEvent event) {
|
||||
if (event.getSource() == InputDevice.SOURCE_JOYSTICK)
|
||||
return SDLControllerManager.handleJoystickMotionEvent(event);
|
||||
|
||||
float x, y;
|
||||
int action;
|
||||
int action = event.getActionMasked();
|
||||
int pointerCount = event.getPointerCount();
|
||||
boolean consumed = false;
|
||||
|
||||
switch ( event.getSource() ) {
|
||||
case InputDevice.SOURCE_JOYSTICK:
|
||||
return SDLControllerManager.handleJoystickMotionEvent(event);
|
||||
for (int i = 0; i < pointerCount; i++) {
|
||||
int toolType = event.getToolType(i);
|
||||
|
||||
case InputDevice.SOURCE_MOUSE:
|
||||
action = event.getActionMasked();
|
||||
if (toolType == MotionEvent.TOOL_TYPE_MOUSE) {
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_SCROLL:
|
||||
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
|
||||
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
|
||||
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, i);
|
||||
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, i);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
consumed = true;
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
x = event.getX(0);
|
||||
y = event.getY(0);
|
||||
x = getEventX(event, i);
|
||||
y = getEventY(event, i);
|
||||
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
SDLActivity.onNativeMouse(0, action, x, y, checkRelativeEvent(event));
|
||||
consumed = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
} else if (toolType == MotionEvent.TOOL_TYPE_STYLUS || toolType == MotionEvent.TOOL_TYPE_ERASER) {
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_HOVER_ENTER:
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
case MotionEvent.ACTION_HOVER_EXIT:
|
||||
x = event.getX(i);
|
||||
y = event.getY(i);
|
||||
float p = event.getPressure(i);
|
||||
|
||||
default:
|
||||
break;
|
||||
// BUTTON_STYLUS_PRIMARY is 2^5, so shift by 4
|
||||
int buttons = event.getButtonState() >> 4;
|
||||
|
||||
SDLActivity.onNativePen(event.getPointerId(i), buttons, action, x, y, p);
|
||||
consumed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Event was not managed
|
||||
return false;
|
||||
return consumed;
|
||||
}
|
||||
|
||||
public boolean supportsRelativeMouse() {
|
||||
@@ -714,46 +731,29 @@ class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void reclaimRelativeMouseModeIfNeeded()
|
||||
{
|
||||
public void reclaimRelativeMouseModeIfNeeded() {
|
||||
|
||||
}
|
||||
|
||||
public float getEventX(MotionEvent event) {
|
||||
return event.getX(0);
|
||||
public boolean checkRelativeEvent(MotionEvent event) {
|
||||
return inRelativeMode();
|
||||
}
|
||||
|
||||
public float getEventY(MotionEvent event) {
|
||||
return event.getY(0);
|
||||
public float getEventX(MotionEvent event, int pointerIndex) {
|
||||
return event.getX(pointerIndex);
|
||||
}
|
||||
|
||||
public float getEventY(MotionEvent event, int pointerIndex) {
|
||||
return event.getY(pointerIndex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class SDLGenericMotionListener_API24 extends SDLGenericMotionListener_API12 {
|
||||
class SDLGenericMotionListener_API24 extends SDLGenericMotionListener_API14 {
|
||||
// Generic Motion (mouse hover, joystick...) events go here
|
||||
|
||||
private boolean mRelativeModeEnabled;
|
||||
|
||||
@Override
|
||||
public boolean onGenericMotion(View v, MotionEvent event) {
|
||||
|
||||
// Handle relative mouse mode
|
||||
if (mRelativeModeEnabled) {
|
||||
if (event.getSource() == InputDevice.SOURCE_MOUSE) {
|
||||
int action = event.getActionMasked();
|
||||
if (action == MotionEvent.ACTION_HOVER_MOVE) {
|
||||
float x = event.getAxisValue(MotionEvent.AXIS_RELATIVE_X);
|
||||
float y = event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Event was not managed, call SDLGenericMotionListener_API12 method
|
||||
return super.onGenericMotion(v, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsRelativeMouse() {
|
||||
return true;
|
||||
@@ -771,20 +771,20 @@ class SDLGenericMotionListener_API24 extends SDLGenericMotionListener_API12 {
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEventX(MotionEvent event) {
|
||||
if (mRelativeModeEnabled) {
|
||||
return event.getAxisValue(MotionEvent.AXIS_RELATIVE_X);
|
||||
public float getEventX(MotionEvent event, int pointerIndex) {
|
||||
if (mRelativeModeEnabled && event.getToolType(pointerIndex) == MotionEvent.TOOL_TYPE_MOUSE) {
|
||||
return event.getAxisValue(MotionEvent.AXIS_RELATIVE_X, pointerIndex);
|
||||
} else {
|
||||
return event.getX(0);
|
||||
return event.getX(pointerIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEventY(MotionEvent event) {
|
||||
if (mRelativeModeEnabled) {
|
||||
return event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y);
|
||||
public float getEventY(MotionEvent event, int pointerIndex) {
|
||||
if (mRelativeModeEnabled && event.getToolType(pointerIndex) == MotionEvent.TOOL_TYPE_MOUSE) {
|
||||
return event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y, pointerIndex);
|
||||
} else {
|
||||
return event.getY(0);
|
||||
return event.getY(pointerIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -793,65 +793,6 @@ class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
|
||||
// Generic Motion (mouse hover, joystick...) events go here
|
||||
private boolean mRelativeModeEnabled;
|
||||
|
||||
@Override
|
||||
public boolean onGenericMotion(View v, MotionEvent event) {
|
||||
float x, y;
|
||||
int action;
|
||||
|
||||
switch ( event.getSource() ) {
|
||||
case InputDevice.SOURCE_JOYSTICK:
|
||||
return SDLControllerManager.handleJoystickMotionEvent(event);
|
||||
|
||||
case InputDevice.SOURCE_MOUSE:
|
||||
// DeX desktop mouse cursor is a separate non-standard input type.
|
||||
case InputDevice.SOURCE_MOUSE | InputDevice.SOURCE_TOUCHSCREEN:
|
||||
action = event.getActionMasked();
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_SCROLL:
|
||||
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
|
||||
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
x = event.getX(0);
|
||||
y = event.getY(0);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case InputDevice.SOURCE_MOUSE_RELATIVE:
|
||||
action = event.getActionMasked();
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_SCROLL:
|
||||
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
|
||||
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
x = event.getX(0);
|
||||
y = event.getY(0);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, true);
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Event was not managed
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsRelativeMouse() {
|
||||
return (!SDLActivity.isDeXMode() || Build.VERSION.SDK_INT >= 27 /* Android 8.1 (O_MR1) */);
|
||||
@@ -878,22 +819,26 @@ class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reclaimRelativeMouseModeIfNeeded()
|
||||
{
|
||||
public void reclaimRelativeMouseModeIfNeeded() {
|
||||
if (mRelativeModeEnabled && !SDLActivity.isDeXMode()) {
|
||||
SDLActivity.getContentView().requestPointerCapture();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEventX(MotionEvent event) {
|
||||
// Relative mouse in capture mode will only have relative for X/Y
|
||||
return event.getX(0);
|
||||
public boolean checkRelativeEvent(MotionEvent event) {
|
||||
return event.getSource() == InputDevice.SOURCE_MOUSE_RELATIVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEventY(MotionEvent event) {
|
||||
public float getEventX(MotionEvent event, int pointerIndex) {
|
||||
// Relative mouse in capture mode will only have relative for X/Y
|
||||
return event.getY(0);
|
||||
return event.getX(pointerIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEventY(MotionEvent event, int pointerIndex) {
|
||||
// Relative mouse in capture mode will only have relative for X/Y
|
||||
return event.getY(pointerIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,18 +111,20 @@ public class SDLInputConnection extends BaseInputConnection
|
||||
|
||||
if (matchLength < text.length()) {
|
||||
String pendingText = text.subSequence(matchLength, text.length()).toString();
|
||||
for (offset = 0; offset < pendingText.length(); ) {
|
||||
int codePoint = pendingText.codePointAt(offset);
|
||||
if (codePoint == '\n') {
|
||||
if (SDLActivity.onNativeSoftReturnKey()) {
|
||||
return;
|
||||
if (!SDLActivity.dispatchingKeyEvent()) {
|
||||
for (offset = 0; offset < pendingText.length(); ) {
|
||||
int codePoint = pendingText.codePointAt(offset);
|
||||
if (codePoint == '\n') {
|
||||
if (SDLActivity.onNativeSoftReturnKey()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* Higher code points don't generate simulated scancodes */
|
||||
if (codePoint > 0 && codePoint < 128) {
|
||||
nativeGenerateScancodeForUnichar((char)codePoint);
|
||||
}
|
||||
offset += Character.charCount(codePoint);
|
||||
}
|
||||
/* Higher code points don't generate simulated scancodes */
|
||||
if (codePoint < 128) {
|
||||
nativeGenerateScancodeForUnichar((char)codePoint);
|
||||
}
|
||||
offset += Character.charCount(codePoint);
|
||||
}
|
||||
SDLInputConnection.nativeCommitText(pendingText, 0);
|
||||
}
|
||||
|
||||
@@ -239,93 +239,64 @@ public class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
|
||||
int touchDevId = event.getDeviceId();
|
||||
final int pointerCount = event.getPointerCount();
|
||||
int action = event.getActionMasked();
|
||||
int pointerFingerId;
|
||||
int i = -1;
|
||||
int pointerId;
|
||||
int i = 0;
|
||||
float x,y,p;
|
||||
|
||||
// 12290 = Samsung DeX mode desktop mouse
|
||||
// 12290 = 0x3002 = 0x2002 | 0x1002 = SOURCE_MOUSE | SOURCE_TOUCHSCREEN
|
||||
// 0x2 = SOURCE_CLASS_POINTER
|
||||
if (event.getSource() == InputDevice.SOURCE_MOUSE || event.getSource() == (InputDevice.SOURCE_MOUSE | InputDevice.SOURCE_TOUCHSCREEN)) {
|
||||
int mouseButton = 1;
|
||||
try {
|
||||
Object object = event.getClass().getMethod("getButtonState").invoke(event);
|
||||
if (object != null) {
|
||||
mouseButton = (Integer) object;
|
||||
if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN)
|
||||
i = event.getActionIndex();
|
||||
|
||||
do {
|
||||
int toolType = event.getToolType(i);
|
||||
|
||||
if (toolType == MotionEvent.TOOL_TYPE_MOUSE) {
|
||||
int buttonState = event.getButtonState();
|
||||
boolean relative = false;
|
||||
|
||||
// We need to check if we're in relative mouse mode and get the axis offset rather than the x/y values
|
||||
// if we are. We'll leverage our existing mouse motion listener
|
||||
SDLGenericMotionListener_API14 motionListener = SDLActivity.getMotionListener();
|
||||
x = motionListener.getEventX(event, i);
|
||||
y = motionListener.getEventY(event, i);
|
||||
relative = motionListener.inRelativeMode();
|
||||
|
||||
SDLActivity.onNativeMouse(buttonState, action, x, y, relative);
|
||||
} else if (toolType == MotionEvent.TOOL_TYPE_STYLUS || toolType == MotionEvent.TOOL_TYPE_ERASER) {
|
||||
pointerId = event.getPointerId(i);
|
||||
x = event.getX(i);
|
||||
y = event.getY(i);
|
||||
p = event.getPressure(i);
|
||||
if (p > 1.0f) {
|
||||
// may be larger than 1.0f on some devices
|
||||
// see the documentation of getPressure(i)
|
||||
p = 1.0f;
|
||||
}
|
||||
} catch(Exception ignored) {
|
||||
|
||||
// BUTTON_STYLUS_PRIMARY is 2^5, so shift by 4, and apply SDL_PEN_INPUT_DOWN/SDL_PEN_INPUT_ERASER_TIP
|
||||
int buttonState = (event.getButtonState() >> 4) | (1 << (toolType == MotionEvent.TOOL_TYPE_STYLUS ? 0 : 30));
|
||||
|
||||
SDLActivity.onNativePen(pointerId, buttonState, action, x, y, p);
|
||||
} else if (toolType == MotionEvent.TOOL_TYPE_FINGER) {
|
||||
pointerId = event.getPointerId(i);
|
||||
x = getNormalizedX(event.getX(i));
|
||||
y = getNormalizedY(event.getY(i));
|
||||
p = event.getPressure(i);
|
||||
if (p > 1.0f) {
|
||||
// may be larger than 1.0f on some devices
|
||||
// see the documentation of getPressure(i)
|
||||
p = 1.0f;
|
||||
}
|
||||
|
||||
SDLActivity.onNativeTouch(touchDevId, pointerId, action, x, y, p);
|
||||
}
|
||||
|
||||
// We need to check if we're in relative mouse mode and get the axis offset rather than the x/y values
|
||||
// if we are. We'll leverage our existing mouse motion listener
|
||||
SDLGenericMotionListener_API12 motionListener = SDLActivity.getMotionListener();
|
||||
x = motionListener.getEventX(event);
|
||||
y = motionListener.getEventY(event);
|
||||
|
||||
SDLActivity.onNativeMouse(mouseButton, action, x, y, motionListener.inRelativeMode());
|
||||
} else {
|
||||
switch(action) {
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
for (i = 0; i < pointerCount; i++) {
|
||||
pointerFingerId = event.getPointerId(i);
|
||||
x = getNormalizedX(event.getX(i));
|
||||
y = getNormalizedY(event.getY(i));
|
||||
p = event.getPressure(i);
|
||||
if (p > 1.0f) {
|
||||
// may be larger than 1.0f on some devices
|
||||
// see the documentation of getPressure(i)
|
||||
p = 1.0f;
|
||||
}
|
||||
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
|
||||
}
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
// Primary pointer up/down, the index is always zero
|
||||
i = 0;
|
||||
/* fallthrough */
|
||||
case MotionEvent.ACTION_POINTER_UP:
|
||||
case MotionEvent.ACTION_POINTER_DOWN:
|
||||
// Non primary pointer up/down
|
||||
if (i == -1) {
|
||||
i = event.getActionIndex();
|
||||
}
|
||||
|
||||
pointerFingerId = event.getPointerId(i);
|
||||
x = getNormalizedX(event.getX(i));
|
||||
y = getNormalizedY(event.getY(i));
|
||||
p = event.getPressure(i);
|
||||
if (p > 1.0f) {
|
||||
// may be larger than 1.0f on some devices
|
||||
// see the documentation of getPressure(i)
|
||||
p = 1.0f;
|
||||
}
|
||||
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
for (i = 0; i < pointerCount; i++) {
|
||||
pointerFingerId = event.getPointerId(i);
|
||||
x = getNormalizedX(event.getX(i));
|
||||
y = getNormalizedY(event.getY(i));
|
||||
p = event.getPressure(i);
|
||||
if (p > 1.0f) {
|
||||
// may be larger than 1.0f on some devices
|
||||
// see the documentation of getPressure(i)
|
||||
p = 1.0f;
|
||||
}
|
||||
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, MotionEvent.ACTION_UP, x, y, p);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Non-primary up/down
|
||||
if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN)
|
||||
break;
|
||||
} while (++i < pointerCount);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Sensor events
|
||||
public void enableSensor(int sensortype, boolean enabled) {
|
||||
@@ -395,39 +366,42 @@ public class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
|
||||
public boolean onCapturedPointerEvent(MotionEvent event)
|
||||
{
|
||||
int action = event.getActionMasked();
|
||||
int pointerCount = event.getPointerCount();
|
||||
|
||||
float x, y;
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_SCROLL:
|
||||
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
|
||||
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
for (int i = 0; i < pointerCount; i++) {
|
||||
float x, y;
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_SCROLL:
|
||||
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, i);
|
||||
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, i);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, false);
|
||||
return true;
|
||||
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
x = event.getX(0);
|
||||
y = event.getY(0);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, true);
|
||||
return true;
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
x = event.getX(i);
|
||||
y = event.getY(i);
|
||||
SDLActivity.onNativeMouse(0, action, x, y, true);
|
||||
return true;
|
||||
|
||||
case MotionEvent.ACTION_BUTTON_PRESS:
|
||||
case MotionEvent.ACTION_BUTTON_RELEASE:
|
||||
case MotionEvent.ACTION_BUTTON_PRESS:
|
||||
case MotionEvent.ACTION_BUTTON_RELEASE:
|
||||
|
||||
// Change our action value to what SDL's code expects.
|
||||
if (action == MotionEvent.ACTION_BUTTON_PRESS) {
|
||||
action = MotionEvent.ACTION_DOWN;
|
||||
} else { /* MotionEvent.ACTION_BUTTON_RELEASE */
|
||||
action = MotionEvent.ACTION_UP;
|
||||
}
|
||||
// Change our action value to what SDL's code expects.
|
||||
if (action == MotionEvent.ACTION_BUTTON_PRESS) {
|
||||
action = MotionEvent.ACTION_DOWN;
|
||||
} else { /* MotionEvent.ACTION_BUTTON_RELEASE */
|
||||
action = MotionEvent.ACTION_UP;
|
||||
}
|
||||
|
||||
x = event.getX(0);
|
||||
y = event.getY(0);
|
||||
int button = event.getButtonState();
|
||||
x = event.getX(i);
|
||||
y = event.getY(i);
|
||||
int button = event.getButtonState();
|
||||
|
||||
SDLActivity.onNativeMouse(button, action, x, y, true);
|
||||
return true;
|
||||
}
|
||||
SDLActivity.onNativeMouse(button, action, x, y, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ buildscript {
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:8.1.1'
|
||||
classpath 'com.android.tools.build:gradle:8.7.3'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#Thu Nov 11 18:20:34 PST 2021
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -1081,7 +1081,7 @@ typedef SDL_GameControllerButton, SDL_GamepadButton;
|
||||
@@
|
||||
@@
|
||||
- SDL_GameControllerFromInstanceID
|
||||
+ SDL_GetGamepadFromInstanceID
|
||||
+ SDL_GetGamepadFromID
|
||||
(...)
|
||||
@@
|
||||
@@
|
||||
@@ -1318,7 +1318,7 @@ typedef SDL_GameControllerButton, SDL_GamepadButton;
|
||||
@@
|
||||
@@
|
||||
- SDL_JoystickFromInstanceID
|
||||
+ SDL_GetJoystickFromInstanceID
|
||||
+ SDL_GetJoystickFromID
|
||||
(...)
|
||||
@@
|
||||
@@
|
||||
@@ -1398,7 +1398,7 @@ typedef SDL_GameControllerButton, SDL_GamepadButton;
|
||||
@@
|
||||
@@
|
||||
- SDL_JoystickInstanceID
|
||||
+ SDL_GetJoystickInstanceID
|
||||
+ SDL_GetJoystickID
|
||||
(...)
|
||||
@@
|
||||
@@
|
||||
@@ -1807,7 +1807,7 @@ expression e2;
|
||||
@@
|
||||
@@
|
||||
- SDL_SensorFromInstanceID
|
||||
+ SDL_GetSensorFromInstanceID
|
||||
+ SDL_GetSensorFromID
|
||||
(...)
|
||||
@@
|
||||
@@
|
||||
@@ -1817,7 +1817,7 @@ expression e2;
|
||||
@@
|
||||
@@
|
||||
- SDL_SensorGetInstanceID
|
||||
+ SDL_GetSensorInstanceID
|
||||
+ SDL_GetSensorID
|
||||
(...)
|
||||
@@
|
||||
@@
|
||||
@@ -3731,3 +3731,11 @@ typedef SDL_bool, bool;
|
||||
@@
|
||||
- SDL_GLattr
|
||||
+ SDL_GLAttr
|
||||
@@
|
||||
@@
|
||||
- SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE
|
||||
+ SDL_HINT_JOYSTICK_ENHANCED_REPORTS
|
||||
@@
|
||||
@@
|
||||
- SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE
|
||||
+ SDL_HINT_JOYSTICK_ENHANCED_REPORTS
|
||||
|
||||
@@ -37,6 +37,8 @@ logger = logging.getLogger(__name__)
|
||||
GIT_HASH_FILENAME = ".git-hash"
|
||||
REVISION_TXT = "REVISION.txt"
|
||||
|
||||
RE_ILLEGAL_MINGW_LIBRARIES = re.compile(r"(?:lib)?(?:gcc|(?:std)?c[+][+]|(?:win)?pthread).*", flags=re.I)
|
||||
|
||||
|
||||
def safe_isotime_to_datetime(str_isotime: str) -> datetime.datetime:
|
||||
try:
|
||||
@@ -328,6 +330,10 @@ def configure_text(text: str, context: dict[str, str]) -> str:
|
||||
return text
|
||||
|
||||
|
||||
def configure_text_list(text_list: list[str], context: dict[str, str]) -> list[str]:
|
||||
return [configure_text(text=e, context=context) for e in text_list]
|
||||
|
||||
|
||||
class ArchiveFileTree:
|
||||
def __init__(self):
|
||||
self._tree: dict[str, NodeInArchive] = {}
|
||||
@@ -335,6 +341,12 @@ class ArchiveFileTree:
|
||||
def add_file(self, file: NodeInArchive):
|
||||
self._tree[file.arcpath] = file
|
||||
|
||||
def __iter__(self) -> typing.Iterable[NodeInArchive]:
|
||||
yield from self._tree.values()
|
||||
|
||||
def __contains__(self, value: str) -> bool:
|
||||
return value in self._tree
|
||||
|
||||
def get_latest_mod_time(self) -> datetime.datetime:
|
||||
return max(item.time for item in self._tree.values() if item.time)
|
||||
|
||||
@@ -343,13 +355,12 @@ class ArchiveFileTree:
|
||||
added_files = dict()
|
||||
|
||||
def calculate_symlink_target(s: NodeInArchive) -> str:
|
||||
dest_dir = os.path.dirname(s.path)
|
||||
dest_dir = os.path.dirname(s.arcpath)
|
||||
if dest_dir:
|
||||
dest_dir += "/"
|
||||
target = dest_dir + s.symtarget
|
||||
while True:
|
||||
new_target, n = re.subn(r"([^/]+/+[.]{2}/)", "", target)
|
||||
print(f"{target=} {new_target=}")
|
||||
target = new_target
|
||||
if not n:
|
||||
break
|
||||
@@ -357,12 +368,15 @@ class ArchiveFileTree:
|
||||
|
||||
# Add files in first pass
|
||||
for arcpath, node in self._tree.items():
|
||||
assert node is not None, f"{arcpath} -> node"
|
||||
if node.data is not None:
|
||||
archiver.add_file_data(arcpath=arc_join(archive_base, arcpath), data=node.data, time=node.time, mode=node.mode)
|
||||
added_files[node.path] = node
|
||||
assert node.arcpath is not None, f"{node=}"
|
||||
added_files[node.arcpath] = node
|
||||
elif node.path is not None:
|
||||
archiver.add_file_path(arcpath=arc_join(archive_base, arcpath), path=node.path)
|
||||
added_files[node.path] = node
|
||||
assert node.arcpath is not None, f"{node=}"
|
||||
added_files[node.arcpath] = node
|
||||
elif node.symtarget is not None:
|
||||
remaining_symlinks.add(node)
|
||||
elif node.directory:
|
||||
@@ -370,6 +384,8 @@ class ArchiveFileTree:
|
||||
else:
|
||||
raise ValueError(f"Invalid Archive Node: {repr(node)}")
|
||||
|
||||
assert None not in added_files
|
||||
|
||||
# Resolve symlinks in second pass: zipfile does not support symlinks, so add files to zip archive
|
||||
while True:
|
||||
if not remaining_symlinks:
|
||||
@@ -380,18 +396,18 @@ class ArchiveFileTree:
|
||||
symlink_files_for_zip = {}
|
||||
symlink_target_path = calculate_symlink_target(symlink)
|
||||
if symlink_target_path in added_files:
|
||||
symlink_files_for_zip[symlink.path] = added_files[symlink_target_path]
|
||||
symlink_files_for_zip[symlink.arcpath] = added_files[symlink_target_path]
|
||||
else:
|
||||
symlink_target_path_slash = symlink_target_path + "/"
|
||||
for added_file in added_files:
|
||||
if added_file.startswith(symlink_target_path_slash):
|
||||
path_in_symlink = symlink.path + "/" + added_file.removeprefix(symlink_target_path_slash)
|
||||
path_in_symlink = symlink.arcpath + "/" + added_file.removeprefix(symlink_target_path_slash)
|
||||
symlink_files_for_zip[path_in_symlink] = added_files[added_file]
|
||||
if symlink_files_for_zip:
|
||||
symlinks_this_time.add(symlink)
|
||||
extra_added_files.update(symlink_files_for_zip)
|
||||
files_for_zip = [{"arcpath": f"{archive_base}/{sym_path}", "data": sym_info.data, "mode": sym_info.mode} for sym_path, sym_info in symlink_files_for_zip.items()]
|
||||
archiver.add_symlink(arcpath=f"{archive_base}/{symlink.path}", target=symlink.symtarget, time=symlink.time, files_for_zip=files_for_zip)
|
||||
archiver.add_symlink(arcpath=f"{archive_base}/{symlink.arcpath}", target=symlink.symtarget, time=symlink.time, files_for_zip=files_for_zip)
|
||||
# if not symlinks_this_time:
|
||||
# logger.info("files added: %r", set(path for path in added_files.keys()))
|
||||
assert symlinks_this_time, f"No targets found for symlinks: {remaining_symlinks}"
|
||||
@@ -545,6 +561,7 @@ class Releaser:
|
||||
"PROJECT_VERSION": self.version,
|
||||
"PROJECT_COMMIT": self.commit,
|
||||
"PROJECT_REVISION": self.revision,
|
||||
"PROJECT_ROOT": str(self.root),
|
||||
}
|
||||
if extra_context:
|
||||
ctx.update(extra_context)
|
||||
@@ -577,12 +594,22 @@ class Releaser:
|
||||
def create_source_archives(self) -> None:
|
||||
source_collector = SourceCollector(root=self.root, commit=self.commit, executer=self.executer, filter=self._path_filter)
|
||||
print(f"Collecting sources of {self.project}...")
|
||||
archive_tree = source_collector.get_archive_file_tree()
|
||||
archive_tree: ArchiveFileTree = source_collector.get_archive_file_tree()
|
||||
latest_mod_time = archive_tree.get_latest_mod_time()
|
||||
archive_tree.add_file(NodeInArchive.from_text(arcpath=REVISION_TXT, text=f"{self.revision}\n", time=latest_mod_time))
|
||||
archive_tree.add_file(NodeInArchive.from_text(arcpath=f"{GIT_HASH_FILENAME}", text=f"{self.commit}\n", time=latest_mod_time))
|
||||
archive_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["source"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=latest_mod_time)
|
||||
|
||||
if "Makefile.am" in archive_tree:
|
||||
patched_time = latest_mod_time + datetime.timedelta(minutes=1)
|
||||
print(f"Makefile.am detected -> touching aclocal.m4, */Makefile.in, configure")
|
||||
for node_data in archive_tree:
|
||||
arc_name = os.path.basename(node_data.arcpath)
|
||||
arc_name_we, arc_name_ext = os.path.splitext(arc_name)
|
||||
if arc_name in ("aclocal.m4", "configure", "Makefile.in"):
|
||||
print(f"Bumping time of {node_data.arcpath}")
|
||||
node_data.time = patched_time
|
||||
|
||||
archive_base = f"{self.project}-{self.version}"
|
||||
zip_path = self.dist_path / f"{archive_base}.zip"
|
||||
tgz_path = self.dist_path / f"{archive_base}.tar.gz"
|
||||
@@ -659,6 +686,15 @@ class Releaser:
|
||||
def git_hash_data(self) -> bytes:
|
||||
return f"{self.commit}\n".encode()
|
||||
|
||||
def verify_mingw_library(self, triplet: str, path: Path):
|
||||
objdump_output = self.executer.check_output([f"{triplet}-objdump", "-p", str(path)])
|
||||
libraries = re.findall(r"DLL Name: ([^\n]+)", objdump_output)
|
||||
logger.info("%s (%s) libraries: %r", path, triplet, libraries)
|
||||
illegal_libraries = list(filter(RE_ILLEGAL_MINGW_LIBRARIES.match, libraries))
|
||||
logger.error("Detected 'illegal' libraries: %r", illegal_libraries)
|
||||
if illegal_libraries:
|
||||
raise Exception(f"{path} links to illegal libraries: {illegal_libraries}")
|
||||
|
||||
def create_mingw_archives(self) -> None:
|
||||
build_type = "Release"
|
||||
build_parent_dir = self.root / "build-mingw"
|
||||
@@ -741,23 +777,38 @@ class Releaser:
|
||||
install_path = build_parent_dir / f"install-{triplet}"
|
||||
shutil.rmtree(install_path, ignore_errors=True)
|
||||
build_path.mkdir(parents=True, exist_ok=True)
|
||||
context = self.get_context({
|
||||
"ARCH": arch,
|
||||
"DEP_PREFIX": str(mingw_deps_path / triplet),
|
||||
})
|
||||
extra_args = configure_text_list(text_list=self.release_info["mingw"]["autotools"]["args"], context=context)
|
||||
|
||||
with self.section_printer.group(f"Configuring MinGW {triplet} (autotools)"):
|
||||
extra_args = [arg.replace("@DEP_PREFIX@", str(mingw_deps_path / triplet)) for arg in self.release_info["mingw"]["autotools"]["args"]]
|
||||
assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})"
|
||||
self.executer.run([
|
||||
self.root / "configure",
|
||||
f"--prefix={install_path}",
|
||||
f"--includedir={install_path}/include",
|
||||
f"--libdir={install_path}/lib",
|
||||
f"--bindir={install_path}/bin",
|
||||
f"--includedir=${{prefix}}/include",
|
||||
f"--libdir=${{prefix}}/lib",
|
||||
f"--bindir=${{prefix}}/bin",
|
||||
f"--host={triplet}",
|
||||
f"--build=x86_64-none-linux-gnu",
|
||||
"CFLAGS=-O2",
|
||||
"CXXFLAGS=-O2",
|
||||
"LDFLAGS=-Wl,-s",
|
||||
] + extra_args, cwd=build_path, env=new_env)
|
||||
with self.section_printer.group(f"Build MinGW {triplet} (autotools)"):
|
||||
self.executer.run(["make", f"-j{self.cpu_count}"], cwd=build_path, env=new_env)
|
||||
with self.section_printer.group(f"Install MinGW {triplet} (autotools)"):
|
||||
self.executer.run(["make", "install"], cwd=build_path, env=new_env)
|
||||
archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path)
|
||||
self.verify_mingw_library(triplet=ARCH_TO_TRIPLET[arch], path=install_path / "bin" / f"{self.project}.dll")
|
||||
archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path, time=self.arc_time)
|
||||
|
||||
print("Recording arch-dependent extra files for MinGW development archive ...")
|
||||
extra_context = {
|
||||
"TRIPLET": ARCH_TO_TRIPLET[arch],
|
||||
}
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["mingw"]["autotools"].get("files", {}), file_mapping_root=self.root, context=self.get_context(extra_context=extra_context), time=self.arc_time)
|
||||
|
||||
if "cmake" in self.release_info["mingw"]:
|
||||
assert self.release_info["mingw"]["cmake"]["shared-static"] in ("args", "both")
|
||||
@@ -770,6 +821,12 @@ class Releaser:
|
||||
assert arch not in mingw_archs
|
||||
mingw_archs.add(arch)
|
||||
|
||||
context = self.get_context({
|
||||
"ARCH": arch,
|
||||
"DEP_PREFIX": str(mingw_deps_path / triplet),
|
||||
})
|
||||
extra_args = configure_text_list(text_list=self.release_info["mingw"]["cmake"]["args"], context=context)
|
||||
|
||||
build_path = build_parent_dir / f"build-{triplet}"
|
||||
install_path = build_parent_dir / f"install-{triplet}"
|
||||
shutil.rmtree(install_path, ignore_errors=True)
|
||||
@@ -780,7 +837,6 @@ class Releaser:
|
||||
args_for_shared_static = (["-DBUILD_SHARED_LIBS=ON"], ["-DBUILD_SHARED_LIBS=OFF"])
|
||||
for arg_for_shared_static in args_for_shared_static:
|
||||
with self.section_printer.group(f"Configuring MinGW {triplet} (CMake)"):
|
||||
extra_args = [arg.replace("@DEP_PREFIX@", str(mingw_deps_path / triplet)) for arg in self.release_info["mingw"]["cmake"]["args"]]
|
||||
assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})"
|
||||
self.executer.run([
|
||||
f"cmake",
|
||||
@@ -801,8 +857,16 @@ class Releaser:
|
||||
self.executer.run(["cmake", "--build", str(build_path), "--verbose", "--config", build_type], cwd=build_path, env=new_env)
|
||||
with self.section_printer.group(f"Install MinGW {triplet} (CMake)"):
|
||||
self.executer.run(["cmake", "--install", str(build_path)], cwd=build_path, env=new_env)
|
||||
self.verify_mingw_library(triplet=ARCH_TO_TRIPLET[arch], path=install_path / "bin" / f"{self.project}.dll")
|
||||
archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path, time=self.arc_time)
|
||||
|
||||
print("Recording arch-dependent extra files for MinGW development archive ...")
|
||||
extra_context = {
|
||||
"TRIPLET": ARCH_TO_TRIPLET[arch],
|
||||
}
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["mingw"]["cmake"].get("files", {}), file_mapping_root=self.root, context=self.get_context(extra_context=extra_context), time=self.arc_time)
|
||||
print("... done")
|
||||
|
||||
print("Recording extra files for MinGW development archive ...")
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["mingw"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=self.arc_time)
|
||||
print("... done")
|
||||
@@ -827,6 +891,12 @@ class Releaser:
|
||||
platform_versions = []
|
||||
for platform_dir in platform_dirs:
|
||||
logger.debug("Found Android Platform SDK: %s", platform_dir)
|
||||
if not (platform_dir / "android.jar").is_file():
|
||||
logger.debug("Skipping SDK, missing android.jar")
|
||||
continue
|
||||
if platform_dir.match('*/android-*-ext*'):
|
||||
logger.debug("Skipping SDK, extended version")
|
||||
continue
|
||||
if m:= re_platform.match(platform_dir.name):
|
||||
platform_versions.append(int(m.group(1)))
|
||||
platform_versions.sort()
|
||||
@@ -897,7 +967,8 @@ class Releaser:
|
||||
if not cmake_toolchain_file.exists():
|
||||
logger.error("CMake toolchain file does not exist (%s)", cmake_toolchain_file)
|
||||
raise SystemExit(1)
|
||||
aar_path = self.dist_path / f"{self.project}-{self.version}.aar"
|
||||
aar_path = self.root / "build-android" / f"{self.project}-{self.version}.aar"
|
||||
android_dist_path = self.dist_path / f"{self.project}-devel-{self.version}-android.zip"
|
||||
android_abis = self.release_info["android"]["abis"]
|
||||
java_jars_added = False
|
||||
module_data_added = False
|
||||
@@ -905,14 +976,24 @@ class Releaser:
|
||||
shutil.rmtree(android_deps_path, ignore_errors=True)
|
||||
|
||||
for dep, depinfo in self.release_info["android"].get("dependencies", {}).items():
|
||||
android_aar = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0]
|
||||
with self.section_printer.group(f"Extracting Android dependency {dep} ({android_aar.name})"):
|
||||
self.executer.run([sys.executable, str(android_aar), "-o", str(android_deps_path)])
|
||||
dep_devel_zip = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0]
|
||||
|
||||
dep_extract_path = self.deps_path / f"extract/android/{dep}"
|
||||
shutil.rmtree(dep_extract_path, ignore_errors=True)
|
||||
dep_extract_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with self.section_printer.group(f"Extracting Android dependency {dep} ({dep_devel_zip})"):
|
||||
with zipfile.ZipFile(dep_devel_zip, "r") as zf:
|
||||
zf.extractall(dep_extract_path)
|
||||
|
||||
dep_devel_aar = dep_extract_path / glob.glob("*.aar", root_dir=dep_extract_path)[0]
|
||||
self.executer.run([sys.executable, str(dep_devel_aar), "-o", str(android_deps_path)])
|
||||
|
||||
for module_name, module_info in self.release_info["android"]["modules"].items():
|
||||
assert "type" in module_info and module_info["type"] in ("interface", "library"), f"module {module_name} must have a valid type"
|
||||
|
||||
archive_file_tree = ArchiveFileTree()
|
||||
aar_file_tree = ArchiveFileTree()
|
||||
android_devel_file_tree = ArchiveFileTree()
|
||||
|
||||
for android_abi in android_abis:
|
||||
with self.section_printer.group(f"Building for Android {android_api} {android_abi}"):
|
||||
@@ -963,20 +1044,20 @@ class Releaser:
|
||||
assert library.suffix in (".so", ".a")
|
||||
assert library.is_file(), f"CMake should have built library '{library}' for module {module_name}"
|
||||
arcdir_prefab_libs = f"{arcdir_prefab_module}/libs/android.{android_abi}"
|
||||
archive_file_tree.add_file(NodeInArchive.from_fs(arcpath=f"{arcdir_prefab_libs}/{library.name}", path=library, time=self.arc_time))
|
||||
archive_file_tree.add_file(NodeInArchive.from_text(arcpath=f"{arcdir_prefab_libs}/abi.json", text=self._get_prefab_abi_json_text(abi=android_abi, cpp=False, shared=library.suffix == ".so"), time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_fs(arcpath=f"{arcdir_prefab_libs}/{library.name}", path=library, time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_text(arcpath=f"{arcdir_prefab_libs}/abi.json", text=self._get_prefab_abi_json_text(abi=android_abi, cpp=False, shared=library.suffix == ".so"), time=self.arc_time))
|
||||
|
||||
if not module_data_added:
|
||||
library_name = None
|
||||
if module_info["type"] == "library":
|
||||
library_name = Path(module_info["library"]).stem.removeprefix("lib")
|
||||
export_libraries = module_info.get("export-libraries", [])
|
||||
archive_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_module, "module.json"), text=self._get_prefab_module_json_text(library_name=library_name, export_libraries=export_libraries), time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_module, "module.json"), text=self._get_prefab_module_json_text(library_name=library_name, export_libraries=export_libraries), time=self.arc_time))
|
||||
arcdir_prefab_include = f"prefab/modules/{module_name}/include"
|
||||
if "includes" in module_info:
|
||||
archive_file_tree.add_file_mapping(arc_dir=arcdir_prefab_include, file_mapping=module_info["includes"], file_mapping_root=install_dir, context=self.get_context(), time=self.arc_time)
|
||||
aar_file_tree.add_file_mapping(arc_dir=arcdir_prefab_include, file_mapping=module_info["includes"], file_mapping_root=install_dir, context=self.get_context(), time=self.arc_time)
|
||||
else:
|
||||
archive_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_include, ".keep"), text="\n", time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_include, ".keep"), text="\n", time=self.arc_time))
|
||||
module_data_added = True
|
||||
|
||||
if not java_jars_added:
|
||||
@@ -989,21 +1070,28 @@ class Releaser:
|
||||
assert sources_jar_path.is_file(), f"CMake should have archived the java sources into a JAR ({sources_jar_path})"
|
||||
assert doc_jar_path.is_file(), f"CMake should have archived javadoc into a JAR ({doc_jar_path})"
|
||||
|
||||
archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes.jar", path=classes_jar_path, time=self.arc_time))
|
||||
archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-sources.jar", path=sources_jar_path, time=self.arc_time))
|
||||
archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-doc.jar", path=doc_jar_path, time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes.jar", path=classes_jar_path, time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-sources.jar", path=sources_jar_path, time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-doc.jar", path=doc_jar_path, time=self.arc_time))
|
||||
|
||||
assert ("jars" in self.release_info["android"] and java_jars_added) or "jars" not in self.release_info["android"], "Must have archived java JAR archives"
|
||||
|
||||
archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=self.arc_time)
|
||||
aar_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"]["aar-files"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time)
|
||||
|
||||
archive_file_tree.add_file(NodeInArchive.from_text(arcpath="prefab/prefab.json", text=self._get_prefab_json_text(), time=self.arc_time))
|
||||
archive_file_tree.add_file(NodeInArchive.from_text(arcpath="AndroidManifest.xml", text=self._get_android_manifest_text(), time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_text(arcpath="prefab/prefab.json", text=self._get_prefab_json_text(), time=self.arc_time))
|
||||
aar_file_tree.add_file(NodeInArchive.from_text(arcpath="AndroidManifest.xml", text=self._get_android_manifest_text(), time=self.arc_time))
|
||||
|
||||
with Archiver(zip_path=aar_path) as archiver:
|
||||
archive_file_tree.add_to_archiver(archive_base="", archiver=archiver)
|
||||
aar_file_tree.add_to_archiver(archive_base="", archiver=archiver)
|
||||
archiver.add_git_hash(arcdir="", commit=self.commit, time=self.arc_time)
|
||||
self.artifacts[f"android-aar"] = aar_path
|
||||
|
||||
android_devel_file_tree.add_file(NodeInArchive.from_fs(arcpath=aar_path.name, path=aar_path))
|
||||
android_devel_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"]["files"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time)
|
||||
with Archiver(zip_path=android_dist_path) as archiver:
|
||||
android_devel_file_tree.add_to_archiver(archive_base="", archiver=archiver)
|
||||
archiver.add_git_hash(arcdir="", commit=self.commit, time=self.arc_time)
|
||||
|
||||
self.artifacts[f"android-aar"] = android_dist_path
|
||||
|
||||
def download_dependencies(self):
|
||||
shutil.rmtree(self.deps_path, ignore_errors=True)
|
||||
@@ -1040,7 +1128,7 @@ class Releaser:
|
||||
assert len(msvc_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {msvc_matches}"
|
||||
if "android" in self.release_info:
|
||||
android_matches = glob.glob(self.release_info["android"]["dependencies"][dep]["artifact"], root_dir=self.deps_path)
|
||||
assert len(android_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {msvc_matches}"
|
||||
assert len(android_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {android_matches}"
|
||||
|
||||
@staticmethod
|
||||
def _arch_to_vs_platform(arch: str, configuration: str="Release") -> VsArchPlatformConfig:
|
||||
@@ -1166,6 +1254,10 @@ class Releaser:
|
||||
platform_context = self.get_context(extra_context=arch_platform.extra_context())
|
||||
|
||||
build_type = "Release"
|
||||
extra_context = {
|
||||
"ARCH": arch_platform.arch,
|
||||
"PLATFORM": arch_platform.platform,
|
||||
}
|
||||
|
||||
built_paths = set(install_path / configure_text(f, context=platform_context) for file_mapping in (self.release_info["msvc"]["cmake"]["files-lib"], self.release_info["msvc"]["cmake"]["files-devel"]) for files_list in file_mapping.values() for f in files_list)
|
||||
logger.info("CMake builds these files, to be included in the package: %s", built_paths)
|
||||
@@ -1216,7 +1308,7 @@ class Releaser:
|
||||
logger.info("Collecting files...")
|
||||
archive_file_tree = ArchiveFileTree()
|
||||
archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["cmake"]["files-lib"], file_mapping_root=install_path, context=platform_context, time=self.arc_time)
|
||||
archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["files-lib"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time)
|
||||
archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["files-lib"], file_mapping_root=self.root, context=self.get_context(extra_context=extra_context), time=self.arc_time)
|
||||
|
||||
logger.info("Creating %s", zip_path)
|
||||
with Archiver(zip_path=zip_path) as archiver:
|
||||
@@ -1231,6 +1323,10 @@ class Releaser:
|
||||
zip_path = self.dist_path / f"{self.project}-devel-{self.version}-VC.zip"
|
||||
arc_root = f"{self.project}-{self.version}"
|
||||
|
||||
def copy_files_devel(ctx):
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["files-devel"], file_mapping_root=self.root, context=ctx, time=self.arc_time)
|
||||
|
||||
|
||||
logger.info("Collecting files...")
|
||||
archive_file_tree = ArchiveFileTree()
|
||||
if "msbuild" in self.release_info["msvc"]:
|
||||
@@ -1238,12 +1334,13 @@ class Releaser:
|
||||
arch_platform = self._arch_to_vs_platform(arch=arch)
|
||||
platform_context = self.get_context(arch_platform.extra_context())
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["msbuild"]["files-devel"], file_mapping_root=self.root, context=platform_context, time=self.arc_time)
|
||||
copy_files_devel(ctx=platform_context)
|
||||
if "cmake" in self.release_info["msvc"]:
|
||||
for arch in self.release_info["msvc"]["cmake"]["archs"]:
|
||||
arch_platform = self._arch_to_vs_platform(arch=arch)
|
||||
platform_context = self.get_context(arch_platform.extra_context())
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["cmake"]["files-devel"], file_mapping_root=self._arch_platform_to_install_path(arch_platform), context=platform_context, time=self.arc_time)
|
||||
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["files-devel"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time)
|
||||
copy_files_devel(ctx=platform_context)
|
||||
|
||||
with Archiver(zip_path=zip_path) as archiver:
|
||||
archive_file_tree.add_to_archiver(archive_base="", archiver=archiver)
|
||||
@@ -1402,8 +1499,11 @@ def main(argv=None) -> int:
|
||||
if args.android_api is None:
|
||||
with section_printer.group("Detect Android APIS"):
|
||||
args.android_api = releaser._detect_android_api(android_home=args.android_home)
|
||||
if args.android_api is None or not (Path(args.android_home) / f"platforms/android-{args.android_api}").is_dir():
|
||||
if args.android_api is None:
|
||||
parser.error("Invalid --android-api, and/or could not be detected")
|
||||
android_api_path = Path(args.android_home) / f"platforms/android-{args.android_api}"
|
||||
if not android_api_path.is_dir():
|
||||
parser.error(f"Android API directory does not exist ({android_api_path})")
|
||||
with section_printer.group("Android arguments"):
|
||||
print(f"android_home = {args.android_home}")
|
||||
print(f"android_ndk_home = {args.android_ndk_home}")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# Simple DirectMedia Layer
|
||||
# Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
# Copyright (C) 1997-2025 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
|
||||
@@ -71,6 +71,62 @@ sub build_latest {
|
||||
}
|
||||
}
|
||||
|
||||
sub get_category_description {
|
||||
my $category = shift;
|
||||
my $retval = ucfirst($category);
|
||||
|
||||
if (open(my $fh, '<', "$examples_dir/$category/description.txt")) {
|
||||
$retval = <$fh>;
|
||||
chomp($retval);
|
||||
close($fh);
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
sub get_categories {
|
||||
my @categories = ();
|
||||
|
||||
if (open(my $fh, '<', "$examples_dir/categories.txt")) {
|
||||
while (<$fh>) {
|
||||
chomp;
|
||||
s/\A\s+//;
|
||||
s/\s+\Z//;
|
||||
next if $_ eq '';
|
||||
next if /\A\#/;
|
||||
push @categories, $_;
|
||||
}
|
||||
close($fh);
|
||||
} else {
|
||||
opendir(my $dh, $examples_dir) or die("Couldn't opendir '$examples_dir': $!\n");
|
||||
foreach my $dir (sort readdir $dh) {
|
||||
next if ($dir eq '.') || ($dir eq '..'); # obviously skip current and parent entries.
|
||||
next if not -d "$examples_dir/$dir"; # only care about subdirectories.
|
||||
push @categories, $dir;
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
|
||||
return @categories;
|
||||
}
|
||||
|
||||
sub get_examples_for_category {
|
||||
my $category = shift;
|
||||
|
||||
my @examples = ();
|
||||
|
||||
opendir(my $dh, "$examples_dir/$category") or die("Couldn't opendir '$examples_dir/$category': $!\n");
|
||||
foreach my $dir (sort readdir $dh) {
|
||||
next if ($dir eq '.') || ($dir eq '..'); # obviously skip current and parent entries.
|
||||
next if not -d "$examples_dir/$category/$dir"; # only care about subdirectories.
|
||||
|
||||
push @examples, $dir;
|
||||
}
|
||||
closedir($dh);
|
||||
|
||||
return @examples;
|
||||
}
|
||||
|
||||
sub handle_example_dir {
|
||||
my $category = shift;
|
||||
my $example = shift;
|
||||
@@ -99,25 +155,43 @@ sub handle_example_dir {
|
||||
$basefname = "$category-$basefname";
|
||||
my $jsfname = "$basefname.js";
|
||||
my $wasmfname = "$basefname.wasm";
|
||||
my $thumbnailfname = 'thumbnail.png';
|
||||
my $onmouseoverfname = 'onmouseover.webp';
|
||||
my $jssrc = "$compile_dir/examples/$jsfname";
|
||||
my $wasmsrc = "$compile_dir/examples/$wasmfname";
|
||||
my $thumbnailsrc = "$examples_dir/$category/$example/$thumbnailfname";
|
||||
my $onmouseoversrc = "$examples_dir/$category/$example/$onmouseoverfname";
|
||||
my $jsdst = "$dst/$jsfname";
|
||||
my $wasmdst = "$dst/$wasmfname";
|
||||
my $thumbnaildst = "$dst/$thumbnailfname";
|
||||
my $onmouseoverdst = "$dst/$onmouseoverfname";
|
||||
|
||||
my $description = '';
|
||||
my $has_paragraph = 0;
|
||||
if (open(my $readmetxth, '<', "$examples_dir/$category/$example/README.txt")) {
|
||||
while (<$readmetxth>) {
|
||||
chomp;
|
||||
s/\A\s+//;
|
||||
s/\s+\Z//;
|
||||
$description .= "$_<br/>";
|
||||
if (($_ eq '') && ($description ne '')) {
|
||||
$has_paragraph = 1;
|
||||
} else {
|
||||
if ($has_paragraph) {
|
||||
$description .= "\n<br/>\n<br/>\n";
|
||||
$has_paragraph = 0;
|
||||
}
|
||||
$description .= "$_ ";
|
||||
}
|
||||
}
|
||||
close($readmetxth);
|
||||
$description =~ s/\s+\Z//;
|
||||
}
|
||||
|
||||
do_mkdir($dst);
|
||||
do_copy($jssrc, $jsdst);
|
||||
do_copy($wasmsrc, $wasmdst);
|
||||
do_copy($thumbnailsrc, $thumbnaildst) if ( -f $thumbnailsrc );
|
||||
do_copy($onmouseoversrc, $onmouseoverdst) if ( -f $onmouseoversrc );
|
||||
|
||||
my $highlight_cmd = "highlight '--outdir=$dst' --style-outfile=highlight.css --fragment --enclose-pre --stdout --syntax=c '--plug-in=$examples_dir/highlight-plugin.lua'";
|
||||
print("$highlight_cmd\n");
|
||||
@@ -146,16 +220,27 @@ sub handle_example_dir {
|
||||
|
||||
waitpid($pid, 0);
|
||||
|
||||
my $other_examples_html = "<ul>";
|
||||
foreach my $example (get_examples_for_category($category)) {
|
||||
$other_examples_html .= "<li><a href='/$project/$category/$example'>$category/$example</a></li>";
|
||||
}
|
||||
$other_examples_html .= "</ul>";
|
||||
|
||||
my $category_description = get_category_description($category);
|
||||
my $preview_image = get_example_thumbnail($project, $category, $example);
|
||||
|
||||
my $html = '';
|
||||
open my $htmltemplate, '<', "$examples_dir/template.html" or die("Couldn't open '$examples_dir/template.html': $!\n");
|
||||
while (<$htmltemplate>) {
|
||||
s/\@project_name\@/$project/g;
|
||||
s/\@category_name\@/$category/g;
|
||||
s/\@category_description\@/$category_description/g;
|
||||
s/\@example_name\@/$example/g;
|
||||
s/\@javascript_file\@/$jsfname/g;
|
||||
s/\@htmlified_source_code\@/$htmlified_source_code/g;
|
||||
s/\@description\@/$description/g;
|
||||
s/\@preview_image\@/$preview_image/g;
|
||||
s/\@other_examples_html\@/$other_examples_html/g;
|
||||
$html .= $_;
|
||||
}
|
||||
close($htmltemplate);
|
||||
@@ -165,11 +250,61 @@ sub handle_example_dir {
|
||||
close($htmloutput);
|
||||
}
|
||||
|
||||
sub get_example_thumbnail {
|
||||
my $project = shift;
|
||||
my $category = shift;
|
||||
my $example = shift;
|
||||
|
||||
if ( -f "$examples_dir/$category/$example/thumbnail.png" ) {
|
||||
return "/$project/$category/$example/thumbnail.png";
|
||||
} elsif ( -f "$examples_dir/$category/thumbnail.png" ) {
|
||||
return "/$project/$category/thumbnail.png";
|
||||
}
|
||||
|
||||
return "/$project/thumbnail.png";
|
||||
}
|
||||
|
||||
sub generate_example_thumbnail {
|
||||
my $project = shift;
|
||||
my $category = shift;
|
||||
my $example = shift;
|
||||
|
||||
my $example_no_num = "$example";
|
||||
$example_no_num =~ s/\A\d+\-//;
|
||||
|
||||
my $example_image_url = get_example_thumbnail($project, $category, $example);
|
||||
|
||||
my $example_mouseover_html = '';
|
||||
if ( -f "$examples_dir/$category/$example/onmouseover.webp" ) {
|
||||
$example_mouseover_html = "onmouseover=\"this.src='/$project/$category/$example/onmouseover.webp'\" onmouseout=\"this.src='$example_image_url';\"";
|
||||
} elsif ( -f "$examples_dir/$category/onmouseover.webp" ) {
|
||||
$example_mouseover_html = "onmouseover=\"this.src='/$project/$category/onmouseover.webp'\" onmouseout=\"this.src='$example_image_url';\"";
|
||||
}
|
||||
|
||||
return "
|
||||
<a href='/$project/$category/$example'>
|
||||
<div>
|
||||
<img src='$example_image_url' $example_mouseover_html />
|
||||
<div>$example_no_num</div>
|
||||
</div>
|
||||
</a>"
|
||||
;
|
||||
}
|
||||
|
||||
sub generate_example_thumbnails_for_category {
|
||||
my $project = shift;
|
||||
my $category = shift;
|
||||
my @examples = get_examples_for_category($category);
|
||||
my $retval = '';
|
||||
foreach my $example (@examples) {
|
||||
$retval .= generate_example_thumbnail($project, $category, $example);
|
||||
}
|
||||
return $retval;
|
||||
}
|
||||
|
||||
sub handle_category_dir {
|
||||
my $category = shift;
|
||||
|
||||
# !!! FIXME: this needs to generate a preview page for all the examples things in the category.
|
||||
|
||||
print("Category $category ...\n");
|
||||
|
||||
do_mkdir("$output_dir/$category");
|
||||
@@ -183,6 +318,36 @@ sub handle_category_dir {
|
||||
}
|
||||
|
||||
closedir($dh);
|
||||
|
||||
my $examples_list_html = generate_example_thumbnails_for_category($project, $category);
|
||||
|
||||
my $dst = "$output_dir/$category";
|
||||
|
||||
do_copy("$examples_dir/$category/thumbnail.png", "$dst/thumbnail.png") if ( -f "$examples_dir/$category/thumbnail.png" );
|
||||
do_copy("$examples_dir/$category/onmouseover.webp", "$dst/onmouseover.webp") if ( -f "$examples_dir/$category/onmouseover.webp" );
|
||||
|
||||
my $category_description = get_category_description($category);
|
||||
my $preview_image = "/$project/thumbnail.png";
|
||||
if ( -f "$examples_dir/$category/thumbnail.png" ) {
|
||||
$preview_image = "/$project/$category/thumbnail.png";
|
||||
}
|
||||
|
||||
# write category page
|
||||
my $html = '';
|
||||
open my $htmltemplate, '<', "$examples_dir/template-category.html" or die("Couldn't open '$examples_dir/template-category.html': $!\n");
|
||||
while (<$htmltemplate>) {
|
||||
s/\@project_name\@/$project/g;
|
||||
s/\@category_name\@/$category/g;
|
||||
s/\@category_description\@/$category_description/g;
|
||||
s/\@examples_list_html\@/$examples_list_html/g;
|
||||
s/\@preview_image\@/$preview_image/g;
|
||||
$html .= $_;
|
||||
}
|
||||
close($htmltemplate);
|
||||
|
||||
open my $htmloutput, '>', "$dst/index.html" or die("Couldn't open '$dst/index.html': $!\n");
|
||||
print $htmloutput $html;
|
||||
close($htmloutput);
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +375,9 @@ do_mkdir($output_dir);
|
||||
|
||||
build_latest();
|
||||
|
||||
do_copy("$examples_dir/template.css", "$output_dir/examples.css");
|
||||
do_copy("$examples_dir/template-placeholder.png", "$output_dir/thumbnail.png");
|
||||
|
||||
opendir(my $dh, $examples_dir) or die("Couldn't opendir '$examples_dir': $!\n");
|
||||
|
||||
while (readdir($dh)) {
|
||||
@@ -221,6 +389,32 @@ while (readdir($dh)) {
|
||||
|
||||
closedir($dh);
|
||||
|
||||
# write homepage
|
||||
my $homepage_list_html = "";
|
||||
foreach my $category (get_categories()) {
|
||||
my $category_description = get_category_description($category);
|
||||
$homepage_list_html .= "<h2>$category_description</h2>";
|
||||
$homepage_list_html .= "<div class='list'>";
|
||||
$homepage_list_html .= generate_example_thumbnails_for_category($project, $category);
|
||||
$homepage_list_html .= "</div>";
|
||||
}
|
||||
|
||||
my $preview_image = "/$project/thumbnail.png";
|
||||
|
||||
my $dst = "$output_dir/";
|
||||
my $html = '';
|
||||
open my $htmltemplate, '<', "$examples_dir/template-homepage.html" or die("Couldn't open '$examples_dir/template-category.html': $!\n");
|
||||
while (<$htmltemplate>) {
|
||||
s/\@project_name\@/$project/g;
|
||||
s/\@homepage_list_html\@/$homepage_list_html/g;
|
||||
s/\@preview_image\@/$preview_image/g;
|
||||
$html .= $_;
|
||||
}
|
||||
close($htmltemplate);
|
||||
|
||||
open my $htmloutput, '>', "$dst/index.html" or die("Couldn't open '$dst/index.html': $!\n");
|
||||
print $htmloutput $html;
|
||||
close($htmloutput);
|
||||
|
||||
print("All examples built successfully!\n");
|
||||
exit(0); # success!
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Simple DirectMedia Layer
|
||||
# Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
# Copyright (C) 1997-2025 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
|
||||
|
||||
@@ -23,18 +23,20 @@ def determine_remote() -> str:
|
||||
def main():
|
||||
default_remote = determine_remote()
|
||||
|
||||
current_commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip()
|
||||
|
||||
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||
parser.add_argument("--ref", required=True, help=f"Name of branch or tag containing release.yml")
|
||||
parser.add_argument("--remote", "-R", default=default_remote, help=f"Remote repo (default={default_remote})")
|
||||
parser.add_argument("--commit", default=current_commit, help=f"Commit (default={current_commit})")
|
||||
parser.add_argument("--commit", help=f"Input 'commit' of release.yml (default is the hash of the ref)")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.commit is None:
|
||||
args.commit = subprocess.check_output(["git", "rev-parse", args.ref], cwd=ROOT, text=True).strip()
|
||||
|
||||
|
||||
print(f"Running release.yml workflow:")
|
||||
print(f" commit = {args.commit}")
|
||||
print(f" remote = {args.remote}")
|
||||
print(f" ref = {args.ref}")
|
||||
print(f" commit = {args.commit}")
|
||||
|
||||
subprocess.check_call(["gh", "-R", args.remote, "workflow", "run", "release.yml", "--ref", args.ref, "-f", f"commit={args.commit}"], cwd=ROOT)
|
||||
|
||||
|
||||
@@ -90,11 +90,15 @@ foreach my $release (@releases) {
|
||||
my $tag = $fulltags{$release};
|
||||
my $blobname = "$tag:src/dynapi/SDL_dynapi_overrides.h";
|
||||
|
||||
if ($release =~ /\A3\.[01]\.\d+/) { # make everything up to the first SDL3 prerelease look like 3.1.3 (ABI lock version).
|
||||
if ($release =~ /\A3\.(0\.\d+|1\.[0123])/) { # make everything up to the first SDL3 prerelease look like 3.1.3 (ABI lock version).
|
||||
$release = '3.1.3';
|
||||
}
|
||||
|
||||
else { $release = '3.2.0'; } # !!! FIXME: REMOVE ME WHEN 3.2.0 SHIPS!
|
||||
# !!! FIXME: REMOVE ME WHEN 3.2.0 SHIPS!
|
||||
elsif (not $release =~ /\A3\.1\.\d+/) { # a couple of releases after the initial 3.1.3, let them through.
|
||||
$release = '3.2.0';
|
||||
}
|
||||
# !!! FIXME: REMOVE ME WHEN 3.2.0 SHIPS!
|
||||
|
||||
open(PIPEFH, '-|', "git show '$blobname'") or die "Failed to read git blob '$blobname': $!\n";
|
||||
while (<PIPEFH>) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2025 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
|
||||
@@ -406,7 +406,7 @@ int main(void)
|
||||
printf(
|
||||
"/*\n"
|
||||
" Simple DirectMedia Layer\n"
|
||||
" Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>\n"
|
||||
" Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>\n"
|
||||
"\n"
|
||||
" This software is provided 'as-is', without any express or implied\n"
|
||||
" warranty. In no event will the authors be held liable for any damages\n"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# Simple DirectMedia Layer
|
||||
# Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
# Copyright (C) 1997-2025 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
|
||||
@@ -36,7 +36,7 @@ my $mem_used = 0;
|
||||
print <<__EOF__;
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken\@libsdl.org>
|
||||
Copyright (C) 1997-2025 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,7 +1,13 @@
|
||||
This Android archive allows use of @<@PROJECT_NAME@>@ in your Android project, without needing to copy any SDL source.
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains SDL built for the Android platform.
|
||||
|
||||
## Gradle integration
|
||||
|
||||
For integration with CMake/ndk-build, it uses [prefab](https://google.github.io/prefab/).
|
||||
|
||||
Copy this archive (@<@PROJECT_NAME@>@-@<@PROJECT_VERSION@>@.aar) to a `app/libs` directory of your project.
|
||||
Copy the aar archive (@<@PROJECT_NAME@>@-@<@PROJECT_VERSION@>@.aar) to a `app/libs` directory of your project.
|
||||
|
||||
In `app/build.gradle` of your Android project, add:
|
||||
```
|
||||
@@ -40,22 +46,46 @@ $(call import-module,prefab/@<@PROJECT_NAME@>@)
|
||||
|
||||
---
|
||||
|
||||
For advanced users:
|
||||
## Other build systems (advanced)
|
||||
|
||||
If you want to build a 3rd party library outside Gradle,
|
||||
If you want to build a project without Gradle,
|
||||
running the following command will extract the Android archive into a more common directory structure.
|
||||
```
|
||||
python @<@PROJECT_NAME@>@-@<@PROJECT_VERSION@>@.aar -o android_prefix
|
||||
```
|
||||
Add `--help` for a list of all available options.
|
||||
|
||||
# Documentation
|
||||
|
||||
Look at the example programs in ./test (of the source archive), and check out online documentation:
|
||||
https://wiki.libsdl.org/SDL3/FrontPage
|
||||
An API reference, tutorials, and additional documentation is available at:
|
||||
|
||||
Join the SDL discourse server if you want to join the community:
|
||||
https://discourse.libsdl.org/
|
||||
https://wiki.libsdl.org/SDL3
|
||||
|
||||
# Example code
|
||||
|
||||
There are simple example programs available at:
|
||||
|
||||
https://examples.libsdl.org/SDL3
|
||||
|
||||
# Discussions
|
||||
|
||||
## Discord
|
||||
|
||||
You can join the official Discord server at:
|
||||
|
||||
https://discord.com/invite/BwpFGBWsv8
|
||||
|
||||
## Forums/mailing lists
|
||||
|
||||
You can join SDL development discussions at:
|
||||
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
Once you sign up, you can use the forum through the website or as a mailing list from your email client.
|
||||
|
||||
## Announcement list
|
||||
|
||||
You can sign up for the low traffic announcement list at:
|
||||
|
||||
https://www.libsdl.org/mailing-list.php
|
||||
|
||||
That's it!
|
||||
Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# SDL CMake configuration file:
|
||||
# This file is meant to be placed in lib/cmake/SDL3 subfolder of a reconstructed Android SDL3 SDK
|
||||
|
||||
cmake_minimum_required(VERSION 3.0...3.5)
|
||||
cmake_minimum_required(VERSION 3.0...3.28)
|
||||
|
||||
include(FeatureSummary)
|
||||
set_package_properties(SDL3 PROPERTIES
|
||||
53
build-scripts/pkg-support/mingw/INSTALL.md
Normal file
53
build-scripts/pkg-support/mingw/INSTALL.md
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains SDL built for the mingw-w64 toolchain.
|
||||
|
||||
The files for 32-bit architecture are in i686-w64-mingw32
|
||||
The files for 64-bit architecture are in x86_64-w64-mingw32
|
||||
|
||||
You can install them to another location, just type `make` for help.
|
||||
|
||||
To use this package, point your include path at _arch_/include and your library path at _arch_/lib, link with the SDL3 library and copy _arch_/bin/SDL3.dll next to your executable.
|
||||
|
||||
e.g.
|
||||
```sh
|
||||
gcc -o hello.exe hello.c -Ix86_64-w64-mingw32/include -Lx86_64-w64-mingw32/lib -lSDL3
|
||||
cp x86_64-w64-mingw32/bin/SDL3.dll .
|
||||
./hello.exe
|
||||
```
|
||||
|
||||
# Documentation
|
||||
|
||||
An API reference, tutorials, and additional documentation is available at:
|
||||
|
||||
https://wiki.libsdl.org/SDL3
|
||||
|
||||
# Example code
|
||||
|
||||
There are simple example programs available at:
|
||||
|
||||
https://examples.libsdl.org/SDL3
|
||||
|
||||
# Discussions
|
||||
|
||||
## Discord
|
||||
|
||||
You can join the official Discord server at:
|
||||
|
||||
https://discord.com/invite/BwpFGBWsv8
|
||||
|
||||
## Forums/mailing lists
|
||||
|
||||
You can join SDL development discussions at:
|
||||
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
Once you sign up, you can use the forum through the website or as a mailing list from your email client.
|
||||
|
||||
## Announcement list
|
||||
|
||||
You can sign up for the low traffic announcement list at:
|
||||
|
||||
https://www.libsdl.org/mailing-list.php
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
|
||||
The 32-bit files are in i686-w64-mingw32
|
||||
The 64-bit files are in x86_64-w64-mingw32
|
||||
|
||||
To install SDL for 32-bit x86 executables (i686):
|
||||
make install-i686
|
||||
|
||||
To install SDL for 64-bit x86 executables (x86_64):
|
||||
make install-x86_64
|
||||
|
||||
To install both:
|
||||
make install-all
|
||||
|
||||
Use DESTDIR to change the target location
|
||||
mkdir $HOME/mingw32-prefix
|
||||
make install-i686 DESTDIR=$HOME/mingw32-prefix
|
||||
|
||||
Look at the example programs in ./test, and check out online documentation:
|
||||
https://wiki.libsdl.org/SDL3/FrontPage
|
||||
|
||||
Join the SDL discourse server if you want to join the community:
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
That's it!
|
||||
Sam Lantinga <slouken@libsdl.org>
|
||||
45
build-scripts/pkg-support/msvc/INSTALL.md
Normal file
45
build-scripts/pkg-support/msvc/INSTALL.md
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains SDL built for Visual Studio.
|
||||
|
||||
To use this package, edit your project properties:
|
||||
- Add the include directory to "VC++ Directories" -> "Include Directories"
|
||||
- Add the lib/_arch_ directory to "VC++ Directories" -> "Library Directories"
|
||||
- Add SDL3.lib to Linker -> Input -> "Additional Dependencies"
|
||||
- Copy lib/_arch_/SDL3.dll to your project directory.
|
||||
|
||||
# Documentation
|
||||
|
||||
An API reference, tutorials, and additional documentation is available at:
|
||||
|
||||
https://wiki.libsdl.org/SDL3
|
||||
|
||||
# Example code
|
||||
|
||||
There are simple example programs available at:
|
||||
|
||||
https://examples.libsdl.org/SDL3
|
||||
|
||||
# Discussions
|
||||
|
||||
## Discord
|
||||
|
||||
You can join the official Discord server at:
|
||||
|
||||
https://discord.com/invite/BwpFGBWsv8
|
||||
|
||||
## Forums/mailing lists
|
||||
|
||||
You can join SDL development discussions at:
|
||||
|
||||
https://discourse.libsdl.org/
|
||||
|
||||
Once you sign up, you can use the forum through the website or as a mailing list from your email client.
|
||||
|
||||
## Announcement list
|
||||
|
||||
You can sign up for the low traffic announcement list at:
|
||||
|
||||
https://www.libsdl.org/mailing-list.php
|
||||
|
||||
13
build-scripts/pkg-support/msvc/arm64/INSTALL.md.in
Normal file
13
build-scripts/pkg-support/msvc/arm64/INSTALL.md.in
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains @<@PROJECT_NAME@>@ built for arm64 Windows.
|
||||
|
||||
To use this package, simply replace an existing 64-bit ARM @<@PROJECT_NAME@>@.dll with the one included here.
|
||||
|
||||
# Development packages
|
||||
|
||||
If you're looking for packages with headers and libraries, you can download one of these:
|
||||
- @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-VC.zip, for development using Visual Studio
|
||||
- @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-mingw.zip, for development using mingw-w64
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# @<@PROJECT_NAME@>@ CMake configuration file:
|
||||
# This file is meant to be placed in a cmake subfolder of @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-VC.zip
|
||||
|
||||
cmake_minimum_required(VERSION 3.0...3.5)
|
||||
cmake_minimum_required(VERSION 3.0...3.28)
|
||||
|
||||
include(FeatureSummary)
|
||||
set_package_properties(SDL3 PROPERTIES
|
||||
|
||||
13
build-scripts/pkg-support/msvc/x64/INSTALL.md.in
Normal file
13
build-scripts/pkg-support/msvc/x64/INSTALL.md.in
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains @<@PROJECT_NAME@>@ built for x64 Windows.
|
||||
|
||||
To use this package, simply replace an existing 64-bit @<@PROJECT_NAME@>@.dll with the one included here.
|
||||
|
||||
# Development packages
|
||||
|
||||
If you're looking for packages with headers and libraries, you can download one of these:
|
||||
- @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-VC.zip, for development using Visual Studio
|
||||
- @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-mingw.zip, for development using mingw-w64
|
||||
|
||||
13
build-scripts/pkg-support/msvc/x86/INSTALL.md.in
Normal file
13
build-scripts/pkg-support/msvc/x86/INSTALL.md.in
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# Using this package
|
||||
|
||||
This package contains @<@PROJECT_NAME@>@ built for x86 Windows.
|
||||
|
||||
To use this package, simply replace an existing 32-bit @<@PROJECT_NAME@>@.dll with the one included here.
|
||||
|
||||
# Development packages
|
||||
|
||||
If you're looking for packages with headers and libraries, you can download one of these:
|
||||
- @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-VC.zip, for development using Visual Studio
|
||||
- @<@PROJECT_NAME@>@-devel-@<@PROJECT_VERSION@>@-mingw.zip, for development using mingw-w64
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2025 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,6 +1,6 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2025 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
|
||||
|
||||
@@ -36,32 +36,23 @@
|
||||
"-DSDL_SHARED=ON",
|
||||
"-DSDL_STATIC=OFF",
|
||||
"-DSDL_DISABLE_INSTALL_DOCS=ON",
|
||||
"-DSDL_RELOCATABLE=ON",
|
||||
"-DSDL_TEST_LIBRARY=ON",
|
||||
"-DSDL_VENDOR_INFO=libsdl.org",
|
||||
"-DSDL_TESTS=OFF"
|
||||
"-DSDL_TESTS=OFF",
|
||||
"-DSDL_VENDOR_INFO=libsdl.org"
|
||||
],
|
||||
"shared-static": "args"
|
||||
},
|
||||
"files": {
|
||||
"": [
|
||||
"build-scripts/pkg-support/mingw/INSTALL.txt",
|
||||
"build-scripts/pkg-support/mingw/INSTALL.md",
|
||||
"build-scripts/pkg-support/mingw/Makefile",
|
||||
"BUGS.txt",
|
||||
"CREDITS.md",
|
||||
"README-SDL.txt",
|
||||
"WhatsNew.txt",
|
||||
"LICENSE.txt",
|
||||
"README.md"
|
||||
],
|
||||
"cmake": [
|
||||
"build-scripts/pkg-support/mingw/cmake/SDL3Config.cmake",
|
||||
"build-scripts/pkg-support/mingw/cmake/SDL3ConfigVersion.cmake"
|
||||
],
|
||||
"docs": [
|
||||
"docs/*"
|
||||
],
|
||||
"test": [
|
||||
"test/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -100,6 +91,7 @@
|
||||
"-DSDL_TEST_LIBRARY=ON",
|
||||
"-DSDL_TESTS=OFF",
|
||||
"-DSDL_DISABLE_INSTALL_DOCS=ON",
|
||||
"-DSDL_RELOCATABLE=ON",
|
||||
"-DSDL_VENDOR_INFO=libsdl.org"
|
||||
],
|
||||
"files-lib": {
|
||||
@@ -118,25 +110,22 @@
|
||||
},
|
||||
"files-lib": {
|
||||
"": [
|
||||
"README-SDL.txt"
|
||||
"build-scripts/pkg-support/msvc/@<@ARCH@>@/INSTALL.md.in:INSTALL.md",
|
||||
"LICENSE.txt",
|
||||
"README.md"
|
||||
]
|
||||
},
|
||||
"files-devel": {
|
||||
"": [
|
||||
"README-SDL.txt",
|
||||
"BUGS.txt",
|
||||
"build-scripts/pkg-support/msvc/INSTALL.md",
|
||||
"LICENSE.txt",
|
||||
"README.md",
|
||||
"WhatsNew.txt"
|
||||
"README.md"
|
||||
],
|
||||
"cmake": [
|
||||
"build-scripts/pkg-support/msvc/cmake/SDL3Config.cmake.in:SDL3Config.cmake",
|
||||
"build-scripts/pkg-support/msvc/cmake/SDL3ConfigVersion.cmake.in:SDL3ConfigVersion.cmake",
|
||||
"cmake/sdlcpu.cmake"
|
||||
],
|
||||
"docs": [
|
||||
"docs/*"
|
||||
],
|
||||
"include/SDL3": [
|
||||
"include/SDL3/*.h"
|
||||
]
|
||||
@@ -149,9 +138,9 @@
|
||||
"-DSDL_STATIC=OFF",
|
||||
"-DSDL_TEST_LIBRARY=ON",
|
||||
"-DSDL_TESTS=OFF",
|
||||
"-DSDL_DISABLE_ANDROID_JAR=OFF",
|
||||
"-DSDL_DISABLE_INSTALL=OFF",
|
||||
"-DSDL_DISABLE_INSTALL_DOCS=OFF",
|
||||
"-DSDL_ANDROID_JAR=ON",
|
||||
"-DSDL_INSTALL=ON",
|
||||
"-DSDL_INSTALL_DOCS=ON",
|
||||
"-DSDL_VENDOR_INFO=libsdl.org"
|
||||
]
|
||||
},
|
||||
@@ -195,20 +184,26 @@
|
||||
"api-minimum": 19,
|
||||
"api-target": 29,
|
||||
"ndk-minimum": 21,
|
||||
"files": {
|
||||
"aar-files": {
|
||||
"": [
|
||||
"android-project/app/proguard-rules.pro:proguard.txt",
|
||||
"build-scripts/pkg-support/android/INSTALL.md.in:INSTALL.md",
|
||||
"build-scripts/pkg-support/android/__main__.py.in:__main__.py",
|
||||
"build-scripts/pkg-support/android/description.json.in:description.json"
|
||||
"build-scripts/pkg-support/android/aar/__main__.py.in:__main__.py",
|
||||
"build-scripts/pkg-support/android/aar/description.json.in:description.json"
|
||||
],
|
||||
"META-INF": [
|
||||
"LICENSE.txt"
|
||||
],
|
||||
"cmake": [
|
||||
"cmake/sdlcpu.cmake",
|
||||
"build-scripts/pkg-support/android/cmake/SDL3Config.cmake",
|
||||
"build-scripts/pkg-support/android/cmake/SDL3ConfigVersion.cmake.in:SDL3ConfigVersion.cmake"
|
||||
"build-scripts/pkg-support/android/aar/cmake/SDL3Config.cmake",
|
||||
"build-scripts/pkg-support/android/aar/cmake/SDL3ConfigVersion.cmake.in:SDL3ConfigVersion.cmake"
|
||||
]
|
||||
},
|
||||
"files": {
|
||||
"": [
|
||||
"build-scripts/pkg-support/android/INSTALL.md.in:INSTALL.md",
|
||||
"LICENSE.txt",
|
||||
"README.md"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +113,6 @@ RENAMED_MACROS = {
|
||||
"__LINUX__": "SDL_PLATFORM_LINUX",
|
||||
"__OS2__": "SDL_PLATFORM_OS2",
|
||||
# "__ANDROID__": "SDL_PLATFORM_ANDROID,
|
||||
"__NGAGE__": "SDL_PLATFORM_NGAGE",
|
||||
"__APPLE__": "SDL_PLATFORM_APPLE",
|
||||
"__TVOS__": "SDL_PLATFORM_TVOS",
|
||||
"__IPHONEOS__": "SDL_PLATFORM_IOS",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# Simple DirectMedia Layer
|
||||
# Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
# Copyright (C) 1997-2025 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
|
||||
@@ -50,7 +50,14 @@ my $optionsfname = undef;
|
||||
my $wikipreamble = undef;
|
||||
my $wikiheaderfiletext = 'Defined in %fname%';
|
||||
my $manpageheaderfiletext = 'Defined in %fname%';
|
||||
my $manpagesymbolfilterregex = undef;
|
||||
my $headercategoryeval = undef;
|
||||
my $quickrefenabled = 0;
|
||||
my @quickrefcategoryorder;
|
||||
my $quickreftitle = undef;
|
||||
my $quickrefurl = undef;
|
||||
my $quickrefdesc = undef;
|
||||
my $quickrefmacroregex = undef;
|
||||
my $changeformat = undef;
|
||||
my $manpath = undef;
|
||||
my $gitrev = undef;
|
||||
@@ -121,7 +128,14 @@ if (defined $optionsfname) {
|
||||
$wikipreamble = $val, next if $key eq 'wikipreamble';
|
||||
$wikiheaderfiletext = $val, next if $key eq 'wikiheaderfiletext';
|
||||
$manpageheaderfiletext = $val, next if $key eq 'manpageheaderfiletext';
|
||||
$manpagesymbolfilterregex = $val, next if $key eq 'manpagesymbolfilterregex';
|
||||
$headercategoryeval = $val, next if $key eq 'headercategoryeval';
|
||||
$quickrefenabled = int($val), next if $key eq 'quickrefenabled';
|
||||
@quickrefcategoryorder = split(/,/, $val), next if $key eq 'quickrefcategoryorder';
|
||||
$quickreftitle = $val, next if $key eq 'quickreftitle';
|
||||
$quickrefurl = $val, next if $key eq 'quickrefurl';
|
||||
$quickrefdesc = $val, next if $key eq 'quickrefdesc';
|
||||
$quickrefmacroregex = $val, next if $key eq 'quickrefmacroregex';
|
||||
}
|
||||
}
|
||||
close(OPTIONS);
|
||||
@@ -647,6 +661,7 @@ my %headersymsrettype = (); # $headersymsrettype{"SDL_OpenAudio"} -> string of C
|
||||
my %wikitypes = (); # contains string of wiki page extension, like $wikitypes{"SDL_OpenAudio"} == 'mediawiki'
|
||||
my %wikisyms = (); # contains references to hash of strings, each string being the full contents of a section of a wiki page, like $wikisyms{"SDL_OpenAudio"}{"Remarks"}.
|
||||
my %wikisectionorder = (); # contains references to array, each array item being a key to a wikipage section in the correct order, like $wikisectionorder{"SDL_OpenAudio"}[2] == 'Remarks'
|
||||
my %quickreffuncorder = (); # contains references to array, each array item being a key to a category with functions in the order they appear in the headers, like $quickreffuncorder{"Audio"}[0] == 'SDL_GetNumAudioDrivers'
|
||||
|
||||
my %referenceonly = (); # $referenceonly{"Y"} -> symbol name that this symbol is bound to. This makes wiki pages that say "See X" where "X" is a typedef and "Y" is a define attached to it. These pages are generated in the wiki only and do not bridge to the headers or manpages.
|
||||
|
||||
@@ -720,6 +735,279 @@ sub sanitize_c_typename {
|
||||
return $str;
|
||||
}
|
||||
|
||||
my %big_ascii = (
|
||||
'A' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'B' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'C' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'D' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'E' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'F' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}\x{20}" ],
|
||||
'G' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'H' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'I' => [ "\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}" ],
|
||||
'J' => [ "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'K' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'L' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'M' => [ "\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{255A}\x{2588}\x{2588}\x{2554}\x{255D}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'N' => [ "\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{255A}\x{2588}\x{2588}\x{2557}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'O' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'P' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}\x{20}" ],
|
||||
'Q' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{2584}\x{2584}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2580}\x{2580}\x{2550}\x{255D}\x{20}" ],
|
||||
'R' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'S' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'T' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{255D}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}" ],
|
||||
'U' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'V' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}\x{20}" ],
|
||||
'W' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{2588}\x{2588}\x{2588}\x{2557}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{255D}\x{255A}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'X' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2557}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'Y' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{20}\x{255A}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}" ],
|
||||
'Z' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{20}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
' ' => [ "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}" ],
|
||||
'.' => [ "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}" ],
|
||||
',' => [ "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{2584}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}" ],
|
||||
'/' => [ "\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}\x{20}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}" ],
|
||||
'!' => [ "\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}" ],
|
||||
'_' => [ "\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'0' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'1' => [ "\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2551}", "\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'2' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'3' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'4' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
||||
'5' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
||||
'6' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'7' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{20}" ],
|
||||
'8' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
'9' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
||||
);
|
||||
|
||||
sub print_big_ascii_string {
|
||||
my $fh = shift;
|
||||
my $str = shift;
|
||||
my $comment = shift;
|
||||
my $lowascii = shift;
|
||||
$comment = '' if not defined $comment;
|
||||
$lowascii = 0 if not defined $lowascii;
|
||||
|
||||
my @chars = split //, $str;
|
||||
my $charcount = scalar(@chars);
|
||||
|
||||
binmode($fh, ":utf8");
|
||||
|
||||
my $maxrows = $lowascii ? 5 : 6;
|
||||
|
||||
for(my $rownum = 0; $rownum < $maxrows; $rownum++){
|
||||
print $fh $comment;
|
||||
my $charidx = 0;
|
||||
foreach my $ch (@chars) {
|
||||
my $rowsref = $big_ascii{uc($ch)};
|
||||
die("Don't have a big ascii entry for '$ch'!\n") if not defined $rowsref;
|
||||
my $row = @$rowsref[$rownum];
|
||||
|
||||
if ($lowascii) {
|
||||
my @x = split //, $row;
|
||||
foreach (@x) {
|
||||
my $v = ($_ eq "\x{2588}") ? 'X' : ' ';
|
||||
print $fh $v;
|
||||
}
|
||||
} else {
|
||||
print $fh $row;
|
||||
}
|
||||
|
||||
$charidx++;
|
||||
|
||||
if ($charidx < $charcount) {
|
||||
print $fh " ";
|
||||
}
|
||||
}
|
||||
print $fh "\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub generate_quickref {
|
||||
my $briefsref = shift;
|
||||
my $path = shift;
|
||||
my $lowascii = shift;
|
||||
|
||||
# !!! FIXME: this gitrev and majorver/etc stuff is copy/pasted a few times now.
|
||||
if (!$gitrev) {
|
||||
$gitrev = `cd "$srcpath" ; git rev-list HEAD~..`;
|
||||
chomp($gitrev);
|
||||
}
|
||||
|
||||
# !!! FIXME
|
||||
open(FH, '<', "$srcpath/$versionfname") or die("Can't open '$srcpath/$versionfname': $!\n");
|
||||
my $majorver = 0;
|
||||
my $minorver = 0;
|
||||
my $microver = 0;
|
||||
while (<FH>) {
|
||||
chomp;
|
||||
if (/$versionmajorregex/) {
|
||||
$majorver = int($1);
|
||||
} elsif (/$versionminorregex/) {
|
||||
$minorver = int($1);
|
||||
} elsif (/$versionmicroregex/) {
|
||||
$microver = int($1);
|
||||
}
|
||||
}
|
||||
close(FH);
|
||||
my $fullversion = "$majorver.$minorver.$microver";
|
||||
|
||||
my $tmppath = "$path.tmp";
|
||||
open(my $fh, '>', $tmppath) or die("Can't open '$tmppath': $!\n");
|
||||
|
||||
if (not @quickrefcategoryorder) {
|
||||
@quickrefcategoryorder = sort keys %headercategorydocs;
|
||||
}
|
||||
|
||||
#my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
|
||||
#my $datestr = sprintf("%04d-%02d-%02d %02d:%02d:%02d GMT", $year+1900, $mon+1, $mday, $hour, $min, $sec);
|
||||
|
||||
print $fh "<!-- DO NOT EDIT THIS PAGE ON THE WIKI. IT WILL BE OVERWRITTEN BY WIKIHEADERS AND CHANGES WILL BE LOST! -->\n\n";
|
||||
|
||||
# Just something to test big_ascii output.
|
||||
#print_big_ascii_string($fh, "ABCDEFGHIJ", '', $lowascii);
|
||||
#print_big_ascii_string($fh, "KLMNOPQRST", '', $lowascii);
|
||||
#print_big_ascii_string($fh, "UVWXYZ0123", '', $lowascii);
|
||||
#print_big_ascii_string($fh, "456789JT3A", '', $lowascii);
|
||||
#print_big_ascii_string($fh, "hello, _a.b/c_!!", '', $lowascii);
|
||||
|
||||
# Dan Bechard's work was on an SDL2 cheatsheet:
|
||||
# https://blog.theprogrammingjunkie.com/post/sdl2-cheatsheet/
|
||||
|
||||
if ($lowascii) {
|
||||
print $fh "# QuickReferenceNoUnicode\n\n";
|
||||
print $fh "If you want to paste this into a text editor that can handle\n";
|
||||
print $fh "fancy Unicode section headers, try using\n";
|
||||
print $fh "[QuickReference](QuickReference) instead.\n\n";
|
||||
} else {
|
||||
print $fh "# QuickReference\n\n";
|
||||
print $fh "If you want to paste this into a text editor that can't handle\n";
|
||||
print $fh "the fancy Unicode section headers, try using\n";
|
||||
print $fh "[QuickReferenceNoUnicode](QuickReferenceNoUnicode) instead.\n\n";
|
||||
}
|
||||
|
||||
print $fh "```c\n";
|
||||
print $fh "// $quickreftitle\n" if defined $quickreftitle;
|
||||
print $fh "//\n";
|
||||
print $fh "// $quickrefurl\n//\n" if defined $quickrefurl;
|
||||
print $fh "// $quickrefdesc\n" if defined $quickrefdesc;
|
||||
#print $fh "// When this document was written: $datestr\n";
|
||||
print $fh "// Based on $projectshortname version $fullversion\n";
|
||||
#print $fh "// git revision $gitrev\n";
|
||||
print $fh "//\n";
|
||||
print $fh "// This can be useful in an IDE with search and syntax highlighting.\n";
|
||||
print $fh "//\n";
|
||||
print $fh "// Original idea for this document came from Dan Bechard (thanks!)\n";
|
||||
print $fh "// ASCII art generated by: https://patorjk.com/software/taag/#p=display&f=ANSI%20Shadow (with modified 'S' for readability)\n\n";
|
||||
|
||||
foreach (@quickrefcategoryorder) {
|
||||
my $cat = $_;
|
||||
my $maxlen = 0;
|
||||
my @csigs = ();
|
||||
my $funcorderref = $quickreffuncorder{$cat};
|
||||
next if not defined $funcorderref;
|
||||
|
||||
foreach (@$funcorderref) {
|
||||
my $sym = $_;
|
||||
my $csig = '';
|
||||
|
||||
if ($headersymstype{$sym} == 1) { # function
|
||||
$csig = "${headersymsrettype{$sym}} $sym";
|
||||
my $fnsigparams = $headersymsparaminfo{$sym};
|
||||
if (not defined($fnsigparams)) {
|
||||
$csig .= '(void);';
|
||||
} else {
|
||||
my $sep = '(';
|
||||
for (my $i = 0; $i < scalar(@$fnsigparams); $i += 2) {
|
||||
my $paramname = @$fnsigparams[$i];
|
||||
my $paramtype = @$fnsigparams[$i+1];
|
||||
my $spc = ($paramtype =~ /\*\Z/) ? '' : ' ';
|
||||
$csig .= "$sep$paramtype$spc$paramname";
|
||||
$sep = ', ';
|
||||
}
|
||||
$csig .= ");";
|
||||
}
|
||||
} elsif ($headersymstype{$sym} == 2) { # macro
|
||||
next if defined $quickrefmacroregex && not $sym =~ /$quickrefmacroregex/;
|
||||
|
||||
$csig = (split /\n/, $headerdecls{$sym})[0]; # get the first line from a multiline string.
|
||||
if (not $csig =~ s/\A(\#define [a-zA-Z0-9_]*\(.*?\))(\s+.*)?\Z/$1/) {
|
||||
$csig =~ s/\A(\#define [a-zA-Z0-9_]*)(\s+.*)?\Z/$1/;
|
||||
}
|
||||
chomp($csig);
|
||||
}
|
||||
|
||||
my $len = length($csig);
|
||||
$maxlen = $len if $len > $maxlen;
|
||||
|
||||
push @csigs, $sym;
|
||||
push @csigs, $csig;
|
||||
}
|
||||
|
||||
$maxlen += 2;
|
||||
|
||||
next if (not @csigs);
|
||||
|
||||
print $fh "\n";
|
||||
print_big_ascii_string($fh, $cat, '// ', $lowascii);
|
||||
print $fh "\n";
|
||||
|
||||
while (@csigs) {
|
||||
my $sym = shift @csigs;
|
||||
my $csig = shift @csigs;
|
||||
my $brief = $$briefsref{$sym};
|
||||
if (defined $brief) {
|
||||
$brief = "$brief";
|
||||
chomp($brief);
|
||||
my $thiswikitype = defined $wikitypes{$sym} ? $wikitypes{$sym} : 'md'; # default to MarkDown for new stuff.
|
||||
$brief = dewikify($thiswikitype, $brief);
|
||||
my $spaces = ' ' x ($maxlen - length($csig));
|
||||
$brief = "$spaces// $brief";
|
||||
} else {
|
||||
$brief = '';
|
||||
}
|
||||
print $fh "$csig$brief\n";
|
||||
}
|
||||
}
|
||||
|
||||
print $fh "```\n\n";
|
||||
|
||||
close($fh);
|
||||
|
||||
# # Don't overwrite the file if nothing has changed besides the timestamp
|
||||
# # and git revision.
|
||||
# my $matches = 1;
|
||||
# if ( not -f $path ) {
|
||||
# $matches = 0; # always write if the file hasn't been created yet.
|
||||
# } else {
|
||||
# open(my $fh_a, '<', $tmppath) or die("Can't open '$tmppath': $!\n");
|
||||
# open(my $fh_b, '<', $path) or die("Can't open '$path': $!\n");
|
||||
# while (1) {
|
||||
# my $a = <$fh_a>;
|
||||
# my $b = <$fh_b>;
|
||||
# $matches = 0, last if ((not defined $a) != (not defined $b));
|
||||
# last if ((not defined $a) || (not defined $b));
|
||||
# if ($a ne $b) {
|
||||
# next if ($a =~ /\A\/\/ When this document was written:/);
|
||||
# next if ($a =~ /\A\/\/ git revision /);
|
||||
# $matches = 0;
|
||||
# last;
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# close($fh_a);
|
||||
# close($fh_b);
|
||||
# }
|
||||
#
|
||||
# if ($matches) {
|
||||
# unlink($tmppath); # it's the same file except maybe the date/gitrev. Don't overwrite it.
|
||||
# } else {
|
||||
# rename($tmppath, $path) or die("Can't rename '$tmppath' to '$path': $!\n");
|
||||
# }
|
||||
rename($tmppath, $path) or die("Can't rename '$tmppath' to '$path': $!\n");
|
||||
}
|
||||
|
||||
|
||||
my $incpath = "$srcpath";
|
||||
$incpath .= "/$incsubdir" if $incsubdir ne '';
|
||||
|
||||
@@ -749,10 +1037,12 @@ while (my $d = readdir(DH)) {
|
||||
}
|
||||
|
||||
my @contents = ();
|
||||
my @function_order = ();
|
||||
my $ignoring_lines = 0;
|
||||
my $header_comment = -1;
|
||||
my $saw_category_doxygen = -1;
|
||||
my $lineno = 0;
|
||||
|
||||
while (<FH>) {
|
||||
chomp;
|
||||
$lineno++;
|
||||
@@ -1073,7 +1363,6 @@ while (my $d = readdir(DH)) {
|
||||
}
|
||||
}
|
||||
$decl .= $additional_decl;
|
||||
|
||||
} elsif ($symtype == 2) { # a macro
|
||||
if ($decl =~ /\A\s*\#\s*define\s+(.*?)(\(.*?\)|)\s+/) {
|
||||
$sym = $1;
|
||||
@@ -1301,6 +1590,7 @@ while (my $d = readdir(DH)) {
|
||||
$headersymstype{$sym} = $symtype;
|
||||
$headersymsparaminfo{$sym} = \@paraminfo if (scalar(@paraminfo) > 0);
|
||||
$headersymsrettype{$sym} = $rettype if (defined($rettype));
|
||||
push @function_order, $sym if ($symtype == 1) || ($symtype == 2);
|
||||
push @contents, join("\n", @templines);
|
||||
push @contents, join("\n", @decllines) if (scalar(@decllines) > 0);
|
||||
}
|
||||
@@ -1309,6 +1599,7 @@ while (my $d = readdir(DH)) {
|
||||
close(FH);
|
||||
|
||||
$headers{$dent} = \@contents;
|
||||
$quickreffuncorder{$current_wiki_category} = \@function_order if defined $current_wiki_category;
|
||||
}
|
||||
closedir(DH);
|
||||
|
||||
@@ -1785,6 +2076,8 @@ if ($copy_direction == 1) { # --copy-to-headers
|
||||
|
||||
} elsif ($copy_direction == -1) { # --copy-to-wiki
|
||||
|
||||
my %briefs = (); # $briefs{'SDL_OpenAudio'} -> the \brief string for the function.
|
||||
|
||||
if (defined $changeformat) {
|
||||
$dewikify_mode = $changeformat;
|
||||
$wordwrap_mode = $changeformat;
|
||||
@@ -1856,6 +2149,8 @@ if ($copy_direction == 1) { # --copy-to-headers
|
||||
$sections{'Remarks'} = "$remarks\n" if $remarks ne '';
|
||||
$sections{'Syntax'} = $syntax;
|
||||
|
||||
$briefs{$sym} = $brief;
|
||||
|
||||
my %params = (); # have to parse these and build up the wiki tables after, since Markdown needs to know the length of the largest string. :/
|
||||
my @paramsorder = ();
|
||||
my $fnsigparams = $headersymsparaminfo{$sym};
|
||||
@@ -2332,6 +2627,12 @@ if ($copy_direction == 1) { # --copy-to-headers
|
||||
|
||||
<!-- END CATEGORY DOCUMENTATION -->
|
||||
|
||||
## Categories
|
||||
|
||||
<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
|
||||
<!-- BEGIN CATEGORY LIST: Category$cat, CategoryAPICategory -->
|
||||
<!-- END CATEGORY LIST -->
|
||||
|
||||
## Functions
|
||||
|
||||
<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
|
||||
@@ -2415,6 +2716,11 @@ __EOF__
|
||||
}
|
||||
}
|
||||
|
||||
# Write out quick reference pages...
|
||||
if ($quickrefenabled) {
|
||||
generate_quickref(\%briefs, "$wikipath/QuickReference.md", 0);
|
||||
generate_quickref(\%briefs, "$wikipath/QuickReferenceNoUnicode.md", 1);
|
||||
}
|
||||
} elsif ($copy_direction == -2) { # --copy-to-manpages
|
||||
# This only takes from the wiki data, since it has sections we omit from the headers, like code examples.
|
||||
|
||||
@@ -2460,6 +2766,7 @@ __EOF__
|
||||
my $sym = $_;
|
||||
next if not defined $wikisyms{$sym}; # don't have a page for that function, skip it.
|
||||
next if $sym =~ /\A\[category documentation\]/; # not real symbols
|
||||
next if (defined $manpagesymbolfilterregex) && ($sym =~ /$manpagesymbolfilterregex/);
|
||||
my $symtype = $headersymstype{$sym};
|
||||
my $wikitype = $wikitypes{$sym};
|
||||
my $sectionsref = $wikisyms{$sym};
|
||||
@@ -2491,7 +2798,8 @@ __EOF__
|
||||
my $decl = $headerdecls{$sym};
|
||||
my $str = '';
|
||||
|
||||
$brief = "$brief";
|
||||
# the "$brief" makes sure this is a copy of the string, which is doing some weird reference thing otherwise.
|
||||
$brief = defined $brief ? "$brief" : '';
|
||||
$brief =~ s/\A[\s\n]*\= .*? \=\s*?\n+//ms;
|
||||
$brief =~ s/\A[\s\n]*\=\= .*? \=\=\s*?\n+//ms;
|
||||
$brief =~ s/\A(.*?\.) /$1\n/; # \brief should only be one sentence, delimited by a period+space. Split if necessary.
|
||||
|
||||
@@ -61,7 +61,7 @@ This module will set the following variables in your project:
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.7...3.28)
|
||||
|
||||
if(NOT PROJECT_NAME MATCHES "^SDL.*")
|
||||
message(WARNING "This module is internal to SDL and is currently not supported.")
|
||||
|
||||
@@ -52,7 +52,7 @@ This module responds to the flags:
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.7...3.28)
|
||||
|
||||
if(NOT PROJECT_NAME MATCHES "^SDL.*")
|
||||
message(WARNING "This module is internal to SDL and is currently not supported.")
|
||||
|
||||
@@ -55,7 +55,7 @@ This module responds to the flags:
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.7...3.28)
|
||||
|
||||
if(NOT PROJECT_NAME MATCHES "^SDL.*")
|
||||
message(WARNING "This module is internal to SDL and is currently not supported.")
|
||||
|
||||
@@ -5,7 +5,7 @@ It is (currently) limited to packaging binaries for a single architecture.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.7...3.28)
|
||||
|
||||
if(NOT PROJECT_NAME MATCHES "^SDL.*")
|
||||
message(WARNING "This module is internal to SDL and is currently not supported.")
|
||||
|
||||
@@ -6,7 +6,7 @@ Because
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required(VERSION 3.16...3.28)
|
||||
|
||||
if(NOT CMAKE_SCRIPT_MODE_FILE)
|
||||
message(FATAL_ERROR "This file can only be used in CMake script mode")
|
||||
|
||||
@@ -376,24 +376,6 @@ function(SDL_PrintSummary)
|
||||
message(STATUS "")
|
||||
endif()
|
||||
|
||||
if(WARN_ABOUT_ARM_SIMD_ASM_MIT)
|
||||
message(STATUS "SDL is being built with ARM SIMD optimizations, which")
|
||||
message(STATUS "uses code licensed under the MIT license. If this is a")
|
||||
message(STATUS "problem, please disable that code by rerunning CMake with:")
|
||||
message(STATUS "")
|
||||
message(STATUS " -DSDL_ARMSIMD=OFF")
|
||||
message(STATUS "")
|
||||
endif()
|
||||
|
||||
if(WARN_ABOUT_ARM_NEON_ASM_MIT)
|
||||
message(STATUS "SDL is being built with ARM NEON optimizations, which")
|
||||
message(STATUS "uses code licensed under the MIT license. If this is a")
|
||||
message(STATUS "problem, please disable that code by rerunning CMake with:")
|
||||
message(STATUS "")
|
||||
message(STATUS " -DSDL_ARMNEON=OFF")
|
||||
message(STATUS "")
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT (ANDROID OR APPLE OR EMSCRIPTEN OR HAIKU OR RISCOS))
|
||||
if(NOT (HAVE_X11 OR HAVE_WAYLAND))
|
||||
if(NOT SDL_UNIX_CONSOLE_BUILD)
|
||||
|
||||
@@ -307,15 +307,13 @@ macro(CheckX11)
|
||||
find_file(HAVE_XRANDR_H NAMES "X11/extensions/Xrandr.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XFIXES_H_ NAMES "X11/extensions/Xfixes.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XRENDER_H NAMES "X11/extensions/Xrender.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XSYNC_H NAMES "X11/extensions/sync.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XSS_H NAMES "X11/extensions/scrnsaver.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XSHAPE_H NAMES "X11/extensions/shape.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XDBE_H NAMES "X11/extensions/Xdbe.h" HINTS "${X11_INCLUDEDIR}")
|
||||
find_file(HAVE_XEXT_H NAMES "X11/extensions/Xext.h" HINTS "${X11_INCLUDEDIR}")
|
||||
|
||||
if(X11_LIB)
|
||||
if(NOT HAVE_XEXT_H)
|
||||
message(FATAL_ERROR "Missing Xext.h, maybe you need to install the libxext-dev package?")
|
||||
endif()
|
||||
if(X11_LIB AND HAVE_XEXT_H)
|
||||
|
||||
set(HAVE_X11 TRUE)
|
||||
set(HAVE_SDL_VIDEO TRUE)
|
||||
@@ -445,6 +443,11 @@ macro(CheckX11)
|
||||
set(HAVE_X11_XFIXES TRUE)
|
||||
endif()
|
||||
|
||||
if(SDL_X11_XSYNC AND HAVE_XSYNC_H AND XEXT_LIB)
|
||||
set(SDL_VIDEO_DRIVER_X11_XSYNC 1)
|
||||
set(HAVE_X11_XSYNC TRUE)
|
||||
endif()
|
||||
|
||||
if(SDL_X11_XRANDR AND HAVE_XRANDR_H AND XRANDR_LIB)
|
||||
if(HAVE_X11_SHARED)
|
||||
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB_SONAME}\"")
|
||||
@@ -623,6 +626,7 @@ macro(CheckCOCOA)
|
||||
endif()
|
||||
if(HAVE_COCOA)
|
||||
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/cocoa/*.m")
|
||||
set(SDL_FRAMEWORK_IOKIT 1)
|
||||
set(SDL_VIDEO_DRIVER_COCOA 1)
|
||||
set(HAVE_SDL_VIDEO TRUE)
|
||||
endif()
|
||||
@@ -816,7 +820,11 @@ macro(CheckPTHREAD)
|
||||
set(PTHREAD_LDFLAGS "-lpthread")
|
||||
elseif(SOLARIS)
|
||||
set(PTHREAD_CFLAGS "-D_REENTRANT")
|
||||
set(PTHREAD_LDFLAGS "-pthread -lposix4")
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "SunPro")
|
||||
set(PTHREAD_LDFLAGS "-mt -lpthread")
|
||||
else()
|
||||
set(PTHREAD_LDFLAGS "-pthread -lposix4")
|
||||
endif()
|
||||
elseif(SYSV5)
|
||||
set(PTHREAD_CFLAGS "-D_REENTRANT -Kthread")
|
||||
set(PTHREAD_LDFLAGS "")
|
||||
|
||||
@@ -34,7 +34,7 @@ function(SDL_AddCommonCompilerFlags TARGET)
|
||||
cmake_push_check_state()
|
||||
check_c_compiler_flag("/W3" COMPILER_SUPPORTS_W3)
|
||||
if(COMPILER_SUPPORTS_W3)
|
||||
target_compile_options(${TARGET} PRIVATE "/W3")
|
||||
target_compile_options(${TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:C,CXX>:/W3>")
|
||||
endif()
|
||||
cmake_pop_check_state()
|
||||
endif()
|
||||
@@ -131,7 +131,7 @@ function(SDL_AddCommonCompilerFlags TARGET)
|
||||
if(MSVC)
|
||||
check_c_compiler_flag(/WX HAVE_WX)
|
||||
if(HAVE_WX)
|
||||
target_compile_options(${TARGET} PRIVATE "/WX")
|
||||
target_compile_options(${TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:C,CXX>:/WX>")
|
||||
endif()
|
||||
elseif(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QNX)
|
||||
check_c_compiler_flag(-Werror HAVE_WERROR)
|
||||
|
||||
@@ -61,8 +61,8 @@ const char *arch_${known_arch} = \"INFO<${known_arch}=\" ARCH_${known_arch} \">\
|
||||
|
||||
set(src_arch_detect "${src_vars}
|
||||
int main(int argc, char *argv[]) {
|
||||
(void)argv;
|
||||
int result = 0;
|
||||
(void)argv;
|
||||
${src_main}
|
||||
return result;
|
||||
}")
|
||||
|
||||
@@ -338,13 +338,17 @@ function(configure_sdl3_pc)
|
||||
message(STATUS "\"pkg-config --static --libs sdl3\" will return invalid information")
|
||||
endif()
|
||||
|
||||
# Calculate prefix relative to location of sdl3.pc
|
||||
if(NOT IS_ABSOLUTE "${CMAKE_INSTALL_PREFIX}")
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX}")
|
||||
if(SDL_RELOCATABLE)
|
||||
# Calculate prefix relative to location of sdl3.pc
|
||||
if(NOT IS_ABSOLUTE "${CMAKE_INSTALL_PREFIX}")
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDL_PKGCONFIG_INSTALLDIR}" "${CMAKE_INSTALL_PREFIX}")
|
||||
string(REGEX REPLACE "[/]+$" "" SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
|
||||
set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
|
||||
else()
|
||||
set(SDL_PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDL_PKGCONFIG_INSTALLDIR}" "${CMAKE_INSTALL_PREFIX}")
|
||||
string(REGEX REPLACE "[/]+$" "" SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
|
||||
set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
|
||||
|
||||
if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set(INCLUDEDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
17
docs/INTRO-androidstudio.md
Normal file
17
docs/INTRO-androidstudio.md
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
# Introduction to SDL with Android Studio
|
||||
|
||||
We'll start by creating a simple project to build and run [hello.c](hello.c)
|
||||
|
||||
- Use our handy script to create a template project:
|
||||
```sh
|
||||
./build-scripts/create-android-project.py org.libsdl.hello docs/hello.c
|
||||
```
|
||||
- Run Android Studio and open the newly created build/org.libsdl.hello directory
|
||||
- Build and run!
|
||||
|
||||
A more complete example is available at:
|
||||
|
||||
https://github.com/Ravbug/sdl3-sample
|
||||
|
||||
Additional information and troubleshooting is available in [README-android.md](README-android.md)
|
||||
50
docs/INTRO-cmake.md
Normal file
50
docs/INTRO-cmake.md
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
# Introduction to SDL with CMake
|
||||
|
||||
The easiest way to use SDL is to include it as a subproject in your project.
|
||||
|
||||
We'll start by creating a simple project to build and run [hello.c](hello.c)
|
||||
|
||||
Create the file CMakeLists.txt
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(hello)
|
||||
|
||||
# set the output directory for built objects.
|
||||
# This makes sure that the dynamic library goes into the build directory automatically.
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
|
||||
|
||||
# This assumes the SDL source is available in vendored/SDL
|
||||
add_subdirectory(vendored/SDL EXCLUDE_FROM_ALL)
|
||||
|
||||
# Create your game executable target as usual
|
||||
add_executable(hello WIN32 hello.c)
|
||||
|
||||
# Link to the actual SDL3 library.
|
||||
target_link_libraries(hello PRIVATE SDL3::SDL3)
|
||||
```
|
||||
|
||||
Build:
|
||||
```sh
|
||||
cmake -S . -B build
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
Run:
|
||||
- On Windows the executable is in the build Debug directory:
|
||||
```sh
|
||||
cd build/Debug
|
||||
./hello
|
||||
```
|
||||
- On other platforms the executable is in the build directory:
|
||||
```sh
|
||||
cd build
|
||||
./hello
|
||||
```
|
||||
|
||||
A more complete example is available at:
|
||||
|
||||
https://github.com/Ravbug/sdl3-sample
|
||||
|
||||
Additional information and troubleshooting is available in [README-cmake.md](README-cmake.md)
|
||||
38
docs/INTRO-emscripten.md
Normal file
38
docs/INTRO-emscripten.md
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
# Introduction to SDL with Emscripten
|
||||
|
||||
First, you should have the Emscripten SDK installed from:
|
||||
|
||||
https://emscripten.org/docs/getting_started/downloads.html
|
||||
|
||||
We'll start by creating a simple project to build and run [hello.c](hello.c)
|
||||
|
||||
## Building SDL
|
||||
|
||||
Once you have a command line interface with the Emscripten SDK set up and you've changed directory to the SDL directory, you can build SDL like this:
|
||||
|
||||
```sh
|
||||
mkdir hello
|
||||
cd hello
|
||||
emcmake cmake ..
|
||||
emmake make
|
||||
```
|
||||
|
||||
## Building your app
|
||||
|
||||
In this case we'll just run a simple command to compile our source with the SDL library we just built:
|
||||
```sh
|
||||
emcc -o index.html ../docs/hello.c -I../include -L. -lSDL3
|
||||
```
|
||||
|
||||
## Running your app
|
||||
|
||||
You can now run your app by pointing a webserver at your build directory and connecting a web browser to it.
|
||||
|
||||
## More information
|
||||
|
||||
A more complete example is available at:
|
||||
|
||||
https://github.com/Ravbug/sdl3-sample
|
||||
|
||||
Additional information and troubleshooting is available in [README-emscripten.md](README-emscripten.md)
|
||||
15
docs/INTRO-visualstudio.md
Normal file
15
docs/INTRO-visualstudio.md
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
# Introduction to SDL with Visual Studio
|
||||
|
||||
The easiest way to use SDL is to include it as a subproject in your project.
|
||||
|
||||
We'll start by creating a simple project to build and run [hello.c](hello.c)
|
||||
|
||||
- Create a new project in Visual Studio, using the C++ Empty Project template
|
||||
- Add hello.c to the Source Files
|
||||
- Right click the solution, select add an existing project, navigate to VisualC/SDL and add SDL.vcxproj
|
||||
- Select your main project and go to Project -> Project Dependencies and select SDL3
|
||||
- Select your main project and go to Project -> Properties, set the filter at the top to "All Configurations" and "All Platforms", select VC++ Directories and add the SDL include directory to "Include Directories"
|
||||
- Select your main project and go to Project -> Add Reference and select SDL3
|
||||
- Build and run!
|
||||
|
||||
16
docs/INTRO-xcode.md
Normal file
16
docs/INTRO-xcode.md
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
# Introduction to SDL with Xcode
|
||||
|
||||
The easiest way to use SDL is to include it as a subproject in your project.
|
||||
|
||||
We'll start by creating a simple project to build and run [hello.c](hello.c)
|
||||
|
||||
- Create a new project in Xcode, using the App template and selecting Objective C as the language
|
||||
- Remove the .h and .m files that were automatically added to the project
|
||||
- Remove the main storyboard that was automatically added to the project
|
||||
- On iOS projects, select the project, select the main target, select the Info tab, look for "Custom iOS Target Properties", and remove "Main storyboard base file name" and "Application Scene Manifest"
|
||||
- Right click the project and select "Add Files to [project]", navigate to the SDL docs directory and add the file hello.c
|
||||
- Right click the project and select "Add Files to [project]", navigate to the SDL Xcode/SDL directory and add SDL.xcodeproj
|
||||
- Select the project, select the main target, select the General tab, look for "Frameworks, Libaries, and Embedded Content", and add SDL3.framework
|
||||
- Build and run!
|
||||
|
||||
@@ -10,7 +10,7 @@ The rest of this README covers the Android gradle style build process.
|
||||
Requirements
|
||||
================================================================================
|
||||
|
||||
Android SDK (version 34 or later)
|
||||
Android SDK (version 35 or later)
|
||||
https://developer.android.com/sdk/index.html
|
||||
|
||||
Android NDK r15c or later
|
||||
@@ -37,7 +37,7 @@ dispatches to native functions implemented in the SDL library:
|
||||
src/core/android/SDL_android.c
|
||||
|
||||
|
||||
Building an app
|
||||
Building a simple app
|
||||
================================================================================
|
||||
|
||||
For simple projects you can use the script located at build-scripts/create-android-project.py
|
||||
@@ -67,40 +67,38 @@ Finally, a word of caution: re running create-android-project.py wipes any chang
|
||||
done in the build directory for the app!
|
||||
|
||||
|
||||
Building a more complex app
|
||||
================================================================================
|
||||
|
||||
For more complex projects, follow these instructions:
|
||||
|
||||
1. Get the source code for SDL and copy the 'android-project' directory located at SDL/android-project to a suitable location. Also make sure to rename it to your project name (In these examples: YOURPROJECT).
|
||||
1. Get the source code for SDL and copy the 'android-project' directory located at SDL/android-project to a suitable location in your project.
|
||||
|
||||
(The 'android-project' directory can basically be seen as a sort of starting point for the android-port of your project. It contains the glue code between the Android Java 'frontend' and the SDL code 'backend'. It also contains some standard behaviour, like how events should be handled, which you will be able to change.)
|
||||
The 'android-project' directory can basically be seen as a sort of starting point for the android-port of your project. It contains the glue code between the Android Java 'frontend' and the SDL code 'backend'. It also contains some standard behaviour, like how events should be handled, which you will be able to change.
|
||||
|
||||
2. Move or [symlink](https://en.wikipedia.org/wiki/Symbolic_link) the SDL directory into the "YOURPROJECT/app/jni" directory
|
||||
2. If you are _not_ already building SDL as a part of your project (e.g. via CMake add_subdirectory() or FetchContent) move or [symlink](https://en.wikipedia.org/wiki/Symbolic_link) the SDL directory into the 'android-project/app/jni' directory. Alternatively you can [use the SDL3 Android Archive (.aar)](#using-the-sdl3-android-archive-aar), see bellow for more details.
|
||||
|
||||
(This is needed as the source of SDL has to be compiled by the Android compiler)
|
||||
This is needed as SDL has to be compiled by the Android compiler.
|
||||
|
||||
3. Edit "YOURPROJECT/app/jni/src/Android.mk" to include your source files.
|
||||
3. Edit 'android-project/app/build.gradle' to include any assets that your app needs by adding 'assets.srcDirs' in 'sourceSets.main'.
|
||||
|
||||
(They should be separated by spaces after the "LOCAL_SRC_FILES := " declaration)
|
||||
For example: `assets.srcDirs = ['../../assets', '../../shaders']`
|
||||
|
||||
4a. If you want to use Android Studio, simply open your 'YOURPROJECT' directory and start building.
|
||||
If using CMake:
|
||||
|
||||
4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device
|
||||
4. Edit 'android-project/app/build.gradle' to set 'buildWithCMake' to true and set 'externalNativeBuild' cmake path to your top level CMakeLists.txt.
|
||||
|
||||
For example: `path '../../CMakeLists.txt'`
|
||||
|
||||
If you already have a project that uses CMake, the instructions change somewhat:
|
||||
5. Change the target containing your main function to be built as a shared library called "main" when compiling for Android. (e.g. add_executable(MyGame main.c) should become add_library(main SHARED main.c) on Android)
|
||||
|
||||
1. Do points 1 and 2 from the instruction above.
|
||||
2. Edit "YOURPROJECT/app/build.gradle" to comment out or remove sections containing ndk-build
|
||||
and uncomment the cmake sections. Add arguments to the CMake invocation as needed.
|
||||
3. Edit "YOURPROJECT/app/jni/CMakeLists.txt" to include your project (it defaults to
|
||||
adding the "src" subdirectory). Note that you'll have SDL3 and SDL3-static
|
||||
as targets in your project, so you should have "target_link_libraries(yourgame SDL3)"
|
||||
in your CMakeLists.txt file. Also be aware that you should use add_library() instead of
|
||||
add_executable() for the target containing your "main" function.
|
||||
If using Android Makefiles:
|
||||
|
||||
If you wish to use Android Studio, you can skip the last step.
|
||||
4. Edit 'android-project/app/jni/src/Android.mk' to include your source files. They should be separated by spaces after the 'LOCAL_SRC_FILES := ' declaration.
|
||||
|
||||
4. Run './gradlew installDebug' or './gradlew installRelease' in the project directory. It will build and install your .apk on any
|
||||
connected Android device
|
||||
To build your app, run `./gradlew installDebug` or `./gradlew installRelease` in the project directory. It will build and install your .apk on any connected Android device. If you want to use Android Studio, simply open your 'android-project' directory and start building.
|
||||
|
||||
Additionally the [SDL_helloworld](https://github.com/libsdl-org/SDL_helloworld) project contains a small example program with a functional Android port that you can use as a reference.
|
||||
|
||||
Here's an explanation of the files in the Android project, so you can customize them:
|
||||
|
||||
@@ -170,13 +168,13 @@ build-scripts/create-android-project.py --variant aar com.yourcompany.yourapp <
|
||||
Customizing your application name
|
||||
================================================================================
|
||||
|
||||
To customize your application name, edit AndroidManifest.xml and replace
|
||||
To customize your application name, edit AndroidManifest.xml and build.gradle to replace
|
||||
"org.libsdl.app" with an identifier for your product package.
|
||||
|
||||
Then create a Java class extending SDLActivity and place it in a directory
|
||||
under src matching your package, e.g.
|
||||
|
||||
src/com/gamemaker/game/MyGame.java
|
||||
app/src/main/java/com/gamemaker/game/MyGame.java
|
||||
|
||||
Here's an example of a minimal class file:
|
||||
|
||||
@@ -316,6 +314,17 @@ You can control activity re-creation (eg. onCreate()) behaviour. This allows you
|
||||
to choose whether to keep or re-initialize java and native static datas, see
|
||||
SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY in SDL_hints.h.
|
||||
|
||||
|
||||
Insets and Safe Areas
|
||||
================================================================================
|
||||
|
||||
As of Android 15, SDL windows cover the entire screen, extending under notches
|
||||
and system bars. The OS expects you to take those into account when displaying
|
||||
content and SDL provides the function SDL_GetWindowSafeArea() so you know what
|
||||
area is available for interaction. Outside of the safe area can be potentially
|
||||
covered by system bars or used by OS gestures.
|
||||
|
||||
|
||||
Mouse / Touch events
|
||||
================================================================================
|
||||
|
||||
@@ -325,6 +334,7 @@ To enable/disable this behavior, see SDL_hints.h:
|
||||
- SDL_HINT_TOUCH_MOUSE_EVENTS
|
||||
- SDL_HINT_MOUSE_TOUCH_EVENTS
|
||||
|
||||
|
||||
Misc
|
||||
================================================================================
|
||||
|
||||
@@ -334,6 +344,7 @@ before creating a window:
|
||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
|
||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
|
||||
|
||||
|
||||
Threads and the Java VM
|
||||
================================================================================
|
||||
|
||||
@@ -359,6 +370,7 @@ in your native thread.
|
||||
see:
|
||||
https://developer.android.com/training/articles/perf-jni#faq:-why-didnt-findclass-find-my-class
|
||||
|
||||
|
||||
Using STL
|
||||
================================================================================
|
||||
|
||||
@@ -526,15 +538,6 @@ The Tegra Graphics Debugger is available from NVidia here:
|
||||
https://developer.nvidia.com/tegra-graphics-debugger
|
||||
|
||||
|
||||
Why is API level 19 the minimum required?
|
||||
================================================================================
|
||||
|
||||
The latest NDK toolchain doesn't support targeting earlier than API level 19.
|
||||
As of this writing, according to https://www.composables.com/tools/distribution-chart
|
||||
about 99.7% of the Android devices accessing Google Play support API level 19 or
|
||||
higher (August 2023).
|
||||
|
||||
|
||||
A note regarding the use of the "dirty rectangles" rendering technique
|
||||
================================================================================
|
||||
|
||||
@@ -545,12 +548,6 @@ This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2
|
||||
contexts, in particular the use of the eglSwapBuffers function. As stated in the
|
||||
documentation for the function "The contents of ancillary buffers are always
|
||||
undefined after calling eglSwapBuffers".
|
||||
Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED
|
||||
is not possible for SDL as it requires EGL 1.4, available only on the API level
|
||||
17+, so the only workaround available on this platform is to redraw the entire
|
||||
screen each frame.
|
||||
|
||||
Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html
|
||||
|
||||
|
||||
Ending your application
|
||||
@@ -570,12 +567,14 @@ Don't call exit() as it stops the activity badly.
|
||||
NB: "Back button" can be handled as a SDL_EVENT_KEY_DOWN/UP events, with Keycode
|
||||
SDLK_AC_BACK, for any purpose.
|
||||
|
||||
|
||||
Known issues
|
||||
================================================================================
|
||||
|
||||
- The number of buttons reported for each joystick is hardcoded to be 36, which
|
||||
is the current maximum number of buttons Android can report.
|
||||
|
||||
|
||||
Building the SDL tests
|
||||
================================================================================
|
||||
|
||||
@@ -651,4 +650,4 @@ There is also a convenience target which will build, install and start a test:
|
||||
cmake --build . --target build-install-start-testsprite
|
||||
```
|
||||
|
||||
Not all tests provide a GUI. For those, you can use `adb logcat` to read the output of stdout.
|
||||
Not all tests provide a GUI. For those, you can use `adb logcat` to read the output.
|
||||
|
||||
@@ -6,7 +6,7 @@ The CMake build system is supported on the following platforms:
|
||||
|
||||
* FreeBSD
|
||||
* Linux
|
||||
* Microsoft Visual C
|
||||
* Microsoft Visual Studio
|
||||
* MinGW and Msys
|
||||
* macOS, iOS, tvOS, and visionOS with support for XCode
|
||||
* Android
|
||||
@@ -20,42 +20,55 @@ The CMake build system is supported on the following platforms:
|
||||
* QNX 7.x/8.x
|
||||
* RiscOS
|
||||
|
||||
## Building SDL
|
||||
## Building SDL on Windows
|
||||
|
||||
Assuming the source tree of SDL is located at `~/sdl`,
|
||||
this will configure and build SDL in the `~/build` directory:
|
||||
Assuming you're in the SDL source directory, building and installing to C:/SDL can be done with:
|
||||
```sh
|
||||
cmake -S ~/sdl -B ~/build
|
||||
cmake --build ~/build
|
||||
cmake -S . -B build
|
||||
cmake --build build --config RelWithDebInfo
|
||||
cmake --install build --config RelWithDebInfo --prefix C:/SDL
|
||||
```
|
||||
|
||||
Installation can be done using:
|
||||
## Building SDL on UNIX
|
||||
|
||||
SDL will build with very few dependencies, but for full functionality you should install the packages detailed in [README-linux.md](README-linux.md).
|
||||
|
||||
Assuming you're in the SDL source directory, building and installing to /usr/local can be done with:
|
||||
```sh
|
||||
cmake --install ~/build --prefix /usr/local # '--install' requires CMake 3.15, or newer
|
||||
cmake -S . -B build
|
||||
cmake --build build
|
||||
sudo cmake --install build --prefix /usr/local
|
||||
```
|
||||
|
||||
This will install SDL to /usr/local.
|
||||
## Building SDL on macOS
|
||||
|
||||
### Building SDL tests
|
||||
Assuming you're in the SDL source directory, building and installing to ~/SDL can be done with:
|
||||
```sh
|
||||
cmake -S . -B build -DSDL_FRAMEWORK=ON -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
|
||||
cmake --build build
|
||||
cmake --install build --prefix ~/SDL
|
||||
```
|
||||
|
||||
## Building SDL tests
|
||||
|
||||
You can build the SDL test programs by adding `-DSDL_TESTS=ON` to the first cmake command above:
|
||||
```sh
|
||||
cmake -S ~/sdl -B ~/build -DSDL_TEST_LIBRARY=ON -DSDL_TESTS=ON
|
||||
cmake -S . -B build -DSDL_TESTS=ON
|
||||
```
|
||||
and then building normally. In this example, the test programs will be built and can be run from `~/build/tests/`.
|
||||
and then building normally. The test programs will be built and can be run from `build/test/`.
|
||||
|
||||
### Building SDL examples
|
||||
## Building SDL examples
|
||||
|
||||
You can build the SDL example programs by adding `-DSDL_EXAMPLES=ON` to the first cmake command above:
|
||||
```sh
|
||||
cmake -S ~/sdl -B ~/build -DSDL_EXAMPLES=ON
|
||||
cmake -S . -B build -DSDL_EXAMPLES=ON
|
||||
```
|
||||
and then building normally. In this example, the example programs will be built and can be run from `~/build/examples/`.
|
||||
and then building normally. The example programs will be built and can be run from `build/examples/`.
|
||||
|
||||
## Including SDL in your project
|
||||
|
||||
SDL can be included in your project in 2 major ways:
|
||||
- using a system SDL library, provided by your (*nix) distribution or a package manager
|
||||
- using a system SDL library, provided by your (UNIX) distribution or a package manager
|
||||
- using a vendored SDL library: this is SDL copied or symlinked in a subfolder.
|
||||
|
||||
The following CMake script supports both, depending on the value of `MYGAME_VENDORED`.
|
||||
@@ -131,6 +144,13 @@ Exceptions exist:
|
||||
- some platforms don't support dynamic libraries, so only `-DSDL_STATIC=ON` makes sense.
|
||||
- a static Apple framework is not supported
|
||||
|
||||
### Man pages
|
||||
|
||||
Configuring with `-DSDL_INSTALL_DOCS=TRUE` installs man pages.
|
||||
|
||||
We recommend package managers of unix distributions to install SDL3's man pages.
|
||||
This adds an extra build-time dependency on Perl.
|
||||
|
||||
### Pass custom compile options to the compiler
|
||||
|
||||
- Use [`CMAKE_<LANG>_FLAGS`](https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_FLAGS.html) to pass extra
|
||||
@@ -174,7 +194,7 @@ Only shared frameworks are supported, no static ones.
|
||||
|
||||
#### Platforms
|
||||
|
||||
Use `-DCMAKE_PLATFORM_NAME=<value>` to configure the platform. CMake can target only one platform at a time.
|
||||
Use `-DCMAKE_SYSTEM_NAME=<value>` to configure the platform. CMake can target only one platform at a time.
|
||||
|
||||
| Apple platform | `CMAKE_SYSTEM_NAME` value |
|
||||
|-----------------|---------------------------|
|
||||
@@ -343,114 +363,3 @@ However, by default CMake builds static libraries as non-relocatable.
|
||||
Configuring SDL with `-DCMAKE_POSITION_INDEPENDENT_CODE=ON` will result in a static `libSDL3.a` library
|
||||
which you can link against to create a shared library.
|
||||
|
||||
## Help, it doesn't work!
|
||||
|
||||
Below, a SDL3 CMake project can be found that builds 99.9% of time (assuming you have internet connectivity).
|
||||
When you have a problem with building or using SDL, please modify it until it reproduces your issue.
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(sdl_issue)
|
||||
|
||||
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
# !!!!!! !!!!!!
|
||||
# !!!!!! This CMake script is not using "CMake best practices". !!!!!!
|
||||
# !!!!!! Don't use it in your project. !!!!!!
|
||||
# !!!!!! !!!!!!
|
||||
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
# 1. Try system SDL3 package first
|
||||
find_package(SDL3 QUIET)
|
||||
if(SDL3_FOUND)
|
||||
message(STATUS "Using SDL3 via find_package")
|
||||
endif()
|
||||
|
||||
# 2. Try using a vendored SDL library
|
||||
if(NOT SDL3_FOUND AND EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL/CMakeLists.txt")
|
||||
add_subdirectory(SDL EXCLUDE_FROM_ALL)
|
||||
message(STATUS "Using SDL3 via add_subdirectory")
|
||||
set(SDL3_FOUND TRUE)
|
||||
endif()
|
||||
|
||||
# 3. Download SDL, and use that.
|
||||
if(NOT SDL3_FOUND)
|
||||
include(FetchContent)
|
||||
set(SDL_SHARED TRUE CACHE BOOL "Build a SDL shared library (if available)")
|
||||
set(SDL_STATIC TRUE CACHE BOOL "Build a SDL static library (if available)")
|
||||
FetchContent_Declare(
|
||||
SDL
|
||||
GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
|
||||
GIT_TAG main # Replace this with a particular git tag or git hash
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
message(STATUS "Using SDL3 via FetchContent")
|
||||
FetchContent_MakeAvailable(SDL)
|
||||
set_property(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_deps/sdl-src" PROPERTY EXCLUDE_FROM_ALL TRUE)
|
||||
endif()
|
||||
|
||||
file(WRITE main.c [===========================================[
|
||||
/**
|
||||
* Modify this source such that it reproduces your problem.
|
||||
*/
|
||||
|
||||
/* START of source modifications */
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
/*
|
||||
* SDL3/SDL_main.h is explicitly not included such that a terminal window would appear on Windows.
|
||||
*/
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
if (!SDL_Init(SDL_INIT_VIDEO)) {
|
||||
SDL_Log("SDL_Init failed (%s)", SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
SDL_Window *window = NULL;
|
||||
SDL_Renderer *renderer = NULL;
|
||||
|
||||
if (!SDL_CreateWindowAndRenderer("SDL issue", 640, 480, 0, &window, &renderer)) {
|
||||
SDL_Log("SDL_CreateWindowAndRenderer failed (%s)", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
int finished = 0;
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if (event.type == SDL_EVENT_QUIT) {
|
||||
finished = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (finished) {
|
||||
break;
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 80, 80, 80, SDL_ALPHA_OPAQUE);
|
||||
SDL_RenderClear(renderer);
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
SDL_DestroyRenderer(renderer);
|
||||
SDL_DestroyWindow(window);
|
||||
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* END of source modifications */
|
||||
|
||||
]===========================================])
|
||||
|
||||
add_executable(sdl_issue main.c)
|
||||
|
||||
target_link_libraries(sdl_issue PRIVATE SDL3::SDL3)
|
||||
# target_link_libraries(sdl_issue PRIVATE SDL3::SDL3-shared)
|
||||
# target_link_libraries(sdl_issue PRIVATE SDL3::SDL3-static)
|
||||
```
|
||||
|
||||
@@ -57,7 +57,7 @@ If you had already forked the repository, you may update it from the web page us
|
||||
|
||||
Code formatting is done using a custom `.clang-format` file, you can learn more about how to run it [here](https://clang.llvm.org/docs/ClangFormat.html).
|
||||
|
||||
Some legacy code may not be formatted, as such avoid formatting the whole file at once and only format around your changes.
|
||||
Some legacy code may not be formatted, so please avoid formatting the whole file at once and only format around your changes.
|
||||
|
||||
For your commit message to be properly displayed on GitHub, it should contain:
|
||||
|
||||
|
||||
@@ -242,6 +242,15 @@ wikiheaders will complain loudly if you don't do this, and exit with an
|
||||
error message.
|
||||
|
||||
|
||||
## Don't repeat type names in `\param` and `\returns` sections.
|
||||
|
||||
Wikiheaders will explicitly mention the datatype for each parameter and the
|
||||
return value, linking to the datatype's wikipage. Users reading the headers
|
||||
can see the types in the function signature right below the documentation
|
||||
comment. So don't mention the type a second time in the documentation if
|
||||
possible. It looks cluttered and repetitive to do so.
|
||||
|
||||
|
||||
## Code examples go in the wiki.
|
||||
|
||||
We don't want the headers cluttered up with code examples. These live on the
|
||||
|
||||
@@ -239,13 +239,13 @@ If you want to build with thread support, something like this works:
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
emcmake cmake -DSDL_THREADS=On ..
|
||||
emcmake cmake -DSDL_THREADS=ON ..
|
||||
# you can also do `emcmake cmake -G Ninja ..` and then use `ninja` instead of this command.
|
||||
emmake make -j4
|
||||
```
|
||||
|
||||
To build the tests, add `-DSDL_TESTS=On` to the `emcmake cmake` command line.
|
||||
To build the examples, add `-DSDL_EXAMPLES=On` to the `emcmake cmake` command line.
|
||||
To build the tests, add `-DSDL_TESTS=ON` to the `emcmake cmake` command line.
|
||||
To build the examples, add `-DSDL_EXAMPLES=ON` to the `emcmake cmake` command line.
|
||||
|
||||
|
||||
## Building your app
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
iOS
|
||||
======
|
||||
|
||||
Building the Simple DirectMedia Layer for iOS 9.0+
|
||||
Building the Simple DirectMedia Layer for iOS 11.0+
|
||||
==============================================================================
|
||||
|
||||
Requirements: macOS 10.9 or later and the iOS 9.0 or newer SDK.
|
||||
Please note that building SDL requires at least Xcode 12.2 and the iOS 14.2 SDK.
|
||||
|
||||
Instructions:
|
||||
|
||||
@@ -146,18 +146,9 @@ From iOS 17 onward, the key now defaults to true.
|
||||
Notes -- Reading and Writing files
|
||||
==============================================================================
|
||||
|
||||
Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory.
|
||||
Each application installed on iPhone resides in a sandbox which includes its own application home directory. Your application may not access files outside this directory.
|
||||
|
||||
Once your application is installed its directory tree looks like:
|
||||
|
||||
MySDLApp Home/
|
||||
MySDLApp.app
|
||||
Documents/
|
||||
Library/
|
||||
Preferences/
|
||||
tmp/
|
||||
|
||||
When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences".
|
||||
When your SDL based iPhone application starts up, it sets the working directory to the main bundle, where your application resources are stored. You cannot write to this directory. Instead, you should write document files to the directory returned by SDL_GetUserFolder(SDL_FOLDER_DOCUMENTS) and preferences to the directory returned by SDL_GetPrefPath().
|
||||
|
||||
More information on this subject is available here:
|
||||
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html
|
||||
@@ -176,7 +167,7 @@ This target requires Xcode 11 or later. The target will simply fail to build if
|
||||
|
||||
In addition, on Apple platforms, main() cannot be in a dynamically loaded library.
|
||||
However, unlike in SDL2, in SDL3 SDL_main is implemented inline in SDL_main.h, so you don't need to link against a static libSDL3main.lib, and you don't need to copy a .c file from the SDL3 source either.
|
||||
This means that iOS apps which used the statically-linked libSDL3.lib and now link with the xcframwork can just `#include <SDL3/SDL_main.h>` in the source file that contains their standard `int main(int argc; char *argv[])` function to get a header-only SDL_main implementation that calls the `SDL_RunApp()` with your standard main function.
|
||||
This means that iOS apps which used the statically-linked libSDL3.lib and now link with the xcframwork can just `#include <SDL3/SDL_main.h>` in the source file that contains their standard `int main(int argc, char *argv[])` function to get a header-only SDL_main implementation that calls the `SDL_RunApp()` with your standard main function.
|
||||
|
||||
Using an xcFramework is similar to using a regular framework. However, issues have been seen with the build system not seeing the headers in the xcFramework. To remedy this, add the path to the xcFramework in your app's target ==> Build Settings ==> Framework Search Paths and mark it recursive (this is critical). Also critical is to remove "*.framework" from Build Settings ==> Sub-Directories to Exclude in Recursive Searches. Clean the build folder, and on your next build the build system should be able to see any of these in your code, as expected:
|
||||
|
||||
@@ -194,9 +185,6 @@ Windows:
|
||||
Textures:
|
||||
The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_XBGR8888, and SDL_PIXELFORMAT_RGB24 pixel formats.
|
||||
|
||||
Loading Shared Objects:
|
||||
This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_ios.h.
|
||||
|
||||
|
||||
Notes -- CoreBluetooth.framework
|
||||
==============================================================================
|
||||
@@ -258,7 +246,7 @@ Note that if you are using main callbacks instead of a standard C main() functio
|
||||
Deploying to older versions of iOS
|
||||
==============================================================================
|
||||
|
||||
SDL supports deploying to older versions of iOS than are supported by the latest version of Xcode, all the way back to iOS 8.0
|
||||
SDL supports deploying to older versions of iOS than are supported by the latest version of Xcode, all the way back to iOS 11.0
|
||||
|
||||
In order to do that you need to download an older version of Xcode:
|
||||
https://developer.apple.com/download/more/?name=Xcode
|
||||
|
||||
@@ -21,7 +21,7 @@ Ubuntu 18.04, all available features enabled:
|
||||
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
|
||||
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev
|
||||
|
||||
Ubuntu 22.04+ can also add `libpipewire-0.3-dev libwayland-dev libdecor-0-dev` to that command line.
|
||||
Ubuntu 22.04+ can also add `libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev` to that command line.
|
||||
|
||||
Fedora 35, all available features enabled:
|
||||
|
||||
@@ -34,6 +34,8 @@ Fedora 35, all available features enabled:
|
||||
libdrm-devel mesa-libgbm-devel libusb-devel libdecor-devel \
|
||||
pipewire-jack-audio-connection-kit-devel \
|
||||
|
||||
Fedora 39+ can also add `liburing-devel` to that command line.
|
||||
|
||||
NOTES:
|
||||
- The sndio audio target is unavailable on Fedora (but probably not what you
|
||||
should want to use anyhow).
|
||||
|
||||
@@ -13,7 +13,7 @@ To build SDL using the command line, use the CMake build script:
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11
|
||||
cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13
|
||||
cmake --build .
|
||||
sudo cmake --install .
|
||||
```
|
||||
@@ -25,15 +25,12 @@ You can also build SDL as a Universal library (a single binary for both
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11
|
||||
cmake .. "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13
|
||||
cmake --build .
|
||||
sudo cmake --install .
|
||||
```
|
||||
|
||||
Please note that building SDL requires at least Xcode 12.2 and the 11.0 SDK.
|
||||
PowerPC support for macOS has been officially dropped as of SDL 2.0.2.
|
||||
32-bit Intel and macOS 10.8 runtime support has been officially dropped as
|
||||
of SDL 2.24.0.
|
||||
Please note that building SDL requires at least Xcode 12.2 and the macOS 11.0 SDK.
|
||||
|
||||
To use the library once it's built, you essential have two possibilities:
|
||||
use the traditional autoconf/automake/make method, or use Xcode.
|
||||
|
||||
@@ -204,3 +204,33 @@ data, as this pointer will not be provided to your app again.
|
||||
|
||||
The SDL_AppResult value that terminated the app is provided here, in case
|
||||
it's useful to know if this was a successful or failing run of the app.
|
||||
|
||||
|
||||
## Summary and Best Practices
|
||||
|
||||
- **Always Include SDL_main.h in One Source File:** When working with SDL,
|
||||
remember that SDL_main.h must only be included in one source file in your
|
||||
project. Including it in multiple files will lead to conflicts and undefined
|
||||
behavior.
|
||||
|
||||
- **Avoid Redefining main:** If you're using SDL's entry point system (which
|
||||
renames `main` to `SDL_main`), do not define `main` yourself. SDL takes care
|
||||
of this for you, and redefining it can cause issues, especially when linking
|
||||
with SDL libraries.
|
||||
|
||||
- **Using SDL's Callback System:** If you're working with more complex
|
||||
scenarios, such as requiring more control over your application's flow
|
||||
(e.g., with games or apps that need extensive event handling), consider
|
||||
using SDL's callback system. Define the necessary callbacks and SDL will
|
||||
handle initialization, event processing, and cleanup automatically.
|
||||
|
||||
- **Platform-Specific Considerations:** On platforms like Windows, SDL handles
|
||||
the platform-specific entry point (like `WinMain`) automatically. This means
|
||||
you don't need to worry about writing platform-specific entry code when
|
||||
using SDL.
|
||||
|
||||
- **When to Skip SDL_main.h:** If you do not require SDL's custom entry point
|
||||
(for example, if you're integrating SDL into an existing application or a
|
||||
scripting environment), you can omit SDL_main.h. However, this will limit
|
||||
SDL's ability to abstract away platform-specific entry point details.
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ SDL_AudioDeviceID now represents both an open audio device's handle (a "logical"
|
||||
|
||||
Devices are opened by physical device instance ID, and a new logical instance ID is generated by the open operation; This allows any device to be opened multiple times, possibly by unrelated pieces of code. SDL will manage the logical devices to provide a single stream of audio to the physical device behind the scenes.
|
||||
|
||||
Devices are not opened by an arbitrary string name anymore, but by device instance ID (or magic numbers to request a reasonable default, like a NULL string in SDL2). In SDL2, the string was used to open both a standard list of system devices, but also allowed for arbitrary devices, such as hostnames of network sound servers. In SDL3, many of the backends that supported arbitrary device names are obsolete and have been removed; of those that remain, arbitrary devices will be opened with a default device ID and an SDL_hint, so specific end-users can set an environment variable to fit their needs and apps don't have to concern themselves with it.
|
||||
Devices are not opened by an arbitrary string name anymore, but by device instance ID (or magic numbers to request a reasonable default, like a NULL string would do in SDL2). In SDL2, the string was used to open both a standard list of system devices, but also allowed for arbitrary devices, such as hostnames of network sound servers. In SDL3, many of the backends that supported arbitrary device names are obsolete and have been removed; of those that remain, arbitrary devices will be opened with a default device ID and an SDL_hint, so specific end-users can set an environment variable to fit their needs and apps don't have to concern themselves with it.
|
||||
|
||||
Many functions that would accept a device index and an `iscapture` parameter now just take an SDL_AudioDeviceID, as they are unique across all devices, instead of separate indices into playback and recording device lists.
|
||||
|
||||
@@ -214,7 +214,7 @@ SDL_QueueAudio(), SDL_DequeueAudio, and SDL_ClearQueuedAudio and SDL_GetQueuedAu
|
||||
|
||||
APIs that use channel counts used to use a Uint8 for the channel; now they use int.
|
||||
|
||||
SDL_AudioSpec has been reduced; now it only holds format, channel, and sample rate. SDL_GetSilenceValueForFormat() can provide the information from the SDL_AudioSpec's `silence` field. The other SDL2 SDL_AudioSpec fields aren't relevant anymore.
|
||||
SDL_AudioSpec has been reduced; now it only holds format, channel, and sample rate. SDL_GetSilenceValueForFormat() can provide the information from the SDL_AudioSpec's removed `silence` field. SDL3 now manages the removed `samples` field; apps that want more control over device latency and throughput can force a newly-opened device's sample count with the SDL_HINT_AUDIO_DEVICE_SAMPLE_FRAMES hint, but most apps should not risk messing with the defaults. The other SDL2 SDL_AudioSpec fields aren't relevant anymore.
|
||||
|
||||
SDL_GetAudioDeviceSpec() is removed; use SDL_GetAudioDeviceFormat() instead.
|
||||
|
||||
@@ -399,8 +399,6 @@ should be changed to:
|
||||
SDL_Keymod mod = event.key.mod;
|
||||
```
|
||||
|
||||
The keycode in key events is affected by modifiers by default. e.g. pressing the A key would generate the keycode `SDLK_A`, or 'a', and pressing it while holding the shift key would generate the keycode `SDLK_A`, or 'A'. This behavior can be customized with `SDL_HINT_KEYCODE_OPTIONS`.
|
||||
|
||||
The gamepad event structures caxis, cbutton, cdevice, ctouchpad, and csensor have been renamed gaxis, gbutton, gdevice, gtouchpad, and gsensor.
|
||||
|
||||
The mouseX and mouseY fields of SDL_MouseWheelEvent have been renamed mouse_x and mouse_y.
|
||||
@@ -805,27 +803,31 @@ The environment variables SDL_VIDEO_X11_WMCLASS and SDL_VIDEO_WAYLAND_WMCLASS ha
|
||||
The environment variable AUDIODEV is used exclusively to specify the audio device for the OSS and NetBSD audio drivers. Its use in the ALSA driver has been replaced with the hint SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE and in the sndio driver with the environment variable AUDIODEVICE.
|
||||
|
||||
The following hints have been renamed:
|
||||
* SDL_HINT_VIDEODRIVER => SDL_HINT_VIDEO_DRIVER
|
||||
* SDL_HINT_AUDIODRIVER => SDL_HINT_AUDIO_DRIVER
|
||||
* SDL_HINT_ALLOW_TOPMOST => SDL_HINT_WINDOW_ALLOW_TOPMOST
|
||||
* SDL_HINT_AUDIODRIVER => SDL_HINT_AUDIO_DRIVER
|
||||
* SDL_HINT_DIRECTINPUT_ENABLED => SDL_HINT_JOYSTICK_DIRECTINPUT
|
||||
* SDL_HINT_GDK_TEXTINPUT_DEFAULT => SDL_HINT_GDK_TEXTINPUT_DEFAULT_TEXT
|
||||
* SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE => SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE_RUMBLE_BRAKE
|
||||
* SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE => SDL_HINT_JOYSTICK_ENHANCED_REPORTS
|
||||
* SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE => SDL_HINT_JOYSTICK_ENHANCED_REPORTS
|
||||
* SDL_HINT_LINUX_DIGITAL_HATS => SDL_HINT_JOYSTICK_LINUX_DIGITAL_HATS
|
||||
* SDL_HINT_LINUX_HAT_DEADZONES => SDL_HINT_JOYSTICK_LINUX_HAT_DEADZONES
|
||||
* SDL_HINT_LINUX_JOYSTICK_CLASSIC => SDL_HINT_JOYSTICK_LINUX_CLASSIC
|
||||
* SDL_HINT_LINUX_JOYSTICK_DEADZONES => SDL_HINT_JOYSTICK_LINUX_DEADZONES
|
||||
* SDL_HINT_VIDEODRIVER => SDL_HINT_VIDEO_DRIVER
|
||||
* SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP => SDL_HINT_MOUSE_EMULATE_WARP_WITH_RELATIVE
|
||||
|
||||
The following hints have been removed:
|
||||
* SDL_HINT_ACCELEROMETER_AS_JOYSTICK
|
||||
* SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO - the audio will be paused when the application is paused, and SDL_HINT_ANDROID_BLOCK_ON_PAUSE can be used to control that
|
||||
* SDL_HINT_AUDIO_DEVICE_APP_NAME - replaced by either using the appname param to SDL_SetAppMetadata() or setting SDL_PROP_APP_METADATA_NAME_STRING with SDL_SetAppMetadataProperty()
|
||||
* SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS - gamepad buttons are always positional
|
||||
* SDL_HINT_GRAB_KEYBOARD - use SDL_SetWindowKeyboardGrab() instead
|
||||
* SDL_HINT_IDLE_TIMER_DISABLED - use SDL_DisableScreenSaver() instead
|
||||
* SDL_HINT_IME_INTERNAL_EDITING - replaced with SDL_HINT_IME_IMPLEMENTED_UI
|
||||
* SDL_HINT_IME_SHOW_UI - replaced with SDL_HINT_IME_IMPLEMENTED_UI
|
||||
* SDL_HINT_IME_SUPPORT_EXTENDED_TEXT - the normal text editing event has extended text
|
||||
* SDL_HINT_MOUSE_RELATIVE_MODE_WARP - relative mode is always implemented at the hardware level or reported as unavailable
|
||||
* SDL_HINT_MOUSE_RELATIVE_SCALING - mouse coordinates are no longer automatically scaled by the SDL renderer
|
||||
* SDL_HINT_PS2_DYNAMIC_VSYNC - use SDL_SetRenderVSync(renderer, -1) instead
|
||||
* SDL_HINT_RENDER_BATCHING - Render batching is always enabled, apps should call SDL_FlushRenderer() before calling into a lower-level graphics API.
|
||||
@@ -848,7 +850,6 @@ The following hints have been removed:
|
||||
* SDL_HINT_WINRT_PRIVACY_POLICY_LABEL - WinRT support was removed in SDL3.
|
||||
* SDL_HINT_WINRT_PRIVACY_POLICY_URL - WinRT support was removed in SDL3.
|
||||
* SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING
|
||||
* SDL_HINT_AUDIO_DEVICE_APP_NAME - replaced by either using the appname param to SDL_SetAppMetadata() or setting SDL_PROP_APP_METADATA_NAME_STRING with SDL_SetAppMetadataProperty()
|
||||
|
||||
The following environment variables have been renamed:
|
||||
* SDL_AUDIODRIVER => SDL_AUDIO_DRIVER
|
||||
@@ -1030,6 +1031,9 @@ The following structures have been removed:
|
||||
|
||||
SDL_Keycode is now Uint32 and the SDLK_* constants are now defines instead of an enum, to more clearly reflect that they are a subset of the possible values of an SDL_Keycode.
|
||||
|
||||
In addition to the `SDLK_SCANCODE_MASK` bit found on key codes that directly map to scancodes, there is now the
|
||||
`SDLK_EXTENDED_MASK` bit used to denote key codes that don't have a corresponding scancode, and aren't a unicode value.
|
||||
|
||||
The following symbols have been removed:
|
||||
|
||||
* KMOD_RESERVED - No replacement. A bit named "RESERVED" probably shouldn't be used in an app, but if you need it, this was equivalent to KMOD_SCROLL (0x8000) in SDL2.
|
||||
@@ -1261,6 +1265,7 @@ The following symbols have been renamed:
|
||||
The following functions have been removed:
|
||||
* SDL_FreeFormat()
|
||||
* SDL_SetPixelFormatPalette()
|
||||
* SDL_CalculateGammaRamp()
|
||||
|
||||
The following macros have been removed:
|
||||
* SDL_Colour - use SDL_Color instead
|
||||
@@ -1290,7 +1295,6 @@ The following platform preprocessor macros have been renamed:
|
||||
| `__LINUX__` | `SDL_PLATFORM_LINUX` |
|
||||
| `__MACOSX__` | `SDL_PLATFORM_MACOS` |
|
||||
| `__NETBSD__` | `SDL_PLATFORM_NETBSD` |
|
||||
| `__NGAGE__` | `SDL_PLATFORM_NGAGE` |
|
||||
| `__OPENBSD__` | `SDL_PLATFORM_OPENBSD` |
|
||||
| `__OS2__` | `SDL_PLATFORM_OS2` |
|
||||
| `__OSF__` | `SDL_PLATFORM_OSF` |
|
||||
@@ -2177,7 +2181,7 @@ Windows now have an explicit fullscreen mode that is set, using SDL_SetWindowFul
|
||||
|
||||
SDL_WINDOW_FULLSCREEN_DESKTOP has been removed, and you can call SDL_GetWindowFullscreenMode() to see whether an exclusive fullscreen mode will be used or the borderless fullscreen desktop mode will be used when the window is fullscreen.
|
||||
|
||||
SDL_SetWindowBrightness and SDL_SetWindowGammaRamp have been removed from the API, because they interact poorly with modern operating systems and aren't able to limit their effects to the SDL window.
|
||||
SDL_SetWindowBrightness(), SDL_GetWindowBrightness, SDL_SetWindowGammaRamp(), and SDL_GetWindowGammaRamp have been removed from the API, because they interact poorly with modern operating systems and aren't able to limit their effects to the SDL window.
|
||||
|
||||
Programs which have access to shaders can implement more robust versions of those functions using custom shader code rendered as a post-process effect.
|
||||
|
||||
@@ -2210,21 +2214,28 @@ The following functions have been renamed:
|
||||
* SDL_SetWindowDisplayMode() => SDL_SetWindowFullscreenMode(), returns bool
|
||||
|
||||
The following functions have been removed:
|
||||
* SDL_GetClosestFullscreenDisplayMode()
|
||||
* SDL_GetDisplayDPI() - not reliable across platforms, approximately replaced by multiplying SDL_GetWindowDisplayScale() times 160 on iPhone and Android, and 96 on other platforms.
|
||||
* SDL_GetDisplayMode()
|
||||
* SDL_GetNumDisplayModes() - replaced with SDL_GetFullscreenDisplayModes()
|
||||
* SDL_GetNumVideoDisplays() - replaced with SDL_GetDisplays()
|
||||
* SDL_SetWindowGrab() - use SDL_SetWindowMouseGrab() instead, along with SDL_SetWindowKeyboardGrab() if you also set SDL_HINT_GRAB_KEYBOARD.
|
||||
* SDL_GetWindowGrab() - use SDL_GetWindowMouseGrab() instead, along with SDL_GetWindowKeyboardGrab() if you also set SDL_HINT_GRAB_KEYBOARD.
|
||||
* SDL_GetWindowData() - use SDL_GetWindowProperties() instead
|
||||
* SDL_SetWindowData() - use SDL_GetWindowProperties() instead
|
||||
* SDL_GetWindowData() - use SDL_GetPointerProperty() instead, along with SDL_GetWindowProperties()
|
||||
* SDL_SetWindowData() - use SDL_SetPointerProperty() instead, along with SDL_GetWindowProperties()
|
||||
* SDL_CreateWindowFrom() - use SDL_CreateWindowWithProperties() with the properties that allow you to wrap an existing window
|
||||
* SDL_SetWindowInputFocus() - use SDL_RaiseWindow() instead
|
||||
* SDL_SetWindowModalFor() - use SDL_SetWindowParent() with SDL_SetWindowModal() instead
|
||||
* SDL_SetWindowBrightness() - use a shader or other in-game effect.
|
||||
* SDL_GetWindowBrightness() - use a shader or other in-game effect.
|
||||
* SDL_SetWindowGammaRamp() - use a shader or other in-game effect.
|
||||
* SDL_GetWindowGammaRamp() - use a shader or other in-game effect.
|
||||
|
||||
The SDL_Window id type is named SDL_WindowID
|
||||
|
||||
The following environment variables have been removed:
|
||||
* SDL_VIDEO_GL_DRIVER - replaced with the hint SDL_HINT_OPENGL_LIBRARY
|
||||
* SDL_VIDEO_EGL_DRIVER - replaced with the hint SDL_HINT_EGL_LIBRARY
|
||||
|
||||
The following symbols have been renamed:
|
||||
* SDL_DISPLAYEVENT_DISCONNECTED => SDL_EVENT_DISPLAY_REMOVED
|
||||
* SDL_DISPLAYEVENT_MOVED => SDL_EVENT_DISPLAY_MOVED
|
||||
|
||||
@@ -1,44 +1,5 @@
|
||||
Nokia N-Gage
|
||||
============
|
||||
Support for the Nokia N-Gage has been removed from SDL3 (but will make a
|
||||
comeback when newer compilers are available for the platform).
|
||||
|
||||
SDL port for Symbian S60v1 and v2 with a main focus on the Nokia N-Gage
|
||||
(Classic and QD) by [Michael Fitzmayer](https://github.com/mupfdev).
|
||||
SDL2 still supports this platform.
|
||||
|
||||
Compiling
|
||||
---------
|
||||
|
||||
SDL is part of the [N-Gage SDK.](https://github.com/ngagesdk) project.
|
||||
The library is included in the
|
||||
[toolchain](https://github.com/ngagesdk/ngage-toolchain) as a
|
||||
sub-module.
|
||||
|
||||
A complete example project based on SDL can be found in the GitHub
|
||||
account of the SDK: [Wordle](https://github.com/ngagesdk/wordle).
|
||||
|
||||
Current level of implementation
|
||||
-------------------------------
|
||||
|
||||
The video driver currently provides full screen video support with
|
||||
keyboard input.
|
||||
|
||||
At the moment only the software renderer works.
|
||||
|
||||
Audio is not yet implemented.
|
||||
|
||||
Acknowledgements
|
||||
----------------
|
||||
|
||||
Thanks to Hannu Viitala, Kimmo Kinnunen and Markus Mertama for the
|
||||
valuable insight into Symbian programming. Without the SDL 1.2 port
|
||||
which was specially developed for CDoom (Doom for the Nokia 9210), this
|
||||
adaptation would not have been possible.
|
||||
|
||||
I would like to thank my friends
|
||||
[Razvan](https://twitter.com/bewarerazvan) and [Dan
|
||||
Whelan](https://danwhelan.ie/), for their continuous support. Without
|
||||
you and the [N-Gage community](https://discord.gg/dbUzqJ26vs), I would
|
||||
have lost my patience long ago.
|
||||
|
||||
Last but not least, I would like to thank the development team of
|
||||
[EKA2L1](https://12z1.com/) (an experimental Symbian OS emulator). Your
|
||||
patience and support in troubleshooting helped me a lot.
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
Raspberry Pi
|
||||
============
|
||||
|
||||
Requirements:
|
||||
|
||||
Raspbian (other Linux distros may work as well).
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Works without X11
|
||||
* Hardware accelerated OpenGL ES 2.x
|
||||
* Sound via ALSA
|
||||
* Input (mouse/keyboard/joystick) via EVDEV
|
||||
* Hotplugging of input devices via UDEV
|
||||
|
||||
|
||||
Raspbian Build Dependencies
|
||||
---------------------------
|
||||
|
||||
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
|
||||
|
||||
You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
|
||||
OpenGL ES 2.x, it usually comes pre-installed, but in any case:
|
||||
|
||||
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
|
||||
|
||||
|
||||
NEON
|
||||
----
|
||||
|
||||
If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so
|
||||
that SDL will select some otherwise-disabled highly-optimized code. The
|
||||
original Pi units don't have NEON, the Pi2 probably does, and the Pi3
|
||||
definitely does.
|
||||
|
||||
|
||||
Cross compiling from x86 Linux
|
||||
------------------------------
|
||||
|
||||
To cross compile SDL for Raspbian from your desktop machine, you'll need a
|
||||
Raspbian system root and the cross compilation tools. We'll assume these tools
|
||||
will be placed in /opt/rpi-tools
|
||||
|
||||
sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
|
||||
|
||||
You'll also need a Raspbian binary image.
|
||||
Get it from: http://downloads.raspberrypi.org/raspbian_latest
|
||||
After unzipping, you'll get file with a name like: "<date>-wheezy-raspbian.img"
|
||||
Let's assume the sysroot will be built in /opt/rpi-sysroot.
|
||||
|
||||
export SYSROOT=/opt/rpi-sysroot
|
||||
sudo kpartx -a -v <path_to_raspbian_image>.img
|
||||
sudo mount -o loop /dev/mapper/loop0p2 /mnt
|
||||
sudo cp -r /mnt $SYSROOT
|
||||
sudo apt-get install qemu binfmt-support qemu-user-static
|
||||
sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin
|
||||
sudo mount --bind /dev $SYSROOT/dev
|
||||
sudo mount --bind /proc $SYSROOT/proc
|
||||
sudo mount --bind /sys $SYSROOT/sys
|
||||
|
||||
Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
|
||||
edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
|
||||
|
||||
sudo chroot $SYSROOT
|
||||
apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev
|
||||
exit
|
||||
sudo umount $SYSROOT/dev
|
||||
sudo umount $SYSROOT/proc
|
||||
sudo umount $SYSROOT/sys
|
||||
sudo umount /mnt
|
||||
|
||||
There's one more fix required, as the libdl.so symlink uses an absolute path
|
||||
which doesn't quite work in our setup.
|
||||
|
||||
sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
|
||||
sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
|
||||
|
||||
The final step is compiling SDL itself.
|
||||
|
||||
export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux"
|
||||
cd <SDL SOURCE>
|
||||
mkdir -p build;cd build
|
||||
LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl3-installed --disable-pulseaudio --disable-esd
|
||||
make
|
||||
make install
|
||||
|
||||
To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths:
|
||||
|
||||
perl -w -pi -e "s#$PWD/rpi-sdl3-installed#/usr/local#g;" ./rpi-sdl3-installed/lib/libSDL3.la ./rpi-sdl3-installed/lib/pkgconfig/sdl3.pc
|
||||
|
||||
Apps don't work or poor video/audio performance
|
||||
-----------------------------------------------
|
||||
|
||||
If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
|
||||
update the RPi's firmware. Note that doing so will fix these problems, but it
|
||||
will also render the CMA - Dynamic Memory Split functionality useless.
|
||||
|
||||
Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too
|
||||
low in general, specially if a 1080p TV is hooked up.
|
||||
|
||||
See here how to configure this setting: http://elinux.org/RPiconfig
|
||||
|
||||
Using a fixed gpu_mem=128 is the best option (specially if you updated the
|
||||
firmware, using CMA probably won't work, at least it's the current case).
|
||||
|
||||
No input
|
||||
--------
|
||||
|
||||
Make sure you belong to the "input" group.
|
||||
|
||||
sudo usermod -aG input `whoami`
|
||||
|
||||
No HDMI Audio
|
||||
-------------
|
||||
|
||||
If you notice that ALSA works but there's no audio over HDMI, try adding:
|
||||
|
||||
hdmi_drive=2
|
||||
|
||||
to your config.txt file and reboot.
|
||||
|
||||
Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
|
||||
|
||||
Text Input API support
|
||||
----------------------
|
||||
|
||||
The Text Input API is supported, with translation of scan codes done via the
|
||||
kernel symbol tables. For this to work, SDL needs access to a valid console.
|
||||
If you notice there's no SDL_EVENT_TEXT_INPUT message being emitted, double check that
|
||||
your app has read access to one of the following:
|
||||
|
||||
* /proc/self/fd/0
|
||||
* /dev/tty
|
||||
* /dev/tty[0...6]
|
||||
* /dev/vc/0
|
||||
* /dev/console
|
||||
|
||||
This is usually not a problem if you run from the physical terminal (as opposed
|
||||
to running from a pseudo terminal, such as via SSH). If running from a PTS, a
|
||||
quick workaround is to run your app as root or add yourself to the tty group,
|
||||
then re-login to the system.
|
||||
|
||||
sudo usermod -aG tty `whoami`
|
||||
|
||||
The keyboard layout used by SDL is the same as the one the kernel uses.
|
||||
To configure the layout on Raspbian:
|
||||
|
||||
sudo dpkg-reconfigure keyboard-configuration
|
||||
|
||||
To configure the locale, which controls which keys are interpreted as letters,
|
||||
this determining the CAPS LOCK behavior:
|
||||
|
||||
sudo dpkg-reconfigure locales
|
||||
|
||||
|
||||
OpenGL problems
|
||||
---------------
|
||||
|
||||
If you have desktop OpenGL headers installed at build time in your RPi or cross
|
||||
compilation environment, support for it will be built in. However, the chipset
|
||||
does not actually have support for it, which causes issues in certain SDL apps
|
||||
since the presence of OpenGL support supersedes the ES/ES2 variants.
|
||||
The workaround is to disable OpenGL at configuration time:
|
||||
|
||||
./configure --disable-video-opengl
|
||||
|
||||
Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER
|
||||
environment variable:
|
||||
|
||||
export SDL_RENDER_DRIVER=opengles2
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
* When launching apps remotely (via SSH), SDL can prevent local keystrokes from
|
||||
leaking into the console only if it has root privileges. Launching apps locally
|
||||
does not suffer from this issue.
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ Works out of box.
|
||||
Windows:
|
||||
Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com
|
||||
|
||||
===========================================================================
|
||||
|
||||
Events
|
||||
===========================================================================
|
||||
SDL_EVENT_FINGER_DOWN:
|
||||
@@ -39,7 +39,6 @@ Fields:
|
||||
Same as SDL_EVENT_FINGER_DOWN.
|
||||
|
||||
|
||||
===========================================================================
|
||||
Functions
|
||||
===========================================================================
|
||||
SDL provides the ability to access the underlying SDL_Finger structures.
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
Using SDL with Microsoft Visual C++
|
||||
===================================
|
||||
|
||||
### by Lion Kimbro with additions by James Turk
|
||||
|
||||
You can either use the precompiled libraries from the [SDL](https://www.libsdl.org/download.php) web site, or you can build SDL
|
||||
yourself.
|
||||
|
||||
### Building SDL
|
||||
|
||||
0. To build SDL, your machine must, at a minimum, have the DirectX9.0c SDK installed. It may or may not be retrievable from
|
||||
the [Microsoft](https://www.microsoft.com) website, so you might need to locate it [online](https://duckduckgo.com/?q=directx9.0c+sdk+download&t=h_&ia=web).
|
||||
_Editor's note: I've been able to successfully build SDL using Visual Studio 2019 **without** the DX9.0c SDK_
|
||||
|
||||
1. Open the Visual Studio solution file at `./VisualC/SDL.sln`.
|
||||
|
||||
2. Your IDE will likely prompt you to upgrade this solution file to whatever later version of the IDE you're using. In the `Retarget Projects` dialog,
|
||||
all of the affected project files should be checked allowing you to use the latest `Windows SDK Version` you have installed, along with
|
||||
the `Platform Toolset`.
|
||||
|
||||
If you choose *NOT* to upgrade to use the latest `Windows SDK Version` or `Platform Toolset`, then you'll need the `Visual Studio 2010 Platform Toolset`.
|
||||
|
||||
3. Build the `.dll` and `.lib` files by right clicking on each project in turn (Projects are listed in the _Workspace_
|
||||
panel in the _FileView_ tab), and selecting `Build`.
|
||||
|
||||
You may get a few warnings, but you should not get any errors.
|
||||
|
||||
Later, we will refer to the following `.lib` and `.dll` files that have just been generated:
|
||||
|
||||
- `./VisualC/Win32/Debug/SDL3.dll` or `./VisualC/Win32/Release/SDL3.dll`
|
||||
- `./VisualC/Win32/Debug/SDL3.lib` or `./VisualC/Win32/Release/SDL3.lib`
|
||||
|
||||
_Note for the `x64` versions, just replace `Win32` in the path with `x64`_
|
||||
|
||||
### Creating a Project with SDL
|
||||
|
||||
- Create a project as a `Win32 Application`.
|
||||
|
||||
- Create a C++ file for your project.
|
||||
|
||||
- Set the C runtime to `Multi-threaded DLL` in the menu:
|
||||
`Project|Settings|C/C++ tab|Code Generation|Runtime Library `.
|
||||
|
||||
- Add the SDL `include` directory to your list of includes in the menu:
|
||||
`Project|Settings|C/C++ tab|Preprocessor|Additional include directories `
|
||||
|
||||
*VC7 Specific: Instead of doing this, I find it easier to add the
|
||||
include and library directories to the list that VC7 keeps. Do this by
|
||||
selecting Tools|Options|Projects|VC++ Directories and under the "Show
|
||||
Directories For:" dropbox select "Include Files", and click the "New
|
||||
Directory Icon" and add the [SDLROOT]\\include directory (e.g. If you
|
||||
installed to c:\\SDL\\ add c:\\SDL\\include). Proceed to change the
|
||||
dropbox selection to "Library Files" and add [SDLROOT]\\lib.*
|
||||
|
||||
The "include directory" I am referring to is the `./include` folder.
|
||||
|
||||
Now we're going to use the files that we had created earlier in the *Build SDL* step.
|
||||
|
||||
Copy the following file into your Project directory:
|
||||
|
||||
- `SDL3.dll`
|
||||
|
||||
Add the following file to your project (It is not necessary to copy it to your project directory):
|
||||
|
||||
- `SDL3.lib`
|
||||
|
||||
To add them to your project, right click on your project, and select
|
||||
`Add files to project`.
|
||||
|
||||
**Instead of adding the files to your project, it is more desirable to add them to the linker options: Project|Properties|Linker|Command Line
|
||||
and type the names of the libraries to link with in the "Additional Options:" box. Note: This must be done for each build configuration
|
||||
(e.g. Release,Debug).**
|
||||
|
||||
### Hello SDL
|
||||
|
||||
Here's a sample SDL snippet to verify everything is setup in your IDE:
|
||||
|
||||
```
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3/SDL_main.h> // only include this one in the source file with main()!
|
||||
|
||||
int main( int argc, char* argv[] )
|
||||
{
|
||||
const int WIDTH = 640;
|
||||
const int HEIGHT = 480;
|
||||
SDL_Window* window = NULL;
|
||||
SDL_Renderer* renderer = NULL;
|
||||
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
window = SDL_CreateWindow("Hello SDL", WIDTH, HEIGHT, 0);
|
||||
renderer = SDL_CreateRenderer(window, NULL);
|
||||
|
||||
SDL_DestroyRenderer(renderer);
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
### That's it!
|
||||
|
||||
I hope that this document has helped you get through the most difficult part of using the SDL: installing it.
|
||||
Suggestions for improvements should be posted to the [Github Issues](https://github.com/libsdl-org/SDL/issues).
|
||||
|
||||
### Credits
|
||||
|
||||
Thanks to [Paulus Esterhazy](mailto:pesterhazy@gmx.net), for the work on VC++ port.
|
||||
|
||||
This document was originally called "VisualC.txt", and was written by [Sam Lantinga](mailto:slouken@libsdl.org).
|
||||
|
||||
Later, it was converted to HTML and expanded into the document that you see today by [Lion Kimbro](mailto:snowlion@sprynet.com).
|
||||
|
||||
Minor Fixes and Visual C++ 7 Information (In Green) was added by [James Turk](mailto:james@conceptofzero.net)
|
||||
@@ -10,10 +10,10 @@ Credit to
|
||||
Building
|
||||
--------
|
||||
To build for the PSVita, make sure you have vitasdk and cmake installed and run:
|
||||
```
|
||||
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
cmake --install build
|
||||
```sh
|
||||
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
cmake --install build
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,62 @@ Studio solution.
|
||||
|
||||
Details are here: https://github.com/libsdl-org/SDL/issues/5186
|
||||
|
||||
## MinGW-w64 compiler support
|
||||
|
||||
SDL can be built with MinGW-w64 and CMake. Minimum tested MinGW-w64 version is 8.0.3.
|
||||
|
||||
On a Windows host, you first need to install and set up the MSYS2 environment, which provides the MinGW-w64 toolchain. Install MSYS2, typically to `C:\msys64`, and follow the instructions on the MSYS2 wiki to use the MinGW-w64 shell to update all components in the MSYS2 environment. This generally amounts to running `pacman -Syuu` from the mingw64 shell, but refer to MSYS2's documentation for more details. Once the MSYS2 environment has been updated, install the x86_64 MinGW toolchain from the mingw64 shell with the command `pacman -S mingw-w64-x86_64-toolchain`. (You can additionally install `mingw-w64-i686-toolchain` if you intend to build 32-bit binaries as well. The remainder of this section assumes you only want to build 64-bit binaries.)
|
||||
|
||||
To build and install SDL, you can use PowerShell or any CMake-compatible IDE. First, install CMake, Ninja, and Git. These tools can be installed using any number of tools, such as the MSYS2's `pacman`, `winget`, `Chocolatey`, or by manually downloading and running the installers. Clone SDL to an appropriate location with `git` and run the following commands from the root of the cloned repository:
|
||||
|
||||
```sh
|
||||
mkdir build
|
||||
cmake -S . -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-x86_64.cmake
|
||||
cmake --build build --parallel
|
||||
cmake --install build --prefix C:/Libraries
|
||||
```
|
||||
|
||||
This installs SDL to `C:\Libraries`. You can specify another directory of your choice as desired. Ensure that your `CMAKE_PREFIX_PATH` includes `C:\Libraries` when you want to build against this copy of SDL. The simplest way to do this is to pass it to CMake as an option at configuration time:
|
||||
|
||||
```sh
|
||||
cmake .. -G Ninja -DCMAKE_PREFIX_PATH=C:/Libraries
|
||||
```
|
||||
|
||||
You will also need to configure CMake to use the MinGW-w64 toolchain to build your own project. Here is a minimal toolchain file that you could use for this purpose:
|
||||
|
||||
```
|
||||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
set(CMAKE_SYSTEM_PROCESSOR x86_64)
|
||||
|
||||
find_program(CMAKE_C_COMPILER NAMES x86_64-w64-mingw32-gcc REQUIRED)
|
||||
find_program(CMAKE_CXX_COMPILER NAMES x86_64-w64-mingw32-g++ REQUIRED)
|
||||
find_program(CMAKE_RC_COMPILER NAMES x86_64-w64-mingw32-windres windres REQUIRED)
|
||||
```
|
||||
|
||||
Save this in your project and refer to it at configuration time with the option `-DCMAKE_TOOLCHAIN_FILE`.
|
||||
|
||||
On Windows, you also need to copy `SDL3.dll` to an appropriate directory so that the game can find it at runtime. For guidance, see [README-cmake.md](README-cmake.md#how-do-i-copy-a-sdl3-dynamic-library-to-another-location).
|
||||
|
||||
Below is a minimal `CMakeLists.txt` file to build your game linked against a system SDL that was built with the MinGW-w64 toolchain. See [README-cmake.md](README-cmake.md) for more details on including SDL in your CMake project.
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(mygame)
|
||||
|
||||
find_package(SDL3 REQUIRED CONFIG COMPONENTS SDL3-shared)
|
||||
|
||||
add_executable(mygame WIN32 mygame.c)
|
||||
target_link_libraries(mygame PRIVATE SDL3::SDL3)
|
||||
|
||||
# On Windows, copy SDL3.dll to the build directory
|
||||
if(WIN32)
|
||||
add_custom_command(
|
||||
TARGET mygame POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy $<TARGET_FILE:SDL3::SDL3-shared> $<TARGET_FILE_DIR:mygame>
|
||||
VERBATIM
|
||||
)
|
||||
endif()
|
||||
```
|
||||
|
||||
## OpenGL ES 2.x support
|
||||
|
||||
|
||||
@@ -19,21 +19,19 @@ in the file "LICENSE.txt".
|
||||
Information on building SDL with CMake is available in [README-cmake.md](README-cmake.md)
|
||||
|
||||
The best way to learn how to use SDL is to check out the header files in
|
||||
the "include" subdirectory and the programs in the "test" subdirectory.
|
||||
the "include" subdirectory and the programs in the "examples" subdirectory.
|
||||
The header files and test programs are well commented and always up to date.
|
||||
|
||||
Information on reporting bugs and contributing is available in [README-contributing.md](README-contributing.md)
|
||||
|
||||
More documentation and FAQs are available online at [the wiki](http://wiki.libsdl.org/)
|
||||
|
||||
- [High DPI Support](README-highdpi.md)
|
||||
- [main()](README-main-functions.md)
|
||||
- [Porting information](README-porting.md)
|
||||
- [Migrating from SDL 2.0](README-migration.md)
|
||||
- [Supported Platforms](README-platforms.md)
|
||||
- [main()](README-main-functions.md)
|
||||
- [High DPI Support](README-highdpi.md)
|
||||
- [Touch](README-touch.md)
|
||||
- [Versions](README-versions.md)
|
||||
- [Visual Studio](README-visualc.md)
|
||||
|
||||
- [Android](README-android.md)
|
||||
- [Emscripten](README-emscripten.md)
|
||||
@@ -45,10 +43,10 @@ More documentation and FAQs are available online at [the wiki](http://wiki.libsd
|
||||
- [PS2](README-ps2.md)
|
||||
- [PSP](README-psp.md)
|
||||
- [PSVita](README-vita.md)
|
||||
- [Raspberry Pi](README-raspberrypi.md)
|
||||
- [RISC OS](README-riscos.md)
|
||||
- [Windows GDK](README-gdk.md)
|
||||
- [Windows](README-windows.md)
|
||||
- [Porting information](README-porting.md)
|
||||
|
||||
If you need help with the library, or just want to discuss SDL related
|
||||
issues, you can join the [SDL Discourse](https://discourse.libsdl.org/),
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user