Compare commits
2299 Commits
temp-unity
...
temp-fix-n
Author | SHA1 | Date | |
---|---|---|---|
a8490a8ee8 | |||
be6bcaa8c1 | |||
aa1e3419ee | |||
b7171d1b82 | |||
a81cc5cbcb | |||
869dd2e699 | |||
82ff0fa586 | |||
38ae311706 | |||
0f242981ec | |||
829812f180 | |||
132f9a2e31 | |||
bce810f057 | |||
1a0a22f95a | |||
de886884c0 | |||
93cc892470 | |||
32660382f5 | |||
3cebfadb27 | |||
eba3ffc31a | |||
7f7c614ecd | |||
ef0e21f0ae | |||
969c4a45ce | |||
eaa4aa8644 | |||
b04d42022f | |||
![]() |
82fc68ed90 | ||
![]() |
ddc52f2e1d | ||
af6a1b08e3 | |||
82c3bef765 | |||
1b47d07d76 | |||
e4b7d52fe4 | |||
02f4d63dcc | |||
8b4da9a191 | |||
fe26d18889 | |||
400e57b64a | |||
6efdfeb886 | |||
![]() |
1d0d810331 | ||
3cdbeb32d3 | |||
da6b534274 | |||
a04300c436 | |||
9281ba5812 | |||
e5100ca3ad | |||
2c9931699e | |||
cd7550cfe7 | |||
4541249360 | |||
c5dcfb63d9 | |||
be3047c500 | |||
401383f245 | |||
dd6fd06c15 | |||
05697470ab | |||
0622d2ec61 | |||
257ba175fa | |||
f059bdc823 | |||
54972123f7 | |||
232d5d3f13 | |||
53fe4f62fe | |||
48b26d9c2e | |||
430ced76d5 | |||
7083ea36e2 | |||
d1c7a252eb | |||
facd9d8268 | |||
1f7f7ca14e | |||
d7d827789b | |||
b744081f83 | |||
19b21563d6 | |||
33d5ecd5b5 | |||
6ae08da5c8 | |||
a5edff4b73 | |||
56407432a6 | |||
0999a01b03 | |||
65d4c58060 | |||
993839ce85 | |||
3a9a37d6dc | |||
e0fd31f083 | |||
1236d2aea8 | |||
d23cf42ba7 | |||
ab71d833c7 | |||
f0e32ef4ff | |||
f663a1dc09 | |||
fe9b3dd5f9 | |||
33dde170ce | |||
517afcc858 | |||
27d3140b13 | |||
40fce61a6a | |||
8fb2926a53 | |||
9ac1735205 | |||
6ec83afb1d | |||
e2728a0056 | |||
6175c569f9 | |||
2496a94384 | |||
675f38aca7 | |||
2cad80cbc4 | |||
4fbd00e04c | |||
b38f40e904 | |||
0263c8238b | |||
f39698de77 | |||
![]() |
39bac58cdf | ||
![]() |
5cac5a1a69 | ||
88ff5e5fb9 | |||
a44366a642 | |||
35dedc11d5 | |||
3d12dd59ce | |||
410e4e7ce1 | |||
25c4000796 | |||
720d653b41 | |||
c0674aa145 | |||
94f0230230 | |||
04d55038ee | |||
87d2de88fd | |||
5312cf50a1 | |||
507a4deef1 | |||
d1202bd641 | |||
c69ee218d7 | |||
7313a84c5a | |||
d74bb7be19 | |||
d82384f7e1 | |||
![]() |
fd6506626b | ||
![]() |
d3d9e2abbf | ||
06ac599261 | |||
de71860555 | |||
1995aae6e3 | |||
b76918717d | |||
![]() |
229d0ace02 | ||
11d785edea | |||
![]() |
880e85fc80 | ||
65d287a14a | |||
eb071e3d3c | |||
2f868e5647 | |||
3cd686cae8 | |||
![]() |
1d59a7aa77 | ||
8be20fcc61 | |||
59a8bdd48c | |||
![]() |
c24b2cdebf | ||
3a90f93507 | |||
f2087dfc69 | |||
edc0e77afe | |||
7bdfce687b | |||
0b4cf2984f | |||
a5be935966 | |||
260e6fd46b | |||
0446c9c875 | |||
b61cb67e6d | |||
edb0e7ca30 | |||
0f40855a09 | |||
b2e43a4a9d | |||
f75449b5f2 | |||
2e766ff762 | |||
080dd18cdf | |||
8e0763827e | |||
cb986446e2 | |||
b8a634cb1d | |||
5088d907e5 | |||
![]() |
f7a6e8db04 | ||
ef2685afea | |||
a0c1306e8c | |||
bda210d74a | |||
e7f74a7d6a | |||
6a2fc3230f | |||
71cd9f9fbb | |||
4be87e97f4 | |||
946c70e6a7 | |||
3bcbbf8992 | |||
e4c179f1d8 | |||
![]() |
01f1b51a2e | ||
e5a110719f | |||
6c6556c5bd | |||
59b777eedd | |||
35aedd87e7 | |||
98cc3c6009 | |||
c8cca88851 | |||
45d5773519 | |||
c80411ce3b | |||
c379223053 | |||
b0847eff2a | |||
43b0ff3054 | |||
40b84ffc50 | |||
fd35aa48d1 | |||
bf8597febe | |||
a985f558a6 | |||
71b451bb62 | |||
4927919613 | |||
95fcb41841 | |||
a12265f048 | |||
83b6c8f2b1 | |||
![]() |
ffb0ecb498 | ||
2bd71b49e7 | |||
![]() |
e9150ac317 | ||
b03fb70eff | |||
f8713aae5e | |||
217e0a2ce6 | |||
84dab8b597 | |||
6f9828289f | |||
396413dedf | |||
146618fb22 | |||
c8814fb610 | |||
9ce1135440 | |||
2e4a1a70da | |||
f420118335 | |||
68c2650b03 | |||
c8c9965df2 | |||
5fabbedb04 | |||
716d8436f0 | |||
![]() |
5edb924e57 | ||
![]() |
8ad5241778 | ||
![]() |
83fa6a1b2a | ||
![]() |
c626301f19 | ||
5257257539 | |||
9578fe3068 | |||
2216699c64 | |||
180a68c1dc | |||
b9718899fa | |||
deb90557ea | |||
869180548c | |||
dfc959eed6 | |||
cfa235b89d | |||
![]() |
07514def19 | ||
2cf3ed13da | |||
c9d35ee07c | |||
544a0f2880 | |||
03b57d3973 | |||
afdc35b636 | |||
0a8fa07735 | |||
cb09485ff2 | |||
391bb6e9ba | |||
b6f640b953 | |||
3b2a1ff716 | |||
75e61e5a6d | |||
430f71fce2 | |||
29a1d8b1d3 | |||
cdcbdf8ce4 | |||
7c48196056 | |||
be921a04f2 | |||
dcb7b3f9f7 | |||
379814a118 | |||
3aa56608f7 | |||
f756dc4812 | |||
5d4583683b | |||
d45098024e | |||
c37b837244 | |||
49b9b0251b | |||
e1be275878 | |||
![]() |
bdd74e1e93 | ||
0a32ac02e9 | |||
1e0758333d | |||
9523b1478e | |||
ebd0e76088 | |||
9f6b19526d | |||
7475012e24 | |||
f2b24272dd | |||
da848b7440 | |||
423bbbbaae | |||
![]() |
3775615aea | ||
a21f1e81e0 | |||
87c13ac68c | |||
4710f3346a | |||
74d68e50d3 | |||
89dbad9085 | |||
834b966b41 | |||
d7ac659e02 | |||
9c341153a2 | |||
279a73e429 | |||
32a96b80a3 | |||
25ac6aa5e4 | |||
658ae5d63f | |||
![]() |
58e0aa36ea | ||
99ffe1153a | |||
6c483479b8 | |||
![]() |
c85c52f2ce | ||
d518550c46 | |||
aa2164da33 | |||
5730668dea | |||
8a20aec403 | |||
5400018106 | |||
6f1ab97c53 | |||
78f29c0467 | |||
0379ddac7d | |||
cf31c4ba18 | |||
a99e43b2b7 | |||
5abab0a41a | |||
a7f7b0b77e | |||
1edf520439 | |||
0e86c60c28 | |||
bb1e2a80e4 | |||
710e46cb2d | |||
cab1f1d9a2 | |||
7b615ca186 | |||
9dc0379dc0 | |||
f6296e502a | |||
fdd84d36ce | |||
b57db4b79e | |||
fc0dd5583c | |||
08e2885796 | |||
da1b6c4c02 | |||
d74c2b5c1f | |||
57dfec79f4 | |||
13f2df3c28 | |||
489b484b7b | |||
b42adab3a2 | |||
e729abb0e2 | |||
![]() |
74afc86d4b | ||
![]() |
ae44070341 | ||
![]() |
a9bb460766 | ||
974981a637 | |||
79927e730e | |||
990ed109f2 | |||
37848d1c8e | |||
12b26d21b0 | |||
6738ecb64e | |||
5b299e5999 | |||
9bce134e56 | |||
1bf6a880ab | |||
![]() |
a21bca0e20 | ||
b3bf46b78d | |||
0cb5eae9d0 | |||
1758dcd423 | |||
9338126ecc | |||
46ae083113 | |||
b06fff4737 | |||
94d2a611ec | |||
37e555d2fe | |||
086f191169 | |||
4c951bfa82 | |||
4530449317 | |||
c4bedeb018 | |||
83094d9a0d | |||
c1b5cea63a | |||
b45e71e22c | |||
597eaeaa11 | |||
52b2769b9c | |||
c847122096 | |||
1687903fb8 | |||
c89d6b0953 | |||
2637f94358 | |||
3e2591c83e | |||
0ec94d5359 | |||
932d8dba52 | |||
ec1b0c2014 | |||
97a023a0d5 | |||
e2a36a6e45 | |||
f26c36c96b | |||
c813a1b358 | |||
eab066cbf2 | |||
![]() |
2ed73fc97e | ||
a18bd403bf | |||
96667e3391 | |||
6c25aabddf | |||
0477ca75f0 | |||
![]() |
14f6afb090 | ||
368bfa80f9 | |||
460e0a1347 | |||
33ba298b5d | |||
![]() |
948211679f | ||
![]() |
3f42417cd4 | ||
196da819ba | |||
31296f6f9d | |||
0f89bcdbeb | |||
c5980ada4f | |||
![]() |
17b0c06946 | ||
a000de7c2a | |||
a54142f3f1 | |||
1b1693d43f | |||
2e9b8689e4 | |||
a2301b1d91 | |||
114b06b3cb | |||
2bf519d211 | |||
4d799db72f | |||
5a0c5912a4 | |||
083de503ce | |||
04c3b08518 | |||
263f862ba5 | |||
e2337b5342 | |||
90d61600fc | |||
![]() |
e673cfc2d7 | ||
25fa5792e6 | |||
a215d7e230 | |||
0928fe8710 | |||
4c617c06e9 | |||
796ef560b4 | |||
578baf95e0 | |||
e774f2c901 | |||
7708a848c9 | |||
4b1f243e4d | |||
f9b6a257bd | |||
95981c9876 | |||
46475b8e11 | |||
43e3a33082 | |||
c69a581c0b | |||
abf30007ab | |||
38c7378949 | |||
807c58aae4 | |||
889712927f | |||
5c4a5fd40d | |||
6cd977b903 | |||
dde997086c | |||
579e8ebe79 | |||
5ae76fae90 | |||
e88d966737 | |||
25c99e72cd | |||
b7878a4d45 | |||
![]() |
9350005d8b | ||
1f026a3db9 | |||
![]() |
45d038181a | ||
d590e223da | |||
68aa35ae74 | |||
294ab84909 | |||
1c23a06706 | |||
e07b217669 | |||
32ceb0b807 | |||
4f9be46526 | |||
54d69a2fd1 | |||
9d274a609c | |||
58f8eb54a3 | |||
![]() |
5b90c046d5 | ||
c20f209b1c | |||
59fc95bf97 | |||
d034b85f33 | |||
![]() |
c39d514a4e | ||
4251455dcd | |||
87c5423c5e | |||
![]() |
d68ce0e475 | ||
5e51a5e8a4 | |||
93065a67c6 | |||
f6888b530a | |||
36c40760a5 | |||
23fa5bb723 | |||
64196a6b29 | |||
872dc1038c | |||
53923f502d | |||
20655128c9 | |||
5fca280c80 | |||
1ac2d2dcb6 | |||
14d261d23a | |||
9ca1052226 | |||
4369c5817a | |||
22a8e934e4 | |||
e1ae95f6b2 | |||
24e00c115c | |||
2559d79d2f | |||
![]() |
cc1a48e395 | ||
6baccc36a0 | |||
d552b3c0c0 | |||
902a103f80 | |||
19622ffc5b | |||
f6c8a78ac6 | |||
9315215b20 | |||
264fe10ddd | |||
969a571e0f | |||
4425e0cd64 | |||
9b4c017031 | |||
ae349eb2d5 | |||
eb3ff1d6f9 | |||
1d536c21dd | |||
e3f9d9b206 | |||
b7fe27314b | |||
b47a1867e8 | |||
e7db1247b1 | |||
293aab2253 | |||
9a2d1cd5b7 | |||
cd0acba330 | |||
17cab47ed1 | |||
596ce11556 | |||
f179637222 | |||
ecf2f5ed01 | |||
eddad4e9a1 | |||
e49bf4019b | |||
1788298804 | |||
8a23d91a50 | |||
952a4fa456 | |||
71386c08f1 | |||
eb63646605 | |||
71879d665d | |||
ee6507f2b1 | |||
7e3b1e2c8f | |||
2e5aecf557 | |||
221ff895d9 | |||
a5610da1d5 | |||
9506dcf675 | |||
977baeaa26 | |||
09ecb089a5 | |||
15657b7ccd | |||
b88a37a490 | |||
4d5c08b938 | |||
796e9d442c | |||
dfe22a53bb | |||
0d7b3ed39c | |||
6952228386 | |||
6a8ad00bcc | |||
08d008a508 | |||
2486346f6f | |||
9f8ae130af | |||
5d7ac749c5 | |||
fce0b824a7 | |||
![]() |
36068487d0 | ||
d7822981b1 | |||
542d15b1cd | |||
1b94631975 | |||
6dd89afa96 | |||
db496a0b7d | |||
20df402adc | |||
7220897280 | |||
75d84b1b64 | |||
0fc9526178 | |||
84f6d86445 | |||
c11c2a4b91 | |||
![]() |
54fb1a75ee | ||
0fa36c81d9 | |||
3bbb39ecc1 | |||
44ca984dc7 | |||
8c1ddee10c | |||
b776c46d2f | |||
![]() |
449db0ab1e | ||
8af22719d0 | |||
fa1fef5081 | |||
194979e929 | |||
aa0ecd1791 | |||
4d10a46e63 | |||
a25cfc5db2 | |||
be8f10a4e2 | |||
e3fd0b1d17 | |||
7abdd82dfd | |||
59fcbdd815 | |||
0a08ac2528 | |||
9d3f35a0bf | |||
edee5a947b | |||
![]() |
8fb2ff458b | ||
08822801ac | |||
04feaa8bd0 | |||
e15449623d | |||
40c8e23d48 | |||
e1e3043a51 | |||
![]() |
a84621347d | ||
![]() |
34d424fd64 | ||
d914cfcb7a | |||
608d51c9c8 | |||
bc66cd9868 | |||
3574f2730d | |||
b87d87b1d3 | |||
e69020ad0f | |||
18c5d4ccb3 | |||
9664cc91f3 | |||
6a16a9e661 | |||
6e926e9b56 | |||
2a095d8bfe | |||
9fe704800e | |||
b7a27efd78 | |||
bba95d1901 | |||
67517c7d5c | |||
41495707d2 | |||
82d5905e4b | |||
ca9a749b21 | |||
e9a43a3b60 | |||
9109ea0b96 | |||
5703efab88 | |||
d723fa3d31 | |||
780633ec4b | |||
301bb5afa5 | |||
eb33ee566e | |||
85df7036f7 | |||
e57365a70b | |||
348631cffe | |||
8ae6995e98 | |||
c0d0e2788b | |||
ba48c1ee58 | |||
6f51cb0ad7 | |||
a5cb7c1e62 | |||
0cf746c1fa | |||
c0432d5edb | |||
86b7746e3c | |||
0a3de0305c | |||
c9a8975de5 | |||
261517e475 | |||
c8e536bac3 | |||
e0ac75cb44 | |||
7c568e7d36 | |||
cea588b9ef | |||
7a0cf2c72f | |||
1bd0a87384 | |||
8b3d798374 | |||
0c5ccae79d | |||
cfa53e0fbe | |||
800fc17367 | |||
1c4a1c13e0 | |||
5ecaa9a838 | |||
3537abe84b | |||
743b9c5e1d | |||
b8157f5bf1 | |||
22dc865a86 | |||
039cc32917 | |||
1a4f8ab389 | |||
f173973ae4 | |||
79e985ea54 | |||
19a6220308 | |||
d53738396f | |||
7bb572f208 | |||
0cf2fafd81 | |||
a3deef6fff | |||
eaa4cdaa42 | |||
![]() |
29450a2af3 | ||
![]() |
75a1a578bd | ||
f1a488d0f2 | |||
a7c9fb59ca | |||
227f0f3582 | |||
97c2c39916 | |||
a311fa96aa | |||
e594f23a27 | |||
fa8c2c7885 | |||
a0dcd0bf2c | |||
a72a9e099c | |||
![]() |
62a0de1673 | ||
![]() |
bab47b60cb | ||
![]() |
a909ab984c | ||
5f7ad4baaa | |||
![]() |
e5858a3ad0 | ||
ec5560db73 | |||
0882069095 | |||
1552b86b55 | |||
d43b5791e0 | |||
fb6bd88644 | |||
![]() |
46e049d0ce | ||
e5766752d0 | |||
![]() |
b2ccd8546c | ||
a2c1c368af | |||
d320f3677e | |||
1e61b759c7 | |||
145f1d1e0a | |||
7a2b181591 | |||
ebad1d8d33 | |||
795cea2cce | |||
7f28084e2a | |||
77616082f4 | |||
0dc309bef6 | |||
f4492629ea | |||
ef5d01d98f | |||
89145341e5 | |||
bbe59c6014 | |||
ab125f466c | |||
947dc21979 | |||
5a6ec0f003 | |||
48ff9b57f8 | |||
bdf99a5119 | |||
e339946515 | |||
ac3d07ad17 | |||
376e425c02 | |||
45bb6b836a | |||
e95b4dc2dd | |||
259a71cd3c | |||
8cff1ecf9f | |||
![]() |
631067e559 | ||
41ce7807a6 | |||
ccac22fec5 | |||
6774cae3f2 | |||
fc0f315106 | |||
![]() |
0c94e5d166 | ||
9dc9692b09 | |||
255727b752 | |||
![]() |
1949aece21 | ||
4e8a883bcc | |||
bc02ede98b | |||
d608b98145 | |||
9af81c2b74 | |||
c77f837598 | |||
fd922f5940 | |||
f2fb9a0c59 | |||
f134341e03 | |||
922ae55a16 | |||
37b336a8af | |||
f4af21038d | |||
fe82b8d1e8 | |||
4b8cf11fa5 | |||
a4a95c8d36 | |||
ccf06fffbc | |||
![]() |
57bea57f5e | ||
1a27d20df3 | |||
39ba82f25d | |||
af6a30ebf1 | |||
b0a83a6ed4 | |||
292c2cefe3 | |||
20cb2c72a5 | |||
d9dd8c287f | |||
76d69bbb08 | |||
8dd163160e | |||
![]() |
3ec88ae21d | ||
f5e90a943f | |||
8a772645e2 | |||
1b57dcf320 | |||
6669431846 | |||
e12a707692 | |||
f813aab787 | |||
cfb3f5062d | |||
3488339475 | |||
227fd753df | |||
bd8fa07a3d | |||
934db6a820 | |||
5aac794b11 | |||
1b1e947162 | |||
101fadcf6b | |||
62e8d80a61 | |||
6beaa29791 | |||
eb7333e772 | |||
1705587e21 | |||
74c896c081 | |||
c04d36e922 | |||
37d6ae16be | |||
17c7bac405 | |||
6110f3aa1f | |||
ca0c69eaeb | |||
5519a6a520 | |||
c5ee3ac7e0 | |||
e17ac8dc58 | |||
ed1ced2484 | |||
9620fdc986 | |||
45bc4e3209 | |||
d5e73fa13d | |||
937aa8e114 | |||
90e5ce6ab5 | |||
741ed5fcd2 | |||
34e84d0ee8 | |||
09d6846839 | |||
3e11c7016e | |||
5ba5678e00 | |||
![]() |
1152caad32 | ||
![]() |
34d553671d | ||
![]() |
ee0928d4be | ||
ae28d90578 | |||
![]() |
efe3d60a2c | ||
b7ea6e9d0e | |||
![]() |
5560f32447 | ||
5085c622ea | |||
312aa67cc7 | |||
ed52de948c | |||
2cc6b249c3 | |||
![]() |
361702f239 | ||
bef2412ca2 | |||
29e33cfff5 | |||
6c906b7c21 | |||
7c04bc9a01 | |||
f24854005d | |||
1642028310 | |||
82858ca3f4 | |||
b3dc1a17a0 | |||
2cd8238ce3 | |||
f48164b5ea | |||
3d3bc74884 | |||
bb69c19f08 | |||
e6ca0b33e9 | |||
ed9b21098d | |||
3ae664363d | |||
3a4952e7c2 | |||
0c6b29ee43 | |||
c2089ae53c | |||
ddae2d88fa | |||
1785286ecc | |||
7bcf21e66e | |||
08aa7861d6 | |||
45277d804e | |||
d31b8c316f | |||
88e15ff1e6 | |||
ed3fecae8e | |||
f9aa6376f1 | |||
1484fe260b | |||
e766dc9189 | |||
6f389f1bb8 | |||
c12607baa3 | |||
66a4da87f4 | |||
ed68e18c1c | |||
2ee37e9031 | |||
499fec6f79 | |||
aa363ec2ae | |||
61e2384b7a | |||
60757f010a | |||
0e53ea4cb5 | |||
4067367b6c | |||
c0fb8ea8f3 | |||
1d9bac7d92 | |||
0e1da8dd12 | |||
e55a6bf82b | |||
c240ab70ae | |||
7c013f1154 | |||
611da3b7d6 | |||
50f694c7de | |||
a5b4373f95 | |||
cdd61bb6d7 | |||
f7a0f6a0e4 | |||
1dc0bf86bb | |||
a0edee712a | |||
8cd6d0fe68 | |||
3c04b44913 | |||
5e7e571b0d | |||
bfb760e16a | |||
1403f034ff | |||
b63f375775 | |||
3e92b4ed24 | |||
![]() |
5dedb39d44 | ||
1031638c51 | |||
f64d7bfa4a | |||
8393ccd076 | |||
86141a75eb | |||
29ab711efa | |||
4c3f52e7dc | |||
b1bd0f8ffd | |||
13e7065dd2 | |||
924d2b8df6 | |||
d960c78693 | |||
33400ffcc9 | |||
5df916f23f | |||
b7073fa797 | |||
458be2ecc4 | |||
5336fdc6e3 | |||
713d59bcaf | |||
e3748d7fa5 | |||
07de17ded6 | |||
![]() |
25018dc061 | ||
f7c0287278 | |||
55842b4244 | |||
ad8e2d6661 | |||
bbd0c4118b | |||
54e2f851a4 | |||
070948b5f1 | |||
f7018f7b06 | |||
b2867d4365 | |||
![]() |
a2a02e3994 | ||
![]() |
325beef7af | ||
![]() |
7af01de802 | ||
a9e0caa92d | |||
d2cc672b0c | |||
9c85acf61d | |||
![]() |
d3ad04172d | ||
9793bc30ce | |||
675d3cdd69 | |||
4e44cfa3d9 | |||
c6069c439c | |||
a42e972e1b | |||
1b9e103a30 | |||
b7ad58b945 | |||
ca143fafa6 | |||
8f9f65bc29 | |||
8189471912 | |||
a230445cae | |||
a3e634d4d7 | |||
6a4ee3fd56 | |||
e51864a357 | |||
0a4bd32e59 | |||
add4aa7d25 | |||
2e00d90938 | |||
e2fdc6226a | |||
ea8d749587 | |||
180b66ae8a | |||
![]() |
367fc69dc1 | ||
8be217ada5 | |||
4c46203cb5 | |||
![]() |
6844304dda | ||
e79b4523b4 | |||
97ae08c9fc | |||
d09b1d2759 | |||
56344fb30f | |||
018272ee5b | |||
![]() |
71468f475b | ||
0aa7315608 | |||
bf4358ed0c | |||
ee2b72fd29 | |||
e0d1e66732 | |||
![]() |
52da1afbf6 | ||
49a18cc91e | |||
0b73b2c6cf | |||
6d7dbdbb44 | |||
9d3264b4fd | |||
d3a31311b9 | |||
c0fdf16561 | |||
04ead39dae | |||
bb0da7dbbd | |||
5e8b42bf86 | |||
a94d80716e | |||
a836ded990 | |||
279085e18e | |||
d5b77fd522 | |||
![]() |
1c7d7c9150 | ||
d786b48aab | |||
![]() |
465bd66519 | ||
![]() |
b7f6377e38 | ||
bdcc258305 | |||
4bf74afacc | |||
dc0bf9b702 | |||
ba38b06a97 | |||
b92ef379b7 | |||
53ed7ec7f2 | |||
c34ea3323a | |||
7006d4f0fb | |||
1464eff375 | |||
c32ce881e8 | |||
![]() |
1e9175e1d7 | ||
2668f9181c | |||
715e0faabc | |||
955748ab1e | |||
4cbcfd22f5 | |||
d7c556de32 | |||
2e6ae11326 | |||
1a721c5dbe | |||
0e38002dd5 | |||
bd9d09ca82 | |||
9bacd54312 | |||
23ac79f2c2 | |||
44db9f192e | |||
a7dca135dc | |||
b29e33caa2 | |||
e28222966b | |||
d25fa3250a | |||
f6699bfccf | |||
0a68fa8e14 | |||
8c4edd1b37 | |||
d5b72fb06c | |||
336f6f4bbd | |||
d6dd2f51bb | |||
5814de65f9 | |||
11ac276caa | |||
1c9d8fcb47 | |||
644e6c7a3e | |||
eed45d2a23 | |||
31e120ef49 | |||
51a131ddbc | |||
594438ef0d | |||
7cf5f4cc63 | |||
52585b39a1 | |||
20b438d523 | |||
5cf993f951 | |||
28a8d434d5 | |||
dd3a72f275 | |||
ceed8f7c06 | |||
85abac7e87 | |||
![]() |
f7ddb1ed8a | ||
![]() |
fbd01624e3 | ||
![]() |
c5862da5ad | ||
![]() |
9085b4a731 | ||
e505957b47 | |||
28df0107d4 | |||
f1e04116f0 | |||
67525b88d2 | |||
95c7e8aa13 | |||
fc45b00720 | |||
6e0cf86e73 | |||
79012c6784 | |||
26c7be71d7 | |||
291d2a2222 | |||
d48fc7d156 | |||
dd01ce2cd0 | |||
ba4b7b4319 | |||
c0db8a9a3b | |||
81b3933abb | |||
35bd6fe993 | |||
2df912466c | |||
582f6032fc | |||
05f900e346 | |||
43f5e761a6 | |||
![]() |
7a71a95f32 | ||
d71009d980 | |||
025c921416 | |||
00965c98cb | |||
710e279b19 | |||
41f3164e57 | |||
1931387799 | |||
8f89196be2 | |||
60c59d7d61 | |||
c593db5a2f | |||
6b662ebdb9 | |||
9033d270d5 | |||
dca5be9b94 | |||
14621e7720 | |||
![]() |
c6e7fc9744 | ||
0fd72a98ac | |||
b4f978e901 | |||
586e2face6 | |||
e2a9e7e803 | |||
6a71b2af66 | |||
3579a9e0fc | |||
921708fc76 | |||
f577abc5cd | |||
8d3e57f338 | |||
902318f0fd | |||
978a930d9c | |||
aba91a745a | |||
dbbf0e7f66 | |||
fdc4a1a590 | |||
d6224db8f1 | |||
2ce2bffc4d | |||
d2bf60cc17 | |||
![]() |
6db0919724 | ||
aa7105f759 | |||
bdbd0cffda | |||
8cf1994455 | |||
d66a6525c3 | |||
7e712b2d6a | |||
1abf2f3c7c | |||
d13970de86 | |||
fac42e3fa1 | |||
68f1b2c671 | |||
bb4de77b82 | |||
c0f06ba614 | |||
e4de5b4657 | |||
5457b66301 | |||
7acd3ad7d8 | |||
59221476b0 | |||
399f84d479 | |||
d93dd85951 | |||
![]() |
e9092110ff | ||
bdb5852e28 | |||
![]() |
70de992afe | ||
76cb11e332 | |||
82fa2bdf3f | |||
cb96435047 | |||
1d25ba175e | |||
6c33a0f6d6 | |||
edb3ab0617 | |||
e2e7f7ea52 | |||
![]() |
5adc06d2d8 | ||
deb3d566a5 | |||
ffd1a7d8c8 | |||
fdb2167b4a | |||
5c63c0a58c | |||
528fc35fed | |||
0b69793487 | |||
34fac7a670 | |||
cc367908cd | |||
0966eab8e9 | |||
c27d0cb7b9 | |||
eac6aff741 | |||
6878897a6d | |||
8a91673562 | |||
491b9cd2b9 | |||
b9861055ad | |||
d15d512a68 | |||
4c3f57ffa7 | |||
3471b0016c | |||
214a56ce8c | |||
![]() |
8e31e53aa0 | ||
76fd2ff9fa | |||
4b21067aea | |||
2648d920d8 | |||
![]() |
0aabaa4583 | ||
552dce0de7 | |||
77760194fe | |||
a3ad5abf2f | |||
![]() |
c0d96ca9a5 | ||
![]() |
3b965ba10b | ||
b386f960f6 | |||
![]() |
67734d1853 | ||
f3c1d0e3a3 | |||
7c9e409985 | |||
9690b7c91b | |||
367b484841 | |||
b9d6271916 | |||
7788293954 | |||
0e1bb232e6 | |||
c536eb410c | |||
6b3c3454d3 | |||
![]() |
1f50c2876e | ||
b7e151d876 | |||
da2c564bb0 | |||
35b1e9fc3a | |||
2229179faa | |||
bd12855110 | |||
197b3502b0 | |||
9765ddf4eb | |||
0624fad0f3 | |||
b1f865f9d3 | |||
0f589f8d3c | |||
d6902668e3 | |||
6da23db5e0 | |||
3e04d37529 | |||
59774d64f0 | |||
21c7689b77 | |||
1818110459 | |||
8dbd406ea0 | |||
15c3617009 | |||
![]() |
4e98d974b5 | ||
5de109cc2d | |||
4b12f521e3 | |||
807efa8538 | |||
366ec5f0f8 | |||
b265b447b6 | |||
36a830b4d3 | |||
49311a73b8 | |||
aa55cb2996 | |||
43875e8dd1 | |||
b32f5a922f | |||
11be151d58 | |||
474adc6f88 | |||
d79868c4e6 | |||
![]() |
5f52684a0f | ||
1a833dbdb9 | |||
e85d7d5a28 | |||
c101ded463 | |||
a9d8ff6e21 | |||
883e4c089a | |||
6a885e5d89 | |||
3a856f7967 | |||
6051b80dd2 | |||
723fb16343 | |||
67b657f07c | |||
644eb68524 | |||
40aee0b2e9 | |||
4cfa21f09b | |||
7afd84df40 | |||
7e8912eb96 | |||
![]() |
5b61737a8f | ||
44232a2ce6 | |||
d56bbfea7b | |||
fdd41ac49e | |||
f5ce243a56 | |||
8e2c9f2dd3 | |||
b44a500988 | |||
b5c18288f5 | |||
5cce6894d2 | |||
381cef1773 | |||
c9e5897bb0 | |||
f6fd3a84c2 | |||
a207c1cdaf | |||
c097c7b855 | |||
c1f5d8d023 | |||
b647509913 | |||
2a0a6a0541 | |||
a603bb3459 | |||
e688c927eb | |||
![]() |
b8952ecec9 | ||
0606adceb3 | |||
![]() |
a90c356467 | ||
459af75d1e | |||
49802af7cd | |||
![]() |
3f96555123 | ||
8ba6302696 | |||
8709cbb73e | |||
1686979747 | |||
e549d6c1bd | |||
bea5a9997d | |||
36c6b2e893 | |||
8ad2642c47 | |||
27231afce5 | |||
80f1527762 | |||
d9d4b9899e | |||
f5679838bc | |||
bc1e517bb3 | |||
03015a9b22 | |||
92237f11eb | |||
b444e1be0f | |||
![]() |
8c55481e33 | ||
9df13fba69 | |||
23be5fd449 | |||
96387a2eff | |||
7b88a4a3ba | |||
4c705ab8fe | |||
8c7d970e2c | |||
1a02c0d7dd | |||
a8b730e04c | |||
7c2fb00e66 | |||
5a3d5f751f | |||
5ca38fd612 | |||
![]() |
f886f29355 | ||
943aed0de3 | |||
60a9703de8 | |||
05df6366a4 | |||
f76e04bf4d | |||
37e799e299 | |||
bd2b48e98d | |||
63f8d18c0f | |||
3060217d39 | |||
715f57371b | |||
b87b33adbf | |||
fcf8fc3eaa | |||
![]() |
57f46b9d5f | ||
566a458950 | |||
dffd032bc9 | |||
18412744c8 | |||
74a566d211 | |||
![]() |
b8f41825e8 | ||
![]() |
dbd64a5592 | ||
![]() |
20987b0f29 | ||
bd3bd776c8 | |||
ad44f22397 | |||
4b00a779ec | |||
56fa6f58a0 | |||
e427e4dbb1 | |||
fc14d02bc5 | |||
5ce1c63e1b | |||
74fa4ee92b | |||
d812e46f40 | |||
74e57efb2d | |||
69f55b1b62 | |||
9183f9f860 | |||
50f378e5c8 | |||
973dac9b5f | |||
7f4878ac7f | |||
![]() |
b8bad3549d | ||
65de17ece4 | |||
bc01003673 | |||
cd4a7be5b2 | |||
3647a1e621 | |||
8ef8f3a60a | |||
15a428eab0 | |||
8aed5dbcf8 | |||
7c76bdca1b | |||
9f546d6908 | |||
9e365069af | |||
![]() |
d8b4275162 | ||
894269ad12 | |||
30cebf5747 | |||
cf6be711e2 | |||
3753a0b72b | |||
be2213472f | |||
f32b63ec58 | |||
6ebc581b52 | |||
069d63561a | |||
72b39d3f92 | |||
e23b54a59f | |||
![]() |
5e9dba822d | ||
98bb8e6955 | |||
5b06759473 | |||
61776befc3 | |||
8f1997975d | |||
32b1a13fa1 | |||
e89d42ddff | |||
a46ff1dd38 | |||
2c0ccb0159 | |||
07726ef1b6 | |||
ca0c9757f2 | |||
a7b64a714d | |||
4f48b2992b | |||
93ba5e2375 | |||
7e92717439 | |||
db795a4727 | |||
da67a19ed9 | |||
2545119112 | |||
d6c3ea9e7a | |||
00f3957b8e | |||
c1279768a7 | |||
cbcd74de22 | |||
b71e29b3da | |||
47b36ddcce | |||
2964c4e1d0 | |||
333dc7b5c4 | |||
0d8c479225 | |||
1552c92fb1 | |||
5568455d63 | |||
204ae33d75 | |||
b815088416 | |||
![]() |
24e0165463 | ||
205254150a | |||
763cd2e0be | |||
5bd41b2e25 | |||
63bd356faf | |||
b9641cfc37 | |||
7fbb767259 | |||
![]() |
5e37f70307 | ||
![]() |
a92805bf24 | ||
484714992c | |||
13af88b23f | |||
e14f8c2dd7 | |||
a37dac0a88 | |||
fee4b58627 | |||
c4cee2e221 | |||
9558fa5196 | |||
565b33c0ad | |||
a8e0fe6a54 | |||
2309fa20af | |||
![]() |
6a9775ec6f | ||
0f48b37aae | |||
ae5a89e80a | |||
4312cb8545 | |||
cd494087c1 | |||
![]() |
b069218a55 | ||
![]() |
e2f0b4a0cb | ||
1de3636624 | |||
512a560cde | |||
a55d318d71 | |||
c6a200c693 | |||
1e7ef83e46 | |||
a37a6fb445 | |||
6483dee141 | |||
ffc4c126f5 | |||
![]() |
f159d49f56 | ||
![]() |
92dae5775f | ||
50fb0fd636 | |||
5cad004d71 | |||
97e3a2d935 | |||
![]() |
b1696702cd | ||
![]() |
ae6f3056fc | ||
78ae587649 | |||
aa23e870ec | |||
01779970c2 | |||
b91ac86cfc | |||
5705db5bb3 | |||
0ed254574f | |||
![]() |
f60b95b532 | ||
c3c69fee09 | |||
86d520f268 | |||
![]() |
9792994311 | ||
2d4c7fa896 | |||
2814740f5b | |||
ee4ed99866 | |||
![]() |
0bd3cad04e | ||
![]() |
f72cc47d8e | ||
0c703b856b | |||
86992a96b8 | |||
c2292b2cd6 | |||
7d1a10a9bb | |||
a5e3899853 | |||
![]() |
477631d9ec | ||
b9c6ef4e8f | |||
0e52af097f | |||
989d510e3e | |||
9a69c456bd | |||
3d8dea9ff9 | |||
![]() |
3f7014ecc9 | ||
0a8a22fc04 | |||
9a312ba192 | |||
338c1060d5 | |||
0578921063 | |||
c20098e6ec | |||
![]() |
d5efda72f5 | ||
b32f9bf801 | |||
d19443074a | |||
![]() |
5ef5a9fc24 | ||
![]() |
d5920744f4 | ||
56ed4c14d3 | |||
2d8606b360 | |||
ca0dbf8c26 | |||
d1f118d228 | |||
be3f3812dc | |||
cb0fbe1fde | |||
ab927f5ca7 | |||
c4e041da23 | |||
![]() |
7c4fc5b58d | ||
de5d36560f | |||
56ff954030 | |||
c0122cc888 | |||
a159f67ccc | |||
f1cca30557 | |||
0988711575 | |||
fca6a9fe3f | |||
e38532773b | |||
cef8f5ff50 | |||
1e98a0cee5 | |||
431255e5e8 | |||
27b70428c1 | |||
e6a732daad | |||
7e60d8a713 | |||
2fd657db5b | |||
aec56e562a | |||
a1f0f2eacb | |||
23ffcb242d | |||
61e92eeb3e | |||
1620dcd208 | |||
c5ec3738d8 | |||
e130903060 | |||
0f89d05848 | |||
42a6b2fd06 | |||
1766549418 | |||
7da979c070 | |||
67c490daaf | |||
68e3755209 | |||
9f290467ca | |||
4fe8c62b56 | |||
198e571e87 | |||
f1b0b0ffb8 | |||
8f69c91408 | |||
0de1d2e84e | |||
![]() |
bb3d03973a | ||
![]() |
26d2caee3b | ||
218360a892 | |||
ca9cdba2df | |||
b869da0c10 | |||
70a7685d04 | |||
2b6c01d98c | |||
70a0d45b69 | |||
594656e7a3 | |||
fed4fc9c42 | |||
8ca8380699 | |||
![]() |
cb334428b0 | ||
9afd6e7b70 | |||
![]() |
7336af3259 | ||
128ebdb062 | |||
bc48da3235 | |||
be6e56b36b | |||
506d672524 | |||
![]() |
d54a08c8af | ||
1757840843 | |||
f8dd03d3dd | |||
![]() |
fd8418385c | ||
1ef8ef4941 | |||
d5d91b4ae4 | |||
02ab4ad991 | |||
fd22404837 | |||
51791004ea | |||
9cec9b4d6e | |||
24b84e4688 | |||
5eeaf4cce6 | |||
386b112f76 | |||
![]() |
d723e331f1 | ||
1cb99f5808 | |||
b3d101ac29 | |||
88e9e97ee9 | |||
247f37f765 | |||
221b7b27fc | |||
88b37b639e | |||
1b4734c57d | |||
3f08488244 | |||
b9f54dd48a | |||
581fb2da10 | |||
c822e03e2a | |||
2fbb52dd86 | |||
3788003cda | |||
74039388cd | |||
7863e03e89 | |||
![]() |
de7f1e8e07 | ||
![]() |
251c017534 | ||
0704570721 | |||
8cf0d15b60 | |||
1cd9fcd98d | |||
2f7bec04e8 | |||
3692c0521c | |||
b67dca9b76 | |||
4b971bb87c | |||
![]() |
2e53f8b4b1 | ||
e1cb2a226c | |||
d8edc2c634 | |||
6f460b76fe | |||
bc1e3238c4 | |||
c12d8a72ce | |||
d7f0de0e3a | |||
![]() |
7168a4fa5c | ||
500ec993f5 | |||
![]() |
da279927b1 | ||
ac447ba1a3 | |||
e2473d3baf | |||
76471dbd5e | |||
4e45265dc6 | |||
262ef26ea3 | |||
35124acd19 | |||
c2001ec275 | |||
e7ae9f493a | |||
4fac3be146 | |||
2e6f914e37 | |||
0adb356f2e | |||
aa7051c8f2 | |||
aff6227412 | |||
dae9917915 | |||
2206b6b9a0 | |||
f613c4c095 | |||
98a5c924fc | |||
![]() |
03c9563582 | ||
f9add2d63e | |||
![]() |
e5e8db73df | ||
6ae34bb071 | |||
7c703b4699 | |||
f1118ee51e | |||
ab2a7aa0da | |||
cebe5f5bf4 | |||
0cbcddd91e | |||
b31250feba | |||
444971aa8e | |||
f7f558e293 | |||
e121b5b66c | |||
![]() |
d2e6087335 | ||
aa6c922d99 | |||
d2f4fb68f5 | |||
2531358297 | |||
08264aaf82 | |||
61bd5882a2 | |||
a0bb6bb4d6 | |||
97465046c6 | |||
92daff6ac2 | |||
2efc2221cc | |||
0789f61373 | |||
602ecbdf9a | |||
eb7827e797 | |||
12a83db83c | |||
f86331a033 | |||
ef88047a97 | |||
a773cd3850 | |||
35c3644e78 | |||
63342861e7 | |||
b066d58216 | |||
236be8e9f1 | |||
dcc500e5a2 | |||
![]() |
c6eaa9c552 | ||
658fd8df0b | |||
![]() |
004172de38 | ||
6b5e1cfaca | |||
2cda65a35a | |||
8015433f81 | |||
e3cf7ebdb1 | |||
a073e1e401 | |||
7b5a6f452a | |||
466b50dbc9 | |||
2fb8c6805a | |||
e3d3296327 | |||
e6a41e1c80 | |||
b2bb3e4b72 | |||
4a3f99ad5a | |||
5a11c6e558 | |||
5514ca58a4 | |||
94e8db1e86 | |||
3652f5f758 | |||
c91d196159 | |||
9812a08848 | |||
e216660382 | |||
e253fb2143 | |||
3bf10e5d0a | |||
2378f057a0 | |||
bc4c20d414 | |||
ffddf9e5c9 | |||
447378753d | |||
845716e600 | |||
d6646f7a8a | |||
1e2376f41f | |||
82808e18e6 | |||
5ffb9b6dc4 | |||
![]() |
a0acb9bd0c | ||
e6cd4761e7 | |||
726bc3a46b | |||
610e68590b | |||
ce5561b815 | |||
f12a6ff5cb | |||
40d28b40df | |||
![]() |
c49d2cbe92 | ||
![]() |
b41c72b710 | ||
827c5b399e | |||
8f2db94627 | |||
c26011efcb | |||
6b1b3383c6 | |||
![]() |
a9642f8d61 | ||
c155a5f9d7 | |||
752c6d668b | |||
bbadee6fc1 | |||
7a7ae4df43 | |||
338408772a | |||
71c39a9e2e | |||
cae3b581b0 | |||
499c24ce75 | |||
cbe9a87d28 | |||
01ab36ebc1 | |||
e206a0ae96 | |||
4930cd5db6 | |||
a07089dcb1 | |||
7a97e925fd | |||
56b068a664 | |||
64d9291d26 | |||
![]() |
2cc56495f3 | ||
72acce43bc | |||
5d59b38605 | |||
057cb7e5e7 | |||
65f547c3fc | |||
9fc5a9c78f | |||
7ea4342e73 | |||
833eb90820 | |||
![]() |
25478bdc9a | ||
5a50b46376 | |||
f5e5a0987a | |||
050b205a97 | |||
3850fdd5b9 | |||
98a5658239 | |||
cd818fd081 | |||
75b53542f2 | |||
17770192fb | |||
e0763760e4 | |||
f8dea3fe64 | |||
2ddbf81c47 | |||
f9db7675e0 | |||
785503a7e4 | |||
1a887b0088 | |||
4d46e8a5e0 | |||
4b259edb0a | |||
de35a90f9f | |||
ebe5a5eca8 | |||
![]() |
dbeab82a89 | ||
![]() |
16fc0da0e7 | ||
21f22759ea | |||
60c0b79256 | |||
![]() |
6b4405d757 | ||
d144983f8c | |||
56f66602c7 | |||
9159295c3c | |||
62a04f7aa6 | |||
38a3819171 | |||
3844e9dbe7 | |||
ea93e5df6c | |||
60befc8f02 | |||
62b50c612f | |||
9e5aae4215 | |||
c09e8a3590 | |||
792badcfef | |||
c0a2b21744 | |||
fb4851fbbc | |||
b40e930ac7 | |||
cf266ecaa6 | |||
e4986f92f3 | |||
fab39440e9 | |||
a9eb4e6f59 | |||
a6b7f32112 | |||
db450c9320 | |||
70424195a8 | |||
71c80bd939 | |||
2cbb9d7a76 | |||
b716a771b4 | |||
![]() |
3bb8d173e7 | ||
fca8eb0185 | |||
2c2b79191f | |||
1a7c32a0ab | |||
4b13dcaf02 | |||
ceb25cbeba | |||
8897e0aa8f | |||
5efddc4347 | |||
1df8abff25 | |||
47276b8470 | |||
0bedd5d14f | |||
436ce22194 | |||
dab04bc053 | |||
d7b7cbb047 | |||
0479a66313 | |||
611e4ffaab | |||
89b927a720 | |||
fecdf9d44b | |||
b7c98c87ac | |||
a6d1a2d3fc | |||
![]() |
bba6fe83e2 | ||
6ab3349bd4 | |||
cf299bee80 | |||
3e65bb86f9 | |||
f392ce50c4 | |||
cd2849c89b | |||
605cdc4346 | |||
0452a04f1a | |||
6c8f73b220 | |||
b9b98448a6 | |||
fbb4a7eb43 | |||
f657356062 | |||
b02ac2d8be | |||
84be741329 | |||
6987060f70 | |||
28870a8f89 | |||
59754ef0b2 | |||
![]() |
34370d9fdf | ||
![]() |
b42494cf6b | ||
d1a4e043bd | |||
![]() |
f749506163 | ||
8600d4491f | |||
456d5e14b8 | |||
481f032f5c | |||
34615cd269 | |||
48c2b4012f | |||
29681f186e | |||
e2b736aa40 | |||
![]() |
73b1ad1920 | ||
bfff9ca5f1 | |||
![]() |
ee0277271c | ||
cc6bcb53b2 | |||
5ad4ca4e02 | |||
8a84a61f6b | |||
0129178376 | |||
55c82d8380 | |||
1706bf7780 | |||
336ca6796a | |||
25c83c217b | |||
059da44fbc | |||
d7cf7d4048 | |||
fe274d91a1 | |||
9c2a4d158c | |||
875f24352a | |||
![]() |
0624235900 | ||
be876b8db6 | |||
178947dec3 | |||
![]() |
819b9bdfa1 | ||
77ddc6e350 | |||
7e8f9213e9 | |||
7b09213f2f | |||
9b6f3d2d0a | |||
9bbb5f5a6a | |||
29f6ec56e6 | |||
0b246ed813 | |||
31864a40ba | |||
c850189adf | |||
db20837c3a | |||
6c16bb2706 | |||
6eaa69c66c | |||
fb470c256a | |||
873f6148ad | |||
940e6525c7 | |||
15011e0b70 | |||
6ee2abde82 | |||
d455eadcd8 | |||
b3ee9f44cf | |||
1b2ee3cf20 | |||
e949ac0bfc | |||
59ffe1c5b1 | |||
![]() |
f2bb42a095 | ||
3d447b6335 | |||
b20997cb34 | |||
3baaab15fc | |||
411261fb32 | |||
092df87534 | |||
15ecd47b96 | |||
01df48a983 | |||
a0780ad625 | |||
cfbc9df60e | |||
217d0a1524 | |||
51a7961e09 | |||
c3fed4d463 | |||
fb0ea94c63 | |||
50ad0e15fe | |||
00e4d665f4 | |||
fabd088067 | |||
1222c45544 | |||
ba8dd0f24f | |||
06a2e2b28c | |||
ef687bd7c2 | |||
97533eede4 | |||
1b686c60b5 | |||
0f1a200a67 | |||
9e3a913b35 | |||
1a1ddcb5e2 | |||
ec71054a9b | |||
06ead314b6 | |||
330290d2a8 | |||
33c5e7bcd5 | |||
d6ea881a74 | |||
d7aaa145c6 | |||
04ec36f677 | |||
0852805ed7 | |||
a20e703d1a | |||
06691d1b21 | |||
1b94c53aa6 | |||
7d5ef64bfb | |||
fa6a913ef1 | |||
83e245023c | |||
eb071c9ff4 | |||
de3fda29c7 | |||
48e64a5fb5 | |||
4ea6b4ba84 | |||
992634427e | |||
b8dc845e57 | |||
4d09a692e2 | |||
5ed3a5d023 | |||
3f288e9414 | |||
b2d37c35d0 | |||
167ee8f2c7 | |||
fd2a155d06 | |||
f190f2d267 | |||
0c33411bdd | |||
ea42c1a22e | |||
f61a73093b | |||
ada6742601 | |||
701f2dfd5b | |||
b8bf40ed4b | |||
717a971035 | |||
![]() |
2a9cfdac7e | ||
c7f9a782aa | |||
![]() |
25fa6c74b9 | ||
7c4e4d605c | |||
3531021d1b | |||
12fc395436 | |||
![]() |
805181bffa | ||
77df32548b | |||
![]() |
5e6fdaa07f | ||
![]() |
1d1855e95f | ||
cb3ba68ec4 | |||
![]() |
f19bd637e2 | ||
f0be276514 | |||
ed91e759d1 | |||
67b4eecac9 | |||
![]() |
dd31b8bd50 | ||
5816eb4c56 | |||
8d1357ea6b | |||
beb9e332ca | |||
31afa1bb9a | |||
0624acf088 | |||
b926f54f3c | |||
d1f944c186 | |||
d19e35873f | |||
c0d52db783 | |||
f71813204c | |||
3ad2bf1327 | |||
bd2e3bb7bd | |||
2b63a76041 | |||
e5774282b9 | |||
![]() |
e1a3b697ec | ||
![]() |
8c0370ef7b | ||
![]() |
9cf3d841a8 | ||
f1f7a8b018 | |||
a182b05f07 | |||
032ab0270d | |||
![]() |
daaa43232d | ||
ceec400975 | |||
d8fd575af9 | |||
d6b5251572 | |||
b071083496 | |||
fa7a6d67a8 | |||
![]() |
d9bc8f189c | ||
063ad8635e | |||
9937d5379c | |||
89d5714d8f | |||
ea7efa5569 | |||
00a9617f92 | |||
c3422c48ad | |||
e5f05bc7a6 | |||
f5dde382af | |||
83a4d51997 | |||
c2ab47e729 | |||
51b8e34fb7 | |||
473be239c3 | |||
e3c974b7e4 | |||
6e6123b40f | |||
ecad33f214 | |||
61bffa565e | |||
f72dc00569 | |||
9bdf3fa5f0 | |||
4c988eb3e1 | |||
![]() |
dea26253a0 | ||
8290edefad | |||
2f39b45e8c | |||
f829b86039 | |||
93f26d652e | |||
fbf4fe6963 | |||
1e4d1eb398 | |||
59da22c309 | |||
b496c1c721 | |||
3189171a94 | |||
cf83719761 | |||
c9fb08e075 | |||
f30e1fd2f0 | |||
25d30e6c99 | |||
cfd0e96e47 | |||
7293c1b357 | |||
![]() |
9d7422b817 | ||
917218269e | |||
1572c4d3d3 | |||
bd37553850 | |||
0335df9384 | |||
ba6427adfa | |||
b3529ecf0e | |||
72ee62e0da | |||
bee7a56687 | |||
07af45eec5 | |||
![]() |
64003fa4b0 | ||
85ac9b8584 | |||
ce0d817bb7 | |||
12a986c9b5 | |||
c7a1e115b5 | |||
faa8aa3bb9 | |||
052c22199d | |||
7da714f387 | |||
![]() |
da14a482f2 | ||
d4c868da9f | |||
6d35972b06 | |||
7d985d6b69 | |||
57ed435def | |||
7e42ae7c1a | |||
165cacc6f0 | |||
62da6ffe08 | |||
46f5f60c13 | |||
a040d2a93a | |||
7e148c45c8 | |||
d3c45e1c39 | |||
ef8240e64c | |||
10a6a540af | |||
8976b72843 | |||
62da41d63d | |||
c3472cb11c | |||
![]() |
a5c59fb90e | ||
c2c65cc4bf | |||
622e6f05f1 | |||
7e82c840b7 | |||
2549384baa | |||
73047c69ea | |||
e8a8bb67fc | |||
ab9ec193c3 | |||
![]() |
c4ea5cb1a3 | ||
1143bf281a | |||
acc800d24d | |||
dc378bf1a4 | |||
0a6f428be7 | |||
60b8eb30bb | |||
eed48a7322 | |||
738f4fbc5e | |||
ebb4aba325 | |||
6b4ca78108 | |||
ec432ae998 | |||
8d3a771574 | |||
55c69373e8 | |||
8b13cf5667 | |||
5941c39fbf | |||
30f9034182 | |||
e5a7dd8ab6 | |||
5b787c24fb | |||
888b879f5f | |||
1b55b911f2 | |||
71131b4969 | |||
b4d9b8b7f8 | |||
ef0b8d6306 | |||
d845ba481c | |||
cbca71a7cf | |||
809ae823b7 | |||
9d0d4b8601 | |||
8a8bf99717 | |||
2b394e1108 | |||
![]() |
a89529d8db | ||
9f5290e3bc | |||
c671b5eee4 | |||
![]() |
896d3f1ce5 | ||
76105eb752 | |||
d48523cb4d | |||
ddf66cd060 | |||
b4cfe80547 | |||
c7a88cf91a | |||
5f7d5c0809 | |||
a470e3c9d1 | |||
0ea60cf6b8 | |||
3fe735d371 | |||
a47359ff36 | |||
de8a46c6ad | |||
26502f3d89 | |||
2b633f12ad | |||
86ca206db8 | |||
![]() |
456876208b | ||
![]() |
32c7687859 | ||
a87253942d | |||
ae74ad191c | |||
aa1c44a113 | |||
5c0d4753cf | |||
02333544d1 | |||
1061f5a1ba | |||
1a7757b0bc | |||
f133c6b094 | |||
d612d92630 | |||
1e1c870001 | |||
0533f2851e | |||
d6e682a7b0 | |||
bd734cc441 | |||
e61da8e4fb | |||
f3bdabbe24 | |||
50f32025ac | |||
393879f30c | |||
3d9c8397fc | |||
c9c7658926 | |||
3ca41b7312 | |||
![]() |
4bc08b79aa | ||
25e7365d0d | |||
52c617802f | |||
![]() |
7aa39b40f4 | ||
ce395c84a3 | |||
d26d3cfe19 | |||
06a74e7816 | |||
9f31b9b7d3 | |||
9be6880d02 | |||
4a98faf9f1 | |||
8c240f50b2 | |||
b7e2408ea4 | |||
bb64155c63 | |||
![]() |
c63e735f6b | ||
b8d53b703a | |||
9787b46f09 | |||
03f0be35d6 | |||
d753ebd40a | |||
ddf0bacaa9 | |||
3929db265f | |||
e1bd4bbb66 | |||
f1a8644121 | |||
1ec7075ff2 | |||
22ffd69a91 | |||
9ca8bf0b29 | |||
040630bb9a | |||
3fa86f4b28 | |||
7689f501e2 | |||
![]() |
e507a789b3 | ||
6b0008129e | |||
c8e93da0a7 | |||
abf62d06d1 | |||
35ae7ab933 | |||
cc17ed26ce | |||
20224369d9 | |||
e9b7e5e0b9 | |||
67e5edbaa3 | |||
f565620435 | |||
a6e4cb092e | |||
![]() |
bc0c06ecbe | ||
53468c2b13 | |||
47b8baa5c4 | |||
03e22da665 | |||
aa2f6e5977 | |||
ff0c42acfc | |||
a49d6a5350 | |||
bec72a43ae | |||
aa440923c8 | |||
1f6010e609 | |||
![]() |
3a4c8f406a | ||
7b530c6096 | |||
4648c4990c | |||
44239fa106 | |||
7c25399576 | |||
a356e4fb3f | |||
4f246b8bf9 | |||
7383f95443 | |||
74fe19b193 | |||
fd0ba6449b | |||
ed0df0f3c6 | |||
aa13c4b386 | |||
e5fb5c9d7b | |||
![]() |
e452c43fd6 | ||
570331ca96 | |||
0bdf9d10a4 | |||
cc949f0a40 | |||
fb0ae66ee5 | |||
![]() |
368d794407 | ||
8eff3b5fe0 | |||
5f44298280 | |||
9dc3f454d9 | |||
9b2f212016 | |||
07a4338b3a | |||
![]() |
c092cc35b3 | ||
accdd4c1bc | |||
41607ced2b | |||
625349a6bd | |||
65bbac6692 | |||
faeb2cc900 | |||
440a3475b8 | |||
9daf6a69a6 | |||
0bcf014bcf | |||
65c5ebf577 | |||
0b01b81754 | |||
41b0820ddd | |||
45bd98d4cf | |||
6c24cafecc | |||
cb487b6507 | |||
09f1be53d8 | |||
c56cf50bd0 | |||
![]() |
de8e13036b | ||
![]() |
4e2478940e | ||
6b0a6c2ca9 | |||
04b4ec7889 | |||
ad679ee747 | |||
![]() |
486d1e8510 | ||
a7540f4b36 | |||
2eb94f3036 | |||
2772a033c9 | |||
8772a6fb9b | |||
b3597f310d | |||
![]() |
d5d97e4169 | ||
![]() |
afc60f9957 | ||
e0dae0f98f | |||
ab7214ca2e | |||
fe2ed4a229 | |||
abab16f7c7 | |||
33beec1cec | |||
e1c4e5df22 | |||
c865577643 | |||
![]() |
495e60c0da | ||
bb6547cb5f | |||
c55d0ebea5 | |||
393ef4d871 | |||
cd8350764b | |||
![]() |
d6e2210935 | ||
fc373af8f5 | |||
09cef0fc00 | |||
ee4966d146 | |||
c3f5fca8a2 | |||
de581a2302 | |||
fb4b737518 | |||
27b37517f8 | |||
42df2a7b57 | |||
0969dcc861 | |||
8fa8e8bc37 | |||
34d289f98c | |||
c516659b5e | |||
0f80602632 | |||
b24a03e635 | |||
ed24b7d9a2 | |||
3b726cfee8 | |||
0654c41b0c | |||
4f387e66ac | |||
56ee96349d | |||
892da668dc | |||
eddf5ad581 | |||
6002914f14 | |||
f315a46982 | |||
81baeec59b | |||
a804a11db1 | |||
7a5b8cb202 | |||
48841c479f | |||
6c83001143 | |||
9e611c5616 | |||
![]() |
9be49a1069 | ||
97ff37bf54 | |||
d1a9425a2f | |||
f0bc7f3261 | |||
4b56eed0f7 | |||
f24ad274cb | |||
81bee0e75a | |||
3211c80a31 | |||
ae899e4bb8 | |||
8d2a0d9b4c | |||
cc49c479a7 | |||
1bc655c5aa | |||
aaf86bad87 | |||
c473b2ce8b | |||
212dcd6075 | |||
594ee5f160 | |||
bbd8d33453 | |||
![]() |
7c75529333 | ||
87e2154daf | |||
f415b41a94 | |||
616594fcb1 | |||
625b2f59f0 | |||
2986924301 | |||
29efd26e71 | |||
885c79915f | |||
e65230f0c0 | |||
![]() |
b4af70563f | ||
a0f50c1890 | |||
da97859656 | |||
4e09fd76bc | |||
35198606d5 | |||
00734d5724 | |||
32c90d2d7c | |||
29e5c330cf | |||
d7f4fdf845 | |||
016a575002 | |||
3a4dade2f8 | |||
b9968b83ad | |||
40d090cc72 | |||
5cc21b095a | |||
7061d1e39f | |||
1b6238edba | |||
5b7a14c019 | |||
9d2e325694 | |||
![]() |
3364a5bea6 | ||
![]() |
6986b43b3d | ||
df3e30398f | |||
556c71a84a | |||
1c6d3d614a | |||
101fa4a425 | |||
2373ce7fcf | |||
a72b26527d | |||
2becb3e9af | |||
37b862fa6c | |||
db43d19c16 | |||
d3328fabc9 | |||
8eff1eca52 | |||
c641107c95 | |||
978ef093db | |||
2d6d8fc7ca | |||
82b20b6975 | |||
feaf5b95e0 | |||
36a6528723 | |||
d7f9f083d4 | |||
7c188d8241 | |||
9cd5b3c9b6 | |||
682f1548be | |||
c0fdaf700a | |||
0c6b815855 | |||
d6ed9c2b40 | |||
431524aebc | |||
ccead2ed9c | |||
![]() |
4e5537d841 | ||
7aaedc09c7 | |||
e10caf6fe3 | |||
a7672caeb2 | |||
de2988ea1b | |||
debf4b70db | |||
![]() |
aa0ac0035a | ||
8b516d8712 | |||
2a88343213 | |||
04d35f9315 | |||
3532da44ee | |||
5095e4fc22 | |||
bdf6665e3a | |||
e1f1b0841d | |||
cea7ee7582 | |||
ac0eefe26f | |||
c4b73847d3 | |||
8c58838f6a | |||
5cd1210b52 | |||
3dcd042bfc | |||
53fdde3f64 | |||
0a254109b8 | |||
242ad4bd0f | |||
27621490c2 | |||
12bf4adbe3 | |||
2c23256288 | |||
c01b3c534b | |||
1b2342b4d3 | |||
a7e92843f7 | |||
e64d4d0200 | |||
0daf429591 | |||
b7dc667eb2 | |||
7a4ee2fd4f | |||
52f4a908f7 | |||
ffd3dd6376 | |||
a2f5a10129 | |||
223f2b27d1 | |||
21e168069d | |||
8ca6e51ade | |||
47d12268e3 | |||
9cc05fe9c4 | |||
af9e0409f1 | |||
7b436ead6b | |||
5363437555 | |||
75f5edcaf3 | |||
6ddbcaa096 | |||
e045249a28 | |||
85176c86f0 | |||
765c2cc6c7 | |||
339fd8027f | |||
adc540cf7c | |||
1704a394d8 | |||
d56d3fc6b1 | |||
6acba759e0 | |||
8fbbd69946 | |||
e85e126e3f | |||
64de6ad4fe | |||
2fb725ea30 | |||
9de4f64197 | |||
6897c2141e | |||
7150f919d3 | |||
0eb63328e8 | |||
d07e3bde20 | |||
9111ea78ac | |||
b6dd5be213 | |||
b5eada7f69 | |||
3f0991266f | |||
a96b2f39b8 | |||
![]() |
7dd84f05aa | ||
fe44001215 | |||
![]() |
a50f8b3fd8 | ||
8379eefafb | |||
5327413b37 | |||
289f013e64 | |||
49a0453799 | |||
de4793e0e6 | |||
55ce05e0bb | |||
346a812d7e | |||
1e749d0602 | |||
b99d6e1bed | |||
e2937ff24f | |||
c312c71969 | |||
![]() |
b2e9f35c5e | ||
![]() |
1b6daa871d | ||
![]() |
4e502bb6d2 | ||
ae9052a33e | |||
9cfffe8468 | |||
03a962d8ca | |||
02a9377da0 | |||
dcdbaf89bd | |||
0c3da7f370 | |||
837b72fa83 | |||
d18d87d3e7 | |||
e1db6dc11b | |||
c8c53ceecc | |||
259731909c | |||
e3b2f0fd6f | |||
51c1c1cd93 | |||
eae59645de | |||
c112418e95 | |||
43bc494892 | |||
fb688c8d5c | |||
261bb766fb | |||
1688cb27cd | |||
657923cf93 | |||
57f7650dc7 | |||
99fbf1716f | |||
38fc19d643 | |||
1e2589bfa5 | |||
0e71162e68 | |||
70947ebc65 | |||
59534dbee2 | |||
0283a22456 | |||
8eb10de739 | |||
adf82fe943 | |||
fc36772b06 | |||
731926e70e | |||
a6af0e570d | |||
ec9357a94e | |||
60b278a3bb | |||
5f1107ffaf | |||
2f8ed53d6f | |||
c1cfb475b3 | |||
4b57d5a9a0 | |||
4adde62f60 | |||
2501d00268 | |||
45439dfe4c | |||
5568599015 | |||
a7879dea7c | |||
43c603c2ff | |||
4979537a65 | |||
99b6127b73 | |||
c647bd899f | |||
a2f0f98271 | |||
7d2c759054 | |||
8f02de3de7 | |||
e4a5fd4298 | |||
39c11c03d0 | |||
3e32a68f38 | |||
bfd2921d38 | |||
c346bb1990 | |||
17efd14682 | |||
dab3591588 |
@@ -12,6 +12,8 @@ Checks: >
|
|||||||
-readability-avoid-const-params-in-decls,
|
-readability-avoid-const-params-in-decls,
|
||||||
-readability-simplify-boolean-expr,
|
-readability-simplify-boolean-expr,
|
||||||
-readability-make-member-function-const,
|
-readability-make-member-function-const,
|
||||||
|
-readability-suspicious-call-argument,
|
||||||
|
-readability-redundant-member-init,
|
||||||
|
|
||||||
-readability-misleading-indentation,
|
-readability-misleading-indentation,
|
||||||
|
|
||||||
@@ -25,6 +27,8 @@ Checks: >
|
|||||||
-bugprone-branch-clone,
|
-bugprone-branch-clone,
|
||||||
-bugprone-macro-parentheses,
|
-bugprone-macro-parentheses,
|
||||||
-bugprone-reserved-identifier,
|
-bugprone-reserved-identifier,
|
||||||
|
-bugprone-easily-swappable-parameters,
|
||||||
|
-bugprone-implicit-widening-of-multiplication-result,
|
||||||
|
|
||||||
-bugprone-sizeof-expression,
|
-bugprone-sizeof-expression,
|
||||||
-bugprone-integer-division,
|
-bugprone-integer-division,
|
||||||
@@ -40,7 +44,8 @@ Checks: >
|
|||||||
-modernize-pass-by-value,
|
-modernize-pass-by-value,
|
||||||
# Cannot be enabled yet, because using raw string literals in tests breaks
|
# Cannot be enabled yet, because using raw string literals in tests breaks
|
||||||
# the windows compiler currently.
|
# the windows compiler currently.
|
||||||
-modernize-raw-string-literal
|
-modernize-raw-string-literal,
|
||||||
|
-modernize-return-braced-init-list
|
||||||
|
|
||||||
CheckOptions:
|
CheckOptions:
|
||||||
- key: modernize-use-default-member-init.UseAssignment
|
- key: modernize-use-default-member-init.UseAssignment
|
||||||
|
105
CMakeLists.txt
105
CMakeLists.txt
@@ -187,6 +187,13 @@ mark_as_advanced(CPACK_OVERRIDE_PACKAGENAME)
|
|||||||
mark_as_advanced(BUILDINFO_OVERRIDE_DATE)
|
mark_as_advanced(BUILDINFO_OVERRIDE_DATE)
|
||||||
mark_as_advanced(BUILDINFO_OVERRIDE_TIME)
|
mark_as_advanced(BUILDINFO_OVERRIDE_TIME)
|
||||||
|
|
||||||
|
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16")
|
||||||
|
option(WITH_UNITY_BUILD "Enable unity build for modules that support it to improve compile times" ON)
|
||||||
|
mark_as_advanced(WITH_UNITY_BUILD)
|
||||||
|
else()
|
||||||
|
set(WITH_UNITY_BUILD OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
|
option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
|
||||||
option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
|
option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
|
||||||
option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke, ocean sim, and audio effects)" ON)
|
option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke, ocean sim, and audio effects)" ON)
|
||||||
@@ -266,11 +273,13 @@ endif()
|
|||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" OFF)
|
option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" OFF)
|
||||||
option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system" ON)
|
option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" OFF)
|
||||||
|
option(WITH_SYSTEM_FREETYPE "Use the freetype library provided by the operating system" OFF)
|
||||||
else()
|
else()
|
||||||
# not an option for other OS's
|
# not an option for other OS's
|
||||||
set(WITH_SYSTEM_GLEW OFF)
|
set(WITH_SYSTEM_GLEW OFF)
|
||||||
set(WITH_SYSTEM_GLES OFF)
|
set(WITH_SYSTEM_GLES OFF)
|
||||||
|
set(WITH_SYSTEM_FREETYPE OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
@@ -411,6 +420,7 @@ option(WITH_CYCLES "Enable Cycles Render Engine" ON)
|
|||||||
option(WITH_CYCLES_OSL "Build Cycles with OpenShadingLanguage support" ON)
|
option(WITH_CYCLES_OSL "Build Cycles with OpenShadingLanguage support" ON)
|
||||||
option(WITH_CYCLES_EMBREE "Build Cycles with Embree support" ON)
|
option(WITH_CYCLES_EMBREE "Build Cycles with Embree support" ON)
|
||||||
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
||||||
|
option(WITH_CYCLES_DEBUG "Build Cycles with options useful for debugging (e.g., MIS)" OFF)
|
||||||
|
|
||||||
option(WITH_CYCLES_STANDALONE "Build Cycles standalone application" OFF)
|
option(WITH_CYCLES_STANDALONE "Build Cycles standalone application" OFF)
|
||||||
option(WITH_CYCLES_STANDALONE_GUI "Build Cycles standalone with GUI" OFF)
|
option(WITH_CYCLES_STANDALONE_GUI "Build Cycles standalone with GUI" OFF)
|
||||||
@@ -425,26 +435,40 @@ mark_as_advanced(WITH_CYCLES_DEBUG_NAN)
|
|||||||
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
||||||
|
|
||||||
# NVIDIA CUDA & OptiX
|
# NVIDIA CUDA & OptiX
|
||||||
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles NVIDIA CUDA compute support" ON)
|
if(NOT APPLE)
|
||||||
option(WITH_CYCLES_DEVICE_OPTIX "Enable Cycles NVIDIA OptiX support" ON)
|
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles NVIDIA CUDA compute support" ON)
|
||||||
mark_as_advanced(WITH_CYCLES_DEVICE_CUDA)
|
option(WITH_CYCLES_DEVICE_OPTIX "Enable Cycles NVIDIA OptiX support" ON)
|
||||||
|
mark_as_advanced(WITH_CYCLES_DEVICE_CUDA)
|
||||||
|
|
||||||
option(WITH_CYCLES_CUDA_BINARIES "Build Cycles NVIDIA CUDA binaries" OFF)
|
option(WITH_CYCLES_CUDA_BINARIES "Build Cycles NVIDIA CUDA binaries" OFF)
|
||||||
set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 sm_86 compute_75 CACHE STRING "CUDA architectures to build binaries for")
|
set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 sm_86 compute_75 CACHE STRING "CUDA architectures to build binaries for")
|
||||||
option(WITH_CYCLES_CUBIN_COMPILER "Build cubins with nvrtc based compiler instead of nvcc" OFF)
|
option(WITH_CYCLES_CUBIN_COMPILER "Build cubins with nvrtc based compiler instead of nvcc" OFF)
|
||||||
option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF)
|
option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF)
|
||||||
option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime (for developers, makes cuda-gdb work)" ON)
|
option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime (for developers, makes cuda-gdb work)" ON)
|
||||||
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
||||||
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
||||||
mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL)
|
mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL)
|
||||||
mark_as_advanced(WITH_CUDA_DYNLOAD)
|
mark_as_advanced(WITH_CUDA_DYNLOAD)
|
||||||
|
endif()
|
||||||
|
|
||||||
# AMD HIP
|
# AMD HIP
|
||||||
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" OFF)
|
if(NOT APPLE)
|
||||||
option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF)
|
if(WIN32)
|
||||||
set(CYCLES_HIP_BINARIES_ARCH gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 CACHE STRING "AMD HIP architectures to build binaries for")
|
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" ON)
|
||||||
mark_as_advanced(WITH_CYCLES_DEVICE_HIP)
|
else()
|
||||||
mark_as_advanced(CYCLES_HIP_BINARIES_ARCH)
|
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF)
|
||||||
|
set(CYCLES_HIP_BINARIES_ARCH gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 CACHE STRING "AMD HIP architectures to build binaries for")
|
||||||
|
mark_as_advanced(WITH_CYCLES_DEVICE_HIP)
|
||||||
|
mark_as_advanced(CYCLES_HIP_BINARIES_ARCH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Apple Metal
|
||||||
|
if(APPLE)
|
||||||
|
option(WITH_CYCLES_DEVICE_METAL "Enable Cycles Apple Metal compute support" ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Draw Manager
|
# Draw Manager
|
||||||
option(WITH_DRAW_DEBUG "Add extra debug capabilities to Draw Manager" OFF)
|
option(WITH_DRAW_DEBUG "Add extra debug capabilities to Draw Manager" OFF)
|
||||||
@@ -489,11 +513,10 @@ if(WIN32)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# This should be turned off when Blender enter beta/rc/release
|
# This should be turned off when Blender enter beta/rc/release
|
||||||
if("${BLENDER_VERSION_CYCLE}" STREQUAL "release" OR
|
if("${BLENDER_VERSION_CYCLE}" STREQUAL "alpha")
|
||||||
"${BLENDER_VERSION_CYCLE}" STREQUAL "rc")
|
|
||||||
set(WITH_EXPERIMENTAL_FEATURES OFF)
|
|
||||||
else()
|
|
||||||
set(WITH_EXPERIMENTAL_FEATURES ON)
|
set(WITH_EXPERIMENTAL_FEATURES ON)
|
||||||
|
else()
|
||||||
|
set(WITH_EXPERIMENTAL_FEATURES OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Unit testsing
|
# Unit testsing
|
||||||
@@ -515,12 +538,14 @@ option(WITH_OPENGL "When off limits visibility of the opengl header
|
|||||||
option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
|
option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
|
||||||
option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
|
option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
|
||||||
option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (through either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
|
option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (through either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
|
||||||
|
option(WITH_GPU_SHADER_BUILDER "Shader builder is a developer option enabling linting on GLSL during compilation" OFF)
|
||||||
|
|
||||||
mark_as_advanced(
|
mark_as_advanced(
|
||||||
WITH_OPENGL
|
WITH_OPENGL
|
||||||
WITH_GLEW_ES
|
WITH_GLEW_ES
|
||||||
WITH_GL_EGL
|
WITH_GL_EGL
|
||||||
WITH_GL_PROFILE_ES20
|
WITH_GL_PROFILE_ES20
|
||||||
|
WITH_GPU_SHADER_BUILDER
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
@@ -538,12 +563,18 @@ if(WIN32)
|
|||||||
set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
|
set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Compiler toolchain
|
# Compiler tool-chain.
|
||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
if(UNIX AND NOT APPLE)
|
||||||
option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON)
|
if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
mark_as_advanced(WITH_LINKER_GOLD)
|
option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON)
|
||||||
option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF)
|
mark_as_advanced(WITH_LINKER_GOLD)
|
||||||
mark_as_advanced(WITH_LINKER_LLD)
|
option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF)
|
||||||
|
mark_as_advanced(WITH_LINKER_LLD)
|
||||||
|
endif()
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
|
option(WITH_LINKER_MOLD "Use ld.mold linker which is usually faster than ld.gold & ld.lld." OFF)
|
||||||
|
mark_as_advanced(WITH_LINKER_MOLD)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(WITH_COMPILER_ASAN "Build and link against address sanitizer (only for Debug & RelWithDebInfo targets)." OFF)
|
option(WITH_COMPILER_ASAN "Build and link against address sanitizer (only for Debug & RelWithDebInfo targets)." OFF)
|
||||||
@@ -654,7 +685,7 @@ if(WIN32 OR XCODE)
|
|||||||
option(IDE_GROUP_PROJECTS_IN_FOLDERS "Organize the projects according to source folder structure." ON)
|
option(IDE_GROUP_PROJECTS_IN_FOLDERS "Organize the projects according to source folder structure." ON)
|
||||||
mark_as_advanced(IDE_GROUP_PROJECTS_IN_FOLDERS)
|
mark_as_advanced(IDE_GROUP_PROJECTS_IN_FOLDERS)
|
||||||
|
|
||||||
if (IDE_GROUP_PROJECTS_IN_FOLDERS)
|
if(IDE_GROUP_PROJECTS_IN_FOLDERS)
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -679,9 +710,12 @@ if(UNIX AND NOT APPLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Installation process.
|
# Installation process.
|
||||||
option(POSTINSTALL_SCRIPT "Run given CMake script after installation process" OFF)
|
set(POSTINSTALL_SCRIPT "" CACHE FILEPATH "Run given CMake script after installation process")
|
||||||
mark_as_advanced(POSTINSTALL_SCRIPT)
|
mark_as_advanced(POSTINSTALL_SCRIPT)
|
||||||
|
|
||||||
|
set(POSTCONFIGURE_SCRIPT "" CACHE FILEPATH "Run given CMake script as the last step of CMake configuration")
|
||||||
|
mark_as_advanced(POSTCONFIGURE_SCRIPT)
|
||||||
|
|
||||||
# end option(...)
|
# end option(...)
|
||||||
|
|
||||||
|
|
||||||
@@ -835,7 +869,7 @@ if(WITH_AUDASPACE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Auto-enable CUDA dynload if toolkit is not found.
|
# Auto-enable CUDA dynload if toolkit is not found.
|
||||||
if(NOT WITH_CUDA_DYNLOAD)
|
if(WITH_CYCLES AND WITH_CYCLES_DEVICE_CUDA AND NOT WITH_CUDA_DYNLOAD)
|
||||||
find_package(CUDA)
|
find_package(CUDA)
|
||||||
if(NOT CUDA_FOUND)
|
if(NOT CUDA_FOUND)
|
||||||
message(STATUS "CUDA toolkit not found, using dynamic runtime loading of libraries (WITH_CUDA_DYNLOAD) instead")
|
message(STATUS "CUDA toolkit not found, using dynamic runtime loading of libraries (WITH_CUDA_DYNLOAD) instead")
|
||||||
@@ -1065,7 +1099,7 @@ if(MSVC)
|
|||||||
add_definitions(-D__LITTLE_ENDIAN__)
|
add_definitions(-D__LITTLE_ENDIAN__)
|
||||||
|
|
||||||
# OSX-Note: as we do cross-compiling with specific set architecture,
|
# OSX-Note: as we do cross-compiling with specific set architecture,
|
||||||
# endianess-detection and auto-setting is counterproductive
|
# endianness-detection and auto-setting is counterproductive
|
||||||
# so we just set endianness according CMAKE_OSX_ARCHITECTURES
|
# so we just set endianness according CMAKE_OSX_ARCHITECTURES
|
||||||
|
|
||||||
elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64 OR CMAKE_OSX_ARCHITECTURES MATCHES arm64)
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64 OR CMAKE_OSX_ARCHITECTURES MATCHES arm64)
|
||||||
@@ -1755,7 +1789,7 @@ endif()
|
|||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
# Do not enable compiler specific language extentions.
|
# Do not enable compiler specific language extensions.
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
||||||
@@ -2045,3 +2079,8 @@ endif()
|
|||||||
if(0)
|
if(0)
|
||||||
print_all_vars()
|
print_all_vars()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Should be the last step of configuration.
|
||||||
|
if(POSTCONFIGURE_SCRIPT)
|
||||||
|
include(${POSTCONFIGURE_SCRIPT})
|
||||||
|
endif()
|
||||||
|
@@ -51,7 +51,7 @@ Other Convenience Targets
|
|||||||
* config: Run cmake configuration tool to set build options.
|
* config: Run cmake configuration tool to set build options.
|
||||||
* deps: Build library dependencies (intended only for platform maintainers).
|
* deps: Build library dependencies (intended only for platform maintainers).
|
||||||
|
|
||||||
The existance of locally build dependancies overrides the pre-built dependencies from subversion.
|
The existance of locally build dependencies overrides the pre-built dependencies from subversion.
|
||||||
These must be manually removed from '../lib/' to go back to using the pre-compiled libraries.
|
These must be manually removed from '../lib/' to go back to using the pre-compiled libraries.
|
||||||
|
|
||||||
Project Files
|
Project Files
|
||||||
|
@@ -63,6 +63,7 @@ include(cmake/jpeg.cmake)
|
|||||||
include(cmake/blosc.cmake)
|
include(cmake/blosc.cmake)
|
||||||
include(cmake/pthreads.cmake)
|
include(cmake/pthreads.cmake)
|
||||||
include(cmake/openexr.cmake)
|
include(cmake/openexr.cmake)
|
||||||
|
include(cmake/brotli.cmake)
|
||||||
include(cmake/freetype.cmake)
|
include(cmake/freetype.cmake)
|
||||||
include(cmake/freeglut.cmake)
|
include(cmake/freeglut.cmake)
|
||||||
include(cmake/glew.cmake)
|
include(cmake/glew.cmake)
|
||||||
|
@@ -25,8 +25,13 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(BOOST_TOOLSET toolset=msvc-14.1)
|
if(MSVC_VERSION GREATER_EQUAL 1920) # 2019
|
||||||
set(BOOST_COMPILER_STRING -vc141)
|
set(BOOST_TOOLSET toolset=msvc-14.2)
|
||||||
|
set(BOOST_COMPILER_STRING -vc142)
|
||||||
|
else() # 2017
|
||||||
|
set(BOOST_TOOLSET toolset=msvc-14.1)
|
||||||
|
set(BOOST_COMPILER_STRING -vc141)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(BOOST_CONFIGURE_COMMAND bootstrap.bat)
|
set(BOOST_CONFIGURE_COMMAND bootstrap.bat)
|
||||||
set(BOOST_BUILD_COMMAND b2)
|
set(BOOST_BUILD_COMMAND b2)
|
||||||
|
38
build_files/build_environment/cmake/brotli.cmake
Normal file
38
build_files/build_environment/cmake/brotli.cmake
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
|
set(BROTLI_EXTRA_ARGS
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(external_brotli
|
||||||
|
URL file://${PACKAGE_DIR}/${BROTLI_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${BROTLI_HASH_TYPE}=${BROTLI_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/brotli
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/brotli ${DEFAULT_CMAKE_FLAGS} ${BROTLI_EXTRA_ARGS}
|
||||||
|
INSTALL_DIR ${LIBDIR}/brotli
|
||||||
|
)
|
||||||
|
|
||||||
|
if(BUILD_MODE STREQUAL Release AND WIN32)
|
||||||
|
ExternalProject_Add_Step(external_brotli after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/brotli/include ${HARVEST_TARGET}/brotli/include
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/brotli/lib/brotlidec-static${LIBEXT} ${HARVEST_TARGET}/brotli/lib/brotlidec-static${LIBEXT}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/brotli/lib/brotlicommon-static${LIBEXT} ${HARVEST_TARGET}/brotli/lib/brotlicommon-static${LIBEXT}
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
@@ -94,3 +94,4 @@ download_source(POTRACE)
|
|||||||
download_source(HARU)
|
download_source(HARU)
|
||||||
download_source(ZSTD)
|
download_source(ZSTD)
|
||||||
download_source(FLEX)
|
download_source(FLEX)
|
||||||
|
download_source(BROTLI)
|
||||||
|
@@ -19,13 +19,13 @@
|
|||||||
set(FREETYPE_EXTRA_ARGS
|
set(FREETYPE_EXTRA_ARGS
|
||||||
-DCMAKE_RELEASE_POSTFIX:STRING=2ST
|
-DCMAKE_RELEASE_POSTFIX:STRING=2ST
|
||||||
-DCMAKE_DEBUG_POSTFIX:STRING=2ST_d
|
-DCMAKE_DEBUG_POSTFIX:STRING=2ST_d
|
||||||
-DWITH_BZip2=OFF
|
-DFT_DISABLE_BZIP2=ON
|
||||||
-DWITH_HarfBuzz=OFF
|
-DFT_DISABLE_HARFBUZZ=ON
|
||||||
-DFT_WITH_HARFBUZZ=OFF
|
-DFT_DISABLE_PNG=ON
|
||||||
-DFT_WITH_BZIP2=OFF
|
-DFT_REQUIRE_BROTLI=ON
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE
|
-DPC_BROTLIDEC_INCLUDEDIR=${LIBDIR}/brotli/include
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE
|
-DPC_BROTLIDEC_LIBDIR=${LIBDIR}/brotli/lib
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE)
|
)
|
||||||
|
|
||||||
ExternalProject_Add(external_freetype
|
ExternalProject_Add(external_freetype
|
||||||
URL file://${PACKAGE_DIR}/${FREETYPE_FILE}
|
URL file://${PACKAGE_DIR}/${FREETYPE_FILE}
|
||||||
@@ -36,6 +36,11 @@ ExternalProject_Add(external_freetype
|
|||||||
INSTALL_DIR ${LIBDIR}/freetype
|
INSTALL_DIR ${LIBDIR}/freetype
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_dependencies(
|
||||||
|
external_freetype
|
||||||
|
external_brotli
|
||||||
|
)
|
||||||
|
|
||||||
if(BUILD_MODE STREQUAL Release AND WIN32)
|
if(BUILD_MODE STREQUAL Release AND WIN32)
|
||||||
ExternalProject_Add_Step(external_freetype after_install
|
ExternalProject_Add_Step(external_freetype after_install
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freetype ${HARVEST_TARGET}/freetype
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freetype ${HARVEST_TARGET}/freetype
|
||||||
|
@@ -38,13 +38,6 @@ elseif(UNIX AND NOT APPLE)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
|
||||||
set(GMP_OPTIONS
|
|
||||||
${GMP_OPTIONS}
|
|
||||||
--disable-assembly
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ExternalProject_Add(external_gmp
|
ExternalProject_Add(external_gmp
|
||||||
URL file://${PACKAGE_DIR}/${GMP_FILE}
|
URL file://${PACKAGE_DIR}/${GMP_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Copy all generated files to the proper strucure as blender prefers
|
# Copy all generated files to the proper structure as blender prefers
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
if(NOT DEFINED HARVEST_TARGET)
|
if(NOT DEFINED HARVEST_TARGET)
|
||||||
@@ -79,6 +79,8 @@ endfunction()
|
|||||||
harvest(alembic/include alembic/include "*.h")
|
harvest(alembic/include alembic/include "*.h")
|
||||||
harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
|
harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
|
||||||
harvest(alembic/bin alembic/bin "*")
|
harvest(alembic/bin alembic/bin "*")
|
||||||
|
harvest(brotli/include brotli/include "*.h")
|
||||||
|
harvest(brotli/lib brotli/lib "*.a")
|
||||||
harvest(boost/include boost/include "*")
|
harvest(boost/include boost/include "*")
|
||||||
harvest(boost/lib boost/lib "*.a")
|
harvest(boost/lib boost/lib "*.a")
|
||||||
harvest(ffmpeg/include ffmpeg/include "*.h")
|
harvest(ffmpeg/include ffmpeg/include "*.h")
|
||||||
|
@@ -42,6 +42,7 @@ ExternalProject_Add(nanovdb
|
|||||||
URL_HASH ${NANOVDB_HASH_TYPE}=${NANOVDB_HASH}
|
URL_HASH ${NANOVDB_HASH_TYPE}=${NANOVDB_HASH}
|
||||||
PREFIX ${BUILD_DIR}/nanovdb
|
PREFIX ${BUILD_DIR}/nanovdb
|
||||||
SOURCE_SUBDIR nanovdb
|
SOURCE_SUBDIR nanovdb
|
||||||
|
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/nanovdb/src/nanovdb < ${PATCH_DIR}/nanovdb.diff
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/nanovdb ${DEFAULT_CMAKE_FLAGS} ${NANOVDB_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/nanovdb ${DEFAULT_CMAKE_FLAGS} ${NANOVDB_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/nanovdb
|
INSTALL_DIR ${LIBDIR}/nanovdb
|
||||||
)
|
)
|
||||||
|
@@ -39,7 +39,7 @@ endif()
|
|||||||
set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads" CACHE STRING "Path for downloaded files")
|
set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads" CACHE STRING "Path for downloaded files")
|
||||||
# This path must be hard-coded like this, so that the GNUmakefile knows where it is and can pass it to make_source_archive.py:
|
# This path must be hard-coded like this, so that the GNUmakefile knows where it is and can pass it to make_source_archive.py:
|
||||||
set(PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages")
|
set(PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages")
|
||||||
option(PACKAGE_USE_UPSTREAM_SOURCES "Use soures upstream to download the package sources, when OFF the blender mirror will be used" ON)
|
option(PACKAGE_USE_UPSTREAM_SOURCES "Use sources upstream to download the package sources, when OFF the blender mirror will be used" ON)
|
||||||
|
|
||||||
file(TO_CMAKE_PATH ${DOWNLOAD_DIR} DOWNLOAD_DIR)
|
file(TO_CMAKE_PATH ${DOWNLOAD_DIR} DOWNLOAD_DIR)
|
||||||
file(TO_CMAKE_PATH ${PACKAGE_DIR} PACKAGE_DIR)
|
file(TO_CMAKE_PATH ${PACKAGE_DIR} PACKAGE_DIR)
|
||||||
|
@@ -24,7 +24,7 @@ if(MSVC)
|
|||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND echo packaging python
|
COMMAND echo packaging python
|
||||||
COMMAND echo this should ouput at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
COMMAND echo this should output at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python.exe ${PYTARGET}/bin/python.exe
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python.exe ${PYTARGET}/bin/python.exe
|
||||||
@@ -43,7 +43,7 @@ if(MSVC)
|
|||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND echo packaging python
|
COMMAND echo packaging python
|
||||||
COMMAND echo this should ouput at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
COMMAND echo this should output at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python${PYTHON_POSTFIX}.exe ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python${PYTHON_POSTFIX}.exe ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
|
@@ -31,7 +31,7 @@ ExternalProject_Add(external_python_site_packages
|
|||||||
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
|
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
|
||||||
BUILD_COMMAND ""
|
BUILD_COMMAND ""
|
||||||
PREFIX ${BUILD_DIR}/site_packages
|
PREFIX ${BUILD_DIR}/site_packages
|
||||||
INSTALL_COMMAND ${PYTHON_BINARY} -m pip install ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} --no-binary :all:
|
INSTALL_COMMAND ${PYTHON_BINARY} -m pip install --no-cache-dir ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} --no-binary :all:
|
||||||
)
|
)
|
||||||
|
|
||||||
if(USE_PIP_NUMPY)
|
if(USE_PIP_NUMPY)
|
||||||
|
@@ -83,9 +83,9 @@ else()
|
|||||||
set(OPENEXR_VERSION_POSTFIX)
|
set(OPENEXR_VERSION_POSTFIX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(FREETYPE_VERSION 2.10.2)
|
set(FREETYPE_VERSION 2.11.1)
|
||||||
set(FREETYPE_URI http://prdownloads.sourceforge.net/freetype/freetype-${FREETYPE_VERSION}.tar.gz)
|
set(FREETYPE_URI http://prdownloads.sourceforge.net/freetype/freetype-${FREETYPE_VERSION}.tar.gz)
|
||||||
set(FREETYPE_HASH b1cb620e4c875cd4d1bfa04945400945)
|
set(FREETYPE_HASH bd4e3b007474319909a6b79d50908e85)
|
||||||
set(FREETYPE_HASH_TYPE MD5)
|
set(FREETYPE_HASH_TYPE MD5)
|
||||||
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
|
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
|
||||||
|
|
||||||
@@ -189,11 +189,11 @@ set(OSL_HASH 1abd7ce40481771a9fa937f19595d2f2)
|
|||||||
set(OSL_HASH_TYPE MD5)
|
set(OSL_HASH_TYPE MD5)
|
||||||
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(PYTHON_VERSION 3.9.7)
|
set(PYTHON_VERSION 3.10.2)
|
||||||
set(PYTHON_SHORT_VERSION 3.9)
|
set(PYTHON_SHORT_VERSION 3.10)
|
||||||
set(PYTHON_SHORT_VERSION_NO_DOTS 39)
|
set(PYTHON_SHORT_VERSION_NO_DOTS 310)
|
||||||
set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz)
|
set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz)
|
||||||
set(PYTHON_HASH fddb060b483bc01850a3f412eea1d954)
|
set(PYTHON_HASH 14e8c22458ed7779a1957b26cde01db9)
|
||||||
set(PYTHON_HASH_TYPE MD5)
|
set(PYTHON_HASH_TYPE MD5)
|
||||||
set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz)
|
set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz)
|
||||||
|
|
||||||
@@ -215,18 +215,20 @@ set(NANOVDB_HASH e7b9e863ec2f3b04ead171dec2322807)
|
|||||||
set(NANOVDB_HASH_TYPE MD5)
|
set(NANOVDB_HASH_TYPE MD5)
|
||||||
set(NANOVDB_FILE nano-vdb-${NANOVDB_GIT_UID}.tar.gz)
|
set(NANOVDB_FILE nano-vdb-${NANOVDB_GIT_UID}.tar.gz)
|
||||||
|
|
||||||
set(IDNA_VERSION 3.2)
|
set(IDNA_VERSION 3.3)
|
||||||
set(CHARSET_NORMALIZER_VERSION 2.0.6)
|
set(CHARSET_NORMALIZER_VERSION 2.0.10)
|
||||||
set(URLLIB3_VERSION 1.26.7)
|
set(URLLIB3_VERSION 1.26.8)
|
||||||
set(CERTIFI_VERSION 2021.10.8)
|
set(CERTIFI_VERSION 2021.10.8)
|
||||||
set(REQUESTS_VERSION 2.26.0)
|
set(REQUESTS_VERSION 2.27.1)
|
||||||
set(CYTHON_VERSION 0.29.24)
|
set(CYTHON_VERSION 0.29.26)
|
||||||
set(ZSTANDARD_VERSION 0.15.2 )
|
# The version of the zstd library used to build the Python package should match ZSTD_VERSION defined below.
|
||||||
|
# At this time of writing, 0.17.0 was already released, but built against zstd 1.5.1, while we use 1.5.0.
|
||||||
|
set(ZSTANDARD_VERSION 0.16.0)
|
||||||
|
|
||||||
set(NUMPY_VERSION 1.21.2)
|
set(NUMPY_VERSION 1.22.0)
|
||||||
set(NUMPY_SHORT_VERSION 1.21)
|
set(NUMPY_SHORT_VERSION 1.22)
|
||||||
set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}/numpy-${NUMPY_VERSION}.zip)
|
set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}/numpy-${NUMPY_VERSION}.zip)
|
||||||
set(NUMPY_HASH 5638d5dae3ca387be562912312db842e)
|
set(NUMPY_HASH 252de134862a27bd66705d29622edbfe)
|
||||||
set(NUMPY_HASH_TYPE MD5)
|
set(NUMPY_HASH_TYPE MD5)
|
||||||
set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
|
set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
|
||||||
|
|
||||||
@@ -474,9 +476,9 @@ set(ISPC_HASH 2e3abedbc0ea9aaec17d6562c632454d)
|
|||||||
set(ISPC_HASH_TYPE MD5)
|
set(ISPC_HASH_TYPE MD5)
|
||||||
set(ISPC_FILE ispc-${ISPC_VERSION}.tar.gz)
|
set(ISPC_FILE ispc-${ISPC_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(GMP_VERSION 6.2.0)
|
set(GMP_VERSION 6.2.1)
|
||||||
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
|
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
|
||||||
set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1)
|
set(GMP_HASH 0b82665c4a92fd2ade7440c13fcaa42b)
|
||||||
set(GMP_HASH_TYPE MD5)
|
set(GMP_HASH_TYPE MD5)
|
||||||
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
|
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
|
||||||
|
|
||||||
@@ -500,3 +502,9 @@ set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
|
|||||||
|
|
||||||
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
||||||
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
||||||
|
|
||||||
|
set(BROTLI_VERSION v1.0.9)
|
||||||
|
set(BROTLI_URI https://github.com/google/brotli/archive/refs/tags/${BROTLI_VERSION}.tar.gz)
|
||||||
|
set(BROTLI_HASH f9e8d81d0405ba66d181529af42a3354f838c939095ff99930da6aa9cdf6fe46)
|
||||||
|
set(BROTLI_HASH_TYPE SHA256)
|
||||||
|
set(BROTLI_FILE brotli-${BROTLI_VERSION}.tar.gz)
|
||||||
|
@@ -379,27 +379,27 @@ USE_CXX11=true
|
|||||||
CLANG_FORMAT_VERSION_MIN="6.0"
|
CLANG_FORMAT_VERSION_MIN="6.0"
|
||||||
CLANG_FORMAT_VERSION_MEX="10.0"
|
CLANG_FORMAT_VERSION_MEX="10.0"
|
||||||
|
|
||||||
PYTHON_VERSION="3.9.7"
|
PYTHON_VERSION="3.10.2"
|
||||||
PYTHON_VERSION_SHORT="3.9"
|
PYTHON_VERSION_SHORT="3.10"
|
||||||
PYTHON_VERSION_MIN="3.7"
|
PYTHON_VERSION_MIN="3.9"
|
||||||
PYTHON_VERSION_MEX="3.11"
|
PYTHON_VERSION_MEX="3.12"
|
||||||
PYTHON_VERSION_INSTALLED=$PYTHON_VERSION_SHORT
|
PYTHON_VERSION_INSTALLED=$PYTHON_VERSION_SHORT
|
||||||
PYTHON_FORCE_BUILD=false
|
PYTHON_FORCE_BUILD=false
|
||||||
PYTHON_FORCE_REBUILD=false
|
PYTHON_FORCE_REBUILD=false
|
||||||
PYTHON_SKIP=false
|
PYTHON_SKIP=false
|
||||||
|
|
||||||
# Additional Python modules.
|
# Additional Python modules.
|
||||||
PYTHON_IDNA_VERSION="3.2"
|
PYTHON_IDNA_VERSION="3.3"
|
||||||
PYTHON_IDNA_VERSION_MIN="2.0"
|
PYTHON_IDNA_VERSION_MIN="2.0"
|
||||||
PYTHON_IDNA_VERSION_MEX="4.0"
|
PYTHON_IDNA_VERSION_MEX="4.0"
|
||||||
PYTHON_IDNA_NAME="idna"
|
PYTHON_IDNA_NAME="idna"
|
||||||
|
|
||||||
PYTHON_CHARSET_NORMALIZER_VERSION="2.0.6"
|
PYTHON_CHARSET_NORMALIZER_VERSION="2.0.10"
|
||||||
PYTHON_CHARSET_NORMALIZER_VERSION_MIN="2.0.6"
|
PYTHON_CHARSET_NORMALIZER_VERSION_MIN="2.0.6"
|
||||||
PYTHON_CHARSET_NORMALIZER_VERSION_MEX="2.1.0" # requests uses `charset_normalizer~=2.0.0`
|
PYTHON_CHARSET_NORMALIZER_VERSION_MEX="2.1.0" # requests uses `charset_normalizer~=2.0.0`
|
||||||
PYTHON_CHARSET_NORMALIZER_NAME="charset-normalizer"
|
PYTHON_CHARSET_NORMALIZER_NAME="charset-normalizer"
|
||||||
|
|
||||||
PYTHON_URLLIB3_VERSION="1.26.7"
|
PYTHON_URLLIB3_VERSION="1.26.8"
|
||||||
PYTHON_URLLIB3_VERSION_MIN="1.0"
|
PYTHON_URLLIB3_VERSION_MIN="1.0"
|
||||||
PYTHON_URLLIB3_VERSION_MEX="2.0"
|
PYTHON_URLLIB3_VERSION_MEX="2.0"
|
||||||
PYTHON_URLLIB3_NAME="urllib3"
|
PYTHON_URLLIB3_NAME="urllib3"
|
||||||
@@ -409,17 +409,17 @@ PYTHON_CERTIFI_VERSION_MIN="2021.0"
|
|||||||
PYTHON_CERTIFI_VERSION_MEX="2023.0"
|
PYTHON_CERTIFI_VERSION_MEX="2023.0"
|
||||||
PYTHON_CERTIFI_NAME="certifi"
|
PYTHON_CERTIFI_NAME="certifi"
|
||||||
|
|
||||||
PYTHON_REQUESTS_VERSION="2.23.0"
|
PYTHON_REQUESTS_VERSION="2.27.1"
|
||||||
PYTHON_REQUESTS_VERSION_MIN="2.0"
|
PYTHON_REQUESTS_VERSION_MIN="2.0"
|
||||||
PYTHON_REQUESTS_VERSION_MEX="3.0"
|
PYTHON_REQUESTS_VERSION_MEX="3.0"
|
||||||
PYTHON_REQUESTS_NAME="requests"
|
PYTHON_REQUESTS_NAME="requests"
|
||||||
|
|
||||||
PYTHON_ZSTANDARD_VERSION="0.15.2"
|
PYTHON_ZSTANDARD_VERSION="0.16.0"
|
||||||
PYTHON_ZSTANDARD_VERSION_MIN="0.15.2"
|
PYTHON_ZSTANDARD_VERSION_MIN="0.15.2"
|
||||||
PYTHON_ZSTANDARD_VERSION_MEX="0.16.0"
|
PYTHON_ZSTANDARD_VERSION_MEX="0.20.0"
|
||||||
PYTHON_ZSTANDARD_NAME="zstandard"
|
PYTHON_ZSTANDARD_NAME="zstandard"
|
||||||
|
|
||||||
PYTHON_NUMPY_VERSION="1.21.2"
|
PYTHON_NUMPY_VERSION="1.22.0"
|
||||||
PYTHON_NUMPY_VERSION_MIN="1.14"
|
PYTHON_NUMPY_VERSION_MIN="1.14"
|
||||||
PYTHON_NUMPY_VERSION_MEX="2.0"
|
PYTHON_NUMPY_VERSION_MEX="2.0"
|
||||||
PYTHON_NUMPY_NAME="numpy"
|
PYTHON_NUMPY_NAME="numpy"
|
||||||
@@ -492,14 +492,14 @@ OIIO_SKIP=false
|
|||||||
LLVM_VERSION="12.0.0"
|
LLVM_VERSION="12.0.0"
|
||||||
LLVM_VERSION_SHORT="12.0"
|
LLVM_VERSION_SHORT="12.0"
|
||||||
LLVM_VERSION_MIN="11.0"
|
LLVM_VERSION_MIN="11.0"
|
||||||
LLVM_VERSION_MEX="13.0"
|
LLVM_VERSION_MEX="14.0"
|
||||||
LLVM_VERSION_FOUND=""
|
LLVM_VERSION_FOUND=""
|
||||||
LLVM_FORCE_BUILD=false
|
LLVM_FORCE_BUILD=false
|
||||||
LLVM_FORCE_REBUILD=false
|
LLVM_FORCE_REBUILD=false
|
||||||
LLVM_SKIP=false
|
LLVM_SKIP=false
|
||||||
|
|
||||||
# OSL needs to be compiled for now!
|
# OSL needs to be compiled for now!
|
||||||
OSL_VERSION="1.11.14.1"
|
OSL_VERSION="1.11.17.0"
|
||||||
OSL_VERSION_SHORT="1.11"
|
OSL_VERSION_SHORT="1.11"
|
||||||
OSL_VERSION_MIN="1.11"
|
OSL_VERSION_MIN="1.11"
|
||||||
OSL_VERSION_MEX="2.0"
|
OSL_VERSION_MEX="2.0"
|
||||||
@@ -1826,7 +1826,7 @@ compile_OCIO() {
|
|||||||
# Force linking against static libs
|
# Force linking against static libs
|
||||||
#rm -f $_inst/lib/*.so*
|
#rm -f $_inst/lib/*.so*
|
||||||
|
|
||||||
# Additional depencencies
|
# Additional dependencies
|
||||||
#cp ext/dist/lib/libtinyxml.a $_inst/lib
|
#cp ext/dist/lib/libtinyxml.a $_inst/lib
|
||||||
#cp ext/dist/lib/libyaml-cpp.a $_inst/lib
|
#cp ext/dist/lib/libyaml-cpp.a $_inst/lib
|
||||||
|
|
||||||
@@ -2083,9 +2083,9 @@ compile_OIIO() {
|
|||||||
cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
|
cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
|
||||||
|
|
||||||
if [ "$_with_built_openexr" = true ]; then
|
if [ "$_with_built_openexr" = true ]; then
|
||||||
cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
|
cmake_d="$cmake_d -D ILMBASE_ROOT=$INST/openexr"
|
||||||
cmake_d="$cmake_d -D OPENEXR_HOME=$INST/openexr"
|
cmake_d="$cmake_d -D OPENEXR_ROOT=$INST/openexr"
|
||||||
INFO "ILMBASE_HOME=$INST/openexr"
|
INFO "Ilmbase_ROOT=$INST/openexr"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ptex is only needed when nicholas bishop is ready
|
# ptex is only needed when nicholas bishop is ready
|
||||||
@@ -2374,9 +2374,9 @@ compile_OSL() {
|
|||||||
#~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
|
#~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
|
||||||
|
|
||||||
if [ "$_with_built_openexr" = true ]; then
|
if [ "$_with_built_openexr" = true ]; then
|
||||||
INFO "ILMBASE_HOME=$INST/openexr"
|
cmake_d="$cmake_d -D ILMBASE_ROOT=$INST/openexr"
|
||||||
cmake_d="$cmake_d -D OPENEXR_ROOT_DIR=$INST/openexr"
|
cmake_d="$cmake_d -D OPENEXR_ROOT=$INST/openexr"
|
||||||
cmake_d="$cmake_d -D ILMBASE_ROOT_DIR=$INST/openexr"
|
INFO "Ilmbase_ROOT=$INST/openexr"
|
||||||
# XXX Temp workaround... sigh, ILMBase really messed the things up by defining their custom names ON by default :(
|
# XXX Temp workaround... sigh, ILMBase really messed the things up by defining their custom names ON by default :(
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -3620,8 +3620,8 @@ compile_FFmpeg() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
./configure --cc="gcc -Wl,--as-needed" \
|
./configure --cc="gcc -Wl,--as-needed" \
|
||||||
--extra-ldflags="-pthread -static-libgcc" \
|
--extra-ldflags="-pthread" \
|
||||||
--prefix=$_inst --enable-static \
|
--prefix=$_inst --enable-shared \
|
||||||
--disable-ffplay --disable-doc \
|
--disable-ffplay --disable-doc \
|
||||||
--enable-gray \
|
--enable-gray \
|
||||||
--enable-avfilter --disable-vdpau \
|
--enable-avfilter --disable-vdpau \
|
||||||
@@ -5721,76 +5721,6 @@ install_OTHER() {
|
|||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Printing User Info
|
# Printing User Info
|
||||||
|
|
||||||
print_info_ffmpeglink_DEB() {
|
|
||||||
dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info_ffmpeglink_RPM() {
|
|
||||||
rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info_ffmpeglink_ARCH() {
|
|
||||||
pacman -Ql $_packages | grep -e ".*\/lib[^\/]\+\.so$" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info_ffmpeglink() {
|
|
||||||
# This func must only print a ';'-separated list of libs...
|
|
||||||
if [ -z "$DISTRO" ]; then
|
|
||||||
ERROR "Failed to detect distribution type"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create list of packages from which to get libs names...
|
|
||||||
_packages=""
|
|
||||||
|
|
||||||
if [ "$THEORA_USE" = true ]; then
|
|
||||||
_packages="$_packages $THEORA_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$VORBIS_USE" = true ]; then
|
|
||||||
_packages="$_packages $VORBIS_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$OGG_USE" = true ]; then
|
|
||||||
_packages="$_packages $OGG_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$XVID_USE" = true ]; then
|
|
||||||
_packages="$_packages $XVID_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$VPX_USE" = true ]; then
|
|
||||||
_packages="$_packages $VPX_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$OPUS_USE" = true ]; then
|
|
||||||
_packages="$_packages $OPUS_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$MP3LAME_USE" = true ]; then
|
|
||||||
_packages="$_packages $MP3LAME_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$X264_USE" = true ]; then
|
|
||||||
_packages="$_packages $X264_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$OPENJPEG_USE" = true ]; then
|
|
||||||
_packages="$_packages $OPENJPEG_DEV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$DISTRO" = "DEB" ]; then
|
|
||||||
print_info_ffmpeglink_DEB
|
|
||||||
elif [ "$DISTRO" = "RPM" ]; then
|
|
||||||
print_info_ffmpeglink_RPM
|
|
||||||
elif [ "$DISTRO" = "ARCH" ]; then
|
|
||||||
print_info_ffmpeglink_ARCH
|
|
||||||
# XXX TODO!
|
|
||||||
else
|
|
||||||
PRINT "<Could not determine additional link libraries needed for ffmpeg, replace this by valid list of libs...>"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info() {
|
print_info() {
|
||||||
PRINT ""
|
PRINT ""
|
||||||
PRINT ""
|
PRINT ""
|
||||||
@@ -5801,7 +5731,7 @@ print_info() {
|
|||||||
PRINT "If you're using CMake add this to your configuration flags:"
|
PRINT "If you're using CMake add this to your configuration flags:"
|
||||||
|
|
||||||
_buildargs="-U *SNDFILE* -U PYTHON* -U *BOOST* -U *Boost* -U *TBB*"
|
_buildargs="-U *SNDFILE* -U PYTHON* -U *BOOST* -U *Boost* -U *TBB*"
|
||||||
_buildargs="$_buildargs -U *OPENCOLORIO* -U *OPENEXR* -U *OPENIMAGEIO* -U *LLVM* -U *CYCLES*"
|
_buildargs="$_buildargs -U *OPENCOLORIO* -U *OPENEXR* -U *OPENIMAGEIO* -U *LLVM* -U *CLANG* -U *CYCLES*"
|
||||||
_buildargs="$_buildargs -U *OPENSUBDIV* -U *OPENVDB* -U *BLOSC* -U *COLLADA* -U *FFMPEG* -U *ALEMBIC* -U *USD*"
|
_buildargs="$_buildargs -U *OPENSUBDIV* -U *OPENVDB* -U *BLOSC* -U *COLLADA* -U *FFMPEG* -U *ALEMBIC* -U *USD*"
|
||||||
_buildargs="$_buildargs -U *EMBREE* -U *OPENIMAGEDENOISE* -U *OPENXR*"
|
_buildargs="$_buildargs -U *EMBREE* -U *OPENIMAGEDENOISE* -U *OPENXR*"
|
||||||
|
|
||||||
@@ -6002,12 +5932,10 @@ print_info() {
|
|||||||
|
|
||||||
if [ "$FFMPEG_SKIP" = false ]; then
|
if [ "$FFMPEG_SKIP" = false ]; then
|
||||||
_1="-D WITH_CODEC_FFMPEG=ON"
|
_1="-D WITH_CODEC_FFMPEG=ON"
|
||||||
_2="-D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;swresample;lzma;rt;`print_info_ffmpeglink`'"
|
|
||||||
PRINT " $_1"
|
PRINT " $_1"
|
||||||
PRINT " $_2"
|
_buildargs="$_buildargs $_1"
|
||||||
_buildargs="$_buildargs $_1 $_2"
|
|
||||||
if [ -d $INST/ffmpeg ]; then
|
if [ -d $INST/ffmpeg ]; then
|
||||||
_1="-D FFMPEG=$INST/ffmpeg"
|
_1="-D FFMPEG_ROOT_DIR=$INST/ffmpeg"
|
||||||
PRINT " $_1"
|
PRINT " $_1"
|
||||||
_buildargs="$_buildargs $_1"
|
_buildargs="$_buildargs $_1"
|
||||||
fi
|
fi
|
||||||
|
374
build_files/build_environment/patches/nanovdb.diff
Normal file
374
build_files/build_environment/patches/nanovdb.diff
Normal file
@@ -0,0 +1,374 @@
|
|||||||
|
Index: nanovdb/nanovdb/NanoVDB.h
|
||||||
|
===================================================================
|
||||||
|
--- a/nanovdb/nanovdb/NanoVDB.h (revision 62751)
|
||||||
|
+++ b/nanovdb/nanovdb/NanoVDB.h (working copy)
|
||||||
|
@@ -152,8 +152,8 @@
|
||||||
|
|
||||||
|
#endif // __CUDACC_RTC__
|
||||||
|
|
||||||
|
-#ifdef __CUDACC__
|
||||||
|
-// Only define __hostdev__ when using NVIDIA CUDA compiler
|
||||||
|
+#if defined(__CUDACC__) || defined(__HIP__)
|
||||||
|
+// Only define __hostdev__ when using NVIDIA CUDA or HIP compiler
|
||||||
|
#define __hostdev__ __host__ __device__
|
||||||
|
#else
|
||||||
|
#define __hostdev__
|
||||||
|
@@ -461,7 +461,7 @@
|
||||||
|
/// Maximum floating-point values
|
||||||
|
template<typename T>
|
||||||
|
struct Maximum;
|
||||||
|
-#ifdef __CUDA_ARCH__
|
||||||
|
+#if defined(__CUDA_ARCH__) || defined(__HIP__)
|
||||||
|
template<>
|
||||||
|
struct Maximum<int>
|
||||||
|
{
|
||||||
|
@@ -1006,10 +1006,10 @@
|
||||||
|
using Vec3i = Vec3<int>;
|
||||||
|
|
||||||
|
/// @brief Return a single precision floating-point vector of this coordinate
|
||||||
|
-Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); }
|
||||||
|
+inline __hostdev__ Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); }
|
||||||
|
|
||||||
|
/// @brief Return a double precision floating-point vector of this coordinate
|
||||||
|
-Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); }
|
||||||
|
+inline __hostdev__ Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); }
|
||||||
|
|
||||||
|
// ----------------------------> Vec4 <--------------------------------------
|
||||||
|
|
||||||
|
@@ -1820,7 +1820,7 @@
|
||||||
|
}; // Map
|
||||||
|
|
||||||
|
template<typename Mat4T>
|
||||||
|
-void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper)
|
||||||
|
+__hostdev__ void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper)
|
||||||
|
{
|
||||||
|
float * mf = mMatF, *vf = mVecF;
|
||||||
|
float* mif = mInvMatF;
|
||||||
|
@@ -2170,7 +2170,7 @@
|
||||||
|
}; // Class Grid
|
||||||
|
|
||||||
|
template<typename TreeT>
|
||||||
|
-int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const
|
||||||
|
+__hostdev__ int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const
|
||||||
|
{
|
||||||
|
for (uint32_t i = 0, n = blindDataCount(); i < n; ++i)
|
||||||
|
if (blindMetaData(i).mSemantic == semantic)
|
||||||
|
@@ -2328,7 +2328,7 @@
|
||||||
|
}; // Tree class
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
-void Tree<RootT>::extrema(ValueType& min, ValueType& max) const
|
||||||
|
+__hostdev__ void Tree<RootT>::extrema(ValueType& min, ValueType& max) const
|
||||||
|
{
|
||||||
|
min = this->root().valueMin();
|
||||||
|
max = this->root().valueMax();
|
||||||
|
@@ -2336,7 +2336,7 @@
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
template<typename NodeT>
|
||||||
|
-const NodeT* Tree<RootT>::getNode(uint32_t i) const
|
||||||
|
+__hostdev__ const NodeT* Tree<RootT>::getNode(uint32_t i) const
|
||||||
|
{
|
||||||
|
static_assert(is_same<TreeNodeT<NodeT::LEVEL>, NodeT>::value, "Tree::getNode: unvalid node type");
|
||||||
|
NANOVDB_ASSERT(i < DataType::mCount[NodeT::LEVEL]);
|
||||||
|
@@ -2345,7 +2345,7 @@
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
template<int LEVEL>
|
||||||
|
-const typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i) const
|
||||||
|
+__hostdev__ const typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i) const
|
||||||
|
{
|
||||||
|
NANOVDB_ASSERT(i < DataType::mCount[LEVEL]);
|
||||||
|
return reinterpret_cast<const TreeNodeT<LEVEL>*>(reinterpret_cast<const uint8_t*>(this) + DataType::mBytes[LEVEL]) + i;
|
||||||
|
@@ -2353,7 +2353,7 @@
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
template<typename NodeT>
|
||||||
|
-NodeT* Tree<RootT>::getNode(uint32_t i)
|
||||||
|
+__hostdev__ NodeT* Tree<RootT>::getNode(uint32_t i)
|
||||||
|
{
|
||||||
|
static_assert(is_same<TreeNodeT<NodeT::LEVEL>, NodeT>::value, "Tree::getNode: invalid node type");
|
||||||
|
NANOVDB_ASSERT(i < DataType::mCount[NodeT::LEVEL]);
|
||||||
|
@@ -2362,7 +2362,7 @@
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
template<int LEVEL>
|
||||||
|
-typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i)
|
||||||
|
+__hostdev__ typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i)
|
||||||
|
{
|
||||||
|
NANOVDB_ASSERT(i < DataType::mCount[LEVEL]);
|
||||||
|
return reinterpret_cast<TreeNodeT<LEVEL>*>(reinterpret_cast<uint8_t*>(this) + DataType::mBytes[LEVEL]) + i;
|
||||||
|
@@ -2370,7 +2370,7 @@
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
template<typename NodeT>
|
||||||
|
-uint32_t Tree<RootT>::getNodeID(const NodeT& node) const
|
||||||
|
+__hostdev__ uint32_t Tree<RootT>::getNodeID(const NodeT& node) const
|
||||||
|
{
|
||||||
|
static_assert(is_same<TreeNodeT<NodeT::LEVEL>, NodeT>::value, "Tree::getNodeID: invalid node type");
|
||||||
|
const NodeT* first = reinterpret_cast<const NodeT*>(reinterpret_cast<const uint8_t*>(this) + DataType::mBytes[NodeT::LEVEL]);
|
||||||
|
@@ -2380,7 +2380,7 @@
|
||||||
|
|
||||||
|
template<typename RootT>
|
||||||
|
template<typename NodeT>
|
||||||
|
-uint32_t Tree<RootT>::getLinearOffset(const NodeT& node) const
|
||||||
|
+__hostdev__ uint32_t Tree<RootT>::getLinearOffset(const NodeT& node) const
|
||||||
|
{
|
||||||
|
return this->getNodeID(node) + DataType::mPFSum[NodeT::LEVEL];
|
||||||
|
}
|
||||||
|
@@ -3366,7 +3366,7 @@
|
||||||
|
}; // LeafNode class
|
||||||
|
|
||||||
|
template<typename ValueT, typename CoordT, template<uint32_t> class MaskT, uint32_t LOG2DIM>
|
||||||
|
-inline void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox()
|
||||||
|
+inline __hostdev__ void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox()
|
||||||
|
{
|
||||||
|
static_assert(LOG2DIM == 3, "LeafNode::updateBBox: only supports LOGDIM = 3!");
|
||||||
|
if (!this->isActive()) return;
|
||||||
|
Index: nanovdb/nanovdb/util/SampleFromVoxels.h
|
||||||
|
===================================================================
|
||||||
|
--- a/nanovdb/nanovdb/util/SampleFromVoxels.h (revision 62751)
|
||||||
|
+++ b/nanovdb/nanovdb/util/SampleFromVoxels.h (working copy)
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
#define NANOVDB_SAMPLE_FROM_VOXELS_H_HAS_BEEN_INCLUDED
|
||||||
|
|
||||||
|
// Only define __hostdev__ when compiling as NVIDIA CUDA
|
||||||
|
-#ifdef __CUDACC__
|
||||||
|
+#if defined(__CUDACC__) || defined(__HIP__)
|
||||||
|
#define __hostdev__ __host__ __device__
|
||||||
|
#else
|
||||||
|
#include <cmath> // for floor
|
||||||
|
@@ -136,7 +136,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const
|
||||||
|
{
|
||||||
|
const CoordT ijk = Round<CoordT>(xyz);
|
||||||
|
if (ijk != mPos) {
|
||||||
|
@@ -147,7 +147,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const
|
||||||
|
{
|
||||||
|
if (ijk != mPos) {
|
||||||
|
mPos = ijk;
|
||||||
|
@@ -158,7 +158,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const
|
||||||
|
{
|
||||||
|
return mAcc.getValue(Round<CoordT>(xyz));
|
||||||
|
}
|
||||||
|
@@ -195,7 +195,7 @@
|
||||||
|
}; // TrilinearSamplerBase
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const
|
||||||
|
+__hostdev__ void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const
|
||||||
|
{
|
||||||
|
v[0][0][0] = mAcc.getValue(ijk); // i, j, k
|
||||||
|
|
||||||
|
@@ -224,7 +224,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
auto lerp = [](ValueT a, ValueT b, ValueT w){ return fma(w, b-a, a); };// = w*(b-a) + a
|
||||||
|
@@ -239,7 +239,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
||||||
|
+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
||||||
|
{
|
||||||
|
static_assert(std::is_floating_point<ValueT>::value, "TrilinearSampler::gradient requires a floating-point type");
|
||||||
|
#if 0
|
||||||
|
@@ -270,7 +270,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2])
|
||||||
|
+__hostdev__ bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2])
|
||||||
|
{
|
||||||
|
static_assert(std::is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type");
|
||||||
|
const bool less = v[0][0][0] < ValueT(0);
|
||||||
|
@@ -363,7 +363,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
this->cache(xyz);
|
||||||
|
return BaseT::sample(xyz, mVal);
|
||||||
|
@@ -370,7 +370,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const
|
||||||
|
{
|
||||||
|
return ijk == mPos ? mVal[0][0][0] : BaseT::mAcc.getValue(ijk);
|
||||||
|
}
|
||||||
|
@@ -377,7 +377,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
this->cache(xyz);
|
||||||
|
return BaseT::gradient(xyz, mVal);
|
||||||
|
@@ -393,7 +393,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
|
||||||
|
+__hostdev__ void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
|
||||||
|
{
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
if (ijk != mPos) {
|
||||||
|
@@ -406,7 +406,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
ValueT val[2][2][2];
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
@@ -418,7 +418,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
auto lerp = [](ValueT a, ValueT b, RealT w) { return a + ValueT(w) * (b - a); };
|
||||||
|
|
||||||
|
@@ -463,7 +463,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const
|
||||||
|
+inline __hostdev__ Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
ValueT val[2][2][2];
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
@@ -473,7 +473,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
ValueT val[2][2][2];
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
@@ -510,7 +510,7 @@
|
||||||
|
}; // TriquadraticSamplerBase
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const
|
||||||
|
+__hostdev__ void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const
|
||||||
|
{
|
||||||
|
CoordT p(ijk[0] - 1, 0, 0);
|
||||||
|
for (int dx = 0; dx < 3; ++dx, ++p[0]) {
|
||||||
|
@@ -526,7 +526,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3])
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3])
|
||||||
|
{
|
||||||
|
auto kernel = [](const ValueT* value, double weight)->ValueT {
|
||||||
|
return weight * (weight * (0.5f * (value[0] + value[2]) - value[1]) +
|
||||||
|
@@ -545,7 +545,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3])
|
||||||
|
+__hostdev__ bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3])
|
||||||
|
{
|
||||||
|
static_assert(std::is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type");
|
||||||
|
const bool less = v[0][0][0] < ValueT(0);
|
||||||
|
@@ -624,7 +624,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
this->cache(xyz);
|
||||||
|
return BaseT::sample(xyz, mVal);
|
||||||
|
@@ -631,7 +631,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const
|
||||||
|
{
|
||||||
|
return ijk == mPos ? mVal[1][1][1] : BaseT::mAcc.getValue(ijk);
|
||||||
|
}
|
||||||
|
@@ -646,7 +646,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
|
||||||
|
+__hostdev__ void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
|
||||||
|
{
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
if (ijk != mPos) {
|
||||||
|
@@ -657,7 +657,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
ValueT val[3][3][3];
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
@@ -667,7 +667,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
ValueT val[3][3][3];
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
@@ -710,7 +710,7 @@
|
||||||
|
}; // TricubicSampler
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
-void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const
|
||||||
|
+__hostdev__ void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const
|
||||||
|
{
|
||||||
|
auto fetch = [&](int i, int j, int k) -> ValueT& { return C[((i + 1) << 4) + ((j + 1) << 2) + k + 1]; };
|
||||||
|
|
||||||
|
@@ -929,7 +929,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const
|
||||||
|
{
|
||||||
|
this->cache(xyz);
|
||||||
|
return BaseT::sample(xyz, mC);
|
||||||
|
@@ -937,7 +937,7 @@
|
||||||
|
|
||||||
|
template<typename TreeOrAccT>
|
||||||
|
template<typename RealT, template<typename...> class Vec3T>
|
||||||
|
-void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const
|
||||||
|
+__hostdev__ void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const
|
||||||
|
{
|
||||||
|
CoordT ijk = Floor<CoordT>(xyz);
|
||||||
|
if (ijk != mPos) {
|
@@ -197,3 +197,38 @@ index 67ec0d15f..6dc3e85a0 100644
|
|||||||
#else
|
#else
|
||||||
#error Unknown architecture.
|
#error Unknown architecture.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
diff --git a/pxr/base/arch/demangle.cpp b/pxr/base/arch/demangle.cpp
|
||||||
|
index 67ec0d15f..6dc3e85a0 100644
|
||||||
|
--- a/pxr/base/arch/demangle.cpp
|
||||||
|
+++ b/pxr/base/arch/demangle.cpp
|
||||||
|
@@ -36,6 +36,7 @@
|
||||||
|
#if (ARCH_COMPILER_GCC_MAJOR == 3 && ARCH_COMPILER_GCC_MINOR >= 1) || \
|
||||||
|
ARCH_COMPILER_GCC_MAJOR > 3 || defined(ARCH_COMPILER_CLANG)
|
||||||
|
#define _AT_LEAST_GCC_THREE_ONE_OR_CLANG
|
||||||
|
+#include <cxxabi.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PXR_NAMESPACE_OPEN_SCOPE
|
||||||
|
@@ -138,7 +139,6 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_AT_LEAST_GCC_THREE_ONE_OR_CLANG)
|
||||||
|
-#include <cxxabi.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This routine doesn't work when you get to gcc3.4.
|
||||||
|
|
||||||
|
diff --git a/pxr/base/work/singularTask.h b/pxr/base/work/singularTask.h
|
||||||
|
index 67ec0d15f..6dc3e85a0 100644
|
||||||
|
--- a/pxr/base/work/singularTask.h
|
||||||
|
+++ b/pxr/base/work/singularTask.h
|
||||||
|
@@ -120,7 +120,7 @@
|
||||||
|
// case we go again to ensure the task can do whatever it
|
||||||
|
// was awakened to do. Once we successfully take the count
|
||||||
|
// to zero, we stop.
|
||||||
|
- size_t old = count;
|
||||||
|
+ std::size_t old = count;
|
||||||
|
do { _fn(); } while (
|
||||||
|
!count.compare_exchange_strong(old, 0));
|
||||||
|
});
|
||||||
|
@@ -1,64 +1,39 @@
|
|||||||
@echo off
|
@echo off
|
||||||
if NOT "%1" == "" (
|
if NOT "%1" == "" (
|
||||||
if "%1" == "2013" (
|
|
||||||
echo "Building for VS2013"
|
|
||||||
set VSVER=12.0
|
|
||||||
set VSVER_SHORT=12
|
|
||||||
set BuildDir=VS12
|
|
||||||
goto par2
|
|
||||||
)
|
|
||||||
if "%1" == "2015" (
|
|
||||||
echo "Building for VS2015"
|
|
||||||
set VSVER=14.0
|
|
||||||
set VSVER_SHORT=14
|
|
||||||
set BuildDir=VS14
|
|
||||||
goto par2
|
|
||||||
)
|
|
||||||
if "%1" == "2017" (
|
if "%1" == "2017" (
|
||||||
echo "Building for VS2017"
|
echo "Building for VS2017"
|
||||||
set VSVER=15.0
|
set VSVER=15.0
|
||||||
set VSVER_SHORT=15
|
set VSVER_SHORT=15
|
||||||
set BuildDir=VS15
|
set BuildDir=VS15
|
||||||
goto par2
|
goto par2
|
||||||
|
)
|
||||||
|
if "%1" == "2019" (
|
||||||
|
echo "Building for VS2019"
|
||||||
|
set VSVER=15.0
|
||||||
|
set VSVER_SHORT=15
|
||||||
|
set BuildDir=VS15
|
||||||
|
goto par2
|
||||||
)
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
:usage
|
:usage
|
||||||
|
|
||||||
Echo Usage build_deps 2013/2015/2017 x64/x86
|
Echo Usage build_deps 2017/2019 x64
|
||||||
goto exit
|
goto exit
|
||||||
:par2
|
:par2
|
||||||
if NOT "%2" == "" (
|
if NOT "%2" == "" (
|
||||||
if "%2" == "x86" (
|
|
||||||
echo "Building for x86"
|
|
||||||
set HARVESTROOT=Windows_vc
|
|
||||||
set ARCH=86
|
|
||||||
if "%1" == "2013" (
|
|
||||||
set CMAKE_BUILDER=Visual Studio 12 2013
|
|
||||||
)
|
|
||||||
if "%1" == "2015" (
|
|
||||||
set CMAKE_BUILDER=Visual Studio 14 2015
|
|
||||||
)
|
|
||||||
if "%1" == "2017" (
|
|
||||||
set CMAKE_BUILDER=Visual Studio 15 2017
|
|
||||||
)
|
|
||||||
|
|
||||||
goto start
|
|
||||||
)
|
|
||||||
if "%2" == "x64" (
|
if "%2" == "x64" (
|
||||||
echo "Building for x64"
|
echo "Building for x64"
|
||||||
set HARVESTROOT=Win64_vc
|
set HARVESTROOT=Win64_vc
|
||||||
set ARCH=64
|
set ARCH=64
|
||||||
if "%1" == "2013" (
|
if "%1" == "2019" (
|
||||||
set CMAKE_BUILDER=Visual Studio 12 2013 Win64
|
set CMAKE_BUILDER=Visual Studio 16 2019
|
||||||
)
|
set CMAKE_BUILD_ARCH=-A x64
|
||||||
if "%1" == "2015" (
|
|
||||||
set CMAKE_BUILDER=Visual Studio 14 2015 Win64
|
|
||||||
)
|
)
|
||||||
if "%1" == "2017" (
|
if "%1" == "2017" (
|
||||||
set CMAKE_BUILDER=Visual Studio 15 2017 Win64
|
set CMAKE_BUILDER=Visual Studio 15 2017 Win64
|
||||||
|
set CMAKE_BUILD_ARCH=
|
||||||
)
|
)
|
||||||
|
|
||||||
goto start
|
goto start
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -120,7 +95,7 @@ set path=%BUILD_DIR%\downloads\mingw\mingw64\msys\1.0\bin\;%BUILD_DIR%\downloads
|
|||||||
mkdir %STAGING%\%BuildDir%%ARCH%R
|
mkdir %STAGING%\%BuildDir%%ARCH%R
|
||||||
cd %Staging%\%BuildDir%%ARCH%R
|
cd %Staging%\%BuildDir%%ARCH%R
|
||||||
echo %DATE% %TIME% : Start > %StatusFile%
|
echo %DATE% %TIME% : Start > %StatusFile%
|
||||||
cmake -G "%CMAKE_BUILDER%" -Thost=x64 %SOURCE_DIR% -DPACKAGE_DIR=%BUILD_DIR%/packages -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DBUILD_MODE=Release -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/
|
cmake -G "%CMAKE_BUILDER%" %CMAKE_BUILD_ARCH% -Thost=x64 %SOURCE_DIR% -DPACKAGE_DIR=%BUILD_DIR%/packages -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DBUILD_MODE=Release -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/
|
||||||
echo %DATE% %TIME% : Release Configuration done >> %StatusFile%
|
echo %DATE% %TIME% : Release Configuration done >> %StatusFile%
|
||||||
if "%dobuild%" == "1" (
|
if "%dobuild%" == "1" (
|
||||||
msbuild /m "ll.vcxproj" /p:Configuration=Release /fl /flp:logfile=BlenderDeps_llvm.log;Verbosity=normal
|
msbuild /m "ll.vcxproj" /p:Configuration=Release /fl /flp:logfile=BlenderDeps_llvm.log;Verbosity=normal
|
||||||
@@ -133,7 +108,7 @@ if "%NODEBUG%" == "1" goto exit
|
|||||||
cd %BUILD_DIR%
|
cd %BUILD_DIR%
|
||||||
mkdir %STAGING%\%BuildDir%%ARCH%D
|
mkdir %STAGING%\%BuildDir%%ARCH%D
|
||||||
cd %Staging%\%BuildDir%%ARCH%D
|
cd %Staging%\%BuildDir%%ARCH%D
|
||||||
cmake -G "%CMAKE_BUILDER%" -Thost=x64 %SOURCE_DIR% -DPACKAGE_DIR=%BUILD_DIR%/packages -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DCMAKE_BUILD_TYPE=Debug -DBUILD_MODE=Debug -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/ %CMAKE_DEBUG_OPTIONS%
|
cmake -G "%CMAKE_BUILDER%" %CMAKE_BUILD_ARCH% -Thost=x64 %SOURCE_DIR% -DPACKAGE_DIR=%BUILD_DIR%/packages -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DCMAKE_BUILD_TYPE=Debug -DBUILD_MODE=Debug -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/ %CMAKE_DEBUG_OPTIONS%
|
||||||
echo %DATE% %TIME% : Debug Configuration done >> %StatusFile%
|
echo %DATE% %TIME% : Debug Configuration done >> %StatusFile%
|
||||||
if "%dobuild%" == "1" (
|
if "%dobuild%" == "1" (
|
||||||
msbuild /m "ll.vcxproj" /p:Configuration=Debug /fl /flp:logfile=BlenderDeps_llvm.log;;Verbosity=normal
|
msbuild /m "ll.vcxproj" /p:Configuration=Debug /fl /flp:logfile=BlenderDeps_llvm.log;;Verbosity=normal
|
||||||
|
83
build_files/cmake/Modules/FindBrotli.cmake
Normal file
83
build_files/cmake/Modules/FindBrotli.cmake
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# - Find Brotli library (compression for freetype/woff2).
|
||||||
|
# This module defines
|
||||||
|
# BROTLI_INCLUDE_DIRS, where to find Brotli headers, Set when
|
||||||
|
# BROTLI_INCLUDE_DIR is found.
|
||||||
|
# BROTLI_LIBRARIES, libraries to link against to use Brotli.
|
||||||
|
# BROTLI_ROOT_DIR, The base directory to search for Brotli.
|
||||||
|
# This can also be an environment variable.
|
||||||
|
# BROTLI_FOUND, If false, do not try to use Brotli.
|
||||||
|
#
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2022 Blender Foundation.
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD 3-Clause License,
|
||||||
|
# see accompanying file BSD-3-Clause-license.txt for details.
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
# If BROTLI_ROOT_DIR was defined in the environment, use it.
|
||||||
|
IF(NOT BROTLI_ROOT_DIR AND NOT $ENV{BROTLI_ROOT_DIR} STREQUAL "")
|
||||||
|
SET(BROTLI_ROOT_DIR $ENV{BROTLI_ROOT_DIR})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
SET(_BROTLI_SEARCH_DIRS
|
||||||
|
${BROTLI_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_PATH(BROTLI_INCLUDE_DIR
|
||||||
|
NAMES
|
||||||
|
brotli/decode.h
|
||||||
|
HINTS
|
||||||
|
${_BROTLI_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
include
|
||||||
|
DOC "Brotli header files"
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(BROTLI_LIBRARY_COMMON
|
||||||
|
NAMES
|
||||||
|
# Some builds use a special `-static` postfix in their static libraries names.
|
||||||
|
brotlicommon-static
|
||||||
|
brotlicommon
|
||||||
|
HINTS
|
||||||
|
${_BROTLI_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
lib64 lib lib/static
|
||||||
|
DOC "Brotli static common library"
|
||||||
|
)
|
||||||
|
FIND_LIBRARY(BROTLI_LIBRARY_DEC
|
||||||
|
NAMES
|
||||||
|
# Some builds use a special `-static` postfix in their static libraries names.
|
||||||
|
brotlidec-static
|
||||||
|
brotlidec
|
||||||
|
HINTS
|
||||||
|
${_BROTLI_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
lib64 lib lib/static
|
||||||
|
DOC "Brotli static decode library"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
IF(${BROTLI_LIBRARY_COMMON_NOTFOUND} or ${BROTLI_LIBRARY_DEC_NOTFOUND})
|
||||||
|
set(BROTLI_FOUND FALSE)
|
||||||
|
ELSE()
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set BROTLI_FOUND to TRUE if
|
||||||
|
# all listed variables are TRUE
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Brotli DEFAULT_MSG BROTLI_LIBRARY_COMMON BROTLI_LIBRARY_DEC BROTLI_INCLUDE_DIR)
|
||||||
|
|
||||||
|
IF(BROTLI_FOUND)
|
||||||
|
get_filename_component(BROTLI_LIBRARY_DIR ${BROTLI_LIBRARY_COMMON} DIRECTORY)
|
||||||
|
SET(BROTLI_INCLUDE_DIRS ${BROTLI_INCLUDE_DIR})
|
||||||
|
SET(BROTLI_LIBRARIES ${BROTLI_LIBRARY_DEC} ${BROTLI_LIBRARY_COMMON})
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED(
|
||||||
|
BROTLI_INCLUDE_DIR
|
||||||
|
BROTLI_LIBRARY_COMMON
|
||||||
|
BROTLI_LIBRARY_DEC
|
||||||
|
BROTLI_LIBRARY_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
UNSET(_BROTLI_SEARCH_DIRS)
|
@@ -33,6 +33,8 @@ if(NOT FFMPEG_FIND_COMPONENTS)
|
|||||||
avfilter
|
avfilter
|
||||||
avformat
|
avformat
|
||||||
avutil
|
avutil
|
||||||
|
swscale
|
||||||
|
swresample
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -50,9 +52,9 @@ foreach(_component ${FFMPEG_FIND_COMPONENTS})
|
|||||||
string(TOUPPER ${_component} _upper_COMPONENT)
|
string(TOUPPER ${_component} _upper_COMPONENT)
|
||||||
find_library(FFMPEG_${_upper_COMPONENT}_LIBRARY
|
find_library(FFMPEG_${_upper_COMPONENT}_LIBRARY
|
||||||
NAMES
|
NAMES
|
||||||
${_upper_COMPONENT}
|
${_component}
|
||||||
HINTS
|
HINTS
|
||||||
${LIBDIR}/ffmpeg
|
${_ffmpeg_SEARCH_DIRS}
|
||||||
PATH_SUFFIXES
|
PATH_SUFFIXES
|
||||||
lib64 lib
|
lib64 lib
|
||||||
)
|
)
|
||||||
@@ -80,4 +82,6 @@ mark_as_advanced(
|
|||||||
|
|
||||||
unset(_ffmpeg_SEARCH_DIRS)
|
unset(_ffmpeg_SEARCH_DIRS)
|
||||||
unset(_ffmpeg_LIBRARIES)
|
unset(_ffmpeg_LIBRARIES)
|
||||||
unset(_ffmpeg_INCLUDE_DIR)
|
# In cmake version 3.21 and up, we can instead use the NO_CACHE option for
|
||||||
|
# find_path so we don't need to clear it from the cache here.
|
||||||
|
unset(_ffmpeg_INCLUDE_DIR CACHE)
|
||||||
|
@@ -76,6 +76,7 @@ FIND_PATH(OSL_SHADER_DIR
|
|||||||
/usr/include/OSL/
|
/usr/include/OSL/
|
||||||
PATH_SUFFIXES
|
PATH_SUFFIXES
|
||||||
share/OSL/shaders
|
share/OSL/shaders
|
||||||
|
shaders
|
||||||
)
|
)
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set OSL_FOUND to TRUE if
|
# handle the QUIETLY and REQUIRED arguments and set OSL_FOUND to TRUE if
|
||||||
@@ -99,6 +100,7 @@ ENDIF()
|
|||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
OSL_INCLUDE_DIR
|
OSL_INCLUDE_DIR
|
||||||
|
OSL_SHADER_DIR
|
||||||
)
|
)
|
||||||
FOREACH(COMPONENT ${_osl_FIND_COMPONENTS})
|
FOREACH(COMPONENT ${_osl_FIND_COMPONENTS})
|
||||||
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||||
|
@@ -87,12 +87,14 @@ ENDIF()
|
|||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
OPENCOLORIO_INCLUDE_DIR
|
OPENCOLORIO_INCLUDE_DIR
|
||||||
OPENCOLORIO_LIBRARY
|
OPENCOLORIO_LIBRARY
|
||||||
OPENCOLORIO_OPENCOLORIO_LIBRARY
|
|
||||||
OPENCOLORIO_TINYXML_LIBRARY
|
|
||||||
OPENCOLORIO_YAML-CPP_LIBRARY
|
|
||||||
OPENCOLORIO_VERSION
|
OPENCOLORIO_VERSION
|
||||||
)
|
)
|
||||||
|
|
||||||
|
FOREACH(COMPONENT ${_opencolorio_FIND_COMPONENTS})
|
||||||
|
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||||
|
MARK_AS_ADVANCED(OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY)
|
||||||
|
ENDFOREACH()
|
||||||
|
|
||||||
UNSET(COMPONENT)
|
UNSET(COMPONENT)
|
||||||
UNSET(UPPERCOMPONENT)
|
UNSET(UPPERCOMPONENT)
|
||||||
UNSET(_opencolorio_FIND_COMPONENTS)
|
UNSET(_opencolorio_FIND_COMPONENTS)
|
||||||
|
@@ -33,14 +33,6 @@ ENDIF()
|
|||||||
# Old versions (before 2.0?) do not have any version string, just assuming this should be fine though.
|
# Old versions (before 2.0?) do not have any version string, just assuming this should be fine though.
|
||||||
SET(_openexr_libs_ver_init "2.0")
|
SET(_openexr_libs_ver_init "2.0")
|
||||||
|
|
||||||
SET(_openexr_FIND_COMPONENTS
|
|
||||||
Half
|
|
||||||
Iex
|
|
||||||
IlmImf
|
|
||||||
IlmThread
|
|
||||||
Imath
|
|
||||||
)
|
|
||||||
|
|
||||||
SET(_openexr_SEARCH_DIRS
|
SET(_openexr_SEARCH_DIRS
|
||||||
${OPENEXR_ROOT_DIR}
|
${OPENEXR_ROOT_DIR}
|
||||||
/opt/lib/openexr
|
/opt/lib/openexr
|
||||||
@@ -93,6 +85,24 @@ UNSET(_openexr_libs_ver_init)
|
|||||||
|
|
||||||
STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _openexr_libs_ver ${OPENEXR_VERSION})
|
STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _openexr_libs_ver ${OPENEXR_VERSION})
|
||||||
|
|
||||||
|
# Different library names in 3.0, and Imath and Half moved out.
|
||||||
|
IF(OPENEXR_VERSION VERSION_GREATER_EQUAL "3.0.0")
|
||||||
|
SET(_openexr_FIND_COMPONENTS
|
||||||
|
Iex
|
||||||
|
IlmThread
|
||||||
|
OpenEXR
|
||||||
|
OpenEXRCore
|
||||||
|
)
|
||||||
|
ELSE()
|
||||||
|
SET(_openexr_FIND_COMPONENTS
|
||||||
|
Half
|
||||||
|
Iex
|
||||||
|
IlmImf
|
||||||
|
IlmThread
|
||||||
|
Imath
|
||||||
|
)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
SET(_openexr_LIBRARIES)
|
SET(_openexr_LIBRARIES)
|
||||||
FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
|
FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
|
||||||
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||||
@@ -111,6 +121,57 @@ ENDFOREACH()
|
|||||||
|
|
||||||
UNSET(_openexr_libs_ver)
|
UNSET(_openexr_libs_ver)
|
||||||
|
|
||||||
|
IF(OPENEXR_VERSION VERSION_GREATER_EQUAL "3.0.0")
|
||||||
|
# For OpenEXR 3.x, we also need to find the now separate Imath library.
|
||||||
|
# For simplicity we add it to the OpenEXR includes and libraries, as we
|
||||||
|
# have no direct dependency on Imath and it's simpler to support both
|
||||||
|
# 2.x and 3.x this way.
|
||||||
|
|
||||||
|
# Find include directory
|
||||||
|
FIND_PATH(IMATH_INCLUDE_DIR
|
||||||
|
NAMES
|
||||||
|
Imath/ImathMath.h
|
||||||
|
HINTS
|
||||||
|
${_openexr_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
include
|
||||||
|
)
|
||||||
|
|
||||||
|
# Find version
|
||||||
|
FIND_FILE(_imath_config
|
||||||
|
NAMES
|
||||||
|
ImathConfig.h
|
||||||
|
PATHS
|
||||||
|
${IMATH_INCLUDE_DIR}/Imath
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
|
|
||||||
|
# Find line with version, extract string, and format for library suffix.
|
||||||
|
FILE(STRINGS "${_imath_config}" _imath_build_specification
|
||||||
|
REGEX "^[ \t]*#define[ \t]+IMATH_VERSION_STRING[ \t]+\"[.0-9]+\".*$")
|
||||||
|
STRING(REGEX REPLACE ".*#define[ \t]+IMATH_VERSION_STRING[ \t]+\"([.0-9]+)\".*"
|
||||||
|
"\\1" _imath_libs_ver ${_imath_build_specification})
|
||||||
|
STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _imath_libs_ver ${_imath_libs_ver})
|
||||||
|
|
||||||
|
# Find library, with or without version number.
|
||||||
|
FIND_LIBRARY(IMATH_LIBRARY
|
||||||
|
NAMES
|
||||||
|
Imath-${_imath_libs_ver} Imath
|
||||||
|
NAMES_PER_DIR
|
||||||
|
HINTS
|
||||||
|
${_openexr_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
lib64 lib
|
||||||
|
)
|
||||||
|
LIST(APPEND _openexr_LIBRARIES "${IMATH_LIBRARY}")
|
||||||
|
|
||||||
|
# In cmake version 3.21 and up, we can instead use the NO_CACHE option for
|
||||||
|
# FIND_FILE so we don't need to clear it from the cache here.
|
||||||
|
UNSET(_imath_config CACHE)
|
||||||
|
UNSET(_imath_libs_ver)
|
||||||
|
UNSET(_imath_build_specification)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if
|
# handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if
|
||||||
# all listed variables are TRUE
|
# all listed variables are TRUE
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
@@ -119,13 +180,25 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR DEFAULT_MSG
|
|||||||
|
|
||||||
IF(OPENEXR_FOUND)
|
IF(OPENEXR_FOUND)
|
||||||
SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES})
|
SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES})
|
||||||
# Both include paths are needed because of dummy OSL headers mixing #include <OpenEXR/foo.h> and #include <foo.h> :(
|
# Both include paths are needed because of dummy OSL headers mixing
|
||||||
SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR_INCLUDE_DIR}/OpenEXR)
|
# #include <OpenEXR/foo.h> and #include <foo.h>, as well as Alembic
|
||||||
|
# include <half.h> directly.
|
||||||
|
SET(OPENEXR_INCLUDE_DIRS
|
||||||
|
${OPENEXR_INCLUDE_DIR}
|
||||||
|
${OPENEXR_INCLUDE_DIR}/OpenEXR)
|
||||||
|
|
||||||
|
IF(OPENEXR_VERSION VERSION_GREATER_EQUAL "3.0.0")
|
||||||
|
LIST(APPEND OPENEXR_INCLUDE_DIRS
|
||||||
|
${IMATH_INCLUDE_DIR}
|
||||||
|
${IMATH_INCLUDE_DIR}/Imath)
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
OPENEXR_INCLUDE_DIR
|
OPENEXR_INCLUDE_DIR
|
||||||
OPENEXR_VERSION
|
OPENEXR_VERSION
|
||||||
|
IMATH_INCLUDE_DIR
|
||||||
|
IMATH_LIBRARY
|
||||||
)
|
)
|
||||||
FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
|
FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
|
||||||
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||||
|
@@ -110,6 +110,7 @@ ENDIF()
|
|||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
OPENIMAGEDENOISE_INCLUDE_DIR
|
OPENIMAGEDENOISE_INCLUDE_DIR
|
||||||
|
OPENIMAGEDENOISE_LIBRARY
|
||||||
)
|
)
|
||||||
|
|
||||||
FOREACH(COMPONENT ${_openimagedenoise_FIND_COMPONENTS})
|
FOREACH(COMPONENT ${_openimagedenoise_FIND_COMPONENTS})
|
||||||
|
@@ -48,6 +48,8 @@ FIND_LIBRARY(OPENIMAGEIO_LIBRARY
|
|||||||
lib64 lib
|
lib64 lib
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(_openimageio_LIBRARIES ${OPENIMAGEIO_LIBRARY})
|
||||||
|
|
||||||
FIND_FILE(OPENIMAGEIO_IDIFF
|
FIND_FILE(OPENIMAGEIO_IDIFF
|
||||||
NAMES
|
NAMES
|
||||||
idiff
|
idiff
|
||||||
@@ -57,14 +59,47 @@ FIND_FILE(OPENIMAGEIO_IDIFF
|
|||||||
bin
|
bin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Additionally find util library if needed. In old versions this library was
|
||||||
|
# included in libOpenImageIO and linking to both would duplicate symbols. In
|
||||||
|
# new versions we need to link to both.
|
||||||
|
FIND_FILE(_openimageio_export
|
||||||
|
NAMES
|
||||||
|
export.h
|
||||||
|
PATHS
|
||||||
|
${OPENIMAGEIO_INCLUDE_DIR}/OpenImageIO
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
|
|
||||||
|
# Use existence of OIIO_UTIL_API to check if it's a separate lib.
|
||||||
|
FILE(STRINGS "${_openimageio_export}" _openimageio_util_define
|
||||||
|
REGEX "^[ \t]*#[ \t]*define[ \t]+OIIO_UTIL_API.*$")
|
||||||
|
|
||||||
|
IF(_openimageio_util_define)
|
||||||
|
FIND_LIBRARY(OPENIMAGEIO_UTIL_LIBRARY
|
||||||
|
NAMES
|
||||||
|
OpenImageIO_Util
|
||||||
|
HINTS
|
||||||
|
${_openimageio_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
lib64 lib
|
||||||
|
)
|
||||||
|
|
||||||
|
LIST(APPEND _openimageio_LIBRARIES ${OPENIMAGEIO_UTIL_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# In cmake version 3.21 and up, we can instead use the NO_CACHE option for
|
||||||
|
# FIND_FILE so we don't need to clear it from the cache here.
|
||||||
|
UNSET(_openimageio_export CACHE)
|
||||||
|
UNSET(_openimageio_util_define)
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set OPENIMAGEIO_FOUND to TRUE if
|
# handle the QUIETLY and REQUIRED arguments and set OPENIMAGEIO_FOUND to TRUE if
|
||||||
# all listed variables are TRUE
|
# all listed variables are TRUE
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenImageIO DEFAULT_MSG
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenImageIO DEFAULT_MSG
|
||||||
OPENIMAGEIO_LIBRARY OPENIMAGEIO_INCLUDE_DIR)
|
_openimageio_LIBRARIES OPENIMAGEIO_INCLUDE_DIR)
|
||||||
|
|
||||||
IF(OPENIMAGEIO_FOUND)
|
IF(OPENIMAGEIO_FOUND)
|
||||||
SET(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARY})
|
SET(OPENIMAGEIO_LIBRARIES ${_openimageio_LIBRARIES})
|
||||||
SET(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO_INCLUDE_DIR})
|
SET(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO_INCLUDE_DIR})
|
||||||
IF(EXISTS ${OPENIMAGEIO_INCLUDE_DIR}/OpenImageIO/pugixml.hpp)
|
IF(EXISTS ${OPENIMAGEIO_INCLUDE_DIR}/OpenImageIO/pugixml.hpp)
|
||||||
SET(OPENIMAGEIO_PUGIXML_FOUND TRUE)
|
SET(OPENIMAGEIO_PUGIXML_FOUND TRUE)
|
||||||
@@ -78,7 +113,9 @@ ENDIF()
|
|||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
OPENIMAGEIO_INCLUDE_DIR
|
OPENIMAGEIO_INCLUDE_DIR
|
||||||
OPENIMAGEIO_LIBRARY
|
OPENIMAGEIO_LIBRARY
|
||||||
|
OPENIMAGEIO_UTIL_LIBRARY
|
||||||
OPENIMAGEIO_IDIFF
|
OPENIMAGEIO_IDIFF
|
||||||
)
|
)
|
||||||
|
|
||||||
UNSET(_openimageio_SEARCH_DIRS)
|
UNSET(_openimageio_SEARCH_DIRS)
|
||||||
|
UNSET(_openimageio_LIBRARIES)
|
||||||
|
@@ -21,7 +21,7 @@ ENDIF()
|
|||||||
|
|
||||||
SET(_optix_SEARCH_DIRS
|
SET(_optix_SEARCH_DIRS
|
||||||
${OPTIX_ROOT_DIR}
|
${OPTIX_ROOT_DIR}
|
||||||
"$ENV{PROGRAMDATA}/NVIDIA Corporation/OptiX SDK 7.0.0"
|
"$ENV{PROGRAMDATA}/NVIDIA Corporation/OptiX SDK 7.3.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
FIND_PATH(OPTIX_INCLUDE_DIR
|
FIND_PATH(OPTIX_INCLUDE_DIR
|
||||||
|
@@ -34,7 +34,7 @@ IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "")
|
|||||||
SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR})
|
SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(PYTHON_VERSION 3.9 CACHE STRING "Python Version (major and minor only)")
|
SET(PYTHON_VERSION 3.10 CACHE STRING "Python Version (major and minor only)")
|
||||||
MARK_AS_ADVANCED(PYTHON_VERSION)
|
MARK_AS_ADVANCED(PYTHON_VERSION)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -168,7 +168,7 @@ def function_parm_wash_tokens(parm):
|
|||||||
# if tokens[-1].kind == To
|
# if tokens[-1].kind == To
|
||||||
# remove trailing char
|
# remove trailing char
|
||||||
if tokens[-1].kind == TokenKind.PUNCTUATION:
|
if tokens[-1].kind == TokenKind.PUNCTUATION:
|
||||||
if tokens[-1].spelling in (",", ")", ";"):
|
if tokens[-1].spelling in {",", ")", ";"}:
|
||||||
tokens.pop()
|
tokens.pop()
|
||||||
# else:
|
# else:
|
||||||
# print(tokens[-1].spelling)
|
# print(tokens[-1].spelling)
|
||||||
@@ -179,7 +179,7 @@ def function_parm_wash_tokens(parm):
|
|||||||
t_spelling = t.spelling
|
t_spelling = t.spelling
|
||||||
ok = True
|
ok = True
|
||||||
if t_kind == TokenKind.KEYWORD:
|
if t_kind == TokenKind.KEYWORD:
|
||||||
if t_spelling in ("const", "restrict", "volatile"):
|
if t_spelling in {"const", "restrict", "volatile"}:
|
||||||
ok = False
|
ok = False
|
||||||
elif t_spelling.startswith("__"):
|
elif t_spelling.startswith("__"):
|
||||||
ok = False # __restrict
|
ok = False # __restrict
|
||||||
|
@@ -114,7 +114,7 @@ def is_c_header(filename: str) -> bool:
|
|||||||
|
|
||||||
def is_c(filename: str) -> bool:
|
def is_c(filename: str) -> bool:
|
||||||
ext = splitext(filename)[1]
|
ext = splitext(filename)[1]
|
||||||
return (ext in {".c", ".cpp", ".cxx", ".m", ".mm", ".rc", ".cc", ".inl"})
|
return (ext in {".c", ".cpp", ".cxx", ".m", ".mm", ".rc", ".cc", ".inl", ".metal"})
|
||||||
|
|
||||||
|
|
||||||
def is_c_any(filename: str) -> bool:
|
def is_c_any(filename: str) -> bool:
|
||||||
|
@@ -180,7 +180,7 @@ def create_nb_project_main():
|
|||||||
f.write(' </logicalFolder>\n')
|
f.write(' </logicalFolder>\n')
|
||||||
|
|
||||||
f.write(' </logicalFolder>\n')
|
f.write(' </logicalFolder>\n')
|
||||||
# default, but this dir is infact not in blender dir so we can ignore it
|
# default, but this dir is in fact not in blender dir so we can ignore it
|
||||||
# f.write(' <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>\n')
|
# f.write(' <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>\n')
|
||||||
f.write(r' <sourceFolderFilter>^(nbproject|__pycache__|.*\.py|.*\.html|.*\.blend)$</sourceFolderFilter>\n')
|
f.write(r' <sourceFolderFilter>^(nbproject|__pycache__|.*\.py|.*\.html|.*\.blend)$</sourceFolderFilter>\n')
|
||||||
|
|
||||||
|
@@ -19,9 +19,6 @@ set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE)
|
|||||||
set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
|
set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_COREAUDIO OFF CACHE BOOL "" FORCE)
|
set(WITH_COREAUDIO OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES OFF CACHE BOOL "" FORCE)
|
set(WITH_CYCLES OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_DEVICE_OPTIX OFF CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_CYCLES_EMBREE OFF CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_CYCLES_OSL OFF CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_DRACO OFF CACHE BOOL "" FORCE)
|
set(WITH_DRACO OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_FFTW3 OFF CACHE BOOL "" FORCE)
|
set(WITH_FFTW3 OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE)
|
set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE)
|
||||||
|
@@ -61,6 +61,7 @@ set(WITH_MEM_JEMALLOC ON CACHE BOOL "" FORCE)
|
|||||||
# platform dependent options
|
# platform dependent options
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(WITH_COREAUDIO ON CACHE BOOL "" FORCE)
|
set(WITH_COREAUDIO ON CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_CYCLES_DEVICE_METAL ON CACHE BOOL "" FORCE)
|
||||||
endif()
|
endif()
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
set(WITH_JACK ON CACHE BOOL "" FORCE)
|
set(WITH_JACK ON CACHE BOOL "" FORCE)
|
||||||
@@ -81,4 +82,5 @@ if(NOT APPLE)
|
|||||||
set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_CYCLES_HIP_BINARIES ON CACHE BOOL "" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -488,7 +488,6 @@ function(blender_add_test_executable
|
|||||||
|
|
||||||
include_directories(${includes})
|
include_directories(${includes})
|
||||||
include_directories(${includes_sys})
|
include_directories(${includes_sys})
|
||||||
setup_libdirs()
|
|
||||||
|
|
||||||
BLENDER_SRC_GTEST_EX(
|
BLENDER_SRC_GTEST_EX(
|
||||||
NAME ${name}
|
NAME ${name}
|
||||||
@@ -525,83 +524,6 @@ function(setup_heavy_lib_pool)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(SETUP_LIBDIRS)
|
|
||||||
|
|
||||||
# NOTE: For all new libraries, use absolute library paths.
|
|
||||||
# This should eventually be phased out.
|
|
||||||
# APPLE plaform uses full paths for linking libraries, and avoids link_directories.
|
|
||||||
if(NOT MSVC AND NOT APPLE)
|
|
||||||
link_directories(${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${FREETYPE_LIBPATH})
|
|
||||||
|
|
||||||
if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs
|
|
||||||
link_directories(${PYTHON_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_SDL AND NOT WITH_SDL_DYNLOAD)
|
|
||||||
link_directories(${SDL_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_CODEC_FFMPEG)
|
|
||||||
link_directories(${FFMPEG_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_IMAGE_OPENEXR)
|
|
||||||
link_directories(${OPENEXR_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_IMAGE_TIFF)
|
|
||||||
link_directories(${TIFF_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_BOOST)
|
|
||||||
link_directories(${BOOST_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENIMAGEIO)
|
|
||||||
link_directories(${OPENIMAGEIO_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENIMAGEDENOISE)
|
|
||||||
link_directories(${OPENIMAGEDENOISE_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENCOLORIO)
|
|
||||||
link_directories(${OPENCOLORIO_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENVDB)
|
|
||||||
link_directories(${OPENVDB_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENAL)
|
|
||||||
link_directories(${OPENAL_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_JACK AND NOT WITH_JACK_DYNLOAD)
|
|
||||||
link_directories(${JACK_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_PULSEAUDIO AND NOT WITH_PULSEAUDIO_DYNLOAD)
|
|
||||||
link_directories(${LIBPULSE_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_CODEC_SNDFILE)
|
|
||||||
link_directories(${LIBSNDFILE_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_FFTW3)
|
|
||||||
link_directories(${FFTW3_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENCOLLADA)
|
|
||||||
link_directories(${OPENCOLLADA_LIBPATH})
|
|
||||||
# # Never set
|
|
||||||
# link_directories(${PCRE_LIBPATH})
|
|
||||||
# link_directories(${EXPAT_LIBPATH})
|
|
||||||
endif()
|
|
||||||
if(WITH_LLVM)
|
|
||||||
link_directories(${LLVM_LIBPATH})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_ALEMBIC)
|
|
||||||
link_directories(${ALEMBIC_LIBPATH})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_GMP)
|
|
||||||
link_directories(${GMP_LIBPATH})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32 AND NOT UNIX)
|
|
||||||
link_directories(${PTHREADS_LIBPATH})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Platform specific linker flags for targets.
|
# Platform specific linker flags for targets.
|
||||||
function(setup_platform_linker_flags
|
function(setup_platform_linker_flags
|
||||||
target)
|
target)
|
||||||
@@ -1275,43 +1197,20 @@ endfunction()
|
|||||||
macro(openmp_delayload
|
macro(openmp_delayload
|
||||||
projectname
|
projectname
|
||||||
)
|
)
|
||||||
if(MSVC)
|
|
||||||
if(WITH_OPENMP)
|
|
||||||
if(MSVC_CLANG)
|
|
||||||
set(OPENMP_DLL_NAME "libomp")
|
|
||||||
elseif(MSVC_VERSION EQUAL 1800)
|
|
||||||
set(OPENMP_DLL_NAME "vcomp120")
|
|
||||||
else()
|
|
||||||
set(OPENMP_DLL_NAME "vcomp140")
|
|
||||||
endif()
|
|
||||||
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " /DELAYLOAD:${OPENMP_DLL_NAME}.dll delayimp.lib")
|
|
||||||
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_DEBUG " /DELAYLOAD:${OPENMP_DLL_NAME}d.dll delayimp.lib")
|
|
||||||
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_RELWITHDEBINFO " /DELAYLOAD:${OPENMP_DLL_NAME}.dll delayimp.lib")
|
|
||||||
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_MINSIZEREL " /DELAYLOAD:${OPENMP_DLL_NAME}.dll delayimp.lib")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
macro(blender_precompile_headers target cpp header)
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# get the name for the pch output file
|
if(WITH_OPENMP)
|
||||||
get_filename_component(pchbase ${cpp} NAME_WE)
|
if(MSVC_CLANG)
|
||||||
set(pchfinal "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${pchbase}.pch")
|
set(OPENMP_DLL_NAME "libomp")
|
||||||
|
elseif(MSVC_VERSION EQUAL 1800)
|
||||||
# mark the cpp as the one outputting the pch
|
set(OPENMP_DLL_NAME "vcomp120")
|
||||||
set_property(SOURCE ${cpp} APPEND PROPERTY OBJECT_OUTPUTS "${pchfinal}")
|
else()
|
||||||
|
set(OPENMP_DLL_NAME "vcomp140")
|
||||||
# get all sources for the target
|
endif()
|
||||||
get_target_property(sources ${target} SOURCES)
|
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " /DELAYLOAD:${OPENMP_DLL_NAME}.dll delayimp.lib")
|
||||||
|
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_DEBUG " /DELAYLOAD:${OPENMP_DLL_NAME}d.dll delayimp.lib")
|
||||||
# make all sources depend on the pch to enforce the build order
|
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_RELWITHDEBINFO " /DELAYLOAD:${OPENMP_DLL_NAME}.dll delayimp.lib")
|
||||||
foreach(src ${sources})
|
set_property(TARGET ${projectname} APPEND_STRING PROPERTY LINK_FLAGS_MINSIZEREL " /DELAYLOAD:${OPENMP_DLL_NAME}.dll delayimp.lib")
|
||||||
set_property(SOURCE ${src} APPEND PROPERTY OBJECT_DEPENDS "${pchfinal}")
|
endif()
|
||||||
endforeach()
|
|
||||||
|
|
||||||
target_sources(${target} PRIVATE ${cpp} ${header})
|
|
||||||
set_target_properties(${target} PROPERTIES COMPILE_FLAGS "/Yu${header} /Fp${pchfinal} /FI${header}")
|
|
||||||
set_source_files_properties(${cpp} PROPERTIES COMPILE_FLAGS "/Yc${header} /Fp${pchfinal}")
|
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
@@ -128,25 +128,20 @@ if(WITH_CODEC_SNDFILE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
# we use precompiled libraries for py 3.9 and up by default
|
# Use precompiled libraries by default.
|
||||||
set(PYTHON_VERSION 3.9)
|
set(PYTHON_VERSION 3.10)
|
||||||
if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
|
if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
|
||||||
# normally cached but not since we include them with blender
|
# Normally cached but not since we include them with blender.
|
||||||
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
||||||
set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}")
|
set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}")
|
||||||
set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}.a)
|
set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}.a)
|
||||||
set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
|
set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
|
||||||
# set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled
|
|
||||||
else()
|
else()
|
||||||
# module must be compiled against Python framework
|
# Module must be compiled against Python framework.
|
||||||
set(_py_framework "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}")
|
set(_py_framework "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}")
|
||||||
|
|
||||||
set(PYTHON_INCLUDE_DIR "${_py_framework}/include/python${PYTHON_VERSION}")
|
set(PYTHON_INCLUDE_DIR "${_py_framework}/include/python${PYTHON_VERSION}")
|
||||||
set(PYTHON_EXECUTABLE "${_py_framework}/bin/python${PYTHON_VERSION}")
|
set(PYTHON_EXECUTABLE "${_py_framework}/bin/python${PYTHON_VERSION}")
|
||||||
set(PYTHON_LIBPATH "${_py_framework}/lib/python${PYTHON_VERSION}")
|
set(PYTHON_LIBPATH "${_py_framework}/lib/python${PYTHON_VERSION}")
|
||||||
# set(PYTHON_LIBRARY python${PYTHON_VERSION})
|
|
||||||
# set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python") # won't build with this enabled
|
|
||||||
|
|
||||||
unset(_py_framework)
|
unset(_py_framework)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -166,13 +161,18 @@ if(WITH_FFTW3)
|
|||||||
find_package(Fftw3)
|
find_package(Fftw3)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# FreeType compiled with Brotli compression for woff2.
|
||||||
find_package(Freetype REQUIRED)
|
find_package(Freetype REQUIRED)
|
||||||
|
list(APPEND FREETYPE_LIBRARIES
|
||||||
|
${LIBDIR}/brotli/lib/libbrotlicommon-static.a
|
||||||
|
${LIBDIR}/brotli/lib/libbrotlidec-static.a)
|
||||||
|
|
||||||
if(WITH_IMAGE_OPENEXR)
|
if(WITH_IMAGE_OPENEXR)
|
||||||
find_package(OpenEXR)
|
find_package(OpenEXR)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CODEC_FFMPEG)
|
if(WITH_CODEC_FFMPEG)
|
||||||
|
set(FFMPEG_ROOT_DIR ${LIBDIR}/ffmpeg)
|
||||||
set(FFMPEG_FIND_COMPONENTS
|
set(FFMPEG_FIND_COMPONENTS
|
||||||
avcodec avdevice avformat avutil
|
avcodec avdevice avformat avutil
|
||||||
mp3lame ogg opus swresample swscale
|
mp3lame ogg opus swresample swscale
|
||||||
@@ -257,9 +257,6 @@ if(WITH_BOOST)
|
|||||||
if(WITH_INTERNATIONAL)
|
if(WITH_INTERNATIONAL)
|
||||||
list(APPEND _boost_FIND_COMPONENTS locale)
|
list(APPEND _boost_FIND_COMPONENTS locale)
|
||||||
endif()
|
endif()
|
||||||
if(WITH_CYCLES_NETWORK)
|
|
||||||
list(APPEND _boost_FIND_COMPONENTS serialization)
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENVDB)
|
if(WITH_OPENVDB)
|
||||||
list(APPEND _boost_FIND_COMPONENTS iostreams)
|
list(APPEND _boost_FIND_COMPONENTS iostreams)
|
||||||
endif()
|
endif()
|
||||||
@@ -339,7 +336,7 @@ if(WITH_LLVM)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl)
|
set(CYCLES_OSL ${LIBDIR}/osl)
|
||||||
|
|
||||||
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
|
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
|
||||||
@@ -359,7 +356,7 @@ if(WITH_CYCLES_OSL)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
|
||||||
find_package(Embree 3.8.0 REQUIRED)
|
find_package(Embree 3.8.0 REQUIRED)
|
||||||
# Increase stack size for Embree, only works for executables.
|
# Increase stack size for Embree, only works for executables.
|
||||||
if(NOT WITH_PYTHON_MODULE)
|
if(NOT WITH_PYTHON_MODULE)
|
||||||
@@ -482,8 +479,11 @@ string(APPEND PLATFORM_LINKFLAGS " -stdlib=libc++")
|
|||||||
# Suppress ranlib "has no symbols" warnings (workaround for T48250)
|
# Suppress ranlib "has no symbols" warnings (workaround for T48250)
|
||||||
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||||
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||||
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
# llvm-ranlib doesn't support this flag. Xcode's libtool does.
|
||||||
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
if(NOT ${CMAKE_RANLIB} MATCHES ".*llvm-ranlib$")
|
||||||
|
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
||||||
|
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_COMPILER_CCACHE)
|
if(WITH_COMPILER_CCACHE)
|
||||||
if(NOT CMAKE_GENERATOR STREQUAL "Xcode")
|
if(NOT CMAKE_GENERATOR STREQUAL "Xcode")
|
||||||
@@ -510,3 +510,6 @@ list(APPEND CMAKE_BUILD_RPATH "${OpenMP_LIBRARY_DIR}")
|
|||||||
|
|
||||||
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
|
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
|
||||||
list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../Resources/${BLENDER_VERSION}/lib")
|
list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../Resources/${BLENDER_VERSION}/lib")
|
||||||
|
|
||||||
|
# Same as `CFBundleIdentifier` in Info.plist.
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.blenderfoundation.blender")
|
||||||
|
@@ -96,7 +96,7 @@ else()
|
|||||||
# Detect SDK version to use.
|
# Detect SDK version to use.
|
||||||
if(NOT DEFINED OSX_SYSTEM)
|
if(NOT DEFINED OSX_SYSTEM)
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND xcrun --show-sdk-version
|
COMMAND xcrun --sdk macosx --show-sdk-version
|
||||||
OUTPUT_VARIABLE OSX_SYSTEM
|
OUTPUT_VARIABLE OSX_SYSTEM
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -18,7 +18,7 @@
|
|||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
# Libraries configuration for any *nix system including Linux and Unix.
|
# Libraries configuration for any *nix system including Linux and Unix (excluding APPLE).
|
||||||
|
|
||||||
# Detect precompiled library directory
|
# Detect precompiled library directory
|
||||||
if(NOT DEFINED LIBDIR)
|
if(NOT DEFINED LIBDIR)
|
||||||
@@ -48,6 +48,9 @@ if(NOT DEFINED LIBDIR)
|
|||||||
unset(LIBDIR_CENTOS7_ABI)
|
unset(LIBDIR_CENTOS7_ABI)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Support restoring this value once pre-compiled libraries have been handled.
|
||||||
|
set(WITH_STATIC_LIBS_INIT ${WITH_STATIC_LIBS})
|
||||||
|
|
||||||
if(EXISTS ${LIBDIR})
|
if(EXISTS ${LIBDIR})
|
||||||
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
||||||
|
|
||||||
@@ -100,7 +103,22 @@ find_package_wrapper(JPEG REQUIRED)
|
|||||||
find_package_wrapper(PNG REQUIRED)
|
find_package_wrapper(PNG REQUIRED)
|
||||||
find_package_wrapper(ZLIB REQUIRED)
|
find_package_wrapper(ZLIB REQUIRED)
|
||||||
find_package_wrapper(Zstd REQUIRED)
|
find_package_wrapper(Zstd REQUIRED)
|
||||||
find_package_wrapper(Freetype REQUIRED)
|
|
||||||
|
if(NOT WITH_SYSTEM_FREETYPE)
|
||||||
|
# FreeType compiled with Brotli compression for woff2.
|
||||||
|
find_package_wrapper(Freetype REQUIRED)
|
||||||
|
if(EXISTS ${LIBDIR})
|
||||||
|
find_package_wrapper(Brotli REQUIRED)
|
||||||
|
|
||||||
|
# NOTE: This is done on WIN32 & APPLE but fails on some Linux systems.
|
||||||
|
# See: https://devtalk.blender.org/t/22536
|
||||||
|
# So `BROTLI_LIBRARIES` need to be added directly after `FREETYPE_LIBRARIES`.
|
||||||
|
#
|
||||||
|
# list(APPEND FREETYPE_LIBRARIES
|
||||||
|
# ${BROTLI_LIBRARIES}
|
||||||
|
# )
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
# No way to set py35, remove for now.
|
# No way to set py35, remove for now.
|
||||||
@@ -178,26 +196,30 @@ endif()
|
|||||||
|
|
||||||
if(WITH_CODEC_FFMPEG)
|
if(WITH_CODEC_FFMPEG)
|
||||||
if(EXISTS ${LIBDIR})
|
if(EXISTS ${LIBDIR})
|
||||||
# For precompiled lib directory, all ffmpeg dependencies are in the same folder
|
set(FFMPEG_ROOT_DIR ${LIBDIR}/ffmpeg)
|
||||||
file(GLOB ffmpeg_libs ${LIBDIR}/ffmpeg/lib/*.a ${LIBDIR}/sndfile/lib/*.a)
|
# Override FFMPEG components to also include static library dependencies
|
||||||
set(FFMPEG ${LIBDIR}/ffmpeg CACHE PATH "FFMPEG Directory")
|
# included with precompiled libraries, and to ensure correct link order.
|
||||||
set(FFMPEG_LIBRARIES ${ffmpeg_libs} ${ffmpeg_libs} CACHE STRING "FFMPEG Libraries")
|
set(FFMPEG_FIND_COMPONENTS
|
||||||
else()
|
avformat avcodec avdevice avutil swresample swscale
|
||||||
set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
|
sndfile
|
||||||
set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
|
FLAC
|
||||||
|
mp3lame
|
||||||
|
opus
|
||||||
|
theora theoradec theoraenc
|
||||||
|
vorbis vorbisenc vorbisfile ogg
|
||||||
|
vpx
|
||||||
|
x264
|
||||||
|
xvidcore)
|
||||||
|
elseif(FFMPEG)
|
||||||
|
# Old cache variable used for root dir, convert to new standard.
|
||||||
|
set(FFMPEG_ROOT_DIR ${FFMPEG})
|
||||||
endif()
|
endif()
|
||||||
|
find_package(FFmpeg)
|
||||||
|
|
||||||
mark_as_advanced(FFMPEG)
|
if(NOT FFMPEG_FOUND)
|
||||||
|
set(WITH_CODEC_FFMPEG OFF)
|
||||||
# lame, but until we have proper find module for ffmpeg
|
message(STATUS "FFmpeg not found, disabling it")
|
||||||
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
|
|
||||||
if(EXISTS "${FFMPEG}/include/ffmpeg/")
|
|
||||||
list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
|
|
||||||
endif()
|
endif()
|
||||||
# end lameness
|
|
||||||
|
|
||||||
mark_as_advanced(FFMPEG_LIBRARIES)
|
|
||||||
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_FFTW3)
|
if(WITH_FFTW3)
|
||||||
@@ -241,7 +263,7 @@ if(WITH_INPUT_NDOF)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
||||||
if(EXISTS ${CYCLES_OSL} AND NOT OSL_ROOT)
|
if(EXISTS ${CYCLES_OSL} AND NOT OSL_ROOT)
|
||||||
set(OSL_ROOT ${CYCLES_OSL})
|
set(OSL_ROOT ${CYCLES_OSL})
|
||||||
@@ -314,7 +336,7 @@ if(WITH_BOOST)
|
|||||||
endif()
|
endif()
|
||||||
set(Boost_USE_MULTITHREADED ON)
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
set(__boost_packages filesystem regex thread date_time)
|
set(__boost_packages filesystem regex thread date_time)
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
||||||
if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
|
if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
|
||||||
list(APPEND __boost_packages wave)
|
list(APPEND __boost_packages wave)
|
||||||
else()
|
else()
|
||||||
@@ -323,9 +345,6 @@ if(WITH_BOOST)
|
|||||||
if(WITH_INTERNATIONAL)
|
if(WITH_INTERNATIONAL)
|
||||||
list(APPEND __boost_packages locale)
|
list(APPEND __boost_packages locale)
|
||||||
endif()
|
endif()
|
||||||
if(WITH_CYCLES_NETWORK)
|
|
||||||
list(APPEND __boost_packages serialization)
|
|
||||||
endif()
|
|
||||||
if(WITH_OPENVDB)
|
if(WITH_OPENVDB)
|
||||||
list(APPEND __boost_packages iostreams)
|
list(APPEND __boost_packages iostreams)
|
||||||
endif()
|
endif()
|
||||||
@@ -343,6 +362,7 @@ if(WITH_BOOST)
|
|||||||
find_package(IcuLinux)
|
find_package(IcuLinux)
|
||||||
endif()
|
endif()
|
||||||
mark_as_advanced(Boost_DIR) # why doesn't boost do this?
|
mark_as_advanced(Boost_DIR) # why doesn't boost do this?
|
||||||
|
mark_as_advanced(Boost_INCLUDE_DIR) # why doesn't boost do this?
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
|
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
|
||||||
@@ -403,7 +423,7 @@ if(WITH_OPENCOLORIO)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
|
||||||
find_package(Embree 3.8.0 REQUIRED)
|
find_package(Embree 3.8.0 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -535,6 +555,21 @@ add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
|
|||||||
#
|
#
|
||||||
# Keep last, so indirectly linked libraries don't override our own pre-compiled libs.
|
# Keep last, so indirectly linked libraries don't override our own pre-compiled libs.
|
||||||
|
|
||||||
|
if(EXISTS ${LIBDIR})
|
||||||
|
# Clear the prefix path as it causes the `LIBDIR` to override system locations.
|
||||||
|
unset(CMAKE_PREFIX_PATH)
|
||||||
|
|
||||||
|
# Since the pre-compiled `LIBDIR` directories have been handled, don't prefer static libraries.
|
||||||
|
set(WITH_STATIC_LIBS ${WITH_STATIC_LIBS_INIT})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_SYSTEM_FREETYPE)
|
||||||
|
find_package_wrapper(Freetype)
|
||||||
|
if(NOT FREETYPE_FOUND)
|
||||||
|
message(FATAL_ERROR "Failed finding system FreeType version!")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_LZO AND WITH_SYSTEM_LZO)
|
if(WITH_LZO AND WITH_SYSTEM_LZO)
|
||||||
find_package_wrapper(LZO)
|
find_package_wrapper(LZO)
|
||||||
if(NOT LZO_FOUND)
|
if(NOT LZO_FOUND)
|
||||||
@@ -647,6 +682,9 @@ endif()
|
|||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Compilers
|
# Compilers
|
||||||
|
|
||||||
|
# Only set the linker once.
|
||||||
|
set(_IS_LINKER_DEFAULT ON)
|
||||||
|
|
||||||
# GNU Compiler
|
# GNU Compiler
|
||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
# ffp-contract=off:
|
# ffp-contract=off:
|
||||||
@@ -665,26 +703,89 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
|||||||
string(PREPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO "${GCC_EXTRA_FLAGS_RELEASE} ")
|
string(PREPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO "${GCC_EXTRA_FLAGS_RELEASE} ")
|
||||||
unset(GCC_EXTRA_FLAGS_RELEASE)
|
unset(GCC_EXTRA_FLAGS_RELEASE)
|
||||||
|
|
||||||
if(WITH_LINKER_GOLD)
|
# NOTE(@campbellbarton): Eventually mold will be able to use `-fuse-ld=mold`,
|
||||||
|
# however at the moment this only works for GCC 12.1+ (unreleased at time of writing).
|
||||||
|
# So a workaround is used here "-B" which points to another path to find system commands
|
||||||
|
# such as `ld`.
|
||||||
|
if(WITH_LINKER_MOLD AND _IS_LINKER_DEFAULT)
|
||||||
|
find_program(MOLD_BIN "mold")
|
||||||
|
mark_as_advanced(MOLD_BIN)
|
||||||
|
if(NOT MOLD_BIN)
|
||||||
|
message(STATUS "The \"mold\" binary could not be found, using system linker.")
|
||||||
|
set(WITH_LINKER_MOLD OFF)
|
||||||
|
else()
|
||||||
|
# By default mold installs the binary to:
|
||||||
|
# - `{PREFIX}/bin/mold` as well as a symbolic-link in...
|
||||||
|
# - `{PREFIX}/lib/mold/ld`.
|
||||||
|
# (where `PREFIX` is typically `/usr/`).
|
||||||
|
#
|
||||||
|
# This block of code finds `{PREFIX}/lib/mold` from the `mold` binary.
|
||||||
|
# Other methods of searching for the path could also be made to work,
|
||||||
|
# we could even make our own directory and symbolic-link, however it's more
|
||||||
|
# convenient to use the one provided by mold.
|
||||||
|
#
|
||||||
|
# Use the binary path to "mold", to find the common prefix which contains "lib/mold".
|
||||||
|
# The parent directory: e.g. `/usr/bin/mold` -> `/usr/bin/`.
|
||||||
|
get_filename_component(MOLD_PREFIX "${MOLD_BIN}" DIRECTORY)
|
||||||
|
# The common prefix path: e.g. `/usr/bin/` -> `/usr/` to use as a hint.
|
||||||
|
get_filename_component(MOLD_PREFIX "${MOLD_PREFIX}" DIRECTORY)
|
||||||
|
# Find `{PREFIX}/lib/mold/ld`, store the directory component (without the `ld`).
|
||||||
|
# Then pass `-B {PREFIX}/lib/mold` to GCC so the `ld` located there overrides the default.
|
||||||
|
find_path(
|
||||||
|
MOLD_BIN_DIR "ld"
|
||||||
|
HINTS "${MOLD_PREFIX}"
|
||||||
|
# The default path is `libexec`, Arch Linux for e.g.
|
||||||
|
# replaces this with `lib` so check both.
|
||||||
|
PATH_SUFFIXES "libexec/mold" "lib/mold" "lib64/mold"
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
if(NOT MOLD_BIN_DIR)
|
||||||
|
message(STATUS
|
||||||
|
"The mold linker could not find the directory containing the linker command "
|
||||||
|
"(typically "
|
||||||
|
"\"${MOLD_PREFIX}/libexec/mold/ld\") or "
|
||||||
|
"\"${MOLD_PREFIX}/lib/mold/ld\") using system linker.")
|
||||||
|
set(WITH_LINKER_MOLD OFF)
|
||||||
|
endif()
|
||||||
|
unset(MOLD_PREFIX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_LINKER_MOLD)
|
||||||
|
# GCC will search for `ld` in this directory first.
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " -B \"${MOLD_BIN_DIR}\"")
|
||||||
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS " -B \"${MOLD_BIN_DIR}\"")
|
||||||
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS " -B \"${MOLD_BIN_DIR}\"")
|
||||||
|
set(_IS_LINKER_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
unset(MOLD_BIN)
|
||||||
|
unset(MOLD_BIN_DIR)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_LINKER_GOLD AND _IS_LINKER_DEFAULT)
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
|
COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
|
||||||
ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
||||||
if("${LD_VERSION}" MATCHES "GNU gold")
|
if("${LD_VERSION}" MATCHES "GNU gold")
|
||||||
string(APPEND CMAKE_C_FLAGS " -fuse-ld=gold")
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " -fuse-ld=gold")
|
||||||
string(APPEND CMAKE_CXX_FLAGS " -fuse-ld=gold")
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS " -fuse-ld=gold")
|
||||||
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS " -fuse-ld=gold")
|
||||||
|
set(_IS_LINKER_DEFAULT OFF)
|
||||||
else()
|
else()
|
||||||
message(STATUS "GNU gold linker isn't available, using the default system linker.")
|
message(STATUS "GNU gold linker isn't available, using the default system linker.")
|
||||||
endif()
|
endif()
|
||||||
unset(LD_VERSION)
|
unset(LD_VERSION)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_LINKER_LLD)
|
if(WITH_LINKER_LLD AND _IS_LINKER_DEFAULT)
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${CMAKE_C_COMPILER} -fuse-ld=lld -Wl,--version
|
COMMAND ${CMAKE_C_COMPILER} -fuse-ld=lld -Wl,--version
|
||||||
ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
||||||
if("${LD_VERSION}" MATCHES "LLD")
|
if("${LD_VERSION}" MATCHES "LLD")
|
||||||
string(APPEND CMAKE_C_FLAGS " -fuse-ld=lld")
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " -fuse-ld=lld")
|
||||||
string(APPEND CMAKE_CXX_FLAGS " -fuse-ld=lld")
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS " -fuse-ld=lld")
|
||||||
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS " -fuse-ld=lld")
|
||||||
|
set(_IS_LINKER_DEFAULT OFF)
|
||||||
else()
|
else()
|
||||||
message(STATUS "LLD linker isn't available, using the default system linker.")
|
message(STATUS "LLD linker isn't available, using the default system linker.")
|
||||||
endif()
|
endif()
|
||||||
@@ -694,6 +795,28 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
|||||||
# CLang is the same as GCC for now.
|
# CLang is the same as GCC for now.
|
||||||
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
|
set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
|
||||||
|
|
||||||
|
if(WITH_LINKER_MOLD AND _IS_LINKER_DEFAULT)
|
||||||
|
find_program(MOLD_BIN "mold")
|
||||||
|
mark_as_advanced(MOLD_BIN)
|
||||||
|
if(NOT MOLD_BIN)
|
||||||
|
message(STATUS "The \"mold\" binary could not be found, using system linker.")
|
||||||
|
set(WITH_LINKER_MOLD OFF)
|
||||||
|
else()
|
||||||
|
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0)
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " --ld-path=\"${MOLD_BIN}\"")
|
||||||
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS " --ld-path=\"${MOLD_BIN}\"")
|
||||||
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS " --ld-path=\"${MOLD_BIN}\"")
|
||||||
|
else()
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " -fuse-ld=\"${MOLD_BIN}\"")
|
||||||
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS " -fuse-ld=\"${MOLD_BIN}\"")
|
||||||
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS " -fuse-ld=\"${MOLD_BIN}\"")
|
||||||
|
endif()
|
||||||
|
set(_IS_LINKER_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
unset(MOLD_BIN)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Intel C++ Compiler
|
# Intel C++ Compiler
|
||||||
elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||||
# think these next two are broken
|
# think these next two are broken
|
||||||
@@ -717,6 +840,8 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
|||||||
string(APPEND PLATFORM_LINKFLAGS " -static-intel")
|
string(APPEND PLATFORM_LINKFLAGS " -static-intel")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
unset(_IS_LINKER_DEFAULT)
|
||||||
|
|
||||||
# Avoid conflicts with Mesa llvmpipe, Luxrender, and other plug-ins that may
|
# Avoid conflicts with Mesa llvmpipe, Luxrender, and other plug-ins that may
|
||||||
# use the same libraries as Blender with a different version or build options.
|
# use the same libraries as Blender with a different version or build options.
|
||||||
set(PLATFORM_LINKFLAGS
|
set(PLATFORM_LINKFLAGS
|
||||||
|
@@ -55,6 +55,10 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
message(WARNING "stripped pdb not supported with clang, disabling..")
|
message(WARNING "stripped pdb not supported with clang, disabling..")
|
||||||
set(WITH_WINDOWS_STRIPPED_PDB OFF)
|
set(WITH_WINDOWS_STRIPPED_PDB OFF)
|
||||||
endif()
|
endif()
|
||||||
|
else()
|
||||||
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.28.29921) # MSVC 2019 16.9.16
|
||||||
|
message(FATAL_ERROR "Compiler is unsupported, MSVC 2019 16.9.16 or newer is required for building blender.")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT WITH_PYTHON_MODULE)
|
if(NOT WITH_PYTHON_MODULE)
|
||||||
@@ -265,12 +269,6 @@ if(NOT DEFINED LIBDIR)
|
|||||||
elseif(MSVC_VERSION GREATER 1919)
|
elseif(MSVC_VERSION GREATER 1919)
|
||||||
message(STATUS "Visual Studio 2019 detected.")
|
message(STATUS "Visual Studio 2019 detected.")
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
||||||
elseif(MSVC_VERSION GREATER 1909)
|
|
||||||
message(STATUS "Visual Studio 2017 detected.")
|
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
|
||||||
elseif(MSVC_VERSION EQUAL 1900)
|
|
||||||
message(STATUS "Visual Studio 2015 detected.")
|
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
||||||
@@ -347,7 +345,11 @@ set(FREETYPE_INCLUDE_DIRS
|
|||||||
${LIBDIR}/freetype/include
|
${LIBDIR}/freetype/include
|
||||||
${LIBDIR}/freetype/include/freetype2
|
${LIBDIR}/freetype/include/freetype2
|
||||||
)
|
)
|
||||||
set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
|
set(FREETYPE_LIBRARIES
|
||||||
|
${LIBDIR}/freetype/lib/freetype2ST.lib
|
||||||
|
${LIBDIR}/brotli/lib/brotlidec-static.lib
|
||||||
|
${LIBDIR}/brotli/lib/brotlicommon-static.lib
|
||||||
|
)
|
||||||
windows_find_package(freetype REQUIRED)
|
windows_find_package(freetype REQUIRED)
|
||||||
|
|
||||||
if(WITH_FFTW3)
|
if(WITH_FFTW3)
|
||||||
@@ -461,7 +463,7 @@ if(WITH_JACK)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
set(PYTHON_VERSION 3.9) # CACHE STRING)
|
set(PYTHON_VERSION 3.10) # CACHE STRING)
|
||||||
|
|
||||||
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
||||||
set(PYTHON_LIBRARY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.lib)
|
set(PYTHON_LIBRARY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.lib)
|
||||||
@@ -477,7 +479,7 @@ if(WITH_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_BOOST)
|
if(WITH_BOOST)
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
||||||
set(boost_extra_libs wave)
|
set(boost_extra_libs wave)
|
||||||
endif()
|
endif()
|
||||||
if(WITH_INTERNATIONAL)
|
if(WITH_INTERNATIONAL)
|
||||||
@@ -520,7 +522,7 @@ if(WITH_BOOST)
|
|||||||
debug ${BOOST_LIBPATH}/libboost_thread-${BOOST_DEBUG_POSTFIX}
|
debug ${BOOST_LIBPATH}/libboost_thread-${BOOST_DEBUG_POSTFIX}
|
||||||
debug ${BOOST_LIBPATH}/libboost_chrono-${BOOST_DEBUG_POSTFIX}
|
debug ${BOOST_LIBPATH}/libboost_chrono-${BOOST_DEBUG_POSTFIX}
|
||||||
)
|
)
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
||||||
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
|
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
|
||||||
optimized ${BOOST_LIBPATH}/libboost_wave-${BOOST_POSTFIX}
|
optimized ${BOOST_LIBPATH}/libboost_wave-${BOOST_POSTFIX}
|
||||||
debug ${BOOST_LIBPATH}/libboost_wave-${BOOST_DEBUG_POSTFIX})
|
debug ${BOOST_LIBPATH}/libboost_wave-${BOOST_DEBUG_POSTFIX})
|
||||||
@@ -708,7 +710,7 @@ if(WITH_CODEC_SNDFILE)
|
|||||||
set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib)
|
set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
||||||
set(OSL_SHADER_DIR ${CYCLES_OSL}/shaders)
|
set(OSL_SHADER_DIR ${CYCLES_OSL}/shaders)
|
||||||
# Shaders have moved around a bit between OSL versions, check multiple locations
|
# Shaders have moved around a bit between OSL versions, check multiple locations
|
||||||
@@ -741,7 +743,7 @@ if(WITH_CYCLES_OSL)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
|
||||||
windows_find_package(Embree)
|
windows_find_package(Embree)
|
||||||
if(NOT EMBREE_FOUND)
|
if(NOT EMBREE_FOUND)
|
||||||
set(EMBREE_INCLUDE_DIRS ${LIBDIR}/embree/include)
|
set(EMBREE_INCLUDE_DIRS ${LIBDIR}/embree/include)
|
||||||
|
@@ -27,7 +27,7 @@ if(WITH_WINDOWS_BUNDLE_CRT)
|
|||||||
# Install the CRT to the blender.crt Sub folder.
|
# Install the CRT to the blender.crt Sub folder.
|
||||||
install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries)
|
install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries)
|
||||||
|
|
||||||
# Generating the manifest is a relativly expensive operation since
|
# Generating the manifest is a relatively expensive operation since
|
||||||
# it is collecting an sha1 hash for every file required. so only do
|
# it is collecting an sha1 hash for every file required. so only do
|
||||||
# this work when the libs have either changed or the manifest does
|
# this work when the libs have either changed or the manifest does
|
||||||
# not exist yet.
|
# not exist yet.
|
||||||
|
@@ -5,38 +5,38 @@
|
|||||||
update-code:
|
update-code:
|
||||||
git:
|
git:
|
||||||
submodules:
|
submodules:
|
||||||
- branch: blender-v3.0-release
|
- branch: blender-v3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: release/scripts/addons
|
path: release/scripts/addons
|
||||||
- branch: blender-v3.0-release
|
- branch: blender-v3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: release/scripts/addons_contrib
|
path: release/scripts/addons_contrib
|
||||||
- branch: blender-v3.0-release
|
- branch: blender-v3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: release/datafiles/locale
|
path: release/datafiles/locale
|
||||||
- branch: blender-v3.0-release
|
- branch: blender-v3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: source/tools
|
path: source/tools
|
||||||
svn:
|
svn:
|
||||||
libraries:
|
libraries:
|
||||||
darwin-arm64:
|
darwin-arm64:
|
||||||
branch: tags/blender-3.0-release
|
branch: tags/blender-3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: lib/darwin_arm64
|
path: lib/darwin_arm64
|
||||||
darwin-x86_64:
|
darwin-x86_64:
|
||||||
branch: tags/blender-3.0-release
|
branch: tags/blender-3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: lib/darwin
|
path: lib/darwin
|
||||||
linux-x86_64:
|
linux-x86_64:
|
||||||
branch: tags/blender-3.0-release
|
branch: tags/blender-3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: lib/linux_centos7_x86_64
|
path: lib/linux_centos7_x86_64
|
||||||
windows-amd64:
|
windows-amd64:
|
||||||
branch: tags/blender-3.0-release
|
branch: tags/blender-3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: lib/win64_vc15
|
path: lib/win64_vc15
|
||||||
tests:
|
tests:
|
||||||
branch: tags/blender-3.0-release
|
branch: tags/blender-3.1-release
|
||||||
commit_id: HEAD
|
commit_id: HEAD
|
||||||
path: lib/tests
|
path: lib/tests
|
||||||
benchmarks:
|
benchmarks:
|
||||||
|
@@ -3,9 +3,6 @@ echo No explicit msvc version requested, autodetecting version.
|
|||||||
call "%~dp0\detect_msvc2019.cmd"
|
call "%~dp0\detect_msvc2019.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2017.cmd"
|
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2022.cmd"
|
call "%~dp0\detect_msvc2022.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
|
||||||
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
if "%BUILD_VS_YEAR%"=="2022" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2022" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
|
|
||||||
|
@@ -19,12 +19,6 @@ if "%WITH_PYDEBUG%"=="1" (
|
|||||||
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
|
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%BUILD_VS_YEAR%"=="2017" (
|
|
||||||
set BUILD_GENERATOR_POST=%WINDOWS_ARCH%
|
|
||||||
) else (
|
|
||||||
set BUILD_PLATFORM_SELECT=-A %MSBUILD_PLATFORM%
|
|
||||||
)
|
|
||||||
|
|
||||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
|
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
|
||||||
|
|
||||||
if NOT EXIST %BUILD_DIR%\nul (
|
if NOT EXIST %BUILD_DIR%\nul (
|
||||||
|
@@ -37,15 +37,9 @@ set LLVM_DIR=
|
|||||||
:DetectionComplete
|
:DetectionComplete
|
||||||
set CC=%LLVM_DIR%\bin\clang-cl
|
set CC=%LLVM_DIR%\bin\clang-cl
|
||||||
set CXX=%LLVM_DIR%\bin\clang-cl
|
set CXX=%LLVM_DIR%\bin\clang-cl
|
||||||
if "%BUILD_VS_YEAR%" == "2019" (
|
rem build and tested against 2019 16.2
|
||||||
rem build and tested against 2019 16.2
|
set CFLAGS=-m64 -fmsc-version=1922
|
||||||
set CFLAGS=-m64 -fmsc-version=1922
|
set CXXFLAGS=-m64 -fmsc-version=1922
|
||||||
set CXXFLAGS=-m64 -fmsc-version=1922
|
|
||||||
) else (
|
|
||||||
rem build and tested against 2017 15.7
|
|
||||||
set CFLAGS=-m64 -fmsc-version=1914
|
|
||||||
set CXXFLAGS=-m64 -fmsc-version=1914
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%WITH_ASAN%"=="1" (
|
if "%WITH_ASAN%"=="1" (
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
set BUILD_VS_VER=15
|
|
||||||
set BUILD_VS_YEAR=2017
|
|
||||||
call "%~dp0\detect_msvc_vswhere.cmd"
|
|
@@ -3,7 +3,32 @@ for %%X in (svn.exe) do (set SVN=%%~$PATH:X)
|
|||||||
for %%X in (cmake.exe) do (set CMAKE=%%~$PATH:X)
|
for %%X in (cmake.exe) do (set CMAKE=%%~$PATH:X)
|
||||||
for %%X in (ctest.exe) do (set CTEST=%%~$PATH:X)
|
for %%X in (ctest.exe) do (set CTEST=%%~$PATH:X)
|
||||||
for %%X in (git.exe) do (set GIT=%%~$PATH:X)
|
for %%X in (git.exe) do (set GIT=%%~$PATH:X)
|
||||||
|
REM For python, default on 39 but if that does not exist also check
|
||||||
|
REM the 310,311 and 312 folders to see if those are there, it checks
|
||||||
|
REM this far ahead to ensure good lib folder compatiblity in the future.
|
||||||
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
||||||
|
if EXIST %PYTHON% (
|
||||||
|
goto detect_python_done
|
||||||
|
)
|
||||||
|
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\310\bin\python.exe
|
||||||
|
if EXIST %PYTHON% (
|
||||||
|
goto detect_python_done
|
||||||
|
)
|
||||||
|
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\311\bin\python.exe
|
||||||
|
if EXIST %PYTHON% (
|
||||||
|
goto detect_python_done
|
||||||
|
)
|
||||||
|
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\312\bin\python.exe
|
||||||
|
if EXIST %PYTHON% (
|
||||||
|
goto detect_python_done
|
||||||
|
)
|
||||||
|
|
||||||
|
if NOT EXIST %PYTHON% (
|
||||||
|
echo Warning: Python not found, there is likely an issue with the library folder
|
||||||
|
set PYTHON=""
|
||||||
|
)
|
||||||
|
|
||||||
|
:detect_python_done
|
||||||
if NOT "%verbose%" == "" (
|
if NOT "%verbose%" == "" (
|
||||||
echo svn : "%SVN%"
|
echo svn : "%SVN%"
|
||||||
echo cmake : "%CMAKE%"
|
echo cmake : "%CMAKE%"
|
||||||
@@ -11,7 +36,3 @@ if NOT "%verbose%" == "" (
|
|||||||
echo git : "%GIT%"
|
echo git : "%GIT%"
|
||||||
echo python : "%PYTHON%"
|
echo python : "%PYTHON%"
|
||||||
)
|
)
|
||||||
if "%CMAKE%" == "" (
|
|
||||||
echo Cmake not found in path, required for building, exiting...
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
@@ -9,17 +9,11 @@ exit /b 1
|
|||||||
:detect_done
|
:detect_done
|
||||||
echo found clang-format in %CF_PATH%
|
echo found clang-format in %CF_PATH%
|
||||||
|
|
||||||
if EXIST %PYTHON% (
|
if NOT EXIST %PYTHON% (
|
||||||
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
echo python not found, required for this operation
|
||||||
goto detect_python_done
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
echo python not found in lib folder
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:detect_python_done
|
|
||||||
echo found python (%PYTHON%)
|
|
||||||
|
|
||||||
set FORMAT_PATHS=%BLENDER_DIR%\source\tools\utils_maintenance\clang_format_paths.py
|
set FORMAT_PATHS=%BLENDER_DIR%\source\tools\utils_maintenance\clang_format_paths.py
|
||||||
|
|
||||||
REM The formatting script expects clang-format to be in the current PATH.
|
REM The formatting script expects clang-format to be in the current PATH.
|
||||||
|
@@ -1,18 +1,8 @@
|
|||||||
if EXIST "%PYTHON%" (
|
if NOT EXIST %PYTHON% (
|
||||||
goto detect_python_done
|
echo python not found, required for this operation
|
||||||
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
|
||||||
if EXIST %PYTHON% (
|
|
||||||
goto detect_python_done
|
|
||||||
)
|
|
||||||
|
|
||||||
echo python not found at %PYTHON%
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:detect_python_done
|
|
||||||
echo found python (%PYTHON%)
|
|
||||||
|
|
||||||
call "%~dp0\find_inkscape.cmd"
|
call "%~dp0\find_inkscape.cmd"
|
||||||
|
|
||||||
if EXIST "%INKSCAPE_BIN%" (
|
if EXIST "%INKSCAPE_BIN%" (
|
||||||
|
@@ -1,18 +1,8 @@
|
|||||||
if EXIST %PYTHON% (
|
if NOT EXIST %PYTHON% (
|
||||||
goto detect_python_done
|
echo python not found, required for this operation
|
||||||
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
|
||||||
if EXIST %PYTHON% (
|
|
||||||
goto detect_python_done
|
|
||||||
)
|
|
||||||
|
|
||||||
echo python not found at %PYTHON%
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:detect_python_done
|
|
||||||
echo found python (%PYTHON%)
|
|
||||||
|
|
||||||
call "%~dp0\find_blender.cmd"
|
call "%~dp0\find_blender.cmd"
|
||||||
|
|
||||||
if EXIST "%BLENDER_BIN%" (
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
@@ -50,14 +50,6 @@ if NOT "%1" == "" (
|
|||||||
goto ERR
|
goto ERR
|
||||||
) else if "%1" == "x64" (
|
) else if "%1" == "x64" (
|
||||||
set BUILD_ARCH=x64
|
set BUILD_ARCH=x64
|
||||||
) else if "%1" == "2017" (
|
|
||||||
set BUILD_VS_YEAR=2017
|
|
||||||
) else if "%1" == "2017pre" (
|
|
||||||
set BUILD_VS_YEAR=2017
|
|
||||||
set VSWHERE_ARGS=-prerelease
|
|
||||||
) else if "%1" == "2017b" (
|
|
||||||
set BUILD_VS_YEAR=2017
|
|
||||||
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
|
||||||
) else if "%1" == "2019" (
|
) else if "%1" == "2019" (
|
||||||
set BUILD_VS_YEAR=2019
|
set BUILD_VS_YEAR=2019
|
||||||
) else if "%1" == "2019pre" (
|
) else if "%1" == "2019pre" (
|
||||||
|
@@ -24,12 +24,12 @@ echo - nobuildinfo ^(disable buildinfo^)
|
|||||||
echo - debug ^(Build an unoptimized debuggable build^)
|
echo - debug ^(Build an unoptimized debuggable build^)
|
||||||
echo - packagename [newname] ^(override default cpack package name^)
|
echo - packagename [newname] ^(override default cpack package name^)
|
||||||
echo - builddir [newdir] ^(override default build folder^)
|
echo - builddir [newdir] ^(override default build folder^)
|
||||||
echo - 2017 ^(build with visual studio 2017^)
|
|
||||||
echo - 2017pre ^(build with visual studio 2017 pre-release^)
|
|
||||||
echo - 2017b ^(build with visual studio 2017 Build Tools^)
|
|
||||||
echo - 2019 ^(build with visual studio 2019^)
|
echo - 2019 ^(build with visual studio 2019^)
|
||||||
echo - 2019pre ^(build with visual studio 2019 pre-release^)
|
echo - 2019pre ^(build with visual studio 2019 pre-release^)
|
||||||
echo - 2019b ^(build with visual studio 2019 Build Tools^)
|
echo - 2019b ^(build with visual studio 2019 Build Tools^)
|
||||||
|
echo - 2022 ^(build with visual studio 2022^)
|
||||||
|
echo - 2022pre ^(build with visual studio 2022 pre-release^)
|
||||||
|
echo - 2022b ^(build with visual studio 2022 Build Tools^)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo Documentation Targets ^(Not associated with building^)
|
echo Documentation Targets ^(Not associated with building^)
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
|
||||||
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
if "%BUILD_VS_YEAR%"=="2022" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2022" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
|
|
||||||
|
@@ -1,10 +1,7 @@
|
|||||||
if EXIST %PYTHON% (
|
if NOT EXIST %PYTHON% (
|
||||||
goto detect_python_done
|
echo python not found, required for this operation
|
||||||
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
echo python not found in lib folder
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:detect_python_done
|
:detect_python_done
|
||||||
|
|
||||||
REM Use -B to avoid writing __pycache__ in lib directory and causing update conflicts.
|
REM Use -B to avoid writing __pycache__ in lib directory and causing update conflicts.
|
||||||
|
@@ -38,7 +38,7 @@ PROJECT_NAME = Blender
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = V3.0
|
PROJECT_NUMBER = V3.1
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
@@ -6,91 +6,87 @@
|
|||||||
* as part of the normal development process.
|
* as part of the normal development process.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup MEM Guarded memory (de)allocation
|
/* TODO: other modules.
|
||||||
* \ingroup intern
|
* - `libmv`
|
||||||
|
* - `cycles`
|
||||||
|
* - `opencolorio`
|
||||||
|
* - `opensubdiv`
|
||||||
|
* - `openvdb`
|
||||||
|
* - `quadriflow`
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup clog C-Logging (CLOG)
|
/** \defgroup intern_atomic Atomic Operations
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup ctr container
|
/** \defgroup intern_clog C-Logging (CLOG)
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup iksolver iksolver
|
/** \defgroup intern_eigen Eigen
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup itasc itasc
|
/** \defgroup intern_glew-mx GLEW with Multiple Rendering Context's
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup memutil memutil
|
/** \defgroup intern_iksolver Inverse Kinematics (Solver)
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup mikktspace mikktspace
|
/** \defgroup intern_itasc Inverse Kinematics (ITASC)
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup moto moto
|
/** \defgroup intern_libc_compat libc Compatibility For Linux
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup eigen eigen
|
/** \defgroup intern_locale Locale
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup smoke smoke
|
/** \defgroup intern_mantaflow Manta-Flow Fluid Simulation
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup string string
|
/** \defgroup intern_mem Guarded Memory (de)allocation
|
||||||
* \ingroup intern
|
* \ingroup intern */
|
||||||
*/
|
|
||||||
|
/** \defgroup intern_memutil Memory Utilities (memutil)
|
||||||
|
* \ingroup intern */
|
||||||
|
|
||||||
|
/** \defgroup intern_mikktspace MikktSpace
|
||||||
|
* \ingroup intern */
|
||||||
|
|
||||||
|
/** \defgroup intern_rigidbody Rigid-Body C-API
|
||||||
|
* \ingroup intern */
|
||||||
|
|
||||||
|
/** \defgroup intern_sky_model Sky Model
|
||||||
|
* \ingroup intern */
|
||||||
|
|
||||||
|
/** \defgroup intern_utf_conv UTF-8/16 Conversion (utfconv)
|
||||||
|
* \ingroup intern */
|
||||||
|
|
||||||
/** \defgroup audaspace Audaspace
|
/** \defgroup audaspace Audaspace
|
||||||
* \ingroup intern undoc
|
* \ingroup intern undoc
|
||||||
* \todo add to doxygen
|
* \todo add to doxygen */
|
||||||
*/
|
|
||||||
/** \defgroup audcoreaudio Audaspace CoreAudio
|
/** \defgroup audcoreaudio Audaspace CoreAudio
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audfx Audaspace FX
|
/** \defgroup audfx Audaspace FX
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audopenal Audaspace OpenAL
|
/** \defgroup audopenal Audaspace OpenAL
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audpulseaudio Audaspace PulseAudio
|
/** \defgroup audpulseaudio Audaspace PulseAudio
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audwasapi Audaspace WASAPI
|
/** \defgroup audwasapi Audaspace WASAPI
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audpython Audaspace Python
|
/** \defgroup audpython Audaspace Python
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audsdl Audaspace SDL
|
/** \defgroup audsdl Audaspace SDL
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audsrc Audaspace SRC
|
/** \defgroup audsrc Audaspace SRC
|
||||||
*
|
* \ingroup audaspace */
|
||||||
* \ingroup audaspace
|
|
||||||
*/
|
|
||||||
/** \defgroup audffmpeg Audaspace FFMpeg
|
/** \defgroup audffmpeg Audaspace FFMpeg
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audfftw Audaspace FFTW
|
/** \defgroup audfftw Audaspace FFTW
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audjack Audaspace Jack
|
/** \defgroup audjack Audaspace Jack
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
/** \defgroup audsndfile Audaspace sndfile
|
/** \defgroup audsndfile Audaspace sndfile
|
||||||
* \ingroup audaspace
|
* \ingroup audaspace */
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup GHOST GHOST API
|
/** \defgroup GHOST GHOST API
|
||||||
* \ingroup intern GUI
|
* \ingroup intern GUI
|
||||||
|
@@ -5,7 +5,8 @@
|
|||||||
/** \defgroup bmesh BMesh
|
/** \defgroup bmesh BMesh
|
||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
*/
|
*/
|
||||||
/** \defgroup compositor Compositing */
|
/** \defgroup compositor Compositing
|
||||||
|
* \ingroup blender */
|
||||||
|
|
||||||
/** \defgroup python Python
|
/** \defgroup python Python
|
||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
@@ -78,7 +79,8 @@
|
|||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup data DNA, RNA and .blend access*/
|
/** \defgroup data DNA, RNA and .blend access
|
||||||
|
* \ingroup blender */
|
||||||
|
|
||||||
/** \defgroup gpu GPU
|
/** \defgroup gpu GPU
|
||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
@@ -101,11 +103,12 @@
|
|||||||
* merged in docs.
|
* merged in docs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup gui GUI */
|
/**
|
||||||
|
* \defgroup gui GUI
|
||||||
|
* \ingroup blender */
|
||||||
|
|
||||||
/** \defgroup wm Window Manager
|
/** \defgroup wm Window Manager
|
||||||
* \ingroup blender gui
|
* \ingroup gui */
|
||||||
*/
|
|
||||||
|
|
||||||
/* ================================ */
|
/* ================================ */
|
||||||
|
|
||||||
@@ -279,7 +282,8 @@
|
|||||||
* \ingroup gui
|
* \ingroup gui
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup externformats External Formats */
|
/** \defgroup externformats External Formats
|
||||||
|
* \ingroup blender */
|
||||||
|
|
||||||
/** \defgroup collada COLLADA
|
/** \defgroup collada COLLADA
|
||||||
* \ingroup externformats
|
* \ingroup externformats
|
||||||
@@ -308,4 +312,7 @@
|
|||||||
/* ================================ */
|
/* ================================ */
|
||||||
|
|
||||||
/** \defgroup undoc Undocumented
|
/** \defgroup undoc Undocumented
|
||||||
* \brief Modules and libraries that are still undocumented, or lacking proper integration into the doxygen system, are marked in this group. */
|
*
|
||||||
|
* \brief Modules and libraries that are still undocumented,
|
||||||
|
* or lacking proper integration into the doxygen system, are marked in this group.
|
||||||
|
*/
|
||||||
|
@@ -61,7 +61,7 @@ def blender_extract_info(blender_bin: str) -> Dict[str, str]:
|
|||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
).stdout.decode(encoding="utf-8")
|
).stdout.decode(encoding="utf-8")
|
||||||
|
|
||||||
blender_version_ouput = subprocess.run(
|
blender_version_output = subprocess.run(
|
||||||
[blender_bin, "--version"],
|
[blender_bin, "--version"],
|
||||||
env=blender_env,
|
env=blender_env,
|
||||||
check=True,
|
check=True,
|
||||||
@@ -73,7 +73,7 @@ def blender_extract_info(blender_bin: str) -> Dict[str, str]:
|
|||||||
# check for each lines prefix to ensure these aren't included.
|
# check for each lines prefix to ensure these aren't included.
|
||||||
blender_version = ""
|
blender_version = ""
|
||||||
blender_date = ""
|
blender_date = ""
|
||||||
for l in blender_version_ouput.split("\n"):
|
for l in blender_version_output.split("\n"):
|
||||||
if l.startswith("Blender "):
|
if l.startswith("Blender "):
|
||||||
# Remove 'Blender' prefix.
|
# Remove 'Blender' prefix.
|
||||||
blender_version = l.split(" ", 1)[1].strip()
|
blender_version = l.split(" ", 1)[1].strip()
|
||||||
|
@@ -11,7 +11,7 @@ import queue
|
|||||||
|
|
||||||
execution_queue = queue.Queue()
|
execution_queue = queue.Queue()
|
||||||
|
|
||||||
# This function can savely be called in another thread.
|
# This function can safely be called in another thread.
|
||||||
# The function will be executed when the timer runs the next time.
|
# The function will be executed when the timer runs the next time.
|
||||||
def run_in_main_thread(function):
|
def run_in_main_thread(function):
|
||||||
execution_queue.put(function)
|
execution_queue.put(function)
|
||||||
|
@@ -8,27 +8,42 @@ def set_pose_matrices(obj, matrix_map):
|
|||||||
"Assign pose space matrices of all bones at once, ignoring constraints."
|
"Assign pose space matrices of all bones at once, ignoring constraints."
|
||||||
|
|
||||||
def rec(pbone, parent_matrix):
|
def rec(pbone, parent_matrix):
|
||||||
matrix = matrix_map[pbone.name]
|
if pbone.name in matrix_map:
|
||||||
|
matrix = matrix_map[pbone.name]
|
||||||
|
|
||||||
## Instead of:
|
## Instead of:
|
||||||
# pbone.matrix = matrix
|
# pbone.matrix = matrix
|
||||||
# bpy.context.view_layer.update()
|
# bpy.context.view_layer.update()
|
||||||
|
|
||||||
# Compute and assign local matrix, using the new parent matrix
|
# Compute and assign local matrix, using the new parent matrix
|
||||||
if pbone.parent:
|
if pbone.parent:
|
||||||
pbone.matrix_basis = pbone.bone.convert_local_to_pose(
|
pbone.matrix_basis = pbone.bone.convert_local_to_pose(
|
||||||
matrix,
|
matrix,
|
||||||
pbone.bone.matrix_local,
|
pbone.bone.matrix_local,
|
||||||
parent_matrix=parent_matrix,
|
parent_matrix=parent_matrix,
|
||||||
parent_matrix_local=pbone.parent.bone.matrix_local,
|
parent_matrix_local=pbone.parent.bone.matrix_local,
|
||||||
invert=True
|
invert=True
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
pbone.matrix_basis = pbone.bone.convert_local_to_pose(
|
||||||
|
matrix,
|
||||||
|
pbone.bone.matrix_local,
|
||||||
|
invert=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
pbone.matrix_basis = pbone.bone.convert_local_to_pose(
|
# Compute the updated pose matrix from local and new parent matrix
|
||||||
matrix,
|
if pbone.parent:
|
||||||
pbone.bone.matrix_local,
|
matrix = pbone.bone.convert_local_to_pose(
|
||||||
invert=True
|
pbone.matrix_basis,
|
||||||
)
|
pbone.bone.matrix_local,
|
||||||
|
parent_matrix=parent_matrix,
|
||||||
|
parent_matrix_local=pbone.parent.bone.matrix_local,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
matrix = pbone.bone.convert_local_to_pose(
|
||||||
|
pbone.matrix_basis,
|
||||||
|
pbone.bone.matrix_local,
|
||||||
|
)
|
||||||
|
|
||||||
# Recursively process children, passing the new matrix through
|
# Recursively process children, passing the new matrix through
|
||||||
for child in pbone.children:
|
for child in pbone.children:
|
||||||
|
@@ -42,8 +42,13 @@ class SimpleMouseOperator(bpy.types.Operator):
|
|||||||
self.y = event.mouse_y
|
self.y = event.mouse_y
|
||||||
return self.execute(context)
|
return self.execute(context)
|
||||||
|
|
||||||
|
# Only needed if you want to add into a dynamic menu
|
||||||
|
def menu_func(self, context):
|
||||||
|
self.layout.operator(SimpleMouseOperator.bl_idname, text="Simple Mouse Operator")
|
||||||
|
|
||||||
|
# Register and add to the view menu (required to also use F3 search "Simple Mouse Operator" for quick access)
|
||||||
bpy.utils.register_class(SimpleMouseOperator)
|
bpy.utils.register_class(SimpleMouseOperator)
|
||||||
|
bpy.types.VIEW3D_MT_view.append(menu_func)
|
||||||
|
|
||||||
# Test call to the newly defined operator.
|
# Test call to the newly defined operator.
|
||||||
# Here we call the operator and invoke it, meaning that the settings are taken
|
# Here we call the operator and invoke it, meaning that the settings are taken
|
||||||
|
@@ -43,7 +43,7 @@ def menu_func(self, context):
|
|||||||
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
|
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
|
||||||
|
|
||||||
|
|
||||||
# Register and add to the file selector
|
# Register and add to the file selector (required to also use F3 search "Text Export Operator" for quick access)
|
||||||
bpy.utils.register_class(ExportSomeData)
|
bpy.utils.register_class(ExportSomeData)
|
||||||
bpy.types.TOPBAR_MT_file_export.append(menu_func)
|
bpy.types.TOPBAR_MT_file_export.append(menu_func)
|
||||||
|
|
||||||
|
@@ -27,8 +27,14 @@ class DialogOperator(bpy.types.Operator):
|
|||||||
wm = context.window_manager
|
wm = context.window_manager
|
||||||
return wm.invoke_props_dialog(self)
|
return wm.invoke_props_dialog(self)
|
||||||
|
|
||||||
|
# Only needed if you want to add into a dynamic menu
|
||||||
|
def menu_func(self, context):
|
||||||
|
self.layout.operator(DialogOperator.bl_idname, text="Dialog Operator")
|
||||||
|
|
||||||
|
|
||||||
|
# Register and add to the object menu (required to also use F3 search "Dialog Operator" for quick access)
|
||||||
bpy.utils.register_class(DialogOperator)
|
bpy.utils.register_class(DialogOperator)
|
||||||
|
bpy.types.VIEW3D_MT_object.append(menu_func)
|
||||||
|
|
||||||
# Test call.
|
# Test call.
|
||||||
bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
|
bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
|
||||||
|
@@ -41,8 +41,13 @@ class CustomDrawOperator(bpy.types.Operator):
|
|||||||
|
|
||||||
col.prop(self, "my_string")
|
col.prop(self, "my_string")
|
||||||
|
|
||||||
|
# Only needed if you want to add into a dynamic menu
|
||||||
|
def menu_func(self, context):
|
||||||
|
self.layout.operator(CustomDrawOperator.bl_idname, text="Custom Draw Operator")
|
||||||
|
|
||||||
|
# Register and add to the object menu (required to also use F3 search "Custom Draw Operator" for quick access)
|
||||||
bpy.utils.register_class(CustomDrawOperator)
|
bpy.utils.register_class(CustomDrawOperator)
|
||||||
|
bpy.types.VIEW3D_MT_object.append(menu_func)
|
||||||
|
|
||||||
# test call
|
# test call
|
||||||
bpy.ops.object.custom_draw('INVOKE_DEFAULT')
|
bpy.ops.object.custom_draw('INVOKE_DEFAULT')
|
||||||
|
@@ -55,8 +55,13 @@ class ModalOperator(bpy.types.Operator):
|
|||||||
context.window_manager.modal_handler_add(self)
|
context.window_manager.modal_handler_add(self)
|
||||||
return {'RUNNING_MODAL'}
|
return {'RUNNING_MODAL'}
|
||||||
|
|
||||||
|
# Only needed if you want to add into a dynamic menu
|
||||||
|
def menu_func(self, context):
|
||||||
|
self.layout.operator(ModalOperator.bl_idname, text="Modal Operator")
|
||||||
|
|
||||||
|
# Register and add to the object menu (required to also use F3 search "Modal Operator" for quick access)
|
||||||
bpy.utils.register_class(ModalOperator)
|
bpy.utils.register_class(ModalOperator)
|
||||||
|
bpy.types.VIEW3D_MT_object.append(menu_func)
|
||||||
|
|
||||||
# test call
|
# test call
|
||||||
bpy.ops.object.modal_operator('INVOKE_DEFAULT')
|
bpy.ops.object.modal_operator('INVOKE_DEFAULT')
|
||||||
|
@@ -31,8 +31,13 @@ class SearchEnumOperator(bpy.types.Operator):
|
|||||||
context.window_manager.invoke_search_popup(self)
|
context.window_manager.invoke_search_popup(self)
|
||||||
return {'RUNNING_MODAL'}
|
return {'RUNNING_MODAL'}
|
||||||
|
|
||||||
|
# Only needed if you want to add into a dynamic menu
|
||||||
|
def menu_func(self, context):
|
||||||
|
self.layout.operator(SearchEnumOperator.bl_idname, text="Search Enum Operator")
|
||||||
|
|
||||||
|
# Register and add to the object menu (required to also use F3 search "Search Enum Operator" for quick access)
|
||||||
bpy.utils.register_class(SearchEnumOperator)
|
bpy.utils.register_class(SearchEnumOperator)
|
||||||
|
bpy.types.VIEW3D_MT_object.append(menu_func)
|
||||||
|
|
||||||
# test call
|
# test call
|
||||||
bpy.ops.object.search_enum_operator('INVOKE_DEFAULT')
|
bpy.ops.object.search_enum_operator('INVOKE_DEFAULT')
|
||||||
|
@@ -22,8 +22,13 @@ class HelloWorldOperator(bpy.types.Operator):
|
|||||||
print("Hello World")
|
print("Hello World")
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
# Only needed if you want to add into a dynamic menu
|
||||||
|
def menu_func(self, context):
|
||||||
|
self.layout.operator(HelloWorldOperator.bl_idname, text="Hello World Operator")
|
||||||
|
|
||||||
|
# Register and add to the view menu (required to also use F3 search "Hello World Operator" for quick access)
|
||||||
bpy.utils.register_class(HelloWorldOperator)
|
bpy.utils.register_class(HelloWorldOperator)
|
||||||
|
bpy.types.VIEW3D_MT_view.append(menu_func)
|
||||||
|
|
||||||
# test call to the newly defined operator
|
# test call to the newly defined operator
|
||||||
bpy.ops.wm.hello_world()
|
bpy.ops.wm.hello_world()
|
||||||
|
@@ -106,24 +106,6 @@ including advanced features.
|
|||||||
floating-point values. These values are interpreted as a plane equation.
|
floating-point values. These values are interpreted as a plane equation.
|
||||||
|
|
||||||
|
|
||||||
.. function:: glColor (red, green, blue, alpha):
|
|
||||||
|
|
||||||
B{glColor3b, glColor3d, glColor3f, glColor3i, glColor3s, glColor3ub, glColor3ui, glColor3us,
|
|
||||||
glColor4b, glColor4d, glColor4f, glColor4i, glColor4s, glColor4ub, glColor4ui, glColor4us,
|
|
||||||
glColor3bv, glColor3dv, glColor3fv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv,
|
|
||||||
glColor3usv, glColor4bv, glColor4dv, glColor4fv, glColor4iv, glColor4sv, glColor4ubv,
|
|
||||||
glColor4uiv, glColor4usv}
|
|
||||||
|
|
||||||
Set a new color.
|
|
||||||
|
|
||||||
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glColor.xhtml>`__
|
|
||||||
|
|
||||||
:type red, green, blue, alpha: Depends on function prototype.
|
|
||||||
:arg red, green, blue: Specify new red, green, and blue values for the current color.
|
|
||||||
:arg alpha: Specifies a new alpha value for the current color. Included only in the
|
|
||||||
four-argument glColor4 commands. (With '4' colors only)
|
|
||||||
|
|
||||||
|
|
||||||
.. function:: glColorMask(red, green, blue, alpha):
|
.. function:: glColorMask(red, green, blue, alpha):
|
||||||
|
|
||||||
Enable and disable writing of frame buffer color components
|
Enable and disable writing of frame buffer color components
|
||||||
|
@@ -22,7 +22,7 @@ Data Access
|
|||||||
===========
|
===========
|
||||||
|
|
||||||
The most common case for using the reference API is to find out how to access data in the blend-file.
|
The most common case for using the reference API is to find out how to access data in the blend-file.
|
||||||
Before going any further its best to be aware of ID data-blocks in Blender since you will often find properties
|
Before going any further it's best to be aware of ID data-blocks in Blender since you will often find properties
|
||||||
relative to them.
|
relative to them.
|
||||||
|
|
||||||
|
|
||||||
@@ -55,9 +55,9 @@ Start by collecting the information where the data is located.
|
|||||||
First find this setting in the interface ``Properties editor -> Object -> Transform -> Location``.
|
First find this setting in the interface ``Properties editor -> Object -> Transform -> Location``.
|
||||||
From the button context menu select *Online Python Reference*, this will link you to:
|
From the button context menu select *Online Python Reference*, this will link you to:
|
||||||
:class:`bpy.types.Object.location`.
|
:class:`bpy.types.Object.location`.
|
||||||
Being an API reference, this link often gives little more information then the tooltip, though some of the pages
|
Being an API reference, this link often gives little more information than the tooltip, though some of the pages
|
||||||
include examples (normally at the top of the page).
|
include examples (normally at the top of the page).
|
||||||
But you now know that you have to use ``.location`` and that its an array of three floats.
|
But you now know that you have to use ``.location`` and that it's an array of three floats.
|
||||||
|
|
||||||
So the next step is to find out where to access objects, go down to the bottom of the page to the references section,
|
So the next step is to find out where to access objects, go down to the bottom of the page to the references section,
|
||||||
for objects there are many references, but one of the most common places to access objects is via the context.
|
for objects there are many references, but one of the most common places to access objects is via the context.
|
||||||
@@ -154,7 +154,7 @@ The tooltip includes :class:`bpy.types.SubsurfModifier.levels` but you want the
|
|||||||
|
|
||||||
Note that the text copied won't include the ``bpy.data.collection["name"].`` component since its assumed that
|
Note that the text copied won't include the ``bpy.data.collection["name"].`` component since its assumed that
|
||||||
you won't be doing collection look-ups on every access and typically you'll want to use the context rather
|
you won't be doing collection look-ups on every access and typically you'll want to use the context rather
|
||||||
then access each :class:`bpy.types.ID` instance by name.
|
than access each :class:`bpy.types.ID` instance by name.
|
||||||
|
|
||||||
Type in the ID path into a Python console :mod:`bpy.context.active_object`.
|
Type in the ID path into a Python console :mod:`bpy.context.active_object`.
|
||||||
Include the trailing dot and don't execute the code, yet.
|
Include the trailing dot and don't execute the code, yet.
|
||||||
@@ -252,6 +252,6 @@ Each entry can be selected, then copied :kbd:`Ctrl-C`, usually to paste in the t
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Not all operators get registered for display,
|
Not all operators get registered for display,
|
||||||
zooming the view for example isn't so useful to repeat so its excluded from the output.
|
zooming the view for example isn't so useful to repeat so it's excluded from the output.
|
||||||
|
|
||||||
To display *every* operator that runs see :ref:`Show All Operators <info_show_all_operators>`.
|
To display *every* operator that runs see :ref:`Show All Operators <info_show_all_operators>`.
|
||||||
|
@@ -229,7 +229,7 @@ removing the last items first, which is faster (as explained above):
|
|||||||
|
|
||||||
|
|
||||||
This example shows a fast way of removing items,
|
This example shows a fast way of removing items,
|
||||||
for use in cases where you can alter the list order without breaking the scripts functionality.
|
for use in cases where you can alter the list order without breaking the script's functionality.
|
||||||
This works by swapping two list items, so the item you remove is always last:
|
This works by swapping two list items, so the item you remove is always last:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
@@ -278,7 +278,7 @@ Here are three ways of joining multiple strings into one string for writing.
|
|||||||
This also applies to any area of your code that involves a lot of string joining:
|
This also applies to any area of your code that involves a lot of string joining:
|
||||||
|
|
||||||
String concatenation
|
String concatenation
|
||||||
This is the slowest option, do **not** use if you can avoid it, especially when writing data in a loop.
|
This is the slowest option, do **not** use this if you can avoid it, especially when writing data in a loop.
|
||||||
|
|
||||||
>>> file.write(str1 + " " + str2 + " " + str3 + "\n")
|
>>> file.write(str1 + " " + str2 + " " + str3 + "\n")
|
||||||
|
|
||||||
@@ -288,7 +288,7 @@ String formatting
|
|||||||
>>> file.write("%s %s %s\n" % (str1, str2, str3))
|
>>> file.write("%s %s %s\n" % (str1, str2, str3))
|
||||||
|
|
||||||
String joining
|
String joining
|
||||||
Use to join a list of strings (the list may be temporary). In the following example, the strings are joined with
|
Use this to join a list of strings (the list may be temporary). In the following example, the strings are joined with
|
||||||
a space " " in between, other examples are "" or ", ".
|
a space " " in between, other examples are "" or ", ".
|
||||||
|
|
||||||
>>> file.write(" ".join((str1, str2, str3, "\n")))
|
>>> file.write(" ".join((str1, str2, str3, "\n")))
|
||||||
|
@@ -12,7 +12,7 @@ that can be troublesome and avoid practices that are known to cause instability.
|
|||||||
Using Operators
|
Using Operators
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Blender's operators are tools for users to access, that can access with Python too which is very useful.
|
Blender's operators are tools for users to access, that can be accessed with Python too which is very useful.
|
||||||
Still operators have limitations that can make them cumbersome to script.
|
Still operators have limitations that can make them cumbersome to script.
|
||||||
|
|
||||||
The main limits are:
|
The main limits are:
|
||||||
@@ -20,13 +20,13 @@ The main limits are:
|
|||||||
- Can't pass data such as objects, meshes or materials to operate on (operators use the context instead).
|
- Can't pass data such as objects, meshes or materials to operate on (operators use the context instead).
|
||||||
- The return value from calling an operator is the success (if it finished or was canceled),
|
- The return value from calling an operator is the success (if it finished or was canceled),
|
||||||
in some cases it would be more logical from an API perspective to return the result of the operation.
|
in some cases it would be more logical from an API perspective to return the result of the operation.
|
||||||
- Operators poll function can fail where an API function would raise an exception giving details on exactly why.
|
- Operators' poll function can fail where an API function would raise an exception giving details on exactly why.
|
||||||
|
|
||||||
|
|
||||||
Why does an operator's poll fail?
|
Why does an operator's poll fail?
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
When calling an operator gives an error like this:
|
When calling an operator it gives an error like this:
|
||||||
|
|
||||||
>>> bpy.ops.action.clean(threshold=0.001)
|
>>> bpy.ops.action.clean(threshold=0.001)
|
||||||
RuntimeError: Operator bpy.ops.action.clean.poll() failed, context is incorrect
|
RuntimeError: Operator bpy.ops.action.clean.poll() failed, context is incorrect
|
||||||
@@ -49,9 +49,9 @@ you should be able to find the poll function with no knowledge of C.
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Blender does have the functionality for poll functions to describe why they fail,
|
Blender does have the functionality for poll functions to describe why they fail,
|
||||||
but its currently not used much, if you're interested to help improve the API
|
but it's currently not used much, if you're interested to help improve the API
|
||||||
feel free to add calls to :class:`bpy.types.Operator.poll_message_set` (``CTX_wm_operator_poll_msg_set`` in C)
|
feel free to add calls to :class:`bpy.types.Operator.poll_message_set` (``CTX_wm_operator_poll_msg_set`` in C)
|
||||||
where its not obvious why poll fails, e.g:
|
where it's not obvious why poll fails, e.g:
|
||||||
|
|
||||||
>>> bpy.ops.gpencil.draw()
|
>>> bpy.ops.gpencil.draw()
|
||||||
RuntimeError: Operator bpy.ops.gpencil.draw.poll() Failed to find Grease Pencil data to draw into
|
RuntimeError: Operator bpy.ops.gpencil.draw.poll() Failed to find Grease Pencil data to draw into
|
||||||
@@ -107,7 +107,7 @@ In this case you need to call :class:`bpy.types.ViewLayer.update` after modifyin
|
|||||||
|
|
||||||
|
|
||||||
Now all dependent data (child objects, modifiers, drivers, etc.)
|
Now all dependent data (child objects, modifiers, drivers, etc.)
|
||||||
has been recalculated and is available to the script within active view layer.
|
have been recalculated and are available to the script within the active view layer.
|
||||||
|
|
||||||
|
|
||||||
Can I redraw during script execution?
|
Can I redraw during script execution?
|
||||||
@@ -116,13 +116,13 @@ Can I redraw during script execution?
|
|||||||
The official answer to this is no, or... *"You don't want to do that"*.
|
The official answer to this is no, or... *"You don't want to do that"*.
|
||||||
To give some background on the topic:
|
To give some background on the topic:
|
||||||
|
|
||||||
While a script executes Blender waits for it to finish and is effectively locked until its done,
|
While a script executes, Blender waits for it to finish and is effectively locked until it's done;
|
||||||
while in this state Blender won't redraw or respond to user input.
|
while in this state Blender won't redraw or respond to user input.
|
||||||
Normally this is not such a problem because scripts distributed with Blender
|
Normally this is not such a problem because scripts distributed with Blender
|
||||||
tend not to run for an extended period of time,
|
tend not to run for an extended period of time,
|
||||||
nevertheless scripts *can* take a long time to complete and it would be nice to see progress in the viewport.
|
nevertheless scripts *can* take a long time to complete and it would be nice to see progress in the viewport.
|
||||||
|
|
||||||
When tools lock Blender in a loop redraw are highly discouraged
|
Tools that lock Blender in a loop redraw are highly discouraged
|
||||||
since they conflict with Blender's ability to run multiple operators
|
since they conflict with Blender's ability to run multiple operators
|
||||||
at once and update different parts of the interface as the tool runs.
|
at once and update different parts of the interface as the tool runs.
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ So the solution here is to write a **modal** operator, which is an operator that
|
|||||||
See the modal operator template in the text editor.
|
See the modal operator template in the text editor.
|
||||||
Modal operators execute on user input or setup their own timers to run frequently,
|
Modal operators execute on user input or setup their own timers to run frequently,
|
||||||
they can handle the events or pass through to be handled by the keymap or other modal operators.
|
they can handle the events or pass through to be handled by the keymap or other modal operators.
|
||||||
Examples of a modal operators are Transform, Painting, Fly Navigation and File Select.
|
Examples of modal operators are Transform, Painting, Fly Navigation and File Select.
|
||||||
|
|
||||||
Writing modal operators takes more effort than a simple ``for`` loop
|
Writing modal operators takes more effort than a simple ``for`` loop
|
||||||
that contains draw calls but is more flexible and integrates better with Blender's design.
|
that contains draw calls but is more flexible and integrates better with Blender's design.
|
||||||
@@ -240,7 +240,7 @@ Editing
|
|||||||
Editing is where the three data types vary most.
|
Editing is where the three data types vary most.
|
||||||
|
|
||||||
- Polygons are very limited for editing,
|
- Polygons are very limited for editing,
|
||||||
changing materials and options like smooth works but for anything else
|
changing materials and options like smooth works, but for anything else
|
||||||
they are too inflexible and are only intended for storage.
|
they are too inflexible and are only intended for storage.
|
||||||
- Tessfaces should not be used for editing geometry because doing so will cause existing n-gons to be tessellated.
|
- Tessfaces should not be used for editing geometry because doing so will cause existing n-gons to be tessellated.
|
||||||
- BMesh-faces are by far the best way to manipulate geometry.
|
- BMesh-faces are by far the best way to manipulate geometry.
|
||||||
@@ -256,7 +256,7 @@ the choice mostly depends on whether the target format supports n-gons or not.
|
|||||||
- Tessfaces work well for exporting to formats which don't support n-gons,
|
- Tessfaces work well for exporting to formats which don't support n-gons,
|
||||||
in fact this is the only place where their use is encouraged.
|
in fact this is the only place where their use is encouraged.
|
||||||
- BMesh-Faces can work for exporting too but may not be necessary if polygons can be used
|
- BMesh-Faces can work for exporting too but may not be necessary if polygons can be used
|
||||||
since using BMesh gives some overhead because its not the native storage format in Object-Mode.
|
since using BMesh gives some overhead because it's not the native storage format in Object-Mode.
|
||||||
|
|
||||||
|
|
||||||
Edit Bones, Pose Bones, Bone... Bones
|
Edit Bones, Pose Bones, Bone... Bones
|
||||||
@@ -348,7 +348,7 @@ Armature Mode Switching
|
|||||||
While writing scripts that deal with armatures you may find you have to switch between modes,
|
While writing scripts that deal with armatures you may find you have to switch between modes,
|
||||||
when doing so take care when switching out of Edit-Mode not to keep references
|
when doing so take care when switching out of Edit-Mode not to keep references
|
||||||
to the edit bones or their head/tail vectors.
|
to the edit bones or their head/tail vectors.
|
||||||
Further access to these will crash Blender so its important the script
|
Further access to these will crash Blender so it's important that the script
|
||||||
clearly separates sections of the code which operate in different modes.
|
clearly separates sections of the code which operate in different modes.
|
||||||
|
|
||||||
This is mainly an issue with Edit-Mode since pose data can be manipulated without having to be in Pose-Mode,
|
This is mainly an issue with Edit-Mode since pose data can be manipulated without having to be in Pose-Mode,
|
||||||
@@ -386,11 +386,11 @@ Or with name assignment:
|
|||||||
Data names may not match the assigned values if they exceed the maximum length, are already used or an empty string.
|
Data names may not match the assigned values if they exceed the maximum length, are already used or an empty string.
|
||||||
|
|
||||||
|
|
||||||
Its better practice not to reference objects by names at all,
|
It's better practice not to reference objects by names at all,
|
||||||
once created you can store the data in a list, dictionary, on a class, etc;
|
once created you can store the data in a list, dictionary, on a class, etc;
|
||||||
there is rarely a reason to have to keep searching for the same data by name.
|
there is rarely a reason to have to keep searching for the same data by name.
|
||||||
|
|
||||||
If you do need to use name references, its best to use a dictionary to maintain
|
If you do need to use name references, it's best to use a dictionary to maintain
|
||||||
a mapping between the names of the imported assets and the newly created data,
|
a mapping between the names of the imported assets and the newly created data,
|
||||||
this way you don't run this risk of referencing existing data from the blend-file, or worse modifying it.
|
this way you don't run this risk of referencing existing data from the blend-file, or worse modifying it.
|
||||||
|
|
||||||
@@ -414,11 +414,11 @@ Library Collisions
|
|||||||
Blender keeps data names unique (:class:`bpy.types.ID.name`) so you can't name two objects,
|
Blender keeps data names unique (:class:`bpy.types.ID.name`) so you can't name two objects,
|
||||||
meshes, scenes, etc., the same by accident.
|
meshes, scenes, etc., the same by accident.
|
||||||
However, when linking in library data from another blend-file naming collisions can occur,
|
However, when linking in library data from another blend-file naming collisions can occur,
|
||||||
so its best to avoid referencing data by name at all.
|
so it's best to avoid referencing data by name at all.
|
||||||
|
|
||||||
This can be tricky at times and not even Blender handles this correctly in some case
|
This can be tricky at times and not even Blender handles this correctly in some cases
|
||||||
(when selecting the modifier object for e.g. you can't select between multiple objects with the same name),
|
(when selecting the modifier object for e.g. you can't select between multiple objects with the same name),
|
||||||
but its still good to try avoiding these problems in this area.
|
but it's still good to try avoiding these problems in this area.
|
||||||
If you need to select between local and library data, there is a feature in ``bpy.data`` members to allow for this.
|
If you need to select between local and library data, there is a feature in ``bpy.data`` members to allow for this.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
@@ -467,11 +467,11 @@ writing a script in ``latin1`` or ``iso-8859-15``.
|
|||||||
See `PEP 263 <https://www.python.org/dev/peps/pep-0263/>`__.
|
See `PEP 263 <https://www.python.org/dev/peps/pep-0263/>`__.
|
||||||
|
|
||||||
However, this complicates matters for Blender's Python API because ``.blend`` files don't have an explicit encoding.
|
However, this complicates matters for Blender's Python API because ``.blend`` files don't have an explicit encoding.
|
||||||
To avoid the problem for Python integration and script authors we have decided all strings in blend-files
|
To avoid the problem for Python integration and script authors we have decided that all strings in blend-files
|
||||||
**must** be ``UTF-8``, ``ASCII`` compatible.
|
**must** be ``UTF-8``, ``ASCII`` compatible.
|
||||||
This means assigning strings with different encodings to an object names for instance will raise an error.
|
This means assigning strings with different encodings to an object name, for instance, will raise an error.
|
||||||
|
|
||||||
Paths are an exception to this rule since the existence of non-UTF-8 paths on user's file system cannot be ignored.
|
Paths are an exception to this rule since the existence of non-UTF-8 paths on the user's file system cannot be ignored.
|
||||||
This means seemingly harmless expressions can raise errors, e.g:
|
This means seemingly harmless expressions can raise errors, e.g:
|
||||||
|
|
||||||
>>> print(bpy.data.filepath)
|
>>> print(bpy.data.filepath)
|
||||||
@@ -505,7 +505,7 @@ to keep it short about encoding problems -- here are some suggestions:
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Sometimes it's preferable to avoid string encoding issues by using bytes instead of Python strings,
|
Sometimes it's preferable to avoid string encoding issues by using bytes instead of Python strings,
|
||||||
when reading some input its less trouble to read it as binary data
|
when reading some input it's less trouble to read it as binary data
|
||||||
though you will still need to decide how to treat any strings you want to use with Blender,
|
though you will still need to decide how to treat any strings you want to use with Blender,
|
||||||
some importers do this.
|
some importers do this.
|
||||||
|
|
||||||
@@ -679,7 +679,7 @@ Undo/Redo
|
|||||||
---------
|
---------
|
||||||
|
|
||||||
For safety, you should assume that undo and redo always invalidates all :class:`bpy.types.ID`
|
For safety, you should assume that undo and redo always invalidates all :class:`bpy.types.ID`
|
||||||
instances (Object, Scene, Mesh, Light, etc.), as weel obviously as all of their sub-data.
|
instances (Object, Scene, Mesh, Light, etc.), as well obviously as all of their sub-data.
|
||||||
|
|
||||||
This example shows how you can tell undo changes the memory locations:
|
This example shows how you can tell undo changes the memory locations:
|
||||||
|
|
||||||
@@ -716,7 +716,7 @@ Tools in Blender are not allowed to modify library data.
|
|||||||
But Python does not enforce this restriction.
|
But Python does not enforce this restriction.
|
||||||
|
|
||||||
This can be useful in some cases, using a script to adjust material values for example.
|
This can be useful in some cases, using a script to adjust material values for example.
|
||||||
But its also possible to use a script to make library data point to newly created local data,
|
But it's also possible to use a script to make library data point to newly created local data,
|
||||||
which is not supported since a call to undo will remove the local data
|
which is not supported since a call to undo will remove the local data
|
||||||
but leave the library referencing it and likely crash.
|
but leave the library referencing it and likely crash.
|
||||||
|
|
||||||
@@ -728,7 +728,7 @@ Abusing RNA property callbacks
|
|||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Python-defined RNA properties can have custom callbacks. Trying to perform complex operations
|
Python-defined RNA properties can have custom callbacks. Trying to perform complex operations
|
||||||
from there, like calling an operator, may work, but is not officialy recommended nor supported.
|
from there, like calling an operator, may work, but is not officially recommended nor supported.
|
||||||
|
|
||||||
Main reason is that those callback should be very fast, but additionally, it may for example
|
Main reason is that those callback should be very fast, but additionally, it may for example
|
||||||
create issues with undo/redo system (most operators store an history step, and editing an RNA
|
create issues with undo/redo system (most operators store an history step, and editing an RNA
|
||||||
@@ -743,7 +743,7 @@ will re-allocate objects data,
|
|||||||
any references to a meshes vertices/polygons/UVs, armatures bones,
|
any references to a meshes vertices/polygons/UVs, armatures bones,
|
||||||
curves points, etc. cannot be accessed after switching mode.
|
curves points, etc. cannot be accessed after switching mode.
|
||||||
|
|
||||||
Only the reference to the data its self can be re-accessed, the following example will crash.
|
Only the reference to the data itself can be re-accessed, the following example will crash.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
@@ -81,7 +81,7 @@ but reference an external file rather than including it directly.
|
|||||||
Executing External Scripts
|
Executing External Scripts
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
This is the equivalent to running the script directly, referencing a scripts path from a two line code block.
|
This is the equivalent to running the script directly, referencing a script's path from a two line code block.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@ small script which is often useful for testing different settings quickly.
|
|||||||
|
|
||||||
The other issue with this is the script has to be in Python's module search path.
|
The other issue with this is the script has to be in Python's module search path.
|
||||||
While this is not best practice -- for testing purposes you can extend the search path,
|
While this is not best practice -- for testing purposes you can extend the search path,
|
||||||
this following example adds the current blend-files directory to the search path
|
this following example adds the current blend-file's directory to the search path
|
||||||
and then loads the script as a module.
|
and then loads the script as a module.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
@@ -302,7 +302,7 @@ Python Safety (Build Option)
|
|||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
Since it's possible to access data which has been removed (see :doc:`Gotchas <info_gotcha>`),
|
Since it's possible to access data which has been removed (see :doc:`Gotchas <info_gotcha>`),
|
||||||
can make it hard to track down the cause of crashes.
|
it can be hard to track down the cause of crashes.
|
||||||
To raise Python exceptions on accessing freed data (rather than crashing),
|
To raise Python exceptions on accessing freed data (rather than crashing),
|
||||||
enable the CMake build option ``WITH_PYTHON_SAFETY``.
|
enable the CMake build option ``WITH_PYTHON_SAFETY``.
|
||||||
This enables data tracking which makes data access about two times slower
|
This enables data tracking which makes data access about two times slower
|
||||||
|
@@ -417,7 +417,8 @@ MODULE_GROUPING = {
|
|||||||
BLENDER_REVISION = str(bpy.app.build_hash, 'utf_8')
|
BLENDER_REVISION = str(bpy.app.build_hash, 'utf_8')
|
||||||
|
|
||||||
# '2.83.0 Beta' or '2.83.0' or '2.83.1'
|
# '2.83.0 Beta' or '2.83.0' or '2.83.1'
|
||||||
BLENDER_VERSION_DOTS = bpy.app.version_string
|
BLENDER_VERSION_STRING = bpy.app.version_string
|
||||||
|
BLENDER_VERSION_DOTS = "%d.%d" % (bpy.app.version[0], bpy.app.version[1])
|
||||||
|
|
||||||
if BLENDER_REVISION != "Unknown":
|
if BLENDER_REVISION != "Unknown":
|
||||||
# SHA1 Git hash
|
# SHA1 Git hash
|
||||||
@@ -1103,6 +1104,7 @@ context_type_map = {
|
|||||||
"selectable_objects": ("Object", True),
|
"selectable_objects": ("Object", True),
|
||||||
"selected_asset_files": ("FileSelectEntry", True),
|
"selected_asset_files": ("FileSelectEntry", True),
|
||||||
"selected_bones": ("EditBone", True),
|
"selected_bones": ("EditBone", True),
|
||||||
|
"selected_editable_actions": ("Action", True),
|
||||||
"selected_editable_bones": ("EditBone", True),
|
"selected_editable_bones": ("EditBone", True),
|
||||||
"selected_editable_fcurves": ("FCurve", True),
|
"selected_editable_fcurves": ("FCurve", True),
|
||||||
"selected_editable_keyframes": ("Keyframe", True),
|
"selected_editable_keyframes": ("Keyframe", True),
|
||||||
@@ -1118,12 +1120,13 @@ context_type_map = {
|
|||||||
"selected_pose_bones": ("PoseBone", True),
|
"selected_pose_bones": ("PoseBone", True),
|
||||||
"selected_pose_bones_from_active_object": ("PoseBone", True),
|
"selected_pose_bones_from_active_object": ("PoseBone", True),
|
||||||
"selected_sequences": ("Sequence", True),
|
"selected_sequences": ("Sequence", True),
|
||||||
|
"selected_visible_actions": ("Action", True),
|
||||||
"selected_visible_fcurves": ("FCurve", True),
|
"selected_visible_fcurves": ("FCurve", True),
|
||||||
"sequences": ("Sequence", True),
|
"sequences": ("Sequence", True),
|
||||||
"soft_body": ("SoftBodyModifier", False),
|
"soft_body": ("SoftBodyModifier", False),
|
||||||
"speaker": ("Speaker", False),
|
"speaker": ("Speaker", False),
|
||||||
"texture": ("Texture", False),
|
"texture": ("Texture", False),
|
||||||
"texture_slot": ("MaterialTextureSlot", False),
|
"texture_slot": ("TextureSlot", False),
|
||||||
"texture_user": ("ID", False),
|
"texture_user": ("ID", False),
|
||||||
"texture_user_property": ("Property", False),
|
"texture_user_property": ("Property", False),
|
||||||
"ui_list": ("UIList", False),
|
"ui_list": ("UIList", False),
|
||||||
@@ -1224,7 +1227,10 @@ def pycontext2sphinx(basepath):
|
|||||||
while char_array[i] is not None:
|
while char_array[i] is not None:
|
||||||
member = ctypes.string_at(char_array[i]).decode(encoding="ascii")
|
member = ctypes.string_at(char_array[i]).decode(encoding="ascii")
|
||||||
fw(".. data:: %s\n\n" % member)
|
fw(".. data:: %s\n\n" % member)
|
||||||
member_type, is_seq = context_type_map[member]
|
try:
|
||||||
|
member_type, is_seq = context_type_map[member]
|
||||||
|
except KeyError:
|
||||||
|
raise SystemExit("Error: context key %r not found in context_type_map; update %s" % (member, __file__)) from None
|
||||||
fw(" :type: %s :class:`bpy.types.%s`\n\n" % ("sequence of " if is_seq else "", member_type))
|
fw(" :type: %s :class:`bpy.types.%s`\n\n" % ("sequence of " if is_seq else "", member_type))
|
||||||
unique.add(member)
|
unique.add(member)
|
||||||
i += 1
|
i += 1
|
||||||
@@ -1719,11 +1725,11 @@ def write_sphinx_conf_py(basepath):
|
|||||||
fw("import sys, os\n\n")
|
fw("import sys, os\n\n")
|
||||||
fw("extensions = ['sphinx.ext.intersphinx']\n\n")
|
fw("extensions = ['sphinx.ext.intersphinx']\n\n")
|
||||||
fw("intersphinx_mapping = {'blender_manual': ('https://docs.blender.org/manual/en/dev/', None)}\n\n")
|
fw("intersphinx_mapping = {'blender_manual': ('https://docs.blender.org/manual/en/dev/', None)}\n\n")
|
||||||
fw("project = 'Blender %s Python API'\n" % BLENDER_VERSION_DOTS)
|
fw("project = 'Blender %s Python API'\n" % BLENDER_VERSION_STRING)
|
||||||
fw("master_doc = 'index'\n")
|
fw("master_doc = 'index'\n")
|
||||||
fw("copyright = u'Blender Foundation'\n")
|
fw("copyright = u'Blender Foundation'\n")
|
||||||
fw("version = '%s'\n" % BLENDER_VERSION_HASH)
|
fw("version = '%s'\n" % BLENDER_VERSION_DOTS)
|
||||||
fw("release = '%s'\n" % BLENDER_VERSION_HASH)
|
fw("release = '%s'\n" % BLENDER_VERSION_DOTS)
|
||||||
|
|
||||||
# Quiet file not in table-of-contents warnings.
|
# Quiet file not in table-of-contents warnings.
|
||||||
fw("exclude_patterns = [\n")
|
fw("exclude_patterns = [\n")
|
||||||
@@ -1744,6 +1750,7 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
fw("if html_theme == 'sphinx_rtd_theme':\n")
|
fw("if html_theme == 'sphinx_rtd_theme':\n")
|
||||||
fw(" html_theme_options = {\n")
|
fw(" html_theme_options = {\n")
|
||||||
|
fw(" 'display_version': False,\n")
|
||||||
# fw(" 'analytics_id': '',\n")
|
# fw(" 'analytics_id': '',\n")
|
||||||
# fw(" 'collapse_navigation': True,\n")
|
# fw(" 'collapse_navigation': True,\n")
|
||||||
fw(" 'sticky_navigation': False,\n")
|
fw(" 'sticky_navigation': False,\n")
|
||||||
@@ -1757,12 +1764,18 @@ except ModuleNotFoundError:
|
|||||||
fw("html_show_sphinx = False\n")
|
fw("html_show_sphinx = False\n")
|
||||||
fw("html_baseurl = 'https://docs.blender.org/api/current/'\n")
|
fw("html_baseurl = 'https://docs.blender.org/api/current/'\n")
|
||||||
fw("html_use_opensearch = 'https://docs.blender.org/api/current'\n")
|
fw("html_use_opensearch = 'https://docs.blender.org/api/current'\n")
|
||||||
|
fw("html_show_search_summary = True\n")
|
||||||
fw("html_split_index = True\n")
|
fw("html_split_index = True\n")
|
||||||
fw("html_static_path = ['static']\n")
|
fw("html_static_path = ['static']\n")
|
||||||
|
fw("templates_path = ['templates']\n")
|
||||||
|
fw("html_context = {'commit': '%s'}\n" % BLENDER_VERSION_HASH)
|
||||||
fw("html_extra_path = ['static/favicon.ico', 'static/blender_logo.svg']\n")
|
fw("html_extra_path = ['static/favicon.ico', 'static/blender_logo.svg']\n")
|
||||||
fw("html_favicon = 'static/favicon.ico'\n")
|
fw("html_favicon = 'static/favicon.ico'\n")
|
||||||
fw("html_logo = 'static/blender_logo.svg'\n")
|
fw("html_logo = 'static/blender_logo.svg'\n")
|
||||||
fw("html_last_updated_fmt = '%m/%d/%Y'\n\n")
|
fw("html_last_updated_fmt = '%m/%d/%Y'\n\n")
|
||||||
|
fw("if html_theme == 'sphinx_rtd_theme':\n")
|
||||||
|
fw(" html_css_files = ['css/version_switch.css']\n")
|
||||||
|
fw(" html_js_files = ['js/version_switch.js']\n")
|
||||||
|
|
||||||
# needed for latex, pdf gen
|
# needed for latex, pdf gen
|
||||||
fw("latex_elements = {\n")
|
fw("latex_elements = {\n")
|
||||||
@@ -2119,6 +2132,9 @@ def copy_theme_assets(basepath):
|
|||||||
shutil.copytree(os.path.join(SCRIPT_DIR, "static"),
|
shutil.copytree(os.path.join(SCRIPT_DIR, "static"),
|
||||||
os.path.join(basepath, "static"),
|
os.path.join(basepath, "static"),
|
||||||
copy_function=shutil.copy)
|
copy_function=shutil.copy)
|
||||||
|
shutil.copytree(os.path.join(SCRIPT_DIR, "templates"),
|
||||||
|
os.path.join(basepath, "templates"),
|
||||||
|
copy_function=shutil.copy)
|
||||||
|
|
||||||
|
|
||||||
def rna2sphinx(basepath):
|
def rna2sphinx(basepath):
|
||||||
@@ -2251,7 +2267,7 @@ def main():
|
|||||||
# First monkey patch to load in fake members.
|
# First monkey patch to load in fake members.
|
||||||
setup_monkey_patch()
|
setup_monkey_patch()
|
||||||
|
|
||||||
# Perform changes to Blender it's self.
|
# Perform changes to Blender itself.
|
||||||
setup_data = setup_blender()
|
setup_data = setup_blender()
|
||||||
|
|
||||||
# eventually, create the dirs
|
# eventually, create the dirs
|
||||||
|
127
doc/python_api/static/css/version_switch.css
Normal file
127
doc/python_api/static/css/version_switch.css
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/* Override RTD theme */
|
||||||
|
.rst-versions {
|
||||||
|
border-top: 0px;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
.version-btn.vdeact {
|
||||||
|
cursor: default;
|
||||||
|
color: dimgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version-btn.vdeact::after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
#versionwrap {
|
||||||
|
display: flex;
|
||||||
|
padding-top: 2px;
|
||||||
|
font-size: 90%;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.version-btn {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #272525;
|
||||||
|
width: 140px;
|
||||||
|
text-align: center;
|
||||||
|
padding: 3px 10px;
|
||||||
|
margin: 0px 5px 4px;
|
||||||
|
vertical-align: middle;
|
||||||
|
color: #27AE60;
|
||||||
|
border: solid 1px #444444;
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
z-index: 400;
|
||||||
|
transition: border-color 0.4s;
|
||||||
|
}
|
||||||
|
.version-btn::after {
|
||||||
|
content:"\f0d8";
|
||||||
|
display: inline;
|
||||||
|
font: normal normal normal 16px/1 FontAwesome;
|
||||||
|
color: #8d8c8c;
|
||||||
|
vertical-align: top;
|
||||||
|
padding-left: 0.5em;
|
||||||
|
}
|
||||||
|
.version-btn-open::after {
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
.version-btn:hover, .version-btn:focus {
|
||||||
|
border-color: #525252;
|
||||||
|
}
|
||||||
|
.version-btn-open {
|
||||||
|
color: gray;
|
||||||
|
border: solid 1px gray;
|
||||||
|
}
|
||||||
|
.version-btn.wait {
|
||||||
|
cursor: wait;
|
||||||
|
}
|
||||||
|
.version-btn.disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
color: dimgray;
|
||||||
|
}
|
||||||
|
.version-dialog {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 28px;
|
||||||
|
width: 140px;
|
||||||
|
margin: 0 5px;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
background-color: #0003;
|
||||||
|
border-radius: 3px;
|
||||||
|
box-shadow: 0 0 6px #000C;
|
||||||
|
z-index: 999;
|
||||||
|
max-height: calc(100vh - 30px);
|
||||||
|
overflow-y: auto;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.version-title {
|
||||||
|
padding: 5px;
|
||||||
|
color: black;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 102%;
|
||||||
|
background-color: #27ae60;
|
||||||
|
border-bottom: solid 1.5px #444;
|
||||||
|
}
|
||||||
|
.version-list {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #000C;
|
||||||
|
border: solid 1px gray;
|
||||||
|
border-radius: 0px 0px 3px 3px;
|
||||||
|
}
|
||||||
|
.version-list a, .version-list span, .version-list li {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
font-size: 98%;
|
||||||
|
line-height: 1.15;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 4px 0px;
|
||||||
|
color: #404040;
|
||||||
|
}
|
||||||
|
.version-list li {
|
||||||
|
background-color: #ede9e9;
|
||||||
|
color: #404040;
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
.version-list li:hover, .version-list li a:focus {
|
||||||
|
background-color: #b9cfda;
|
||||||
|
}
|
||||||
|
.version-list li.selected, .version-list li.selected:hover {
|
||||||
|
background-color: #8d8c8c;
|
||||||
|
}
|
||||||
|
.version-list li.selected span {
|
||||||
|
cursor: default;
|
||||||
|
outline-color: red;
|
||||||
|
}
|
||||||
|
.version-arrow {
|
||||||
|
position: absolute;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
left: 50%;
|
||||||
|
bottom: 4px;
|
||||||
|
margin-left: -4px;
|
||||||
|
transform: rotate(225deg);
|
||||||
|
background: #ede9e9;
|
||||||
|
border: 1px solid gray;
|
||||||
|
border-width: 1px 0 0 1px;
|
||||||
|
}
|
323
doc/python_api/static/js/version_switch.js
Normal file
323
doc/python_api/static/js/version_switch.js
Normal file
@@ -0,0 +1,323 @@
|
|||||||
|
(function() { // switch: v1.2
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var versionsFileUrl = "https://docs.blender.org/PROD/versions.json"
|
||||||
|
|
||||||
|
var all_versions;
|
||||||
|
|
||||||
|
var Popover = function() {
|
||||||
|
function Popover(id)
|
||||||
|
{
|
||||||
|
this.isOpen = false;
|
||||||
|
this.type = (id === "version-popover");
|
||||||
|
this.$btn = $('#' + id);
|
||||||
|
this.$dialog = this.$btn.next();
|
||||||
|
this.$list = this.$dialog.children("ul");
|
||||||
|
this.sel = null;
|
||||||
|
this.beforeInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
Popover.prototype = {
|
||||||
|
beforeInit : function() {
|
||||||
|
var that = this;
|
||||||
|
this.$btn.on("click", function(e) {
|
||||||
|
that.init();
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
this.$btn.on("keydown", function(e) {
|
||||||
|
if (that.btnKeyFilter(e)) {
|
||||||
|
that.init();
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
init : function() {
|
||||||
|
this.$btn.off("click");
|
||||||
|
this.$btn.off("keydown");
|
||||||
|
|
||||||
|
if (all_versions === undefined) {
|
||||||
|
this.$btn.addClass("wait");
|
||||||
|
this.loadVL(this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.afterLoad();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
loadVL : function(that) {
|
||||||
|
$.getJSON(versionsFileUrl, function(data) {
|
||||||
|
all_versions = data;
|
||||||
|
that.afterLoad();
|
||||||
|
return true;
|
||||||
|
}).fail(function() {
|
||||||
|
console.log("Version Switch Error: versions.json could not be loaded.");
|
||||||
|
that.$btn.addClass("disabled");
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
afterLoad : function() {
|
||||||
|
var release = DOCUMENTATION_OPTIONS.VERSION;
|
||||||
|
const m = release.match(/\d\.\d+/g);
|
||||||
|
if (m) {
|
||||||
|
release = m[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.warnOld(release, all_versions);
|
||||||
|
|
||||||
|
var version = this.getNamed(release);
|
||||||
|
var list = this.buildList(version);
|
||||||
|
|
||||||
|
this.$list.children(":first-child").remove();
|
||||||
|
this.$list.append(list);
|
||||||
|
var that = this;
|
||||||
|
this.$list.on("keydown", function(e) {
|
||||||
|
that.keyMove(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$btn.removeClass("wait");
|
||||||
|
this.btnOpenHandler();
|
||||||
|
this.$btn.on("mousedown", function(e) {
|
||||||
|
that.btnOpenHandler();
|
||||||
|
e.preventDefault()
|
||||||
|
});
|
||||||
|
this.$btn.on("keydown", function(e) {
|
||||||
|
if (that.btnKeyFilter(e)) {
|
||||||
|
that.btnOpenHandler();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
warnOld : function(release, all_versions) {
|
||||||
|
// Note this is effectively disabled now, two issues must fixed:
|
||||||
|
// * versions.js does not contain a current entry, because that leads to
|
||||||
|
// duplicate version numbers in the menu. These need to be deduplicated.
|
||||||
|
// * It only shows the warning after opening the menu to switch version
|
||||||
|
// when versions.js is loaded. This is too late to be useful.
|
||||||
|
var current = all_versions.current
|
||||||
|
if (!current)
|
||||||
|
{
|
||||||
|
// console.log("Version Switch Error: no 'current' in version.json.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const m = current.match(/\d\.\d+/g);
|
||||||
|
if (m) {
|
||||||
|
current = parseFloat(m[0]);
|
||||||
|
}
|
||||||
|
if (release < current) {
|
||||||
|
var currentURL = window.location.pathname.replace(release, current);
|
||||||
|
var warning = $('<div class="admonition warning"> ' +
|
||||||
|
'<p class="first admonition-title">Note</p> ' +
|
||||||
|
'<p class="last"> ' +
|
||||||
|
'You are not using the most up to date version of the documentation. ' +
|
||||||
|
'<a href="#"></a> is the newest version.' +
|
||||||
|
'</p>' +
|
||||||
|
'</div>');
|
||||||
|
|
||||||
|
warning.find('a').attr('href', currentURL).text(current);
|
||||||
|
|
||||||
|
var body = $("div.body");
|
||||||
|
if (!body.length) {
|
||||||
|
body = $("div.document");
|
||||||
|
}
|
||||||
|
body.prepend(warning);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
buildList : function(v) {
|
||||||
|
var url = new URL(window.location.href);
|
||||||
|
let pathSplit = [ "", "api", v ];
|
||||||
|
if (url.pathname.startsWith("/api/")) {
|
||||||
|
pathSplit.push(url.pathname.split('/').slice(3).join('/'));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pathSplit.push(url.pathname.substring(1));
|
||||||
|
}
|
||||||
|
if (this.type) {
|
||||||
|
var dyn = all_versions;
|
||||||
|
var cur = v;
|
||||||
|
}
|
||||||
|
var buf = [];
|
||||||
|
var that = this;
|
||||||
|
$.each(dyn, function(ix, title) {
|
||||||
|
buf.push("<li");
|
||||||
|
if (ix === cur) {
|
||||||
|
buf.push(
|
||||||
|
' class="selected" tabindex="-1" role="presentation"><span tabindex="-1" role="menuitem" aria-current="page">' +
|
||||||
|
title + '</spanp></li>');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pathSplit[2 + that.type] = ix;
|
||||||
|
var href = new URL(url);
|
||||||
|
href.pathname = pathSplit.join('/');
|
||||||
|
buf.push(' tabindex="-1" role="presentation"><a href ="' + href + '" tabindex="-1">' +
|
||||||
|
title + '</a></li>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return buf.join('');
|
||||||
|
},
|
||||||
|
getNamed : function(v) {
|
||||||
|
$.each(all_versions, function(ix, title) {
|
||||||
|
if (ix === "master" || ix === "latest") {
|
||||||
|
var m = title.match(/\d\.\d[\w\d\.]*/)[0];
|
||||||
|
if (parseFloat(m) == v) {
|
||||||
|
v = ix;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return v;
|
||||||
|
},
|
||||||
|
dialogToggle : function(speed) {
|
||||||
|
var wasClose = !this.isOpen;
|
||||||
|
var that = this;
|
||||||
|
if (!this.isOpen) {
|
||||||
|
this.$btn.addClass("version-btn-open");
|
||||||
|
this.$btn.attr("aria-pressed", true);
|
||||||
|
this.$dialog.attr("aria-hidden", false);
|
||||||
|
this.$dialog.fadeIn(speed, function() {
|
||||||
|
that.$btn.parent().on("focusout", function(e) {
|
||||||
|
that.focusoutHandler();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
})
|
||||||
|
that.$btn.parent().on("mouseleave", function(e) {
|
||||||
|
that.mouseoutHandler();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this.isOpen = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$btn.removeClass("version-btn-open");
|
||||||
|
this.$btn.attr("aria-pressed", false);
|
||||||
|
this.$dialog.attr("aria-hidden", true);
|
||||||
|
this.$btn.parent().off("focusout");
|
||||||
|
this.$btn.parent().off("mouseleave");
|
||||||
|
this.$dialog.fadeOut(speed, function() {
|
||||||
|
if (this.$sel) {
|
||||||
|
this.$sel.attr("tabindex", -1);
|
||||||
|
}
|
||||||
|
that.$btn.attr("tabindex", 0);
|
||||||
|
if (document.activeElement !== null && document.activeElement !== document &&
|
||||||
|
document.activeElement !== document.body) {
|
||||||
|
that.$btn.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isOpen = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wasClose) {
|
||||||
|
if (this.$sel) {
|
||||||
|
this.$sel.attr("tabindex", -1);
|
||||||
|
}
|
||||||
|
if (document.activeElement !== null && document.activeElement !== document &&
|
||||||
|
document.activeElement !== document.body) {
|
||||||
|
var $nw = this.listEnter();
|
||||||
|
$nw.attr("tabindex", 0);
|
||||||
|
$nw.focus();
|
||||||
|
this.$sel = $nw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
btnOpenHandler : function() {
|
||||||
|
this.dialogToggle(300);
|
||||||
|
},
|
||||||
|
focusoutHandler : function() {
|
||||||
|
var list = this.$list;
|
||||||
|
var that = this;
|
||||||
|
setTimeout(function() {
|
||||||
|
if (list.find(":focus").length === 0) {
|
||||||
|
that.dialogToggle(200);
|
||||||
|
}
|
||||||
|
}, 200);
|
||||||
|
},
|
||||||
|
mouseoutHandler : function() {
|
||||||
|
this.dialogToggle(200);
|
||||||
|
},
|
||||||
|
btnKeyFilter : function(e) {
|
||||||
|
if (e.ctrlKey || e.shiftKey) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (e.key === " " || e.key === "Enter" || (e.key === "ArrowDown" && e.altKey) ||
|
||||||
|
e.key === "ArrowDown" || e.key === "ArrowUp") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
keyMove : function(e) {
|
||||||
|
if (e.ctrlKey || e.shiftKey) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
var p = true;
|
||||||
|
var $nw = $(e.target);
|
||||||
|
switch (e.key) {
|
||||||
|
case "ArrowUp":
|
||||||
|
$nw = this.listPrev($nw);
|
||||||
|
break;
|
||||||
|
case "ArrowDown":
|
||||||
|
$nw = this.listNext($nw);
|
||||||
|
break;
|
||||||
|
case "Home":
|
||||||
|
$nw = this.listFirst();
|
||||||
|
break;
|
||||||
|
case "End":
|
||||||
|
$nw = this.listLast();
|
||||||
|
break;
|
||||||
|
case "Escape":
|
||||||
|
$nw = this.listExit();
|
||||||
|
break;
|
||||||
|
case "ArrowLeft":
|
||||||
|
$nw = this.listExit();
|
||||||
|
break;
|
||||||
|
case "ArrowRight":
|
||||||
|
$nw = this.listExit();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
p = false;
|
||||||
|
}
|
||||||
|
if (p) {
|
||||||
|
$nw.attr("tabindex", 0);
|
||||||
|
$nw.focus();
|
||||||
|
if (this.$sel) {
|
||||||
|
this.$sel.attr("tabindex", -1);
|
||||||
|
}
|
||||||
|
this.$sel = $nw;
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
listPrev : function($nw) {
|
||||||
|
if ($nw.parent().prev().length !== 0) {
|
||||||
|
return $nw.parent().prev().children(":first-child");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return this.listLast();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
listNext : function($nw) {
|
||||||
|
if ($nw.parent().next().length !== 0) {
|
||||||
|
return $nw.parent().next().children(":first-child");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return this.listFirst();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
listFirst : function() {
|
||||||
|
return this.$list.children(":first-child").children(":first-child");
|
||||||
|
},
|
||||||
|
listLast : function() {
|
||||||
|
return this.$list.children(":last-child").children(":first-child");
|
||||||
|
},
|
||||||
|
listExit : function() {
|
||||||
|
this.mouseoutHandler();
|
||||||
|
return this.$btn;
|
||||||
|
},
|
||||||
|
listEnter : function() {
|
||||||
|
return this.$list.children(":first-child").children(":first-child");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return Popover
|
||||||
|
}();
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
var lng_popover = new Popover("version-popover");
|
||||||
|
});
|
||||||
|
})();
|
17
doc/python_api/templates/versions.html
Normal file
17
doc/python_api/templates/versions.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="document versions">
|
||||||
|
<ul id="versionwrap" role="presentation">
|
||||||
|
<li role="presentation">
|
||||||
|
<span id="version-popover" class="version-btn" tabindex="0" role="button" aria-label="versions selector" aria-haspopup="true" aria-controls="version-vsnlist" aria-disabled="true">
|
||||||
|
{{ release }}
|
||||||
|
</span>
|
||||||
|
<div class="version-dialog" aria-hidden="true">
|
||||||
|
<div class="version-arrow" aria-hidden="true"></div>
|
||||||
|
<div class="version-title">Versions</div>
|
||||||
|
<ul id="version-vsnlist" class="version-list" role="menu" aria-labelledby="version-popover" aria-hidden="true">
|
||||||
|
<li role="presentation">Loading...</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
2
extern/CMakeLists.txt
vendored
2
extern/CMakeLists.txt
vendored
@@ -113,6 +113,6 @@ if(WITH_MOD_FLUID)
|
|||||||
add_subdirectory(mantaflow)
|
add_subdirectory(mantaflow)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WITH_COMPOSITOR)
|
if(WITH_COMPOSITOR)
|
||||||
add_subdirectory(smaa_areatex)
|
add_subdirectory(smaa_areatex)
|
||||||
endif()
|
endif()
|
||||||
|
6
extern/audaspace/CMakeLists.txt
vendored
6
extern/audaspace/CMakeLists.txt
vendored
@@ -1092,12 +1092,12 @@ if(WITH_PYTHON)
|
|||||||
configure_file(${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py ESCAPE_QUOTES @ONLY)
|
configure_file(${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py ESCAPE_QUOTES @ONLY)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
add_custom_command(OUTPUT build COMMAND MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
|
add_custom_command(OUTPUT build COMMAND MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR} setup.py)
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
set(ENV{VS100COMNTOOLS} $ENV{VS120COMNTOOLS})
|
set(ENV{VS100COMNTOOLS} $ENV{VS120COMNTOOLS})
|
||||||
add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
|
add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR} setup.py)
|
||||||
else()
|
else()
|
||||||
add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
|
add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR} setup.py)
|
||||||
endif()
|
endif()
|
||||||
add_custom_target(pythonmodule ALL DEPENDS build SOURCES ${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${PYTHON_SRC} ${PYTHON_HDR})
|
add_custom_target(pythonmodule ALL DEPENDS build SOURCES ${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${PYTHON_SRC} ${PYTHON_HDR})
|
||||||
add_dependencies(pythonmodule audaspace)
|
add_dependencies(pythonmodule audaspace)
|
||||||
|
27
extern/audaspace/bindings/python/setup.py.in
vendored
27
extern/audaspace/bindings/python/setup.py.in
vendored
@@ -8,20 +8,20 @@ import numpy
|
|||||||
from distutils.core import setup, Extension
|
from distutils.core import setup, Extension
|
||||||
|
|
||||||
if len(sys.argv) > 2 and sys.argv[1] == '--build-docs':
|
if len(sys.argv) > 2 and sys.argv[1] == '--build-docs':
|
||||||
import subprocess
|
import subprocess
|
||||||
from distutils.core import Distribution
|
from distutils.core import Distribution
|
||||||
from distutils.command.build import build
|
from distutils.command.build import build
|
||||||
|
|
||||||
dist = Distribution()
|
dist = Distribution()
|
||||||
cmd = build(dist)
|
cmd = build(dist)
|
||||||
cmd.finalize_options()
|
cmd.finalize_options()
|
||||||
#print(cmd.build_platlib)
|
#print(cmd.build_platlib)
|
||||||
|
|
||||||
os.environ['PYTHONPATH'] = os.path.join(os.getcwd(), cmd.build_platlib)
|
os.environ['PYTHONPATH'] = os.path.join(os.getcwd(), cmd.build_platlib)
|
||||||
os.environ['LD_LIBRARY_PATH'] = os.getcwd()
|
os.environ['LD_LIBRARY_PATH'] = os.getcwd()
|
||||||
|
|
||||||
ret = subprocess.call(sys.argv[2:])
|
ret = subprocess.call(sys.argv[2:])
|
||||||
sys.exit(ret)
|
sys.exit(ret)
|
||||||
|
|
||||||
|
|
||||||
# the following line is not working due to https://bugs.python.org/issue9023
|
# the following line is not working due to https://bugs.python.org/issue9023
|
||||||
@@ -43,7 +43,8 @@ audaspace = Extension(
|
|||||||
library_dirs = ['.', 'Release', 'Debug'],
|
library_dirs = ['.', 'Release', 'Debug'],
|
||||||
language = 'c++',
|
language = 'c++',
|
||||||
extra_compile_args = extra_args,
|
extra_compile_args = extra_args,
|
||||||
sources = [os.path.join(source_directory, file) for file in ['PyAPI.cpp', 'PyDevice.cpp', 'PyHandle.cpp', 'PySound.cpp', 'PySequenceEntry.cpp', 'PySequence.cpp', 'PyPlaybackManager.cpp', 'PyDynamicMusic.cpp', 'PyThreadPool.cpp', 'PySource.cpp'] + (['PyImpulseResponse.cpp', 'PyHRTF.cpp'] if '@WITH_FFTW@' == 'ON' else [])]
|
define_macros = [('WITH_CONVOLUTION', None)] if '@WITH_FFTW@' == 'ON' else [],
|
||||||
|
sources = [os.path.join(source_directory, file) for file in ['PyAPI.cpp', 'PyDevice.cpp', 'PyHandle.cpp', 'PySound.cpp', 'PySequenceEntry.cpp', 'PySequence.cpp', 'PyPlaybackManager.cpp', 'PyDynamicMusic.cpp', 'PyThreadPool.cpp', 'PySource.cpp'] + (['PyImpulseResponse.cpp', 'PyHRTF.cpp'] if '@WITH_FFTW@' == 'ON' else [])]
|
||||||
)
|
)
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
@@ -56,6 +57,6 @@ setup(
|
|||||||
license = 'Apache License 2.0',
|
license = 'Apache License 2.0',
|
||||||
long_description = codecs.open(os.path.join(source_directory, '../../README.md'), 'r', 'utf-8').read(),
|
long_description = codecs.open(os.path.join(source_directory, '../../README.md'), 'r', 'utf-8').read(),
|
||||||
ext_modules = [audaspace],
|
ext_modules = [audaspace],
|
||||||
headers = [os.path.join(source_directory, file) for file in ['PyAPI.h', 'PyDevice.h', 'PyHandle.h', 'PySound.h', 'PySequenceEntry.h', 'PySequence.h', 'PyPlaybackManager.h', 'PyDynamicMusic.h', 'PyThreadPool.h', 'PySource.h'] + (['PyImpulseResponse.h', 'PyHRTF.h'] if '@WITH_FFTW@' == 'ON' else [])] + ['Audaspace.h']
|
headers = [os.path.join(source_directory, file) for file in ['PyAPI.h', 'PyDevice.h', 'PyHandle.h', 'PySound.h', 'PySequenceEntry.h', 'PySequence.h', 'PyPlaybackManager.h', 'PyDynamicMusic.h', 'PyThreadPool.h', 'PySource.h'] + (['PyImpulseResponse.h', 'PyHRTF.h'] if '@WITH_FFTW@' == 'ON' else [])] + ['Audaspace.h']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -177,7 +177,7 @@ void FFMPEGReader::init(int stream)
|
|||||||
|
|
||||||
// get a decoder and open it
|
// get a decoder and open it
|
||||||
#ifndef FFMPEG_OLD_CODE
|
#ifndef FFMPEG_OLD_CODE
|
||||||
AVCodec* aCodec = avcodec_find_decoder(m_formatCtx->streams[m_stream]->codecpar->codec_id);
|
const AVCodec* aCodec = avcodec_find_decoder(m_formatCtx->streams[m_stream]->codecpar->codec_id);
|
||||||
|
|
||||||
if(!aCodec)
|
if(!aCodec)
|
||||||
AUD_THROW(FileException, "File couldn't be read, no decoder found with ffmpeg.");
|
AUD_THROW(FileException, "File couldn't be read, no decoder found with ffmpeg.");
|
||||||
|
39
extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
vendored
39
extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
vendored
@@ -23,6 +23,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#include <libavcodec/avcodec.h>
|
#include <libavcodec/avcodec.h>
|
||||||
#include <libavformat/avio.h>
|
#include <libavformat/avio.h>
|
||||||
|
#include <libavutil/channel_layout.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
AUD_NAMESPACE_BEGIN
|
AUD_NAMESPACE_BEGIN
|
||||||
@@ -171,66 +172,66 @@ FFMPEGWriter::FFMPEGWriter(std::string filename, DeviceSpecs specs, Container fo
|
|||||||
if(avformat_alloc_output_context2(&m_formatCtx, nullptr, formats[format], filename.c_str()) < 0)
|
if(avformat_alloc_output_context2(&m_formatCtx, nullptr, formats[format], filename.c_str()) < 0)
|
||||||
AUD_THROW(FileException, "File couldn't be written, format couldn't be found with ffmpeg.");
|
AUD_THROW(FileException, "File couldn't be written, format couldn't be found with ffmpeg.");
|
||||||
|
|
||||||
AVOutputFormat* outputFmt = m_formatCtx->oformat;
|
const AVOutputFormat* outputFmt = m_formatCtx->oformat;
|
||||||
|
|
||||||
if(!outputFmt) {
|
if(!outputFmt) {
|
||||||
avformat_free_context(m_formatCtx);
|
avformat_free_context(m_formatCtx);
|
||||||
AUD_THROW(FileException, "File couldn't be written, output format couldn't be found with ffmpeg.");
|
AUD_THROW(FileException, "File couldn't be written, output format couldn't be found with ffmpeg.");
|
||||||
}
|
}
|
||||||
|
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_NONE;
|
AVCodecID audio_codec = AV_CODEC_ID_NONE;
|
||||||
|
|
||||||
switch(codec)
|
switch(codec)
|
||||||
{
|
{
|
||||||
case CODEC_AAC:
|
case CODEC_AAC:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_AAC;
|
audio_codec = AV_CODEC_ID_AAC;
|
||||||
break;
|
break;
|
||||||
case CODEC_AC3:
|
case CODEC_AC3:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_AC3;
|
audio_codec = AV_CODEC_ID_AC3;
|
||||||
break;
|
break;
|
||||||
case CODEC_FLAC:
|
case CODEC_FLAC:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_FLAC;
|
audio_codec = AV_CODEC_ID_FLAC;
|
||||||
break;
|
break;
|
||||||
case CODEC_MP2:
|
case CODEC_MP2:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_MP2;
|
audio_codec = AV_CODEC_ID_MP2;
|
||||||
break;
|
break;
|
||||||
case CODEC_MP3:
|
case CODEC_MP3:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_MP3;
|
audio_codec = AV_CODEC_ID_MP3;
|
||||||
break;
|
break;
|
||||||
case CODEC_OPUS:
|
case CODEC_OPUS:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_OPUS;
|
audio_codec = AV_CODEC_ID_OPUS;
|
||||||
break;
|
break;
|
||||||
case CODEC_PCM:
|
case CODEC_PCM:
|
||||||
switch(specs.format)
|
switch(specs.format)
|
||||||
{
|
{
|
||||||
case FORMAT_U8:
|
case FORMAT_U8:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_PCM_U8;
|
audio_codec = AV_CODEC_ID_PCM_U8;
|
||||||
break;
|
break;
|
||||||
case FORMAT_S16:
|
case FORMAT_S16:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_PCM_S16LE;
|
audio_codec = AV_CODEC_ID_PCM_S16LE;
|
||||||
break;
|
break;
|
||||||
case FORMAT_S24:
|
case FORMAT_S24:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_PCM_S24LE;
|
audio_codec = AV_CODEC_ID_PCM_S24LE;
|
||||||
break;
|
break;
|
||||||
case FORMAT_S32:
|
case FORMAT_S32:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_PCM_S32LE;
|
audio_codec = AV_CODEC_ID_PCM_S32LE;
|
||||||
break;
|
break;
|
||||||
case FORMAT_FLOAT32:
|
case FORMAT_FLOAT32:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_PCM_F32LE;
|
audio_codec = AV_CODEC_ID_PCM_F32LE;
|
||||||
break;
|
break;
|
||||||
case FORMAT_FLOAT64:
|
case FORMAT_FLOAT64:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_PCM_F64LE;
|
audio_codec = AV_CODEC_ID_PCM_F64LE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_NONE;
|
audio_codec = AV_CODEC_ID_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CODEC_VORBIS:
|
case CODEC_VORBIS:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_VORBIS;
|
audio_codec = AV_CODEC_ID_VORBIS;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
outputFmt->audio_codec = AV_CODEC_ID_NONE;
|
audio_codec = AV_CODEC_ID_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,10 +269,10 @@ FFMPEGWriter::FFMPEGWriter(std::string filename, DeviceSpecs specs, Container fo
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(outputFmt->audio_codec == AV_CODEC_ID_NONE)
|
if(audio_codec == AV_CODEC_ID_NONE)
|
||||||
AUD_THROW(FileException, "File couldn't be written, audio codec not found with ffmpeg.");
|
AUD_THROW(FileException, "File couldn't be written, audio codec not found with ffmpeg.");
|
||||||
|
|
||||||
AVCodec* codec = avcodec_find_encoder(outputFmt->audio_codec);
|
const AVCodec* codec = avcodec_find_encoder(audio_codec);
|
||||||
if(!codec)
|
if(!codec)
|
||||||
AUD_THROW(FileException, "File couldn't be written, audio encoder couldn't be found with ffmpeg.");
|
AUD_THROW(FileException, "File couldn't be written, audio encoder couldn't be found with ffmpeg.");
|
||||||
|
|
||||||
|
80
extern/audaspace/plugins/wasapi/WASAPIDevice.cpp
vendored
80
extern/audaspace/plugins/wasapi/WASAPIDevice.cpp
vendored
@@ -95,6 +95,13 @@ void WASAPIDevice::runMixingThread()
|
|||||||
sleep_duration = std::chrono::milliseconds(buffer_size * 1000 / int(m_specs.rate) / 2);
|
sleep_duration = std::chrono::milliseconds(buffer_size * 1000 / int(m_specs.rate) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_default_device_changed)
|
||||||
|
{
|
||||||
|
m_default_device_changed = false;
|
||||||
|
result = AUDCLNT_E_DEVICE_INVALIDATED;
|
||||||
|
goto stop_thread;
|
||||||
|
}
|
||||||
|
|
||||||
if(FAILED(result = m_audio_client->GetCurrentPadding(&padding)))
|
if(FAILED(result = m_audio_client->GetCurrentPadding(&padding)))
|
||||||
goto stop_thread;
|
goto stop_thread;
|
||||||
|
|
||||||
@@ -296,13 +303,78 @@ bool WASAPIDevice::setupDevice(DeviceSpecs &specs)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ULONG WASAPIDevice::AddRef()
|
||||||
|
{
|
||||||
|
return InterlockedIncrement(&m_reference_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG WASAPIDevice::Release()
|
||||||
|
{
|
||||||
|
ULONG reference_count = InterlockedDecrement(&m_reference_count);
|
||||||
|
|
||||||
|
if(0 == reference_count)
|
||||||
|
delete this;
|
||||||
|
|
||||||
|
return reference_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WASAPIDevice::QueryInterface(REFIID riid, void **ppvObject)
|
||||||
|
{
|
||||||
|
if(riid == __uuidof(IMMNotificationClient))
|
||||||
|
{
|
||||||
|
*ppvObject = reinterpret_cast<IMMNotificationClient*>(this);
|
||||||
|
AddRef();
|
||||||
|
}
|
||||||
|
else if(riid == IID_IUnknown)
|
||||||
|
{
|
||||||
|
*ppvObject = reinterpret_cast<IUnknown*>(this);
|
||||||
|
AddRef();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*ppvObject = nullptr;
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WASAPIDevice::OnDeviceStateChanged(LPCWSTR pwstrDeviceId, DWORD dwNewState)
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WASAPIDevice::OnDeviceAdded(LPCWSTR pwstrDeviceId)
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WASAPIDevice::OnDeviceRemoved(LPCWSTR pwstrDeviceId)
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WASAPIDevice::OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId)
|
||||||
|
{
|
||||||
|
if(flow != EDataFlow::eCapture)
|
||||||
|
m_default_device_changed = true;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WASAPIDevice::OnPropertyValueChanged(LPCWSTR pwstrDeviceId, const PROPERTYKEY key)
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
WASAPIDevice::WASAPIDevice(DeviceSpecs specs, int buffersize) :
|
WASAPIDevice::WASAPIDevice(DeviceSpecs specs, int buffersize) :
|
||||||
m_buffersize(buffersize),
|
m_buffersize(buffersize),
|
||||||
m_imm_device_enumerator(nullptr),
|
m_imm_device_enumerator(nullptr),
|
||||||
m_imm_device(nullptr),
|
m_imm_device(nullptr),
|
||||||
m_audio_client(nullptr),
|
m_audio_client(nullptr),
|
||||||
|
m_wave_format_extensible({}),
|
||||||
m_wave_format_extensible({})
|
m_default_device_changed(false),
|
||||||
|
m_reference_count(1)
|
||||||
{
|
{
|
||||||
// initialize COM if it hasn't happened yet
|
// initialize COM if it hasn't happened yet
|
||||||
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
|
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
|
||||||
@@ -327,6 +399,8 @@ WASAPIDevice::WASAPIDevice(DeviceSpecs specs, int buffersize) :
|
|||||||
|
|
||||||
create();
|
create();
|
||||||
|
|
||||||
|
m_imm_device_enumerator->RegisterEndpointNotificationCallback(this);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@@ -340,6 +414,8 @@ WASAPIDevice::~WASAPIDevice()
|
|||||||
{
|
{
|
||||||
stopMixingThread();
|
stopMixingThread();
|
||||||
|
|
||||||
|
m_imm_device_enumerator->UnregisterEndpointNotificationCallback(this);
|
||||||
|
|
||||||
SafeRelease(&m_audio_client);
|
SafeRelease(&m_audio_client);
|
||||||
SafeRelease(&m_imm_device);
|
SafeRelease(&m_imm_device);
|
||||||
SafeRelease(&m_imm_device_enumerator);
|
SafeRelease(&m_imm_device_enumerator);
|
||||||
|
15
extern/audaspace/plugins/wasapi/WASAPIDevice.h
vendored
15
extern/audaspace/plugins/wasapi/WASAPIDevice.h
vendored
@@ -40,7 +40,7 @@ AUD_NAMESPACE_BEGIN
|
|||||||
/**
|
/**
|
||||||
* This device plays back through WASAPI, the Windows audio API.
|
* This device plays back through WASAPI, the Windows audio API.
|
||||||
*/
|
*/
|
||||||
class AUD_PLUGIN_API WASAPIDevice : public ThreadedDevice
|
class AUD_PLUGIN_API WASAPIDevice : IMMNotificationClient, public ThreadedDevice
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int m_buffersize;
|
int m_buffersize;
|
||||||
@@ -48,6 +48,8 @@ private:
|
|||||||
IMMDevice* m_imm_device;
|
IMMDevice* m_imm_device;
|
||||||
IAudioClient* m_audio_client;
|
IAudioClient* m_audio_client;
|
||||||
WAVEFORMATEXTENSIBLE m_wave_format_extensible;
|
WAVEFORMATEXTENSIBLE m_wave_format_extensible;
|
||||||
|
bool m_default_device_changed;
|
||||||
|
LONG m_reference_count;
|
||||||
|
|
||||||
AUD_LOCAL HRESULT setupRenderClient(IAudioRenderClient*& render_client, UINT32& buffer_size);
|
AUD_LOCAL HRESULT setupRenderClient(IAudioRenderClient*& render_client, UINT32& buffer_size);
|
||||||
|
|
||||||
@@ -58,6 +60,17 @@ private:
|
|||||||
|
|
||||||
AUD_LOCAL bool setupDevice(DeviceSpecs& specs);
|
AUD_LOCAL bool setupDevice(DeviceSpecs& specs);
|
||||||
|
|
||||||
|
// IUnknown implementation
|
||||||
|
ULONG STDMETHODCALLTYPE AddRef();
|
||||||
|
ULONG STDMETHODCALLTYPE Release();
|
||||||
|
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
|
||||||
|
// IMMNotificationClient implementation
|
||||||
|
HRESULT STDMETHODCALLTYPE OnDeviceStateChanged(LPCWSTR pwstrDeviceId, DWORD dwNewState);
|
||||||
|
HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR pwstrDeviceId);
|
||||||
|
HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR pwstrDeviceId);
|
||||||
|
HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId);
|
||||||
|
HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR pwstrDeviceId, const PROPERTYKEY key);
|
||||||
|
|
||||||
// delete copy constructor and operator=
|
// delete copy constructor and operator=
|
||||||
WASAPIDevice(const WASAPIDevice&) = delete;
|
WASAPIDevice(const WASAPIDevice&) = delete;
|
||||||
WASAPIDevice& operator=(const WASAPIDevice&) = delete;
|
WASAPIDevice& operator=(const WASAPIDevice&) = delete;
|
||||||
|
12
extern/hipew/README
vendored
Normal file
12
extern/hipew/README
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
The HIP Extension Wrangler Library (HIPEW) is a cross-platform open-source
|
||||||
|
C/C++ library to dynamically load the HIP library.
|
||||||
|
|
||||||
|
HIP (Heterogeneous-Compute Interface for Portability) is an API for C++
|
||||||
|
programming on AMD GPUs.
|
||||||
|
|
||||||
|
It is maintained as part of the Blender project, but included in extern/
|
||||||
|
for consistency with CUEW and CLEW libraries.
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
|
||||||
|
HIPEW is released under the Apache 2.0 license.
|
5
extern/hipew/README.blender
vendored
Normal file
5
extern/hipew/README.blender
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Project: Blender
|
||||||
|
URL: https://git.blender.org/blender.git
|
||||||
|
License: Apache 2.0
|
||||||
|
Upstream version: N/A
|
||||||
|
Local modifications: None
|
43
extern/hipew/include/hipew.h
vendored
43
extern/hipew/include/hipew.h
vendored
@@ -804,31 +804,29 @@ typedef enum hipDeviceP2PAttr {
|
|||||||
} hipDeviceP2PAttr;
|
} hipDeviceP2PAttr;
|
||||||
|
|
||||||
typedef struct HIP_MEMCPY3D {
|
typedef struct HIP_MEMCPY3D {
|
||||||
size_t srcXInBytes;
|
unsigned int srcXInBytes;
|
||||||
size_t srcY;
|
unsigned int srcY;
|
||||||
size_t srcZ;
|
unsigned int srcZ;
|
||||||
size_t srcLOD;
|
unsigned int srcLOD;
|
||||||
hipMemoryType srcMemoryType;
|
hipMemoryType srcMemoryType;
|
||||||
const void* srcHost;
|
const void* srcHost;
|
||||||
hipDeviceptr_t srcDevice;
|
hipDeviceptr_t srcDevice;
|
||||||
hArray * srcArray;
|
hArray srcArray;
|
||||||
void* reserved0;
|
unsigned int srcPitch;
|
||||||
size_t srcPitch;
|
unsigned int srcHeight;
|
||||||
size_t srcHeight;
|
unsigned int dstXInBytes;
|
||||||
size_t dstXInBytes;
|
unsigned int dstY;
|
||||||
size_t dstY;
|
unsigned int dstZ;
|
||||||
size_t dstZ;
|
unsigned int dstLOD;
|
||||||
size_t dstLOD;
|
|
||||||
hipMemoryType dstMemoryType;
|
hipMemoryType dstMemoryType;
|
||||||
void* dstHost;
|
void* dstHost;
|
||||||
hipDeviceptr_t dstDevice;
|
hipDeviceptr_t dstDevice;
|
||||||
hArray * dstArray;
|
hArray dstArray;
|
||||||
void* reserved1;
|
unsigned int dstPitch;
|
||||||
size_t dstPitch;
|
unsigned int dstHeight;
|
||||||
size_t dstHeight;
|
unsigned int WidthInBytes;
|
||||||
size_t WidthInBytes;
|
unsigned int Height;
|
||||||
size_t Height;
|
unsigned int Depth;
|
||||||
size_t Depth;
|
|
||||||
} HIP_MEMCPY3D;
|
} HIP_MEMCPY3D;
|
||||||
|
|
||||||
typedef struct HIP_MEMCPY3D_PEER_st {
|
typedef struct HIP_MEMCPY3D_PEER_st {
|
||||||
@@ -879,7 +877,7 @@ typedef struct HIP_RESOURCE_DESC_st {
|
|||||||
hipResourceType resType;
|
hipResourceType resType;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
hArray * h_Array;
|
hArray h_Array;
|
||||||
} array;
|
} array;
|
||||||
struct {
|
struct {
|
||||||
hipMipmappedArray_t hMipmappedArray;
|
hipMipmappedArray_t hMipmappedArray;
|
||||||
@@ -1074,9 +1072,10 @@ typedef enum hiprtcResult {
|
|||||||
typedef hipError_t HIPAPI thipGetErrorName(hipError_t error, const char** pStr);
|
typedef hipError_t HIPAPI thipGetErrorName(hipError_t error, const char** pStr);
|
||||||
typedef hipError_t HIPAPI thipInit(unsigned int Flags);
|
typedef hipError_t HIPAPI thipInit(unsigned int Flags);
|
||||||
typedef hipError_t HIPAPI thipDriverGetVersion(int* driverVersion);
|
typedef hipError_t HIPAPI thipDriverGetVersion(int* driverVersion);
|
||||||
typedef hipError_t HIPAPI thipGetDevice(hipDevice_t* device, int ordinal);
|
typedef hipError_t HIPAPI thipGetDevice(int* device);
|
||||||
typedef hipError_t HIPAPI thipGetDeviceCount(int* count);
|
typedef hipError_t HIPAPI thipGetDeviceCount(int* count);
|
||||||
typedef hipError_t HIPAPI thipGetDeviceProperties(hipDeviceProp_t* props, int deviceId);
|
typedef hipError_t HIPAPI thipGetDeviceProperties(hipDeviceProp_t* props, int deviceId);
|
||||||
|
typedef hipError_t HIPAPI thipDeviceGet(hipDevice_t* device, int ordinal);
|
||||||
typedef hipError_t HIPAPI thipDeviceGetName(char* name, int len, hipDevice_t dev);
|
typedef hipError_t HIPAPI thipDeviceGetName(char* name, int len, hipDevice_t dev);
|
||||||
typedef hipError_t HIPAPI thipDeviceGetAttribute(int* pi, hipDeviceAttribute_t attrib, hipDevice_t dev);
|
typedef hipError_t HIPAPI thipDeviceGetAttribute(int* pi, hipDeviceAttribute_t attrib, hipDevice_t dev);
|
||||||
typedef hipError_t HIPAPI thipDeviceComputeCapability(int* major, int* minor, hipDevice_t dev);
|
typedef hipError_t HIPAPI thipDeviceComputeCapability(int* major, int* minor, hipDevice_t dev);
|
||||||
@@ -1209,6 +1208,7 @@ extern thipDriverGetVersion *hipDriverGetVersion;
|
|||||||
extern thipGetDevice *hipGetDevice;
|
extern thipGetDevice *hipGetDevice;
|
||||||
extern thipGetDeviceCount *hipGetDeviceCount;
|
extern thipGetDeviceCount *hipGetDeviceCount;
|
||||||
extern thipGetDeviceProperties *hipGetDeviceProperties;
|
extern thipGetDeviceProperties *hipGetDeviceProperties;
|
||||||
|
extern thipDeviceGet* hipDeviceGet;
|
||||||
extern thipDeviceGetName *hipDeviceGetName;
|
extern thipDeviceGetName *hipDeviceGetName;
|
||||||
extern thipDeviceGetAttribute *hipDeviceGetAttribute;
|
extern thipDeviceGetAttribute *hipDeviceGetAttribute;
|
||||||
extern thipDeviceComputeCapability *hipDeviceComputeCapability;
|
extern thipDeviceComputeCapability *hipDeviceComputeCapability;
|
||||||
@@ -1333,6 +1333,7 @@ enum {
|
|||||||
HIPEW_SUCCESS = 0,
|
HIPEW_SUCCESS = 0,
|
||||||
HIPEW_ERROR_OPEN_FAILED = -1,
|
HIPEW_ERROR_OPEN_FAILED = -1,
|
||||||
HIPEW_ERROR_ATEXIT_FAILED = -2,
|
HIPEW_ERROR_ATEXIT_FAILED = -2,
|
||||||
|
HIPEW_ERROR_OLD_DRIVER = -3,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
44
extern/hipew/src/hipew.c
vendored
44
extern/hipew/src/hipew.c
vendored
@@ -71,6 +71,7 @@ thipDriverGetVersion *hipDriverGetVersion;
|
|||||||
thipGetDevice *hipGetDevice;
|
thipGetDevice *hipGetDevice;
|
||||||
thipGetDeviceCount *hipGetDeviceCount;
|
thipGetDeviceCount *hipGetDeviceCount;
|
||||||
thipGetDeviceProperties *hipGetDeviceProperties;
|
thipGetDeviceProperties *hipGetDeviceProperties;
|
||||||
|
thipDeviceGet* hipDeviceGet;
|
||||||
thipDeviceGetName *hipDeviceGetName;
|
thipDeviceGetName *hipDeviceGetName;
|
||||||
thipDeviceGetAttribute *hipDeviceGetAttribute;
|
thipDeviceGetAttribute *hipDeviceGetAttribute;
|
||||||
thipDeviceComputeCapability *hipDeviceComputeCapability;
|
thipDeviceComputeCapability *hipDeviceComputeCapability;
|
||||||
@@ -213,6 +214,36 @@ static void hipewHipExit(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
static int hipewHasOldDriver(const char *hip_path) {
|
||||||
|
DWORD verHandle = 0;
|
||||||
|
DWORD verSize = GetFileVersionInfoSize(hip_path, &verHandle);
|
||||||
|
int old_driver = 0;
|
||||||
|
if (verSize != 0) {
|
||||||
|
LPSTR verData = (LPSTR)malloc(verSize);
|
||||||
|
if (GetFileVersionInfo(hip_path, verHandle, verSize, verData)) {
|
||||||
|
LPBYTE lpBuffer = NULL;
|
||||||
|
UINT size = 0;
|
||||||
|
if (VerQueryValue(verData, "\\", (VOID FAR * FAR *)&lpBuffer, &size)) {
|
||||||
|
if (size) {
|
||||||
|
VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)lpBuffer;
|
||||||
|
/* Magic value from
|
||||||
|
* https://docs.microsoft.com/en-us/windows/win32/api/verrsrc/ns-verrsrc-vs_fixedfileinfo */
|
||||||
|
if (verInfo->dwSignature == 0xfeef04bd) {
|
||||||
|
unsigned int fileVersionLS0 = (verInfo->dwFileVersionLS >> 16) & 0xffff;
|
||||||
|
unsigned int fileversionLS1 = (verInfo->dwFileVersionLS >> 0) & 0xffff;
|
||||||
|
/* Corresponds to versions older than AMD Radeon Pro 21.Q4. */
|
||||||
|
old_driver = ((fileVersionLS0 < 3354) || (fileVersionLS0 == 3354 && fileversionLS1 < 13));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(verData);
|
||||||
|
}
|
||||||
|
return old_driver;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int hipewHipInit(void) {
|
static int hipewHipInit(void) {
|
||||||
/* Library paths. */
|
/* Library paths. */
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -226,7 +257,7 @@ static int hipewHipInit(void) {
|
|||||||
#endif
|
#endif
|
||||||
static int initialized = 0;
|
static int initialized = 0;
|
||||||
static int result = 0;
|
static int result = 0;
|
||||||
int error, driver_version;
|
int error;
|
||||||
|
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
return result;
|
return result;
|
||||||
@@ -240,6 +271,14 @@ static int hipewHipInit(void) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* Test for driver version. */
|
||||||
|
if(hipewHasOldDriver(hip_paths[0])) {
|
||||||
|
result = HIPEW_ERROR_OLD_DRIVER;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Load library. */
|
/* Load library. */
|
||||||
hip_lib = dynamic_library_open_find(hip_paths);
|
hip_lib = dynamic_library_open_find(hip_paths);
|
||||||
|
|
||||||
@@ -255,6 +294,7 @@ static int hipewHipInit(void) {
|
|||||||
HIP_LIBRARY_FIND_CHECKED(hipGetDevice);
|
HIP_LIBRARY_FIND_CHECKED(hipGetDevice);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceCount);
|
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceCount);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceProperties);
|
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceProperties);
|
||||||
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceGet);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetName);
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetName);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetAttribute);
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetAttribute);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceComputeCapability);
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceComputeCapability);
|
||||||
@@ -525,8 +565,6 @@ int hipewCompilerVersion(void) {
|
|||||||
const char *path = hipewCompilerPath();
|
const char *path = hipewCompilerPath();
|
||||||
const char *marker = "Hip compilation tools, release ";
|
const char *marker = "Hip compilation tools, release ";
|
||||||
FILE *pipe;
|
FILE *pipe;
|
||||||
int major, minor;
|
|
||||||
char *versionstr;
|
|
||||||
char buf[128];
|
char buf[128];
|
||||||
char output[65536] = "\0";
|
char output[65536] = "\0";
|
||||||
char command[65536] = "\0";
|
char command[65536] = "\0";
|
||||||
|
2
extern/nanosvg/README.blender
vendored
2
extern/nanosvg/README.blender
vendored
@@ -1,7 +1,7 @@
|
|||||||
Project: NanoSVG
|
Project: NanoSVG
|
||||||
URL: https://github.com/memononen/nanosvg
|
URL: https://github.com/memononen/nanosvg
|
||||||
License: zlib
|
License: zlib
|
||||||
Upstream version:
|
Upstream version: 3cdd4a9d7886
|
||||||
Local modifications: Added some functionality to manage grease pencil layers
|
Local modifications: Added some functionality to manage grease pencil layers
|
||||||
|
|
||||||
Added a fix to SVG import arc and float errors (https://developer.blender.org/rB11dc674c78b49fc4e0b7c134c375b6c8b8eacbcc)
|
Added a fix to SVG import arc and float errors (https://developer.blender.org/rB11dc674c78b49fc4e0b7c134c375b6c8b8eacbcc)
|
||||||
|
@@ -25,7 +25,6 @@ add_subdirectory(ghost)
|
|||||||
add_subdirectory(guardedalloc)
|
add_subdirectory(guardedalloc)
|
||||||
add_subdirectory(libmv)
|
add_subdirectory(libmv)
|
||||||
add_subdirectory(memutil)
|
add_subdirectory(memutil)
|
||||||
add_subdirectory(numaapi)
|
|
||||||
add_subdirectory(opencolorio)
|
add_subdirectory(opencolorio)
|
||||||
add_subdirectory(opensubdiv)
|
add_subdirectory(opensubdiv)
|
||||||
add_subdirectory(mikktspace)
|
add_subdirectory(mikktspace)
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \ingroup Atomic
|
* \ingroup intern_atomic
|
||||||
*
|
*
|
||||||
* \brief Provides wrapper around system-specific atomic primitives,
|
* \brief Provides wrapper around system-specific atomic primitives,
|
||||||
* and some extensions (faked-atomic operations over float numbers).
|
* and some extensions (faked-atomic operations over float numbers).
|
||||||
|
@@ -44,6 +44,10 @@
|
|||||||
* The Original Code is: adapted from jemalloc.
|
* The Original Code is: adapted from jemalloc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
* \ingroup intern_atomic
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_EXT_H__
|
#ifndef __ATOMIC_OPS_EXT_H__
|
||||||
#define __ATOMIC_OPS_EXT_H__
|
#define __ATOMIC_OPS_EXT_H__
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
|
* Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
|
||||||
* Copyright (C) 2009-2013 Facebook, Inc. All rights reserved.
|
* Copyright (C) 2009-2013 Facebook, Inc. All rights reserved.
|
||||||
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright notice(s),
|
* 1. Redistributions of source code must retain the above copyright notice(s),
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright notice(s),
|
* 2. Redistributions in binary form must reproduce the above copyright notice(s),
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
@@ -26,6 +26,10 @@
|
|||||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
* \ingroup intern_atomic
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_MSVC_H__
|
#ifndef __ATOMIC_OPS_MSVC_H__
|
||||||
#define __ATOMIC_OPS_MSVC_H__
|
#define __ATOMIC_OPS_MSVC_H__
|
||||||
|
|
||||||
|
@@ -44,6 +44,10 @@
|
|||||||
* The Original Code is: adapted from jemalloc.
|
* The Original Code is: adapted from jemalloc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
* \ingroup intern_atomic
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_UNIX_H__
|
#ifndef __ATOMIC_OPS_UNIX_H__
|
||||||
#define __ATOMIC_OPS_UNIX_H__
|
#define __ATOMIC_OPS_UNIX_H__
|
||||||
|
|
||||||
|
@@ -44,6 +44,10 @@
|
|||||||
* The Original Code is: adapted from jemalloc.
|
* The Original Code is: adapted from jemalloc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
* \ingroup intern_atomic
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_UTILS_H__
|
#ifndef __ATOMIC_OPS_UTILS_H__
|
||||||
#define __ATOMIC_OPS_UTILS_H__
|
#define __ATOMIC_OPS_UTILS_H__
|
||||||
|
|
||||||
|
@@ -14,11 +14,8 @@
|
|||||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CLG_LOG_H__
|
|
||||||
#define __CLG_LOG_H__
|
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \ingroup clog
|
* \ingroup intern_clog
|
||||||
*
|
*
|
||||||
* C Logging Library (clog)
|
* C Logging Library (clog)
|
||||||
* ========================
|
* ========================
|
||||||
@@ -68,6 +65,9 @@
|
|||||||
* - 4+: May be used for more details than 3, should be avoided but not prevented.
|
* - 4+: May be used for more details than 3, should be avoided but not prevented.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLG_LOG_H__
|
||||||
|
#define __CLG_LOG_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \ingroup clog
|
* \ingroup intern_clog
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -388,7 +388,7 @@ static void clg_ctx_fatal_action(CLogContext *ctx)
|
|||||||
|
|
||||||
static void clg_ctx_backtrace(CLogContext *ctx)
|
static void clg_ctx_backtrace(CLogContext *ctx)
|
||||||
{
|
{
|
||||||
/* Note: we avoid writing to 'FILE', for back-trace we make an exception,
|
/* NOTE: we avoid writing to 'FILE', for back-trace we make an exception,
|
||||||
* if necessary we could have a version of the callback that writes to file
|
* if necessary we could have a version of the callback that writes to file
|
||||||
* descriptor all at once. */
|
* descriptor all at once. */
|
||||||
ctx->callbacks.backtrace_fn(ctx->output_file);
|
ctx->callbacks.backtrace_fn(ctx->output_file);
|
||||||
|
@@ -226,6 +226,9 @@ add_definitions(
|
|||||||
-DCCL_NAMESPACE_END=}
|
-DCCL_NAMESPACE_END=}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(WITH_CYCLES_DEBUG)
|
||||||
|
add_definitions(-DWITH_CYCLES_DEBUG)
|
||||||
|
endif()
|
||||||
if(WITH_CYCLES_STANDALONE_GUI)
|
if(WITH_CYCLES_STANDALONE_GUI)
|
||||||
add_definitions(-DWITH_CYCLES_STANDALONE_GUI)
|
add_definitions(-DWITH_CYCLES_STANDALONE_GUI)
|
||||||
endif()
|
endif()
|
||||||
@@ -334,7 +337,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Warnings
|
# Warnings
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_float_conversion "-Werror=float-conversion")
|
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_float_conversion "-Werror=float-conversion")
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_double_promotion "-Werror=double-promotion")
|
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_double_promotion "-Werror=double-promotion")
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_no_error_unused_macros "-Wno-error=unused-macros")
|
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_no_error_unused_macros "-Wno-error=unused-macros")
|
||||||
|
@@ -44,17 +44,13 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI)
|
if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI)
|
||||||
list(APPEND LIBRARIES ${GLUT_LIBRARIES})
|
add_definitions(${GL_DEFINITIONS})
|
||||||
|
list(APPEND INC_SYS ${GLEW_INCLUDE_DIR} ${SDL2_INCLUDE_DIRS})
|
||||||
|
list(APPEND LIBRARIES ${CYCLES_GL_LIBRARIES} ${SDL2_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND LIBRARIES ${CYCLES_GL_LIBRARIES})
|
|
||||||
|
|
||||||
# Common configuration.
|
# Common configuration.
|
||||||
|
|
||||||
cycles_link_directories()
|
|
||||||
|
|
||||||
add_definitions(${GL_DEFINITIONS})
|
|
||||||
|
|
||||||
include_directories(${INC})
|
include_directories(${INC})
|
||||||
include_directories(SYSTEM ${INC_SYS})
|
include_directories(SYSTEM ${INC_SYS})
|
||||||
|
|
||||||
@@ -68,6 +64,18 @@ if(WITH_CYCLES_STANDALONE)
|
|||||||
oiio_output_driver.cpp
|
oiio_output_driver.cpp
|
||||||
oiio_output_driver.h
|
oiio_output_driver.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(WITH_CYCLES_STANDALONE_GUI)
|
||||||
|
list(APPEND SRC
|
||||||
|
opengl/display_driver.cpp
|
||||||
|
opengl/display_driver.h
|
||||||
|
opengl/shader.cpp
|
||||||
|
opengl/shader.h
|
||||||
|
opengl/window.cpp
|
||||||
|
opengl/window.h
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(cycles ${SRC} ${INC} ${INC_SYS})
|
add_executable(cycles ${SRC} ${INC} ${INC_SYS})
|
||||||
unset(SRC)
|
unset(SRC)
|
||||||
|
|
||||||
@@ -82,6 +90,10 @@ if(WITH_CYCLES_STANDALONE)
|
|||||||
# OpenImageDenoise uses BNNS from the Accelerate framework.
|
# OpenImageDenoise uses BNNS from the Accelerate framework.
|
||||||
set_property(TARGET cycles APPEND_STRING PROPERTY LINK_FLAGS " -framework Accelerate")
|
set_property(TARGET cycles APPEND_STRING PROPERTY LINK_FLAGS " -framework Accelerate")
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_CYCLES_STANDALONE_GUI)
|
||||||
|
set_property(TARGET cycles APPEND_STRING PROPERTY LINK_FLAGS
|
||||||
|
" -framework Cocoa -framework CoreAudio -framework AudioUnit -framework AudioToolbox -framework ForceFeedback -framework CoreVideo")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
|
@@ -40,11 +40,10 @@
|
|||||||
#include "app/oiio_output_driver.h"
|
#include "app/oiio_output_driver.h"
|
||||||
|
|
||||||
#ifdef WITH_CYCLES_STANDALONE_GUI
|
#ifdef WITH_CYCLES_STANDALONE_GUI
|
||||||
# include "util/view.h"
|
# include "opengl/display_driver.h"
|
||||||
|
# include "opengl/window.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "app/cycles_xml.h"
|
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
struct Options {
|
struct Options {
|
||||||
@@ -82,7 +81,7 @@ static void session_print_status()
|
|||||||
string status, substatus;
|
string status, substatus;
|
||||||
|
|
||||||
/* get status */
|
/* get status */
|
||||||
float progress = options.session->progress.get_progress();
|
double progress = options.session->progress.get_progress();
|
||||||
options.session->progress.get_status(status, substatus);
|
options.session->progress.get_status(status, substatus);
|
||||||
|
|
||||||
if (substatus != "")
|
if (substatus != "")
|
||||||
@@ -130,7 +129,14 @@ static void session_init()
|
|||||||
options.output_pass = "combined";
|
options.output_pass = "combined";
|
||||||
options.session = new Session(options.session_params, options.scene_params);
|
options.session = new Session(options.session_params, options.scene_params);
|
||||||
|
|
||||||
if (!options.output_filepath.empty()) {
|
#ifdef WITH_CYCLES_STANDALONE_GUI
|
||||||
|
if (!options.session_params.background) {
|
||||||
|
options.session->set_display_driver(make_unique<OpenGLDisplayDriver>(
|
||||||
|
window_opengl_context_enable, window_opengl_context_disable));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
if (!options.output_filepath.empty()) {
|
||||||
options.session->set_output_driver(make_unique<OIIOOutputDriver>(
|
options.session->set_output_driver(make_unique<OIIOOutputDriver>(
|
||||||
options.output_filepath, options.output_pass, session_print));
|
options.output_filepath, options.output_pass, session_print));
|
||||||
}
|
}
|
||||||
@@ -139,7 +145,7 @@ static void session_init()
|
|||||||
options.session->progress.set_update_callback(function_bind(&session_print_status));
|
options.session->progress.set_update_callback(function_bind(&session_print_status));
|
||||||
#ifdef WITH_CYCLES_STANDALONE_GUI
|
#ifdef WITH_CYCLES_STANDALONE_GUI
|
||||||
else
|
else
|
||||||
options.session->progress.set_update_callback(function_bind(&view_redraw));
|
options.session->progress.set_update_callback(function_bind(&window_redraw));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* load scene */
|
/* load scene */
|
||||||
@@ -183,7 +189,7 @@ static void display_info(Progress &progress)
|
|||||||
|
|
||||||
progress.get_time(total_time, sample_time);
|
progress.get_time(total_time, sample_time);
|
||||||
progress.get_status(status, substatus);
|
progress.get_status(status, substatus);
|
||||||
float progress_val = progress.get_progress();
|
double progress_val = progress.get_progress();
|
||||||
|
|
||||||
if (substatus != "")
|
if (substatus != "")
|
||||||
status += ": " + substatus;
|
status += ": " + substatus;
|
||||||
@@ -204,10 +210,10 @@ static void display_info(Progress &progress)
|
|||||||
sample_time,
|
sample_time,
|
||||||
interactive.c_str());
|
interactive.c_str());
|
||||||
|
|
||||||
view_display_info(str.c_str());
|
window_display_info(str.c_str());
|
||||||
|
|
||||||
if (options.show_help)
|
if (options.show_help)
|
||||||
view_display_help();
|
window_display_help();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void display()
|
static void display()
|
||||||
@@ -538,15 +544,15 @@ int main(int argc, const char **argv)
|
|||||||
string title = "Cycles: " + path_filename(options.filepath);
|
string title = "Cycles: " + path_filename(options.filepath);
|
||||||
|
|
||||||
/* init/exit are callback so they run while GL is initialized */
|
/* init/exit are callback so they run while GL is initialized */
|
||||||
view_main_loop(title.c_str(),
|
window_main_loop(title.c_str(),
|
||||||
options.width,
|
options.width,
|
||||||
options.height,
|
options.height,
|
||||||
session_init,
|
session_init,
|
||||||
session_exit,
|
session_exit,
|
||||||
resize,
|
resize,
|
||||||
display,
|
display,
|
||||||
keyboard,
|
keyboard,
|
||||||
motion);
|
motion);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
398
intern/cycles/app/opengl/display_driver.cpp
Normal file
398
intern/cycles/app/opengl/display_driver.cpp
Normal file
@@ -0,0 +1,398 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011-2022 Blender Foundation
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "app/opengl/display_driver.h"
|
||||||
|
#include "app/opengl/shader.h"
|
||||||
|
|
||||||
|
#include "util/log.h"
|
||||||
|
#include "util/string.h"
|
||||||
|
|
||||||
|
#include <GL/glew.h>
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------
|
||||||
|
* OpenGLDisplayDriver.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OpenGLDisplayDriver::OpenGLDisplayDriver(const function<bool()> &gl_context_enable,
|
||||||
|
const function<void()> &gl_context_disable)
|
||||||
|
: gl_context_enable_(gl_context_enable), gl_context_disable_(gl_context_disable)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenGLDisplayDriver::~OpenGLDisplayDriver()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------
|
||||||
|
* Update procedure.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::next_tile_begin()
|
||||||
|
{
|
||||||
|
/* Assuming no tiles used in interactive display. */
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLDisplayDriver::update_begin(const Params ¶ms, int texture_width, int texture_height)
|
||||||
|
{
|
||||||
|
/* Note that it's the responsibility of OpenGLDisplayDriver to ensure updating and drawing
|
||||||
|
* the texture does not happen at the same time. This is achieved indirectly.
|
||||||
|
*
|
||||||
|
* When enabling the OpenGL context, it uses an internal mutex lock DST.gl_context_lock.
|
||||||
|
* This same lock is also held when do_draw() is called, which together ensure mutual
|
||||||
|
* exclusion.
|
||||||
|
*
|
||||||
|
* This locking is not performed on the Cycles side, because that would cause lock inversion. */
|
||||||
|
if (!gl_context_enable_()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gl_render_sync_) {
|
||||||
|
glWaitSync((GLsync)gl_render_sync_, 0, GL_TIMEOUT_IGNORED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gl_texture_resources_ensure()) {
|
||||||
|
gl_context_disable_();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update texture dimensions if needed. */
|
||||||
|
if (texture_.width != texture_width || texture_.height != texture_height) {
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texture_.gl_id);
|
||||||
|
glTexImage2D(
|
||||||
|
GL_TEXTURE_2D, 0, GL_RGBA16F, texture_width, texture_height, 0, GL_RGBA, GL_HALF_FLOAT, 0);
|
||||||
|
texture_.width = texture_width;
|
||||||
|
texture_.height = texture_height;
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
/* Texture did change, and no pixel storage was provided. Tag for an explicit zeroing out to
|
||||||
|
* avoid undefined content. */
|
||||||
|
texture_.need_clear = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update PBO dimensions if needed.
|
||||||
|
*
|
||||||
|
* NOTE: Allocate the PBO for the the size which will fit the final render resolution (as in,
|
||||||
|
* at a resolution divider 1. This was we don't need to recreate graphics interoperability
|
||||||
|
* objects which are costly and which are tied to the specific underlying buffer size.
|
||||||
|
* The downside of this approach is that when graphics interoperability is not used we are
|
||||||
|
* sending too much data to GPU when resolution divider is not 1. */
|
||||||
|
const int buffer_width = params.full_size.x;
|
||||||
|
const int buffer_height = params.full_size.y;
|
||||||
|
if (texture_.buffer_width != buffer_width || texture_.buffer_height != buffer_height) {
|
||||||
|
const size_t size_in_bytes = sizeof(half4) * buffer_width * buffer_height;
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, texture_.gl_pbo_id);
|
||||||
|
glBufferData(GL_PIXEL_UNPACK_BUFFER, size_in_bytes, 0, GL_DYNAMIC_DRAW);
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
|
|
||||||
|
texture_.buffer_width = buffer_width;
|
||||||
|
texture_.buffer_height = buffer_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* New content will be provided to the texture in one way or another, so mark this in a
|
||||||
|
* centralized place. */
|
||||||
|
texture_.need_update = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::update_end()
|
||||||
|
{
|
||||||
|
gl_upload_sync_ = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||||
|
glFlush();
|
||||||
|
|
||||||
|
gl_context_disable_();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------
|
||||||
|
* Texture buffer mapping.
|
||||||
|
*/
|
||||||
|
|
||||||
|
half4 *OpenGLDisplayDriver::map_texture_buffer()
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, texture_.gl_pbo_id);
|
||||||
|
|
||||||
|
half4 *mapped_rgba_pixels = reinterpret_cast<half4 *>(
|
||||||
|
glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY));
|
||||||
|
if (!mapped_rgba_pixels) {
|
||||||
|
LOG(ERROR) << "Error mapping OpenGLDisplayDriver pixel buffer object.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texture_.need_clear) {
|
||||||
|
const int64_t texture_width = texture_.width;
|
||||||
|
const int64_t texture_height = texture_.height;
|
||||||
|
memset(reinterpret_cast<void *>(mapped_rgba_pixels),
|
||||||
|
0,
|
||||||
|
texture_width * texture_height * sizeof(half4));
|
||||||
|
texture_.need_clear = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapped_rgba_pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::unmap_texture_buffer()
|
||||||
|
{
|
||||||
|
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
|
||||||
|
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------
|
||||||
|
* Graphics interoperability.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OpenGLDisplayDriver::GraphicsInterop OpenGLDisplayDriver::graphics_interop_get()
|
||||||
|
{
|
||||||
|
GraphicsInterop interop_dst;
|
||||||
|
|
||||||
|
interop_dst.buffer_width = texture_.buffer_width;
|
||||||
|
interop_dst.buffer_height = texture_.buffer_height;
|
||||||
|
interop_dst.opengl_pbo_id = texture_.gl_pbo_id;
|
||||||
|
|
||||||
|
interop_dst.need_clear = texture_.need_clear;
|
||||||
|
texture_.need_clear = false;
|
||||||
|
|
||||||
|
return interop_dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::graphics_interop_activate()
|
||||||
|
{
|
||||||
|
gl_context_enable_();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::graphics_interop_deactivate()
|
||||||
|
{
|
||||||
|
gl_context_disable_();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------
|
||||||
|
* Drawing.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::clear()
|
||||||
|
{
|
||||||
|
texture_.need_clear = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::draw(const Params ¶ms)
|
||||||
|
{
|
||||||
|
/* See do_update_begin() for why no locking is required here. */
|
||||||
|
if (texture_.need_clear) {
|
||||||
|
/* Texture is requested to be cleared and was not yet cleared.
|
||||||
|
* Do early return which should be equivalent of drawing all-zero texture. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gl_draw_resources_ensure()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gl_upload_sync_) {
|
||||||
|
glWaitSync((GLsync)gl_upload_sync_, 0, GL_TIMEOUT_IGNORED);
|
||||||
|
}
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
display_shader_.bind(params.full_size.x, params.full_size.y);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texture_.gl_id);
|
||||||
|
|
||||||
|
if (texture_.width != params.size.x || texture_.height != params.size.y) {
|
||||||
|
/* Resolution divider is different from 1, force nearest interpolation. */
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
|
||||||
|
|
||||||
|
texture_update_if_needed();
|
||||||
|
vertex_buffer_update(params);
|
||||||
|
|
||||||
|
GLuint vertex_array_object;
|
||||||
|
glGenVertexArrays(1, &vertex_array_object);
|
||||||
|
glBindVertexArray(vertex_array_object);
|
||||||
|
|
||||||
|
const int texcoord_attribute = display_shader_.get_tex_coord_attrib_location();
|
||||||
|
const int position_attribute = display_shader_.get_position_attrib_location();
|
||||||
|
|
||||||
|
glEnableVertexAttribArray(texcoord_attribute);
|
||||||
|
glEnableVertexAttribArray(position_attribute);
|
||||||
|
|
||||||
|
glVertexAttribPointer(
|
||||||
|
texcoord_attribute, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid *)0);
|
||||||
|
glVertexAttribPointer(position_attribute,
|
||||||
|
2,
|
||||||
|
GL_FLOAT,
|
||||||
|
GL_FALSE,
|
||||||
|
4 * sizeof(float),
|
||||||
|
(const GLvoid *)(sizeof(float) * 2));
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
glDeleteVertexArrays(1, &vertex_array_object);
|
||||||
|
|
||||||
|
display_shader_.unbind();
|
||||||
|
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
gl_render_sync_ = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLDisplayDriver::gl_draw_resources_ensure()
|
||||||
|
{
|
||||||
|
if (!texture_.gl_id) {
|
||||||
|
/* If there is no texture allocated, there is nothing to draw. Inform the draw call that it can
|
||||||
|
* can not continue. Note that this is not an unrecoverable error, so once the texture is known
|
||||||
|
* we will come back here and create all the GPU resources needed for draw. */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gl_draw_resource_creation_attempted_) {
|
||||||
|
return gl_draw_resources_created_;
|
||||||
|
}
|
||||||
|
gl_draw_resource_creation_attempted_ = true;
|
||||||
|
|
||||||
|
if (!vertex_buffer_) {
|
||||||
|
glGenBuffers(1, &vertex_buffer_);
|
||||||
|
if (!vertex_buffer_) {
|
||||||
|
LOG(ERROR) << "Error creating vertex buffer.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gl_draw_resources_created_ = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::gl_resources_destroy()
|
||||||
|
{
|
||||||
|
gl_context_enable_();
|
||||||
|
|
||||||
|
if (vertex_buffer_ != 0) {
|
||||||
|
glDeleteBuffers(1, &vertex_buffer_);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texture_.gl_pbo_id) {
|
||||||
|
glDeleteBuffers(1, &texture_.gl_pbo_id);
|
||||||
|
texture_.gl_pbo_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texture_.gl_id) {
|
||||||
|
glDeleteTextures(1, &texture_.gl_id);
|
||||||
|
texture_.gl_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
gl_context_disable_();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLDisplayDriver::gl_texture_resources_ensure()
|
||||||
|
{
|
||||||
|
if (texture_.creation_attempted) {
|
||||||
|
return texture_.is_created;
|
||||||
|
}
|
||||||
|
texture_.creation_attempted = true;
|
||||||
|
|
||||||
|
DCHECK(!texture_.gl_id);
|
||||||
|
DCHECK(!texture_.gl_pbo_id);
|
||||||
|
|
||||||
|
/* Create texture. */
|
||||||
|
glGenTextures(1, &texture_.gl_id);
|
||||||
|
if (!texture_.gl_id) {
|
||||||
|
LOG(ERROR) << "Error creating texture.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure the texture. */
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texture_.gl_id);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
/* Create PBO for the texture. */
|
||||||
|
glGenBuffers(1, &texture_.gl_pbo_id);
|
||||||
|
if (!texture_.gl_pbo_id) {
|
||||||
|
LOG(ERROR) << "Error creating texture pixel buffer object.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Creation finished with a success. */
|
||||||
|
texture_.is_created = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::texture_update_if_needed()
|
||||||
|
{
|
||||||
|
if (!texture_.need_update) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, texture_.gl_pbo_id);
|
||||||
|
glTexSubImage2D(
|
||||||
|
GL_TEXTURE_2D, 0, 0, 0, texture_.width, texture_.height, GL_RGBA, GL_HALF_FLOAT, 0);
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
|
|
||||||
|
texture_.need_update = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDisplayDriver::vertex_buffer_update(const Params ¶ms)
|
||||||
|
{
|
||||||
|
/* Invalidate old contents - avoids stalling if the buffer is still waiting in queue to be
|
||||||
|
* rendered. */
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW);
|
||||||
|
|
||||||
|
float *vpointer = reinterpret_cast<float *>(glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY));
|
||||||
|
if (!vpointer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vpointer[0] = 0.0f;
|
||||||
|
vpointer[1] = 0.0f;
|
||||||
|
vpointer[2] = params.full_offset.x;
|
||||||
|
vpointer[3] = params.full_offset.y;
|
||||||
|
|
||||||
|
vpointer[4] = 1.0f;
|
||||||
|
vpointer[5] = 0.0f;
|
||||||
|
vpointer[6] = (float)params.size.x + params.full_offset.x;
|
||||||
|
vpointer[7] = params.full_offset.y;
|
||||||
|
|
||||||
|
vpointer[8] = 1.0f;
|
||||||
|
vpointer[9] = 1.0f;
|
||||||
|
vpointer[10] = (float)params.size.x + params.full_offset.x;
|
||||||
|
vpointer[11] = (float)params.size.y + params.full_offset.y;
|
||||||
|
|
||||||
|
vpointer[12] = 0.0f;
|
||||||
|
vpointer[13] = 1.0f;
|
||||||
|
vpointer[14] = params.full_offset.x;
|
||||||
|
vpointer[15] = (float)params.size.y + params.full_offset.y;
|
||||||
|
|
||||||
|
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
|
CCL_NAMESPACE_END
|
130
intern/cycles/app/opengl/display_driver.h
Normal file
130
intern/cycles/app/opengl/display_driver.h
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011-2022 Blender Foundation
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
|
#include "app/opengl/shader.h"
|
||||||
|
|
||||||
|
#include "session/display_driver.h"
|
||||||
|
|
||||||
|
#include "util/function.h"
|
||||||
|
#include "util/unique_ptr.h"
|
||||||
|
|
||||||
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
class OpenGLDisplayDriver : public DisplayDriver {
|
||||||
|
public:
|
||||||
|
/* Callbacks for enabling and disabling the OpenGL context. Must be provided to support enabling
|
||||||
|
* the context on the Cycles render thread independent of the main thread. */
|
||||||
|
OpenGLDisplayDriver(const function<bool()> &gl_context_enable,
|
||||||
|
const function<void()> &gl_context_disable);
|
||||||
|
~OpenGLDisplayDriver();
|
||||||
|
|
||||||
|
virtual void graphics_interop_activate() override;
|
||||||
|
virtual void graphics_interop_deactivate() override;
|
||||||
|
|
||||||
|
virtual void clear() override;
|
||||||
|
|
||||||
|
void set_zoom(float zoom_x, float zoom_y);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void next_tile_begin() override;
|
||||||
|
|
||||||
|
virtual bool update_begin(const Params ¶ms, int texture_width, int texture_height) override;
|
||||||
|
virtual void update_end() override;
|
||||||
|
|
||||||
|
virtual half4 *map_texture_buffer() override;
|
||||||
|
virtual void unmap_texture_buffer() override;
|
||||||
|
|
||||||
|
virtual GraphicsInterop graphics_interop_get() override;
|
||||||
|
|
||||||
|
virtual void draw(const Params ¶ms) override;
|
||||||
|
|
||||||
|
/* Make sure texture is allocated and its initial configuration is performed. */
|
||||||
|
bool gl_texture_resources_ensure();
|
||||||
|
|
||||||
|
/* Ensure all runtime GPU resources needed for drawing are allocated.
|
||||||
|
* Returns true if all resources needed for drawing are available. */
|
||||||
|
bool gl_draw_resources_ensure();
|
||||||
|
|
||||||
|
/* Destroy all GPU resources which are being used by this object. */
|
||||||
|
void gl_resources_destroy();
|
||||||
|
|
||||||
|
/* Update GPU texture dimensions and content if needed (new pixel data was provided).
|
||||||
|
*
|
||||||
|
* NOTE: The texture needs to be bound. */
|
||||||
|
void texture_update_if_needed();
|
||||||
|
|
||||||
|
/* Update vertex buffer with new coordinates of vertex positions and texture coordinates.
|
||||||
|
* This buffer is used to render texture in the viewport.
|
||||||
|
*
|
||||||
|
* NOTE: The buffer needs to be bound. */
|
||||||
|
void vertex_buffer_update(const Params ¶ms);
|
||||||
|
|
||||||
|
/* Texture which contains pixels of the render result. */
|
||||||
|
struct {
|
||||||
|
/* Indicates whether texture creation was attempted and succeeded.
|
||||||
|
* Used to avoid multiple attempts of texture creation on GPU issues or GPU context
|
||||||
|
* misconfiguration. */
|
||||||
|
bool creation_attempted = false;
|
||||||
|
bool is_created = false;
|
||||||
|
|
||||||
|
/* OpenGL resource IDs of the texture itself and Pixel Buffer Object (PBO) used to write
|
||||||
|
* pixels to it.
|
||||||
|
*
|
||||||
|
* NOTE: Allocated on the engine's context. */
|
||||||
|
uint gl_id = 0;
|
||||||
|
uint gl_pbo_id = 0;
|
||||||
|
|
||||||
|
/* Is true when new data was written to the PBO, meaning, the texture might need to be resized
|
||||||
|
* and new data is to be uploaded to the GPU. */
|
||||||
|
bool need_update = false;
|
||||||
|
|
||||||
|
/* Content of the texture is to be filled with zeroes. */
|
||||||
|
std::atomic<bool> need_clear = true;
|
||||||
|
|
||||||
|
/* Dimensions of the texture in pixels. */
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
|
||||||
|
/* Dimensions of the underlying PBO. */
|
||||||
|
int buffer_width = 0;
|
||||||
|
int buffer_height = 0;
|
||||||
|
} texture_;
|
||||||
|
|
||||||
|
OpenGLShader display_shader_;
|
||||||
|
|
||||||
|
/* Special track of whether GPU resources were attempted to be created, to avoid attempts of
|
||||||
|
* their re-creation on failure on every redraw. */
|
||||||
|
bool gl_draw_resource_creation_attempted_ = false;
|
||||||
|
bool gl_draw_resources_created_ = false;
|
||||||
|
|
||||||
|
/* Vertex buffer which hold vertices of a triangle fan which is textures with the texture
|
||||||
|
* holding the render result. */
|
||||||
|
uint vertex_buffer_ = 0;
|
||||||
|
|
||||||
|
void *gl_render_sync_ = nullptr;
|
||||||
|
void *gl_upload_sync_ = nullptr;
|
||||||
|
|
||||||
|
float2 zoom_ = make_float2(1.0f, 1.0f);
|
||||||
|
|
||||||
|
function<bool()> gl_context_enable_ = nullptr;
|
||||||
|
function<void()> gl_context_disable_ = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
CCL_NAMESPACE_END
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user