Compare commits
2309 Commits
fixed_widt
...
temp_test_
Author | SHA1 | Date | |
---|---|---|---|
c8004ff653 | |||
fdffbf87ac | |||
bee00909bc | |||
562723b080 | |||
2195a5eb2c | |||
4307c0eb68 | |||
2d473ff4a8 | |||
2b2b569229 | |||
015dae3dc5 | |||
3fc687ad75 | |||
76beed9068 | |||
645aee0835 | |||
83bfa950b1 | |||
898625547f | |||
73150981c8 | |||
c9f1e104da | |||
336b263b56 | |||
b3ed969b86 | |||
87feba04dd | |||
1ca57bc5f4 | |||
7749b89d74 | |||
bae92a0ce5 | |||
5223f73a1d | |||
fe47584316 | |||
2d3d6eb7b2 | |||
f0c35d16f3 | |||
85d274a60c | |||
d3bba94bf2 | |||
6cf734a2e5 | |||
6b0aa7ae15 | |||
9566e3bc9c | |||
8ee7f62a63 | |||
365443412c | |||
![]() |
9a41b44197 | ||
e1d7ce005f | |||
1cd20b0026 | |||
9dee0a10c8 | |||
06ac655b8d | |||
04c3690299 | |||
6dca61b91c | |||
8bc27c508a | |||
f8b51f702c | |||
180bafe225 | |||
da2ba40268 | |||
633c29fb7b | |||
8e21d528ca | |||
4fa0bbb5ac | |||
a1c65748c4 | |||
8e2e44b58b | |||
627edd1efa | |||
7a9cfd08a8 | |||
445889676b | |||
db7fca3588 | |||
f81bacd6f0 | |||
ddb7cb7e4a | |||
31a0708cb1 | |||
58043c0637 | |||
c9daab7936 | |||
73ed076489 | |||
867e6ffe88 | |||
f2cfad77f9 | |||
9fee59a484 | |||
c938d9a0e5 | |||
08aa0eb15d | |||
e97653ccf3 | |||
3deb56424f | |||
e04a10adab | |||
27b6636c45 | |||
4ec2bdbbda | |||
1d5cc52ef6 | |||
1fce66190a | |||
236a9f0814 | |||
4f38624bf5 | |||
95c2f0bea8 | |||
bfe8f29baf | |||
860a55d8fc | |||
0e329a967e | |||
0530b67909 | |||
289f68588a | |||
350e783668 | |||
28bd74c186 | |||
8c5d9fa929 | |||
525def99bc | |||
acb8909021 | |||
![]() |
231948f33f | ||
a866a32ff2 | |||
4a009b54bc | |||
51f7d24a4e | |||
b6d890672c | |||
![]() |
a6adb7ecae | ||
09f14b38f2 | |||
5841f8656d | |||
e456a9de57 | |||
46fff97604 | |||
5c6cc931b2 | |||
1bd28a5e0c | |||
c420399f4d | |||
429136c89f | |||
0b2aee5841 | |||
ecdd6a302e | |||
e6ca054590 | |||
173f5f94ff | |||
fb27a9bb98 | |||
785e7ddf10 | |||
8cbe55c9e9 | |||
a2c5c2b406 | |||
c1cf66bff3 | |||
202dc3631e | |||
94dd30208e | |||
56f8d7c705 | |||
e1714ce8c9 | |||
97de4f07a3 | |||
e6fa74ffed | |||
![]() |
7c7348f78d | ||
0ed089cebd | |||
3be5ce4aad | |||
cddb792021 | |||
2d13c823ee | |||
edaeec3e72 | |||
dee0b56b92 | |||
426e2663a0 | |||
fd60f6713a | |||
90a48fa064 | |||
1c1be5bdf4 | |||
30845b5c8e | |||
0eeaeb3fc2 | |||
917a972b56 | |||
3df335d330 | |||
9b0b78d58f | |||
3ff60bcad8 | |||
9fe6854a93 | |||
![]() |
4f73d43adc | ||
a78410386b | |||
1bcdd1c54e | |||
503d79cd77 | |||
![]() |
6f52ebba19 | ||
c9c890f196 | |||
4b06420e65 | |||
603ae580ce | |||
b777df8080 | |||
410dc76177 | |||
f6ebbfe7de | |||
9d6e960e2c | |||
0676928408 | |||
25550c210a | |||
eaa35b27e0 | |||
9b2b32a333 | |||
9d336576b5 | |||
e68667a835 | |||
![]() |
e0394761b9 | ||
b5a1c194c5 | |||
2aa7edbe6b | |||
86972d294f | |||
15405685d9 | |||
b9febb54a4 | |||
c946fdb2e5 | |||
863460e5a5 | |||
cbe05edde5 | |||
4e78b89e48 | |||
166c8be7ac | |||
aeeffb935e | |||
6ae8de4742 | |||
d475f99460 | |||
cb83313863 | |||
![]() |
eab26f1334 | ||
8745bb9628 | |||
6a00e7a428 | |||
5e0684b07d | |||
![]() |
28f773925a | ||
6b7b4f8e57 | |||
e2f99c338b | |||
![]() |
128eb6cbe9 | ||
42215d7cb8 | |||
eb96f0cf06 | |||
0467ff4053 | |||
ca39aff59d | |||
7a5216497c | |||
![]() |
7f1fe10595 | ||
a1167e910a | |||
![]() |
60cfdf0809 | ||
a00507c482 | |||
fe4286435c | |||
93d2940603 | |||
284c9430f9 | |||
![]() |
db6b3801b3 | ||
82ab2c1678 | |||
ee3b4e8420 | |||
c9347b9a7f | |||
f52a03dd71 | |||
f13eb69269 | |||
efcf46fb6d | |||
84d03a1298 | |||
45c44a5b5b | |||
ed4ef77f49 | |||
b4fd8750f9 | |||
62ec88eb84 | |||
3eb6569b38 | |||
![]() |
07c6af4136 | ||
fc46035117 | |||
da50cd86a7 | |||
bf47fb40fd | |||
0f6be4e152 | |||
0c0e5a8420 | |||
f8ead736a0 | |||
a52f89a446 | |||
9f3bafc4ab | |||
9bb99532a5 | |||
b813648378 | |||
3da09f4e29 | |||
bda9e4238a | |||
c8f80453d5 | |||
f9ebd17b4b | |||
bb1096f475 | |||
df65103bf0 | |||
a131e3bec7 | |||
4e91cd5c11 | |||
8f785524ae | |||
5bfc3a3421 | |||
6fc94d1848 | |||
6bc6ffc35c | |||
96ef184377 | |||
ba5d9fa275 | |||
b5f2b81751 | |||
60e9fb9929 | |||
![]() |
2b2d427bba | ||
3e6edf5278 | |||
![]() |
54f5c174a8 | ||
8d40d61af0 | |||
7beb4a0e0a | |||
1680c3d510 | |||
e6a1d488ab | |||
4abbf6d82b | |||
![]() |
adbafe3b43 | ||
a392609ab6 | |||
73ef2fc2f4 | |||
08acbdc1ff | |||
2b4afcbb4c | |||
c2ce68a018 | |||
8cc3d2d6f5 | |||
d7d8eb7de4 | |||
08593e46a3 | |||
3b1a16833b | |||
5a9a16334c | |||
d9ad77fa58 | |||
bd79d6067c | |||
ce71357711 | |||
![]() |
5a02d0da7a | ||
3e23af4c49 | |||
a3ca973dec | |||
861b7071a2 | |||
![]() |
5eed7cdc8c | ||
e2bbb5b07e | |||
4d0497bea4 | |||
4f0ec3cea5 | |||
687f70ceca | |||
a0912ff566 | |||
49f1695ed0 | |||
81978594a8 | |||
b4c9f88cbe | |||
3e44592cb9 | |||
58632a7f3c | |||
91bca410c0 | |||
bf0ac711fd | |||
![]() |
4ddad5a7ee | ||
![]() |
d10ea97053 | ||
b7718bbdf5 | |||
079bd11556 | |||
b225a7c470 | |||
d84c79a218 | |||
9d7cb5c4a1 | |||
9290b41381 | |||
![]() |
54b72fe9ff | ||
![]() |
c23b6596b9 | ||
![]() |
863d806526 | ||
e6194e7357 | |||
716682365c | |||
4fb7217043 | |||
235655ee0d | |||
a45dd52cf0 | |||
![]() |
ac97893dfc | ||
ae334532cf | |||
f9ccd26b03 | |||
0950cfd9d5 | |||
f530b43550 | |||
d97fd305a0 | |||
671640b4c7 | |||
![]() |
684500837d | ||
37bce7b701 | |||
4a3243f311 | |||
6febbd7a55 | |||
416c7a32d8 | |||
d4badd4b22 | |||
4e43e09cca | |||
21b6d78cd2 | |||
6fc92b296f | |||
8849bed671 | |||
546314fc96 | |||
799a2b07ad | |||
2b20931707 | |||
a8739ae6c2 | |||
a2f3aca647 | |||
19e1b5c1fd | |||
0708733c46 | |||
809b33b69a | |||
416686707f | |||
![]() |
0ccbf50694 | ||
4170668776 | |||
f77de678d8 | |||
011d3a95e0 | |||
6c177838f3 | |||
baee000001 | |||
f8dd0d0dba | |||
8bfbbc467a | |||
42546db490 | |||
99c981fd06 | |||
083a8921ec | |||
f62eb8ac16 | |||
2aad8fc7bc | |||
7ec839adfa | |||
79281336c0 | |||
8355e3fc77 | |||
e04631f44a | |||
93c6b12df5 | |||
0c5f6f9fa7 | |||
18a4e5d561 | |||
89fa9aada5 | |||
1730829592 | |||
5352b33598 | |||
2914ec571e | |||
f1cdd49a4e | |||
90dac47717 | |||
838b6ec48a | |||
60fba8202c | |||
cfc674408e | |||
596f1878b6 | |||
37943b00f2 | |||
99b1e8428d | |||
b18122451f | |||
84f826ff23 | |||
1be598ba68 | |||
6931a6f3bd | |||
63dc286b01 | |||
a18d88213f | |||
3abf56db27 | |||
9ab31b53b7 | |||
a7ee49d065 | |||
b0cb0a7854 | |||
3b2a01edf6 | |||
d8b445e728 | |||
af7233368d | |||
f6d133e2d2 | |||
f4eacad48f | |||
1f0d63b9a1 | |||
8e00db4296 | |||
fa4a35d4c4 | |||
fa4f9292e1 | |||
d718d6b449 | |||
29590eec6e | |||
c758b87c5e | |||
ea575744b8 | |||
63a5f723d6 | |||
3e4d720ae4 | |||
aabe6e3b45 | |||
65739ded54 | |||
b08ab49cce | |||
bd67bf4d10 | |||
1541fbb4a0 | |||
d374ff5b8f | |||
baa24243a5 | |||
fbcb9c5e3f | |||
c84d1ad3db | |||
0a8f53a7b8 | |||
b7cb7b78a8 | |||
af3f744b41 | |||
171c3bd2b0 | |||
1e69a25043 | |||
e8684eff30 | |||
![]() |
e76f04c870 | ||
9ad56627cf | |||
![]() |
a71d2b2601 | ||
41eb33794c | |||
![]() |
b44406f963 | ||
73529fb1bb | |||
![]() |
b42354672e | ||
![]() |
084180874c | ||
2f7258d618 | |||
381ef09073 | |||
56ba339cd8 | |||
055fa3fa5e | |||
4256eeeec4 | |||
7d5c3beb06 | |||
39b0e9df81 | |||
6648f82ef7 | |||
320ff87948 | |||
457302b67b | |||
079791dc30 | |||
0b6be26126 | |||
b21595cdf9 | |||
e4b36fb6bc | |||
966e4ba9ae | |||
268682527f | |||
eae4e22518 | |||
276a862ebc | |||
400605c3a6 | |||
071007e0ef | |||
8b9a3b94fc | |||
3f5e0f7d91 | |||
57e8714b38 | |||
c88ba461cf | |||
59cd9c6da6 | |||
7f7370fa26 | |||
6845aad1a2 | |||
cdb52aee9f | |||
8b02ab86f1 | |||
019700583b | |||
7dba879829 | |||
7652ee43ec | |||
89dae554f9 | |||
31d2b04411 | |||
523bc981cf | |||
3508c699fb | |||
61f9274d07 | |||
efc129bc82 | |||
![]() |
20ef771374 | ||
8949eab27e | |||
8ea7c93a37 | |||
8b8733e76c | |||
4dda04eaa9 | |||
2b64b4d90d | |||
e5ed9991ea | |||
![]() |
8e5b7ac6e2 | ||
583f694826 | |||
aadbdb8048 | |||
![]() |
d7b0567f7c | ||
06a60fe9f7 | |||
30691560fa | |||
edb95b3fcb | |||
1bb2077250 | |||
2419ffa183 | |||
da17692a3d | |||
1434ac3767 | |||
c52db4c4cf | |||
ec66b3ef9b | |||
1f2bf2fd73 | |||
fe73778095 | |||
d3514cd6a7 | |||
082ddc9379 | |||
f464cac55a | |||
2fb57685e3 | |||
efcac47155 | |||
cec35060f5 | |||
4e16e8b671 | |||
84f048fda5 | |||
42032db1c2 | |||
afcd06e1e1 | |||
ff85ac3009 | |||
e5a5a251d2 | |||
70fbdcb6bf | |||
5b751c95f4 | |||
518b97e674 | |||
05564c8ca6 | |||
8fb9155598 | |||
0d36439f95 | |||
f49d438ced | |||
796035ad93 | |||
0fd1e6a5f4 | |||
5a0ec2302e | |||
940ba74024 | |||
d6ace5a7bb | |||
cb9c0aa7d0 | |||
a34652d6f8 | |||
12f87d02c6 | |||
452cc01932 | |||
8d634c1b27 | |||
e91fd3b816 | |||
a2597f8b83 | |||
b98b9354b2 | |||
9df063df19 | |||
820d50d3cb | |||
38630711a0 | |||
be906f44c6 | |||
70f890b510 | |||
f80c39b74e | |||
891e3e98eb | |||
a2e0f714f2 | |||
9680edf77c | |||
5ef3afd87c | |||
f53cf5141d | |||
19da434e9c | |||
![]() |
38bdde852f | ||
551521cfa4 | |||
b55c02a206 | |||
9327c00f70 | |||
038f9b7f4a | |||
7aff40f410 | |||
3c82725d74 | |||
46913bf0a0 | |||
4e4ac5a867 | |||
![]() |
30d3dd4de1 | ||
a00bfa8976 | |||
983280b014 | |||
de60205f19 | |||
e0a6001a22 | |||
8b55cda048 | |||
bde54e127e | |||
8371df8b1c | |||
a311ab6167 | |||
bffa168157 | |||
![]() |
eec1ea0ccf | ||
929d7597b3 | |||
a57ba4147f | |||
709ce44617 | |||
24a3446787 | |||
a0c8ee057a | |||
![]() |
875c2ea5b5 | ||
be1891e895 | |||
cbe4036406 | |||
eb0c50ac78 | |||
6e51ef9531 | |||
![]() |
ebdae75736 | ||
7d17f2addf | |||
4c6d207343 | |||
42f89b9212 | |||
153b45037f | |||
daa7c59e38 | |||
344aca3b1b | |||
064167fce7 | |||
a95e56b741 | |||
8f4730e66f | |||
![]() |
21d4a888b8 | ||
![]() |
cd118c5581 | ||
27f138f4c8 | |||
2f0e350ffd | |||
b4b3f518aa | |||
5aa3167e48 | |||
8165333de9 | |||
9564b6cf23 | |||
9b8c82e2ed | |||
5866a4680d | |||
0682af0d63 | |||
62f2204d65 | |||
aa067bef5e | |||
0de3d4e8c7 | |||
d795144f54 | |||
de6258c618 | |||
d912ceeb40 | |||
9a197a1185 | |||
36785c83f0 | |||
b477333473 | |||
a1e91fbef3 | |||
8eb7a04150 | |||
97c3e5944c | |||
6f523ffacb | |||
721fad37a1 | |||
67c29bc5a2 | |||
2ea66af742 | |||
2b170f16d6 | |||
34a05f39be | |||
0b7947e855 | |||
47e68537f8 | |||
04562794df | |||
93004c7b19 | |||
0d542db1e1 | |||
c671bfe14e | |||
aed5a27755 | |||
0d7aab2375 | |||
b6a1bf757d | |||
86622467c5 | |||
![]() |
cd8d9383e7 | ||
1b5f17b867 | |||
6a404bc633 | |||
9bfc47c933 | |||
accf3045be | |||
ef502127dd | |||
0081200812 | |||
7d8c71e800 | |||
c1227fd408 | |||
d217b34214 | |||
fd51b05a02 | |||
2b6f0cc836 | |||
e95b197e98 | |||
cea24b4b4a | |||
e05db0c26b | |||
40f0783d51 | |||
15a46a8b72 | |||
9e2cd6b077 | |||
a48df97ada | |||
ce3a6d7989 | |||
44b25b0ea5 | |||
fca6b2780f | |||
f8637cd8af | |||
5b51df0f33 | |||
962153dbed | |||
c0dd6f1164 | |||
72f73c0b71 | |||
dbc4f6fdc9 | |||
871f7f4ad8 | |||
3febcb98ed | |||
0896457c59 | |||
214e4aac97 | |||
479cc9a83e | |||
71655ff8df | |||
7192e57d63 | |||
b0d9e6797f | |||
119d53263f | |||
![]() |
85b044b3ef | ||
46aafbbf66 | |||
e648e38887 | |||
0f49e4832c | |||
d5776f4829 | |||
51862c8445 | |||
5b97c00e9f | |||
4db4123409 | |||
cf72194214 | |||
de1f2c41fa | |||
22ab0159a9 | |||
4734de1093 | |||
594790d8a5 | |||
7a4ef5256a | |||
feaa61a968 | |||
ac09411368 | |||
a217e043be | |||
55f9014616 | |||
6b041ad3d0 | |||
b8ecdbcd96 | |||
e5f8db92b6 | |||
fffe219bdb | |||
1d06d35034 | |||
ba71eb467e | |||
9bfd4ae222 | |||
![]() |
04376c3bac | ||
787350dde8 | |||
7bffafab7b | |||
![]() |
c0f600cad1 | ||
400cb25fc7 | |||
f41beca977 | |||
106f542ac4 | |||
24c16f5457 | |||
809dce5bde | |||
![]() |
e3098de2a1 | ||
23132fcdc1 | |||
60d6333b80 | |||
![]() |
88dc274d05 | ||
96d0cd57dc | |||
e98824d6c4 | |||
7f38872533 | |||
0246128b7f | |||
f8dd0080a9 | |||
6028ac44a1 | |||
83f94ebb6f | |||
7304541f66 | |||
32844d32c1 | |||
4443831c6b | |||
6baa62245f | |||
954aa88ba4 | |||
cb40c7ca1f | |||
4c8d68c032 | |||
736b6a70a4 | |||
![]() |
69fdcea978 | ||
ba055493a0 | |||
![]() |
d60e28093f | ||
869b84452a | |||
eaa1527385 | |||
9503751c83 | |||
dcaba4c5e3 | |||
4dba206011 | |||
b5117660da | |||
035d4c28ab | |||
df3884d512 | |||
7db3746033 | |||
394a0b0da5 | |||
118946d195 | |||
2946f72a2a | |||
ded68fb102 | |||
6df81ddb84 | |||
a01cf90fd8 | |||
43ad345caa | |||
e314260fa7 | |||
08af3e6e92 | |||
fb463a13cd | |||
![]() |
fecec1644c | ||
b5100e73c8 | |||
ddecd7aaca | |||
![]() |
c48a01a88a | ||
c0016a8581 | |||
4300050e20 | |||
87adcbc94f | |||
6aebbe6a0a | |||
eb278f5e12 | |||
ab632243e6 | |||
8510c77b9c | |||
899935d5d0 | |||
3f0d785d23 | |||
d5261e973b | |||
8f2b60ddbf | |||
6a4533dd02 | |||
ae3472998a | |||
![]() |
0ed2df81cc | ||
5655b3d1c5 | |||
5225e459da | |||
bb0e29c922 | |||
7772880d69 | |||
77744b581d | |||
![]() |
0b3c7544b5 | ||
4cadccebfa | |||
b9486c39bc | |||
fd29a161cc | |||
00f264ea42 | |||
0ae23636e7 | |||
5f6033e091 | |||
7b5acc8009 | |||
160d57d33c | |||
3e775a4fc5 | |||
41e6509818 | |||
8fa05efe0a | |||
92f4abc37f | |||
b51a473e29 | |||
ab344775c2 | |||
ed38d0c25d | |||
399b6ec76c | |||
1275ce61b1 | |||
e0fd5fef12 | |||
f801d40daf | |||
3930b8c69e | |||
333c3c92ab | |||
dc8844f8ef | |||
![]() |
d6891d9bee | ||
215734bc52 | |||
6293cf6131 | |||
ad2fb92e9c | |||
04ef718226 | |||
806bf3f452 | |||
83603ba26a | |||
40aa321dc7 | |||
497bc4d199 | |||
216414c65a | |||
c741558509 | |||
1ef275963d | |||
4f61843a7e | |||
45d100208e | |||
48c8f9fc9a | |||
cd1bb63159 | |||
![]() |
bb487bc2bc | ||
e53afad241 | |||
c9a9d5332b | |||
![]() |
e6bbbd965a | ||
6d24017529 | |||
6a9d7139f7 | |||
![]() |
bbcb60fb22 | ||
62cb5c5c4a | |||
48ba341d15 | |||
6aae140278 | |||
f3e26c847b | |||
cbc671947a | |||
18fbcaf7b9 | |||
![]() |
2f39f7f815 | ||
d480f03952 | |||
55615e2600 | |||
fcd2d63b64 | |||
8652e69d8b | |||
32c687b5ec | |||
946da86e02 | |||
6806459246 | |||
b6538e1492 | |||
eb03529ab9 | |||
d481c6651d | |||
8f6cc16490 | |||
b81d88a8e2 | |||
1a9b9dd64d | |||
5deb3229a0 | |||
079f35572b | |||
0116a567dd | |||
6c0c766bca | |||
4599748962 | |||
![]() |
e38de11f05 | ||
9c0f11344e | |||
05879f2c36 | |||
fe1740ae6a | |||
aab7540b7a | |||
895d3cd11e | |||
182edd4c35 | |||
76d52cbcb4 | |||
7c2c66cdb8 | |||
61040a36aa | |||
128ca8c7f6 | |||
692e926b18 | |||
49ea8e4fea | |||
b83ee724a4 | |||
4ca19c7153 | |||
3335f852a1 | |||
26fea4de63 | |||
d9930cddfd | |||
cb7b4064d6 | |||
![]() |
cd692c6954 | ||
3b87fd376a | |||
![]() |
8e3dea27ec | ||
2d867426b1 | |||
ce95a2b148 | |||
b04997cca4 | |||
fddd5eb692 | |||
ff594715b8 | |||
71e2c366f7 | |||
6fe00939b0 | |||
6deb37474e | |||
e2a411570e | |||
3886ab05b4 | |||
73b047bcd4 | |||
22ed1c7b61 | |||
0e4a250279 | |||
7ea577eef3 | |||
d6f162dfa9 | |||
0986992dbd | |||
909e0819ae | |||
52c349cfcd | |||
b417fb9251 | |||
64d750fb73 | |||
d3a699925d | |||
eb165f574b | |||
![]() |
8830cfe541 | ||
ff9bc901f4 | |||
3ea6cf7d41 | |||
4c26bb0232 | |||
![]() |
0be26f563e | ||
76e24609fd | |||
3f1873111e | |||
b541b5f875 | |||
a7aeec2655 | |||
a80c381ec5 | |||
1e9a7383ef | |||
a7bb537a61 | |||
dc738de90c | |||
![]() |
b33b70ed07 | ||
8ed4c5fc61 | |||
d245782b80 | |||
76bd253be7 | |||
c78b0874ad | |||
3fab16fe8e | |||
4f64fa4f86 | |||
69c9363e39 | |||
335379d8fc | |||
3fbe6f513d | |||
9cff9f9f5d | |||
2796ee7da0 | |||
01c1b1e82e | |||
f4adb35f28 | |||
b0df8f53ba | |||
4c675bc356 | |||
151eed752b | |||
d98791a106 | |||
6188c29603 | |||
1ab75c1d49 | |||
bb8ce95b5e | |||
bc97d78329 | |||
99738fbfdc | |||
1f8485ae82 | |||
![]() |
bc0d55e724 | ||
263fa406cd | |||
![]() |
92edf37997 | ||
![]() |
89014b51f1 | ||
cf10eb54cc | |||
b991a92aab | |||
d01781129f | |||
4dd6c9ad45 | |||
6844f7bedb | |||
![]() |
bd44e82b25 | ||
c15635bd8d | |||
04c24bec07 | |||
ff2265f0a9 | |||
8158211198 | |||
ca64bd0aac | |||
6c326ba0a2 | |||
834523e239 | |||
27b9cb7a1e | |||
03d7561708 | |||
b4f950cbbe | |||
![]() |
cc4e674e41 | ||
e844e9e8f3 | |||
0cff7c2a22 | |||
720ea8a67d | |||
be6409a748 | |||
fb1822ddeb | |||
f45860fba9 | |||
ed9759349b | |||
02e0c6f42e | |||
317f09ebf9 | |||
03e2f11d48 | |||
647a8bff06 | |||
f5acfd9c04 | |||
d8582d966f | |||
2b51124d6a | |||
450593ddf0 | |||
d3d4be1db3 | |||
d1c5e2e050 | |||
604ae5f7b6 | |||
1def985d78 | |||
438d645a36 | |||
171433e841 | |||
d6ca7ab20e | |||
07b702f828 | |||
1d1020b79f | |||
01965a275c | |||
49acc52e02 | |||
8abf6efcf6 | |||
![]() |
10b9621079 | ||
ae920d789e | |||
b5bfb5f34c | |||
c18d91918f | |||
58ba75f9e3 | |||
a8185d2d74 | |||
2af789d1f3 | |||
c1730ed165 | |||
145270d8d7 | |||
e5d4a0c559 | |||
26c2c617b4 | |||
![]() |
76dcf70dac | ||
d2130c5327 | |||
add719e31a | |||
ac6b263906 | |||
557e7f135e | |||
051141acde | |||
d9a530c55e | |||
![]() |
8c21076add | ||
![]() |
c8004ab407 | ||
![]() |
b867df903f | ||
cb67bfdba2 | |||
218df99410 | |||
3b0fab6dfa | |||
effc048710 | |||
cd92b2350f | |||
10464843dd | |||
![]() |
0f45576590 | ||
26f1a5e2c8 | |||
5950b3ab73 | |||
71dc134f89 | |||
7389fd9a35 | |||
8a1c1279b3 | |||
0d2589d08c | |||
fb87d236ed | |||
18d900caca | |||
41357d556f | |||
39e914cee7 | |||
57281b73c4 | |||
652fbc2005 | |||
a25a1f39aa | |||
4e1a1821e0 | |||
391af6bea2 | |||
7724251af8 | |||
d3dd735fea | |||
cec103d5a9 | |||
0342fb5d20 | |||
dbd34a5acb | |||
b35a96e195 | |||
20d5d7b8ec | |||
c6f64d46ed | |||
![]() |
ea54cbe1b4 | ||
28b9dd7b1f | |||
c0900a64ce | |||
b1a607ce04 | |||
f8abc3fb2f | |||
d6e97a53ab | |||
b54e741a8b | |||
00b57136e4 | |||
![]() |
6f50969406 | ||
![]() |
ebd55b4acd | ||
![]() |
a53feb0aff | ||
c1a477b497 | |||
1973fd89df | |||
04c75c5ce7 | |||
223f048138 | |||
efd7c95bb2 | |||
a4813379f9 | |||
b2dc8bd92e | |||
4f6f445120 | |||
8b93265c19 | |||
a2203a27d9 | |||
67d56eb71e | |||
77187718e4 | |||
eccd8af828 | |||
1062649b5e | |||
3ff5d8f719 | |||
ceb049133c | |||
d8bf332f86 | |||
![]() |
0e4f7b4a4b | ||
11cfa6c718 | |||
d60a7a8744 | |||
8edb2222ae | |||
aa60416361 | |||
06cb48e1b2 | |||
1f0d6f7635 | |||
3fd5c93f9c | |||
de91cdd930 | |||
48722e8971 | |||
1cf45fe10f | |||
![]() |
836aeebf70 | ||
79277986c2 | |||
17243337d7 | |||
d3faf09082 | |||
2f63303e25 | |||
8063f10166 | |||
37e2fec090 | |||
7c961e716d | |||
524908146c | |||
d91c266986 | |||
e9dc6a0e09 | |||
35894dc700 | |||
54bd5efa68 | |||
549e2b7539 | |||
d2675c3c5d | |||
5762e7a679 | |||
4dbf4eb100 | |||
96fb21f3af | |||
a9ea310d30 | |||
0b10a96474 | |||
f7836019b3 | |||
9ac782b823 | |||
c1ec2e9d5f | |||
3848507511 | |||
b90887da5a | |||
3b2a6bf8e8 | |||
3316e28418 | |||
e7e9364d23 | |||
4c3d4ebefc | |||
eb2a6f454b | |||
4647ffd918 | |||
c8b7745172 | |||
5aa45c43f2 | |||
88e774aa34 | |||
![]() |
a787bcbf5c | ||
![]() |
8796a2827f | ||
b98735ec29 | |||
020431408f | |||
93eb460dd0 | |||
f81a6a2ff1 | |||
63f7eceb53 | |||
d06b03f80d | |||
9764d90fda | |||
228edcaedd | |||
a2b8dad469 | |||
ddcb6b1023 | |||
b243eb2646 | |||
5280d4bf0b | |||
8f05520083 | |||
0b18a618b8 | |||
c7b12e31e6 | |||
cae18abef4 | |||
8f12457c25 | |||
0b0c2901f6 | |||
646f7ef73c | |||
2d3e5eda3f | |||
8cb4e3d046 | |||
49c0b9ec43 | |||
5be54cce36 | |||
b361b2f214 | |||
33322086f6 | |||
ceec7cabf5 | |||
b60e72100b | |||
21b4799793 | |||
bd2bfa469f | |||
12d93e44d0 | |||
4d28703277 | |||
![]() |
1775c39986 | ||
0f1c84f171 | |||
cafb1bc47f | |||
24ba931f40 | |||
810c88b5f1 | |||
3f84f0123e | |||
![]() |
9cc8d50a04 | ||
5116b7a4c2 | |||
0491052a96 | |||
5c9979ff03 | |||
3964785a14 | |||
a70f37bd8a | |||
d5fd09ab58 | |||
3c50687073 | |||
fd0b2b8dfd | |||
bc0a7d3fae | |||
2453dc1b0e | |||
0358951b9e | |||
8aa1c0a326 | |||
073bf8bf52 | |||
3bf9675849 | |||
40ef71f465 | |||
0088b412ff | |||
08154d237f | |||
![]() |
b304616f2a | ||
3db37075f6 | |||
b18d0244fc | |||
![]() |
31fcb934a4 | ||
f9308a585e | |||
dfc597202f | |||
7d0765cbdc | |||
8e9d06f5a0 | |||
544ddcdaac | |||
91dd1a1ba3 | |||
ce68888d1b | |||
fcfb47b983 | |||
f5cc348610 | |||
ae034d27d2 | |||
7e91a60be6 | |||
c6ba7359ae | |||
f4abd3cfc4 | |||
![]() |
4a02b9ffeb | ||
d6d44faff0 | |||
![]() |
766e67e55d | ||
07688ca2d2 | |||
db4fe8e322 | |||
e37c876cd7 | |||
58eacb8e7c | |||
b1a2abd6b2 | |||
c5e5ac4a17 | |||
5a07174ce3 | |||
b331acf477 | |||
675d8a9c43 | |||
![]() |
6ee14c966d | ||
05315af81d | |||
![]() |
6a903d9088 | ||
a4a72bffd3 | |||
e33814ef6b | |||
883fb49d4f | |||
a117794f8c | |||
cf74cd9367 | |||
![]() |
6eb94d8df2 | ||
22b03e1c68 | |||
abf3ce811f | |||
cee67f3be2 | |||
a14ee85ccd | |||
231b313c55 | |||
![]() |
3059853732 | ||
a9121640be | |||
14f94fd1ca | |||
1b53fde9fc | |||
71d7505487 | |||
a0cba9fb95 | |||
faa65f151d | |||
c17a266e29 | |||
![]() |
1a3cb90e4e | ||
12afb19959 | |||
![]() |
6abf63f463 | ||
501bca9f5b | |||
828c66f393 | |||
471d4b105a | |||
a77d203932 | |||
0cb25a51de | |||
6a673b6000 | |||
8fda1f363a | |||
4886ed2863 | |||
c1f5ac7cfe | |||
0aad8100ae | |||
89897140cf | |||
af71984942 | |||
![]() |
aa32121174 | ||
c971c851d3 | |||
a2ccd0e495 | |||
1029577a51 | |||
05c7d935e7 | |||
8fe0aecfde | |||
ede1ce6e9a | |||
ec4b9dff19 | |||
8031326262 | |||
![]() |
2beff6197e | ||
3123f33380 | |||
![]() |
a092baa7f9 | ||
5e3d0840a3 | |||
d71b6d37fe | |||
c41b93bda5 | |||
eb43477851 | |||
239a74a130 | |||
6ac378e685 | |||
25fc77f46c | |||
de2c4ee587 | |||
f23b14091f | |||
ced94bc11c | |||
7ce0d9d791 | |||
36c0649d32 | |||
66548007a8 | |||
eea65cbd42 | |||
66dfef10a7 | |||
fd9fc809b7 | |||
39b2a7bb7e | |||
4ba06ad0a8 | |||
3fb47956c0 | |||
![]() |
fafd21b14c | ||
49e68f15f2 | |||
f76dfe8fb4 | |||
524d172742 | |||
![]() |
f013e3de81 | ||
e77a1dc6b0 | |||
1b44b47f69 | |||
1a91c57320 | |||
b1bf4c2a05 | |||
48e27ad122 | |||
91e2b1dcaf | |||
5f28a90b34 | |||
97712b018d | |||
![]() |
0e8d1c6bcf | ||
320f34af86 | |||
19b597c55d | |||
f2cce48698 | |||
0eccf57161 | |||
![]() |
574995478a | ||
![]() |
57668d84cf | ||
8d5b9478a2 | |||
2689124320 | |||
64bb49fa4e | |||
![]() |
178086d581 | ||
785d87ee42 | |||
c830c5b16b | |||
e850c2b06d | |||
10e28bd270 | |||
8de2b6a020 | |||
952ded57de | |||
581a6da804 | |||
63da2c4082 | |||
![]() |
22bef356ae | ||
3cfd6439c6 | |||
16804297e6 | |||
d1e1d6c491 | |||
bbcc8330f7 | |||
e7082fbdb0 | |||
ab101d444d | |||
8b0fac4116 | |||
82ff5dd911 | |||
9aa0a3f533 | |||
75e41b1279 | |||
265c3a4724 | |||
70a4956020 | |||
![]() |
dc8a924efa | ||
![]() |
14d5a45750 | ||
807bb450a0 | |||
bfe6b55aa7 | |||
d3445496b1 | |||
cb0b017d8f | |||
0af08cea40 | |||
e99801390c | |||
5a1b1c0ed2 | |||
207df439e1 | |||
36fb03e2b9 | |||
8ffc3ee257 | |||
aeee7f390d | |||
cf28398471 | |||
1e063a0242 | |||
b65ec08bbb | |||
![]() |
26b2a35dd4 | ||
93305b97df | |||
f53ca7e41c | |||
6754d7aef6 | |||
c4f71f3193 | |||
3e4c98429b | |||
f763929486 | |||
3ea4c6b9c9 | |||
f164188a6d | |||
3e29175af3 | |||
![]() |
83b6fcc70c | ||
76a3ff70d5 | |||
c3a400b73f | |||
48a45c43e4 | |||
9e1fdd1f14 | |||
6c5f8bf5aa | |||
7cd74015f8 | |||
7bd521a5c4 | |||
7dda5ac5ba | |||
9471715720 | |||
1694e2aca4 | |||
75c9788c27 | |||
d218ba8009 | |||
77e927b58f | |||
fe2f43a15c | |||
59eb71afa1 | |||
0e9c04a3ea | |||
cf8ea741f2 | |||
0733926a34 | |||
24aae7ed63 | |||
2fddbebf93 | |||
3021f9b48c | |||
468765d29e | |||
9aa88a6604 | |||
b35efa932e | |||
300fe84bf0 | |||
b848d5cdf5 | |||
0a0c2c0217 | |||
45b46e5de9 | |||
582c5530b6 | |||
ebe32e01e1 | |||
07a77816a1 | |||
bae1b64525 | |||
132522cba8 | |||
ceb612a79c | |||
62a2faa7ef | |||
101a493ab5 | |||
ff01070b5c | |||
ee857cc266 | |||
ad7455cd14 | |||
83883ae66a | |||
75ae328d62 | |||
4247a56cde | |||
e3b58b6451 | |||
76f0ef294a | |||
72d1ddfc9c | |||
4ed029fc02 | |||
![]() |
e7a800c52f | ||
24801e0a4a | |||
fc32567cda | |||
![]() |
9eafdb985d | ||
3c8d261557 | |||
![]() |
e82c5c6607 | ||
5b10d08db3 | |||
7c4eb4f8db | |||
792292e3de | |||
118803893e | |||
0793ced8ad | |||
e7b441a05c | |||
53743adc29 | |||
1dcf0f9cf1 | |||
feba1fe974 | |||
c4df8ac1a4 | |||
6025897cd6 | |||
802a59a58a | |||
1ab6d5c1dc | |||
a770faa811 | |||
15cfb375a3 | |||
e78e235cc5 | |||
3ec9681ac4 | |||
038345fa56 | |||
38131cc5e5 | |||
f61f4c89bb | |||
e26887598f | |||
42017b006e | |||
bf5b1fa726 | |||
09b89da349 | |||
d3c454d66c | |||
![]() |
98c4224ff0 | ||
95a969e7d5 | |||
![]() |
eccd03a826 | ||
f9c0c9e70c | |||
![]() |
3600e9057b | ||
7d618b4dde | |||
a566dc25aa | |||
9d9c879f4b | |||
0cc2a72f94 | |||
3af0e1f6fd | |||
34771cc9f5 | |||
72c34068cb | |||
f52e3aa210 | |||
8925d3b7bf | |||
6bd42baaeb | |||
26b098c04f | |||
bc4f99aa86 | |||
0c83ef567c | |||
89fd3afd1e | |||
87c1c8112f | |||
8edcb3af96 | |||
ae1dc8f5f9 | |||
00c7ea68a8 | |||
788d380460 | |||
6e01b52100 | |||
f3610a23d1 | |||
28dc07a153 | |||
9473c61b36 | |||
b40e05fcd1 | |||
637731dc61 | |||
55d48defc5 | |||
a26a059244 | |||
add6fa0924 | |||
35affaa971 | |||
3feb3ce32d | |||
7898089de3 | |||
![]() |
59f9a5e6ac | ||
60fee69682 | |||
![]() |
3df40cc343 | ||
![]() |
468d59e496 | ||
709e443152 | |||
ddc7e5f1b6 | |||
e509f9c3a0 | |||
e7e5fd96c4 | |||
2e8641e45e | |||
ae30f72c80 | |||
49b798ca7e | |||
c614eadb47 | |||
757ec00f83 | |||
de913516dd | |||
c27ef1e9e8 | |||
d5e626b243 | |||
8e8a6b80cf | |||
a63a0ee24b | |||
d35b14449e | |||
41e0a5b5ed | |||
15cdcb4e90 | |||
5cd1aaf080 | |||
4be166b6b5 | |||
4e65b1ef6c | |||
ebf7673f83 | |||
093074aefe | |||
2829caa9f8 | |||
c202d38659 | |||
37a5ff4a84 | |||
2acebcae24 | |||
3de3c3c23a | |||
c9e9a42215 | |||
f0ddbcb31d | |||
7cd91a06eb | |||
efe90944ee | |||
765406cb51 | |||
2761679180 | |||
5583d51773 | |||
192f0c9e17 | |||
271f34f77e | |||
3e125d12af | |||
6644e96f01 | |||
![]() |
a78ecfe0f3 | ||
![]() |
65127f9875 | ||
ae379714e4 | |||
96a4b54cfb | |||
538f452ea9 | |||
2ea47057d3 | |||
209aff0a35 | |||
![]() |
37c2bbe5ea | ||
3b6ee8cee7 | |||
52b94049f2 | |||
2373a2196e | |||
6a0fe79db5 | |||
10428ca472 | |||
d31abfef2c | |||
6a5e1bf9a1 | |||
488690c864 | |||
d374469f4c | |||
af42b35e53 | |||
71b4a1687e | |||
25c2875e0f | |||
8839b4c32a | |||
1b4d5c7a35 | |||
f9c9e000ca | |||
7a4fc9f59d | |||
22c4323b21 | |||
7a084c2eee | |||
b90b1af25c | |||
5098678308 | |||
dc679f6247 | |||
2e7e7a6fb6 | |||
![]() |
ceac1d91e2 | ||
![]() |
dfab5a0c4a | ||
![]() |
85379482d5 | ||
d6b1d35bf8 | |||
![]() |
bfa3dc91b7 | ||
7b6c77aa84 | |||
4ca249018d | |||
d529e13d65 | |||
7b954ba7a1 | |||
5e1702e7a5 | |||
![]() |
2a41ab5e6c | ||
4e797dbc69 | |||
![]() |
41a8e94d4d | ||
a072e87e04 | |||
2ea565b0ec | |||
f709f12d93 | |||
45a47142fc | |||
5f3f5db95d | |||
8e69409eed | |||
280dac323c | |||
c4f9bfcf5e | |||
1b9a835893 | |||
320a1b6f35 | |||
f07f56aa37 | |||
4e91e72d53 | |||
58b4688c34 | |||
2f862bc7b9 | |||
4674795591 | |||
be9017c349 | |||
4c2f5b80b7 | |||
0502b0103f | |||
e8b717ee42 | |||
4b4ac93acd | |||
2289e26fa3 | |||
0f201049b4 | |||
49a363f0e0 | |||
77a28f34d5 | |||
62d9dabc7d | |||
d5e91ae883 | |||
53cf8e83b3 | |||
![]() |
d7f88982a8 | ||
4c716ced09 | |||
09082f6e85 | |||
c749c24682 | |||
![]() |
c04cceb40e | ||
b69ab42982 | |||
16099c00d0 | |||
8dd941cac0 | |||
249a7e2307 | |||
8225b610dd | |||
07faa3c5ac | |||
d0c5c67e94 | |||
0416aa767f | |||
7592a5097c | |||
ab70133db0 | |||
![]() |
f283c527d2 | ||
af8fb707da | |||
![]() |
4e5537d0ed | ||
80d0b68290 | |||
5d54f38949 | |||
c304807099 | |||
4c8a8950cf | |||
b6a35a8153 | |||
7489427e4d | |||
c3cb565250 | |||
8346417d09 | |||
![]() |
695e025c82 | ||
51019fbfce | |||
139c3f791e | |||
54fa5041e2 | |||
2b41b2f05b | |||
f4cb3ccd9c | |||
fb98f22ddd | |||
6b0869039a | |||
13672f8b32 | |||
cffbfe5568 | |||
ecbf838fee | |||
0153e99780 | |||
77834aff22 | |||
3fe0088cab | |||
8f94724f22 | |||
89831fae0c | |||
0b1050bf09 | |||
![]() |
eccdced972 | ||
5bbbc98471 | |||
![]() |
63a8b3b972 | ||
31e6f0dc7a | |||
f85ef3d442 | |||
cd38daeff4 | |||
0521272ab3 | |||
![]() |
820d086719 | ||
4e80573a76 | |||
c5b2381703 | |||
45d54ea67f | |||
![]() |
69668d62ba | ||
6ac3a10619 | |||
1657fa039d | |||
f49f406f67 | |||
![]() |
4a24c6fe37 | ||
46a261e108 | |||
40de5742af | |||
586cf8b190 | |||
933eddc9a1 | |||
c26b46ddca | |||
257bfb65b2 | |||
a069fffcc4 | |||
9182c882fe | |||
1364f1e35c | |||
563ef943c7 | |||
e2c4a4c510 | |||
5780de2ae0 | |||
fc5be0b598 | |||
a070dd8bdd | |||
1af722b819 | |||
![]() |
b05ba2ef0e | ||
7af40ccf5f | |||
8f5a4a2453 | |||
834e87af7b | |||
ae8fa7062c | |||
3382b07ad6 | |||
432bfbf7a3 | |||
36584bbc2d | |||
![]() |
351744f2b0 | ||
![]() |
5ac471a021 | ||
![]() |
db932ccde6 | ||
4eeec6e9b5 | |||
ceff86aafe | |||
cf17f7e0cc | |||
3d9ecf1cf2 | |||
0c90aa097d | |||
bf75106ae9 | |||
c94877ae3d | |||
00c6cbb985 | |||
61afbf55f1 | |||
![]() |
f3ec0d8e58 | ||
b66c21f8b0 | |||
![]() |
29d6750134 | ||
de70bcbb36 | |||
![]() |
fd0370acc2 | ||
08241b313c | |||
![]() |
0ef794b553 | ||
![]() |
83e2f8c993 | ||
![]() |
ac1ed19eae | ||
673c254c7d | |||
cadda7aa5c | |||
b8115f0c5b | |||
dac81ad71b | |||
d27db03444 | |||
![]() |
2d0b9faaf6 | ||
![]() |
32124b940e | ||
bd0de99b52 | |||
2ecc33d84b | |||
6eb8340ef4 | |||
416e006a2a | |||
92b775d319 | |||
ab6a011b3b | |||
aad8b8405c | |||
2eca9c7ed4 | |||
![]() |
2c6c1b6cc0 | ||
![]() |
c1ba68dd04 | ||
24a77745a4 | |||
fb46c047bd | |||
ded4dc7761 | |||
dc3f46d96b | |||
bb971bead9 | |||
e785569c95 | |||
c9eaf04afb | |||
a87593e62a | |||
9009ac2c3d | |||
04313f1bb5 | |||
afe7387be8 | |||
b29a8a5dfe | |||
9075f63e8f | |||
76f7b22989 | |||
dccadc9e78 | |||
5b2d2b2319 | |||
2929cfe5de | |||
f0f7282d9d | |||
57286eed8d | |||
9dbf3b9fab | |||
4f8c63e77b | |||
47c226cbe3 | |||
d0759840a0 | |||
5b19b2cb56 | |||
dcb00bf529 | |||
e8e062f866 | |||
9838e9e485 | |||
d66d5b431e | |||
43a0fe378f | |||
199f846072 | |||
fb6636c812 | |||
adc8980dec | |||
48c41b189a | |||
7562ad5777 | |||
27986e9b56 | |||
dba4f30328 | |||
83c491f044 | |||
7ef7843ada | |||
5a7b9adef1 | |||
d293de425f | |||
17d4c7abb1 | |||
2f81449a70 | |||
ca4ac36c59 | |||
5c328ab8b0 | |||
7a67cb2aeb | |||
178c3a4064 | |||
15884510e8 | |||
22e2e4f062 | |||
3ccc160682 | |||
00fd823bcd | |||
d9badbf25c | |||
f16e35ce0a | |||
425e5c8d76 | |||
1ab412f13d | |||
ee1c0c682b | |||
59f0811ac9 | |||
45f522888b | |||
d15262ded1 | |||
ab5b138805 | |||
8ca52a7757 | |||
d4af8a8d26 | |||
b1e59f1a20 | |||
bd34d77a90 | |||
3ac83dcc73 | |||
900178d438 | |||
414b8b7628 | |||
4adc0a7798 | |||
88620e8cd9 | |||
552e44bd25 | |||
1f19a86150 | |||
702376e935 | |||
3ca3098ed7 | |||
995702da48 | |||
33066542ca | |||
5a26ea0961 | |||
1e3e79fe7b | |||
d4292bbd28 | |||
a97c5d7daa | |||
6b009b8890 | |||
3d16099a77 | |||
4352980b0f | |||
3d6ac0bd7b | |||
71959181ad | |||
daa4a33383 | |||
d3695eb12c | |||
c1f236dcd4 | |||
3276c3b4a1 | |||
a90533e9b8 | |||
9bea7259e1 | |||
7fca310f25 | |||
27f4f761e7 | |||
17fafe2f63 | |||
89d56ea225 | |||
cfd6d48aab | |||
6be2c079c1 | |||
ae5d971e8f | |||
13bdc4a7e6 | |||
72aad83780 | |||
32ceaa7919 | |||
ec4786d00b | |||
582c30d32f | |||
b047b333b0 | |||
f2c9706781 | |||
fa06238aa7 | |||
b8a8e4f9b1 | |||
dbe767f5d9 | |||
fad42fc6c7 | |||
7cf3b1f472 | |||
6c3b29a14c | |||
febfaecd97 | |||
2d98802905 | |||
f70a8c1581 | |||
8eeacca9cb | |||
82847af9f9 | |||
ee19a80041 | |||
013eee7ec6 | |||
ce0b4e6681 | |||
d1cf59e547 | |||
d0407b0ed5 | |||
83a855a8a1 | |||
9e46eebcf1 | |||
786781304c | |||
2e888bfe6c | |||
901d6e68d7 | |||
3028d53865 | |||
fb5f6e762e | |||
02b4df9827 | |||
815d77192f | |||
9fab16f0f3 | |||
82f5e0200c | |||
032a35fb50 | |||
8a700673db | |||
0386350de6 | |||
d912d4735a | |||
97fc606c65 | |||
14be52f0fc | |||
739bb8f1d2 | |||
7107753f73 | |||
73c590e1eb | |||
44fd07c1c8 | |||
931a8da26c | |||
895fef5ccb | |||
b82a2fd9ab | |||
18a86af416 | |||
a0b5fd9cb6 | |||
553e8ffd1a | |||
fdc6fb2c53 | |||
8bc9286c4c | |||
4f8693652b | |||
d29378c2f2 | |||
0e6c07c063 | |||
cb3e0ff344 | |||
11d1fdeb34 | |||
430641d481 | |||
4745f29971 | |||
8512b1b5dd | |||
674bc2e4b4 | |||
b240973412 | |||
39994c3208 | |||
8189f2c806 | |||
237ac342c9 | |||
465e804193 | |||
4ab8614cd1 | |||
dabff9af7d | |||
384a0930d1 | |||
a5fa9ec310 | |||
ed15d0c1b9 | |||
e07a95b86d | |||
b52e04f794 | |||
e74c298cf9 | |||
cd485a7c6f | |||
06341c19c4 | |||
a527bd5f48 | |||
7f14d519c0 | |||
64337d087d | |||
e1fae3cbee | |||
7dbb4c9b2d | |||
fe67ca56d6 | |||
68e4e1bb41 | |||
881df30a46 | |||
6f91eaad39 | |||
55045ed85a | |||
2582090824 | |||
55415cd62a | |||
d29bdda34c | |||
e3ee04dec5 | |||
347c8255ed | |||
8aac19cab5 | |||
b4536d274c | |||
d3ffaa8e52 | |||
f5588dfb70 | |||
4b308888d8 | |||
fdfa2045ec | |||
33af94dc46 | |||
8ea624aeaf | |||
e29cd298fe | |||
7bba304c57 | |||
0dc09668ce | |||
cfa6753518 | |||
2cf8c35578 | |||
aa116ba5ba | |||
d2c1357fc5 | |||
0bf2a1f8fe | |||
7be027075f | |||
215c346017 | |||
7c9235d0e0 | |||
e254cc23b2 | |||
f5a122309d | |||
dee286fc7e | |||
ab9b89ac5d | |||
ce9e0b53b1 | |||
ce6d9112aa | |||
20f4fe138e | |||
ecbf642ddd | |||
caf5f5767f | |||
e0cc387124 | |||
ebeb144701 | |||
924b13b03a | |||
75a1116b51 | |||
73a4b885ec | |||
f6cda6bf88 | |||
9ce0a2815d | |||
7d7dcce859 | |||
f429a7dc13 | |||
257562ad6d | |||
8883c76b9a | |||
dd77b22626 | |||
3d70805a68 | |||
b6f0176c10 | |||
6835ea72f2 | |||
6408c4ebf6 | |||
e557e4d03c | |||
02d482e8f2 | |||
525badbd7d | |||
49fa3dd5ff | |||
8b0bc7e3e8 | |||
ef4abf1212 | |||
6ce37c59ec | |||
6824d73b75 | |||
06762eefcf | |||
f791fc031e | |||
57b7eba4b6 | |||
abda36c076 | |||
476b333a3e | |||
4ad1a7ab31 | |||
5f5aa43ab1 | |||
4293db60b3 | |||
647c065b9c | |||
497e532e23 | |||
e1f338b9f4 | |||
15ef2d42f3 | |||
a9083cc0ee | |||
c8a03bc716 | |||
3efb094fd3 | |||
251440f538 | |||
cb0f159155 | |||
409a525fa9 | |||
966af5a075 | |||
5234e23c2c | |||
11613f8c7a | |||
8a98189bfb | |||
3678b87272 | |||
1f2b48eb45 | |||
dd1c4c84c9 | |||
de2625518b | |||
75709e4d57 | |||
6a74211f99 | |||
d3742022c2 | |||
75794afdcd | |||
b1b49f6130 | |||
ca60d520d9 | |||
2fd22fd663 | |||
04c85de559 | |||
407dd37573 | |||
0acaa40c08 | |||
f2024f7d99 | |||
a7b5bbf13f | |||
e696280b88 | |||
5e9eb1930f | |||
9a7cbff535 | |||
8dec2ca7ba | |||
098d0d782a | |||
779a268c6e | |||
13b7b69e7f | |||
148b39caec | |||
e9f9217f75 | |||
dd45a4bc6e | |||
1ccd92d0bb | |||
9f78a24eca | |||
930a9edc1e | |||
5cfe7bf72c | |||
422b1c64cd | |||
1edad56ffc | |||
ef3d68f17b | |||
094ffcf669 | |||
56d33186a4 | |||
d570feeffc | |||
158397a007 | |||
4e8c430c6e | |||
d8a4ebb068 | |||
6d46a3ca4e | |||
1751b3c7c1 | |||
8ae0573c0f | |||
be0194ef3e | |||
0a2ca5860f | |||
151cf0b9d9 | |||
12cb22d5f6 | |||
5c2bb6f93a | |||
2e99348da7 | |||
817ccc3a99 | |||
a429f73d2b | |||
5898cc25c9 | |||
c05c2c3fb7 | |||
f55c39a974 | |||
ebf94179b5 | |||
9e5a219f3f | |||
76de0eeb95 | |||
773c5c7464 | |||
7abdfb5c2a | |||
ad743c056f | |||
05bb102a30 | |||
b37fd7a14b | |||
4154943eef | |||
5d7f7b7065 | |||
09e394583e | |||
7baa3c7df3 | |||
06a8b84792 | |||
343950f0c0 | |||
da0ef1daac | |||
2eb35c7cc0 | |||
13952ecec1 | |||
214e802f5f | |||
697e6e53b8 | |||
64c0f1fc3f | |||
ca5ccb52e5 | |||
51e90a0ada | |||
822bbb19f1 | |||
a35da15228 | |||
53874b413e | |||
1b029b790b | |||
acd99f12e7 | |||
1a11ac5e34 | |||
416afcb1c3 | |||
3539cbc497 | |||
4288b2a1d1 | |||
d4548fe55b | |||
7b360abb18 | |||
b30294ba41 | |||
50f1bd6f09 | |||
![]() |
83d530688b | ||
b790b57fe1 | |||
14fe422b48 | |||
0af8ddab2d | |||
![]() |
79ecc59f0b | ||
![]() |
0ac4824d07 | ||
5f8d444a76 | |||
![]() |
42c5fdeff4 | ||
![]() |
54801f695c | ||
39ac38c25f | |||
834d3e15ce | |||
b3c00f97be | |||
6324e9bae8 | |||
bbdfd0cabe | |||
6ef557fdf1 | |||
30897a56e7 | |||
eb18eb709d | |||
fc7c57f4a1 | |||
e3fdfcc981 | |||
e9b6848fe7 | |||
38e61c04ea | |||
5e56eb8ca2 | |||
ccfc8aacf8 | |||
edece9e741 | |||
6ee1db0d67 | |||
30434e3904 | |||
e45986291d | |||
eb6e96006e | |||
9047bf89fa | |||
63ef98d056 | |||
bf53622eef | |||
f419d4625a | |||
ae19d5303a | |||
35f883b886 | |||
7d52658d84 | |||
974b50d16b | |||
55382bcdd9 | |||
51c931ebb5 | |||
0b9aaaf97f | |||
faccaee6c3 | |||
a56fb568ed | |||
c365e0c6b6 | |||
0d6deb7e65 | |||
50eed6e54f | |||
147cddb398 | |||
88c4684466 | |||
77a30a2886 | |||
370e2b5d82 | |||
44dc741e89 | |||
7a8cf94170 | |||
fd28c19d09 | |||
2f5eabf859 | |||
1a17c578a8 | |||
56e1ae1afa | |||
eea78bd112 | |||
d927f54da6 | |||
![]() |
ec8d1b4eae | ||
4e4c1f40e0 | |||
35ac8cf4dc | |||
2f2f14ffed | |||
03778b787e | |||
f7e062ef3e | |||
23cf808585 | |||
8e8845786f | |||
3ed1a99dd2 | |||
0a9bc6944c | |||
ec4e2f32c8 | |||
2ea03ff860 | |||
9a3f32f80f | |||
bcf2f30878 | |||
23312a6994 | |||
cf5a96aa8d | |||
7ed64d9430 | |||
1cc0f8cf75 | |||
b4e90b6e61 | |||
112c67f688 | |||
19fa6fd9f4 | |||
88921150ff | |||
e973c94036 | |||
b40f1f4c79 | |||
c191344efb | |||
debf4fc7c9 | |||
a60aca00bb | |||
763f96526e | |||
abfd14817f | |||
529cffd804 | |||
09bb5e3aa0 | |||
5fb15545c1 | |||
a2df63e996 | |||
ccaba71fdf | |||
710c72807f | |||
e779eab729 | |||
a72cf784a7 | |||
78dffe2f16 | |||
9d31943d88 | |||
0a2b19e96d | |||
46582b3743 | |||
c10b19e453 | |||
5631bd4f94 | |||
30b6d7826d | |||
d1b2c55322 | |||
87ae49c78e | |||
2765fb6c76 | |||
65cea9523e | |||
3d311fdaf1 | |||
7a0d5e0c9e | |||
e2fb2315fd | |||
fc1fc95b79 | |||
05703d630e | |||
65c358851d | |||
b997fc5ea1 | |||
869747e527 | |||
df7857a364 | |||
cd0cf0a5b7 | |||
abf7518cbf | |||
58406eddb5 | |||
97ab225428 | |||
24bbe05913 | |||
81ac9f61b6 | |||
a9f6ab7357 | |||
df9a5825e1 | |||
0c8b9cd7d1 | |||
142aba9485 | |||
bf632990e0 | |||
3b4a9b2319 | |||
38dce1d29d | |||
deeb0b3aac | |||
237b1f9d75 | |||
11cd86a8d2 | |||
27713d65d1 | |||
d37d96437e | |||
940fb3c044 | |||
f91a2a0831 | |||
6d6ab057e4 | |||
ea12ba5441 | |||
601d896fc6 | |||
c237a48104 | |||
29078186f8 | |||
7754c4f10f | |||
90931d6de9 | |||
4785f80d51 | |||
5136cc701f | |||
ef9eb626a8 | |||
0663576d19 | |||
e1b8577e41 | |||
e09d9c86b6 | |||
52e99c5639 | |||
193806f590 | |||
a3e4f9d9a6 | |||
482f46a35a | |||
975a17c816 | |||
985c6464e2 | |||
bca07d9039 | |||
35092510ba | |||
85842851d5 | |||
61ec4159c8 | |||
c4ebefc1c8 | |||
eb4f2f1548 | |||
47b4b45011 | |||
7547e28ba4 | |||
0b2e4fa52e | |||
f4900b3d02 | |||
1d53fbfd06 | |||
c203de25db | |||
ac8c589b7c | |||
f32d3f7b06 | |||
5385455e6a | |||
1bf726f1ad | |||
f031000b28 | |||
2c54c641a3 | |||
554be8d96c | |||
f969b3d440 | |||
6034a5bd5b | |||
eea756e513 | |||
ecbf3e2d0f | |||
6fa6a8851f | |||
b3fff9b07a | |||
671ef8f0e9 | |||
373b9b4481 | |||
0ada9c1638 | |||
31158ef0c9 | |||
5fbd436bb1 | |||
c0cb475689 | |||
b8a0455983 | |||
6145a6bc6c | |||
5c03d0c30c | |||
6b42781319 | |||
6c4a9b83ff | |||
9453b45e20 | |||
c0f19d6082 | |||
06078a6f92 | |||
1199b9e678 | |||
92bc9477d1 | |||
7bc1657d05 | |||
e582a4dc77 | |||
243e329ec3 | |||
5775efba2f | |||
cab8626cf2 | |||
19cb01aa21 | |||
6e6828e09d | |||
72ff64590d | |||
553724529e | |||
681e2b6134 | |||
49bd2228cb | |||
0a140ec66e | |||
f30225725d | |||
a1ac104f02 | |||
d823f6e2cf | |||
3042f6e608 | |||
6115091103 | |||
78ef2d0d84 | |||
9d92a97562 | |||
192670e8ce | |||
7ae1cc23fc | |||
ebb6648bda | |||
384f2956e5 | |||
2ba90cf717 | |||
e5af8597e5 | |||
1f6a7785f6 | |||
0ee053fb12 | |||
8cd4776764 | |||
f32bde6bd9 | |||
![]() |
8b808cefae | ||
f8466b6284 | |||
4a2d7a2f89 | |||
67defe866b | |||
b6575fed92 | |||
d6735bfae0 | |||
e4c45d0c5e | |||
c4668b750c | |||
81a85233a7 | |||
89f62e5dc3 | |||
408e13783d | |||
3900734063 | |||
fa688ac593 | |||
787f952ef4 | |||
63241d25b9 | |||
![]() |
98166b5c98 | ||
229849af0f | |||
0a1fc855bc | |||
46ccaff9a3 | |||
9c8b0a20c1 | |||
a42cf75ecb | |||
d77e884bd7 | |||
e2111233f0 | |||
e4efd04063 | |||
8edd20274e | |||
9be60839cd | |||
af934d751d | |||
5ac07c31f0 | |||
f3a7d9375d | |||
a033a0eaaf | |||
c137b53569 | |||
f0a9986ccf | |||
f639ffe795 | |||
326381bfe1 | |||
174e3c6b65 | |||
5c899dcc92 | |||
24ee80f077 | |||
22b69af796 | |||
0758c006ec | |||
c2a329ec07 | |||
bdaee543f3 | |||
44d358c384 | |||
f87123a6eb | |||
f2fc2cd521 | |||
af92a39e37 | |||
49cbb23855 | |||
9cb84de509 | |||
53f6991de8 | |||
5b696c2bd8 | |||
b95a5c2e68 | |||
080e78d205 | |||
a55a69f81a | |||
596fea8afd | |||
47e4adde5a | |||
a349943cd7 | |||
360faf5c3c | |||
9cf97857d1 | |||
44bdf515ba | |||
45ccdebad3 | |||
d242d33571 | |||
731eaa68d3 | |||
344963bf23 | |||
aaca5731fb | |||
aa7147f665 | |||
0fb50afdc5 | |||
f3cc74d216 | |||
0946a8da3b | |||
a8e5e63f45 | |||
e52f8ac7ce | |||
71a088582a | |||
3aab8dd731 | |||
56d57b2e9d | |||
b16eb9d7ad | |||
3fcd3d41c4 | |||
0b0bfa0628 | |||
ff9ce5fd98 | |||
2d99e118b4 | |||
a93add61b0 | |||
7f28a99dd5 | |||
9aaf9857a0 | |||
e2595de761 | |||
40c4942901 | |||
2e188dc504 | |||
![]() |
dfce29b809 | ||
decf7adcf6 | |||
81531d5e76 | |||
15bc0b7d5d | |||
17dec471c5 | |||
81f05aca29 | |||
d1270925a5 | |||
9e09ae7aff | |||
![]() |
c51a5e1066 | ||
758452ffba | |||
c7cd82c356 | |||
cc554eea75 | |||
0d770432d6 | |||
b2cb9d4b1b | |||
08e19c6bc0 | |||
b928f58849 | |||
228c1e5345 | |||
488af21ae0 | |||
b54d7bfad8 | |||
2babf80ae6 | |||
022dcb8e6c | |||
6d66e81667 | |||
91a5e1aef8 | |||
6d704d57ad | |||
a1b1c840a0 | |||
901654dcbf | |||
37a657a45f | |||
e07bb3955e | |||
7834b59598 | |||
0c8d40d2de | |||
1014b6f455 | |||
093e29f3c2 | |||
0f0d1f8e2a | |||
43ccbe353f | |||
2d861122e1 | |||
66f8852e30 | |||
54ddb01299 | |||
3d47323162 | |||
5c77439264 | |||
e2c92c1341 | |||
faf8402c19 | |||
4c0bcc3d13 | |||
4fc4a7e1f4 | |||
f9859a3b2a | |||
6da9fa1bf2 | |||
5c6407c268 | |||
3214b1114f | |||
bfbe9a0d55 | |||
f482afadab | |||
661dcd813c | |||
5541de9a3a | |||
3791afa29c | |||
3ae8229843 | |||
f61d4b2e3a | |||
49f57d8de8 | |||
64c7bad391 | |||
4659855b0f |
@@ -263,6 +263,7 @@ ForEachMacros:
|
|||||||
- SET_SLOT_PROBING_BEGIN
|
- SET_SLOT_PROBING_BEGIN
|
||||||
- MAP_SLOT_PROBING_BEGIN
|
- MAP_SLOT_PROBING_BEGIN
|
||||||
- VECTOR_SET_SLOT_PROBING_BEGIN
|
- VECTOR_SET_SLOT_PROBING_BEGIN
|
||||||
|
- TGSET_ITER
|
||||||
|
|
||||||
StatementMacros:
|
StatementMacros:
|
||||||
- PyObject_HEAD
|
- PyObject_HEAD
|
||||||
|
@@ -110,6 +110,10 @@ if(POLICY CMP0074)
|
|||||||
cmake_policy(SET CMP0074 NEW)
|
cmake_policy(SET CMP0074 NEW)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Install CODE|SCRIPT allow the use of generator expressions.
|
||||||
|
if(POLICY CMP0087)
|
||||||
|
cmake_policy(SET CMP0087 NEW)
|
||||||
|
endif()
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Load some macros.
|
# Load some macros.
|
||||||
include(build_files/cmake/macros.cmake)
|
include(build_files/cmake/macros.cmake)
|
||||||
@@ -349,7 +353,7 @@ mark_as_advanced(WITH_SYSTEM_GLOG)
|
|||||||
option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
|
option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
if(WIN32)
|
if(WIN32 OR APPLE)
|
||||||
option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
|
option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
|
||||||
endif()
|
endif()
|
||||||
option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
|
option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
|
||||||
@@ -404,13 +408,13 @@ set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm
|
|||||||
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
||||||
unset(PLATFORM_DEFAULT)
|
unset(PLATFORM_DEFAULT)
|
||||||
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 extra debug capabilities" OFF)
|
option(WITH_CYCLES_DEBUG_NAN "Build Cycles with additional asserts for detecting NaNs and invalid values" OFF)
|
||||||
option(WITH_CYCLES_NATIVE_ONLY "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
|
option(WITH_CYCLES_NATIVE_ONLY "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
|
||||||
option(WITH_CYCLES_KERNEL_ASAN "Build Cycles kernels with address sanitizer when WITH_COMPILER_ASAN is on, even if it's very slow" OFF)
|
option(WITH_CYCLES_KERNEL_ASAN "Build Cycles kernels with address sanitizer when WITH_COMPILER_ASAN is on, even if it's very slow" OFF)
|
||||||
mark_as_advanced(WITH_CYCLES_KERNEL_ASAN)
|
mark_as_advanced(WITH_CYCLES_KERNEL_ASAN)
|
||||||
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
||||||
mark_as_advanced(WITH_CYCLES_LOGGING)
|
mark_as_advanced(WITH_CYCLES_LOGGING)
|
||||||
mark_as_advanced(WITH_CYCLES_DEBUG)
|
mark_as_advanced(WITH_CYCLES_DEBUG_NAN)
|
||||||
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
||||||
|
|
||||||
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles CUDA compute support" ON)
|
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles CUDA compute support" ON)
|
||||||
@@ -424,6 +428,10 @@ mark_as_advanced(WITH_CYCLES_NETWORK)
|
|||||||
option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
|
option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
|
||||||
mark_as_advanced(WITH_CUDA_DYNLOAD)
|
mark_as_advanced(WITH_CUDA_DYNLOAD)
|
||||||
|
|
||||||
|
# Draw Manager
|
||||||
|
option(WITH_DRAW_DEBUG "Add extra debug capabilities to Draw Manager" OFF)
|
||||||
|
mark_as_advanced(WITH_DRAW_DEBUG)
|
||||||
|
|
||||||
# LLVM
|
# LLVM
|
||||||
option(WITH_LLVM "Use LLVM" OFF)
|
option(WITH_LLVM "Use LLVM" OFF)
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
@@ -570,6 +578,12 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
|
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
|
||||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
|
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
|
||||||
)
|
)
|
||||||
|
find_library(
|
||||||
|
COMPILER_ASAN_LIBRARY_THUNK NAMES clang_rt.asan_dll_thunk-x86_64
|
||||||
|
PATHS
|
||||||
|
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
|
||||||
|
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
|
||||||
|
)
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
||||||
-print-file-name=lib
|
-print-file-name=lib
|
||||||
@@ -590,6 +604,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(COMPILER_ASAN_LIBRARY_THUNK)
|
||||||
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -604,12 +619,6 @@ if(WIN32)
|
|||||||
option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF)
|
option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF)
|
||||||
mark_as_advanced(WITH_WINDOWS_FIND_MODULES)
|
mark_as_advanced(WITH_WINDOWS_FIND_MODULES)
|
||||||
|
|
||||||
option(WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS "Organize the visual studio projects according to source folder structure." ON)
|
|
||||||
mark_as_advanced(WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS)
|
|
||||||
|
|
||||||
option(WINDOWS_USE_VISUAL_STUDIO_SOURCE_FOLDERS "Organize the source files in filters matching the source folders." ON)
|
|
||||||
mark_as_advanced(WINDOWS_USE_VISUAL_STUDIO_SOURCE_FOLDERS)
|
|
||||||
|
|
||||||
option(WINDOWS_PYTHON_DEBUG "Include the files needed for debugging python scripts with visual studio 2017+." OFF)
|
option(WINDOWS_PYTHON_DEBUG "Include the files needed for debugging python scripts with visual studio 2017+." OFF)
|
||||||
mark_as_advanced(WINDOWS_PYTHON_DEBUG)
|
mark_as_advanced(WINDOWS_PYTHON_DEBUG)
|
||||||
|
|
||||||
@@ -627,6 +636,18 @@ if(WIN32)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WIN32 OR XCODE)
|
||||||
|
option(IDE_GROUP_SOURCES_IN_FOLDERS "Organize the source files in filters matching the source folders." ON)
|
||||||
|
mark_as_advanced(IDE_GROUP_SOURCES_IN_FOLDERS)
|
||||||
|
|
||||||
|
option(IDE_GROUP_PROJECTS_IN_FOLDERS "Organize the projects according to source folder structure." ON)
|
||||||
|
mark_as_advanced(IDE_GROUP_PROJECTS_IN_FOLDERS)
|
||||||
|
|
||||||
|
if (IDE_GROUP_PROJECTS_IN_FOLDERS)
|
||||||
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
# See WITH_WINDOWS_SCCACHE for Windows.
|
# See WITH_WINDOWS_SCCACHE for Windows.
|
||||||
option(WITH_COMPILER_CCACHE "Use ccache to improve rebuild times (Works with Ninja, Makefiles and Xcode)" OFF)
|
option(WITH_COMPILER_CCACHE "Use ccache to improve rebuild times (Works with Ninja, Makefiles and Xcode)" OFF)
|
||||||
@@ -904,9 +925,9 @@ if(NOT CMAKE_BUILD_TYPE MATCHES "Release")
|
|||||||
unset(_list_COMPILER_ASAN_CFLAGS)
|
unset(_list_COMPILER_ASAN_CFLAGS)
|
||||||
unset(_is_CONFIG_DEBUG)
|
unset(_is_CONFIG_DEBUG)
|
||||||
elseif(COMPILER_ASAN_LIBRARY)
|
elseif(COMPILER_ASAN_LIBRARY)
|
||||||
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}")
|
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};\"${COMPILER_ASAN_LIBRARY}\" \"${COMPILER_ASAN_LIBRARY_THUNK}\"")
|
||||||
set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
|
set(PLATFORM_LINKFLAGS "\"${COMPILER_ASAN_LIBRARY}\" \"${COMPILER_ASAN_LIBRARY_THUNK}\" ${COMPILER_ASAN_LINKER_FLAGS}")
|
||||||
set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
|
set(PLATFORM_LINKFLAGS_DEBUG "\"${COMPILER_ASAN_LIBRARY}\" \"${COMPILER_ASAN_LIBRARY_THUNK}\" ${COMPILER_ASAN_LINKER_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -1584,6 +1605,9 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
|
ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
|
||||||
|
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
|
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
|
||||||
|
# Using C++20 features while having C++17 as the project language isn't allowed by MSVC.
|
||||||
|
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_CXX20_DESIGNATOR -Wc++20-designator)
|
||||||
|
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
|
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
|
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
|
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
|
||||||
@@ -1705,23 +1729,19 @@ if(WITH_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
# Select C++17 as the standard for C++ projects.
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /std:c++17")
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
# Do not enable compiler specific language extentions.
|
||||||
|
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
|
||||||
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
||||||
# of the C++ standard chosen above
|
# of the C++ standard chosen above.
|
||||||
if(MSVC_VERSION GREATER 1913)
|
if(MSVC AND MSVC_VERSION GREATER 1913)
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
||||||
endif()
|
endif()
|
||||||
elseif(
|
|
||||||
CMAKE_COMPILER_IS_GNUCC OR
|
|
||||||
CMAKE_C_COMPILER_ID MATCHES "Clang" OR
|
|
||||||
CMAKE_C_COMPILER_ID MATCHES "Intel"
|
|
||||||
)
|
|
||||||
string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++17 build")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Visual Studio has all standards it supports available by default
|
# Visual Studio has all standards it supports available by default
|
||||||
# Clang on windows copies this behavior and does not support these switches
|
# Clang on windows copies this behavior and does not support these switches
|
||||||
@@ -1915,6 +1935,7 @@ if(FIRST_RUN)
|
|||||||
info_cfg_option(WITH_IK_ITASC)
|
info_cfg_option(WITH_IK_ITASC)
|
||||||
info_cfg_option(WITH_IK_SOLVER)
|
info_cfg_option(WITH_IK_SOLVER)
|
||||||
info_cfg_option(WITH_INPUT_NDOF)
|
info_cfg_option(WITH_INPUT_NDOF)
|
||||||
|
info_cfg_option(WITH_INPUT_IME)
|
||||||
info_cfg_option(WITH_INTERNATIONAL)
|
info_cfg_option(WITH_INTERNATIONAL)
|
||||||
info_cfg_option(WITH_OPENCOLLADA)
|
info_cfg_option(WITH_OPENCOLLADA)
|
||||||
info_cfg_option(WITH_OPENCOLORIO)
|
info_cfg_option(WITH_OPENCOLORIO)
|
||||||
|
16
GNUmakefile
16
GNUmakefile
@@ -456,7 +456,8 @@ project_eclipse: .FORCE
|
|||||||
check_cppcheck: .FORCE
|
check_cppcheck: .FORCE
|
||||||
$(CMAKE_CONFIG)
|
$(CMAKE_CONFIG)
|
||||||
cd "$(BUILD_DIR)" ; \
|
cd "$(BUILD_DIR)" ; \
|
||||||
$(PYTHON) "$(BLENDER_DIR)/build_files/cmake/cmake_static_check_cppcheck.py" 2> \
|
$(PYTHON) \
|
||||||
|
"$(BLENDER_DIR)/build_files/cmake/cmake_static_check_cppcheck.py" 2> \
|
||||||
"$(BLENDER_DIR)/check_cppcheck.txt"
|
"$(BLENDER_DIR)/check_cppcheck.txt"
|
||||||
@echo "written: check_cppcheck.txt"
|
@echo "written: check_cppcheck.txt"
|
||||||
|
|
||||||
@@ -518,7 +519,8 @@ source_archive: .FORCE
|
|||||||
python3 ./build_files/utils/make_source_archive.py
|
python3 ./build_files/utils/make_source_archive.py
|
||||||
|
|
||||||
source_archive_complete: .FORCE
|
source_archive_complete: .FORCE
|
||||||
cmake -S "$(BLENDER_DIR)/build_files/build_environment" -B"$(BUILD_DIR)/source_archive" \
|
cmake \
|
||||||
|
-S "$(BLENDER_DIR)/build_files/build_environment" -B"$(BUILD_DIR)/source_archive" \
|
||||||
-DCMAKE_BUILD_TYPE_INIT:STRING=$(BUILD_TYPE) -DPACKAGE_USE_UPSTREAM_SOURCES=OFF
|
-DCMAKE_BUILD_TYPE_INIT:STRING=$(BUILD_TYPE) -DPACKAGE_USE_UPSTREAM_SOURCES=OFF
|
||||||
# This assumes CMake is still using a default `PACKAGE_DIR` variable:
|
# This assumes CMake is still using a default `PACKAGE_DIR` variable:
|
||||||
python3 ./build_files/utils/make_source_archive.py --include-packages "$(BUILD_DIR)/source_archive/packages"
|
python3 ./build_files/utils/make_source_archive.py --include-packages "$(BUILD_DIR)/source_archive/packages"
|
||||||
@@ -528,8 +530,10 @@ INKSCAPE_BIN?="inkscape"
|
|||||||
icons: .FORCE
|
icons: .FORCE
|
||||||
BLENDER_BIN=$(BLENDER_BIN) INKSCAPE_BIN=$(INKSCAPE_BIN) \
|
BLENDER_BIN=$(BLENDER_BIN) INKSCAPE_BIN=$(INKSCAPE_BIN) \
|
||||||
"$(BLENDER_DIR)/release/datafiles/blender_icons_update.py"
|
"$(BLENDER_DIR)/release/datafiles/blender_icons_update.py"
|
||||||
BLENDER_BIN=$(BLENDER_BIN) INKSCAPE_BIN=$(INKSCAPE_BIN) \
|
INKSCAPE_BIN=$(INKSCAPE_BIN) \
|
||||||
"$(BLENDER_DIR)/release/datafiles/prvicons_update.py"
|
"$(BLENDER_DIR)/release/datafiles/prvicons_update.py"
|
||||||
|
INKSCAPE_BIN=$(INKSCAPE_BIN) \
|
||||||
|
"$(BLENDER_DIR)/release/datafiles/alert_icons_update.py"
|
||||||
|
|
||||||
icons_geom: .FORCE
|
icons_geom: .FORCE
|
||||||
BLENDER_BIN=$(BLENDER_BIN) \
|
BLENDER_BIN=$(BLENDER_BIN) \
|
||||||
@@ -553,7 +557,8 @@ format: .FORCE
|
|||||||
# Simple version of ./doc/python_api/sphinx_doc_gen.sh with no PDF generation.
|
# Simple version of ./doc/python_api/sphinx_doc_gen.sh with no PDF generation.
|
||||||
doc_py: .FORCE
|
doc_py: .FORCE
|
||||||
ASAN_OPTIONS=halt_on_error=0:${ASAN_OPTIONS} \
|
ASAN_OPTIONS=halt_on_error=0:${ASAN_OPTIONS} \
|
||||||
$(BLENDER_BIN) --background -noaudio --factory-startup \
|
$(BLENDER_BIN) \
|
||||||
|
--background -noaudio --factory-startup \
|
||||||
--python doc/python_api/sphinx_doc_gen.py
|
--python doc/python_api/sphinx_doc_gen.py
|
||||||
sphinx-build -b html -j $(NPROCS) doc/python_api/sphinx-in doc/python_api/sphinx-out
|
sphinx-build -b html -j $(NPROCS) doc/python_api/sphinx-in doc/python_api/sphinx-out
|
||||||
@echo "docs written into: '$(BLENDER_DIR)/doc/python_api/sphinx-out/index.html'"
|
@echo "docs written into: '$(BLENDER_DIR)/doc/python_api/sphinx-out/index.html'"
|
||||||
@@ -563,7 +568,8 @@ doc_doxy: .FORCE
|
|||||||
@echo "docs written into: '$(BLENDER_DIR)/doc/doxygen/html/index.html'"
|
@echo "docs written into: '$(BLENDER_DIR)/doc/doxygen/html/index.html'"
|
||||||
|
|
||||||
doc_dna: .FORCE
|
doc_dna: .FORCE
|
||||||
$(BLENDER_BIN) --background -noaudio --factory-startup \
|
$(BLENDER_BIN) \
|
||||||
|
--background -noaudio --factory-startup \
|
||||||
--python doc/blender_file_format/BlendFileDnaExporter_25.py
|
--python doc/blender_file_format/BlendFileDnaExporter_25.py
|
||||||
@echo "docs written into: '$(BLENDER_DIR)/doc/blender_file_format/dna.html'"
|
@echo "docs written into: '$(BLENDER_DIR)/doc/blender_file_format/dna.html'"
|
||||||
|
|
||||||
|
@@ -56,6 +56,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/zlib.cmake)
|
include(cmake/zlib.cmake)
|
||||||
|
include(cmake/zstd.cmake)
|
||||||
include(cmake/openal.cmake)
|
include(cmake/openal.cmake)
|
||||||
include(cmake/png.cmake)
|
include(cmake/png.cmake)
|
||||||
include(cmake/jpeg.cmake)
|
include(cmake/jpeg.cmake)
|
||||||
@@ -81,7 +82,11 @@ if(UNIX)
|
|||||||
endif()
|
endif()
|
||||||
include(cmake/openimageio.cmake)
|
include(cmake/openimageio.cmake)
|
||||||
include(cmake/tiff.cmake)
|
include(cmake/tiff.cmake)
|
||||||
|
if(WIN32)
|
||||||
include(cmake/flexbison.cmake)
|
include(cmake/flexbison.cmake)
|
||||||
|
elseif(UNIX AND NOT APPLE)
|
||||||
|
include(cmake/flex.cmake)
|
||||||
|
endif()
|
||||||
include(cmake/osl.cmake)
|
include(cmake/osl.cmake)
|
||||||
include(cmake/tbb.cmake)
|
include(cmake/tbb.cmake)
|
||||||
include(cmake/openvdb.cmake)
|
include(cmake/openvdb.cmake)
|
||||||
@@ -164,6 +169,7 @@ endif()
|
|||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
include(cmake/libglu.cmake)
|
include(cmake/libglu.cmake)
|
||||||
include(cmake/mesa.cmake)
|
include(cmake/mesa.cmake)
|
||||||
|
include(cmake/wayland_protocols.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/harvest.cmake)
|
include(cmake/harvest.cmake)
|
||||||
|
@@ -87,7 +87,10 @@ download_source(LIBGLU)
|
|||||||
download_source(MESA)
|
download_source(MESA)
|
||||||
download_source(NASM)
|
download_source(NASM)
|
||||||
download_source(XR_OPENXR_SDK)
|
download_source(XR_OPENXR_SDK)
|
||||||
|
download_source(WL_PROTOCOLS)
|
||||||
download_source(ISPC)
|
download_source(ISPC)
|
||||||
download_source(GMP)
|
download_source(GMP)
|
||||||
download_source(POTRACE)
|
download_source(POTRACE)
|
||||||
download_source(HARU)
|
download_source(HARU)
|
||||||
|
download_source(ZSTD)
|
||||||
|
download_source(FLEX)
|
||||||
|
@@ -30,6 +30,7 @@ if(WIN32)
|
|||||||
--enable-w32threads
|
--enable-w32threads
|
||||||
--disable-pthreads
|
--disable-pthreads
|
||||||
--enable-libopenjpeg
|
--enable-libopenjpeg
|
||||||
|
--disable-mediafoundation
|
||||||
)
|
)
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
||||||
set(FFMPEG_EXTRA_FLAGS
|
set(FFMPEG_EXTRA_FLAGS
|
||||||
|
28
build_files/build_environment/cmake/flex.cmake
Normal file
28
build_files/build_environment/cmake/flex.cmake
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# ***** 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 *****
|
||||||
|
|
||||||
|
ExternalProject_Add(external_flex
|
||||||
|
URL file://${PACKAGE_DIR}/${FLEX_FILE}
|
||||||
|
URL_HASH ${FLEX_HASH_TYPE}=${FLEX_HASH}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
PREFIX ${BUILD_DIR}/flex
|
||||||
|
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/flex/src/external_flex/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/flex
|
||||||
|
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/flex/src/external_flex/ && make -j${MAKE_THREADS}
|
||||||
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/flex/src/external_flex/ && make install
|
||||||
|
INSTALL_DIR ${LIBDIR}/flex
|
||||||
|
)
|
@@ -106,6 +106,7 @@ harvest(llvm/include llvm/include "*")
|
|||||||
harvest(llvm/bin llvm/bin "llvm-config")
|
harvest(llvm/bin llvm/bin "llvm-config")
|
||||||
harvest(llvm/lib llvm/lib "libLLVM*.a")
|
harvest(llvm/lib llvm/lib "libLLVM*.a")
|
||||||
harvest(llvm/lib llvm/lib "libclang*.a")
|
harvest(llvm/lib llvm/lib "libclang*.a")
|
||||||
|
harvest(llvm/lib/clang llvm/lib/clang "*.h")
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
harvest(openmp/lib openmp/lib "*")
|
harvest(openmp/lib openmp/lib "*")
|
||||||
harvest(openmp/include openmp/include "*.h")
|
harvest(openmp/include openmp/include "*.h")
|
||||||
@@ -126,6 +127,8 @@ if(UNIX AND NOT APPLE)
|
|||||||
|
|
||||||
harvest(xml2/include xml2/include "*.h")
|
harvest(xml2/include xml2/include "*.h")
|
||||||
harvest(xml2/lib xml2/lib "*.a")
|
harvest(xml2/lib xml2/lib "*.a")
|
||||||
|
|
||||||
|
harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
|
||||||
else()
|
else()
|
||||||
harvest(blosc/lib openvdb/lib "*.a")
|
harvest(blosc/lib openvdb/lib "*.a")
|
||||||
harvest(xml2/lib opencollada/lib "*.a")
|
harvest(xml2/lib opencollada/lib "*.a")
|
||||||
@@ -190,6 +193,8 @@ harvest(potrace/include potrace/include "*.h")
|
|||||||
harvest(potrace/lib potrace/lib "*.a")
|
harvest(potrace/lib potrace/lib "*.a")
|
||||||
harvest(haru/include haru/include "*.h")
|
harvest(haru/include haru/include "*.h")
|
||||||
harvest(haru/lib haru/lib "*.a")
|
harvest(haru/lib haru/lib "*.a")
|
||||||
|
harvest(zstd/include zstd/include "*.h")
|
||||||
|
harvest(zstd/lib zstd/lib "*.a")
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
harvest(libglu/lib mesa/lib "*.so*")
|
harvest(libglu/lib mesa/lib "*.so*")
|
||||||
|
@@ -35,6 +35,7 @@ elseif(APPLE)
|
|||||||
else()
|
else()
|
||||||
set(ISPC_EXTRA_ARGS_APPLE
|
set(ISPC_EXTRA_ARGS_APPLE
|
||||||
-DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison
|
-DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison
|
||||||
|
-DFLEX_EXECUTABLE=/usr/local/opt/flex/bin/flex
|
||||||
-DARM_ENABLED=Off
|
-DARM_ENABLED=Off
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
@@ -43,6 +44,7 @@ elseif(UNIX)
|
|||||||
-DCMAKE_C_COMPILER=${LIBDIR}/llvm/bin/clang
|
-DCMAKE_C_COMPILER=${LIBDIR}/llvm/bin/clang
|
||||||
-DCMAKE_CXX_COMPILER=${LIBDIR}/llvm/bin/clang++
|
-DCMAKE_CXX_COMPILER=${LIBDIR}/llvm/bin/clang++
|
||||||
-DARM_ENABLED=Off
|
-DARM_ENABLED=Off
|
||||||
|
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -82,4 +84,9 @@ if(WIN32)
|
|||||||
external_ispc
|
external_ispc
|
||||||
external_flexbison
|
external_flexbison
|
||||||
)
|
)
|
||||||
|
elseif(UNIX AND NOT APPLE)
|
||||||
|
add_dependencies(
|
||||||
|
external_ispc
|
||||||
|
external_flex
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -66,7 +66,11 @@ ExternalProject_Add(ll
|
|||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
set(LLVM_HARVEST_COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/ ${HARVEST_TARGET}/llvm/ )
|
set(LLVM_HARVEST_COMMAND
|
||||||
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/lib ${HARVEST_TARGET}/llvm/lib &&
|
||||||
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/include ${HARVEST_TARGET}/llvm/include &&
|
||||||
|
${CMAKE_COMMAND} -E copy ${LIBDIR}/llvm/bin/clang-format.exe ${HARVEST_TARGET}/llvm/bin/clang-format.exe
|
||||||
|
)
|
||||||
else()
|
else()
|
||||||
set(LLVM_HARVEST_COMMAND
|
set(LLVM_HARVEST_COMMAND
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/lib/ ${HARVEST_TARGET}/llvm/debug/lib/ &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/lib/ ${HARVEST_TARGET}/llvm/debug/lib/ &&
|
||||||
|
@@ -45,7 +45,6 @@ ExternalProject_Add(external_openimagedenoise
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${OIDN_HASH_TYPE}=${OIDN_HASH}
|
URL_HASH ${OIDN_HASH_TYPE}=${OIDN_HASH}
|
||||||
PREFIX ${BUILD_DIR}/openimagedenoise
|
PREFIX ${BUILD_DIR}/openimagedenoise
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < ${PATCH_DIR}/oidn.diff
|
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimagedenoise ${DEFAULT_CMAKE_FLAGS} ${OIDN_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimagedenoise ${DEFAULT_CMAKE_FLAGS} ${OIDN_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/openimagedenoise
|
INSTALL_DIR ${LIBDIR}/openimagedenoise
|
||||||
)
|
)
|
||||||
|
@@ -16,15 +16,20 @@
|
|||||||
#
|
#
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set(OPENMP_PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openmp/src/external_openmp < ${PATCH_DIR}/openmp.diff)
|
||||||
|
else()
|
||||||
|
set(OPENMP_PATCH_COMMAND)
|
||||||
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_openmp
|
ExternalProject_Add(external_openmp
|
||||||
URL file://${PACKAGE_DIR}/${OPENMP_FILE}
|
URL file://${PACKAGE_DIR}/${OPENMP_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${OPENMP_HASH_TYPE}=${OPENMP_HASH}
|
URL_HASH ${OPENMP_HASH_TYPE}=${OPENMP_HASH}
|
||||||
PREFIX ${BUILD_DIR}/openmp
|
PREFIX ${BUILD_DIR}/openmp
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openmp/src/external_openmp < ${PATCH_DIR}/openmp.diff
|
PATCH_COMMAND ${OPENMP_PATCH_COMMAND}
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openmp ${DEFAULT_CMAKE_FLAGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openmp ${DEFAULT_CMAKE_FLAGS}
|
||||||
INSTALL_COMMAND cd ${BUILD_DIR}/openmp/src/external_openmp-build && install_name_tool -id @executable_path/../Resources/lib/libomp.dylib runtime/src/libomp.dylib && make install
|
INSTALL_COMMAND cd ${BUILD_DIR}/openmp/src/external_openmp-build && install_name_tool -id @rpath/libomp.dylib runtime/src/libomp.dylib && make install
|
||||||
INSTALL_DIR ${LIBDIR}/openmp
|
INSTALL_DIR ${LIBDIR}/openmp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,12 +20,10 @@ if(WIN32)
|
|||||||
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES "kernel32${LIBEXT} user32${LIBEXT} gdi32${LIBEXT} winspool${LIBEXT} shell32${LIBEXT} ole32${LIBEXT} oleaut32${LIBEXT} uuid${LIBEXT} comdlg32${LIBEXT} advapi32${LIBEXT} psapi${LIBEXT}")
|
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES "kernel32${LIBEXT} user32${LIBEXT} gdi32${LIBEXT} winspool${LIBEXT} shell32${LIBEXT} ole32${LIBEXT} oleaut32${LIBEXT} uuid${LIBEXT} comdlg32${LIBEXT} advapi32${LIBEXT} psapi${LIBEXT}")
|
||||||
set(OSL_FLEX_BISON -DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe)
|
set(OSL_FLEX_BISON -DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe)
|
||||||
set(OSL_SIMD_FLAGS -DOIIO_NOSIMD=1 -DOIIO_SIMD=sse2)
|
set(OSL_SIMD_FLAGS -DOIIO_NOSIMD=1 -DOIIO_SIMD=sse2)
|
||||||
SET(OSL_PLATFORM_FLAGS -DLINKSTATIC=ON)
|
|
||||||
else()
|
else()
|
||||||
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES)
|
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES)
|
||||||
set(OSL_FLEX_BISON)
|
set(OSL_FLEX_BISON)
|
||||||
set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO${LIBEXT};${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO_Util${LIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}")
|
set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO${LIBEXT};${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO_Util${LIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}")
|
||||||
SET(OSL_PLATFORM_FLAGS)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(OSL_ILMBASE_CUSTOM_LIBRARIES "${LIBDIR}/openexr/lib/Imath${OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/Half{OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/IlmThread${OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/Iex${OPENEXR_VERSION_POSTFIX}.lib")
|
set(OSL_ILMBASE_CUSTOM_LIBRARIES "${LIBDIR}/openexr/lib/Imath${OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/Half{OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/IlmThread${OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/Iex${OPENEXR_VERSION_POSTFIX}.lib")
|
||||||
@@ -51,12 +49,13 @@ set(OSL_EXTRA_ARGS
|
|||||||
-DOpenImageIO_ROOT=${LIBDIR}/openimageio/
|
-DOpenImageIO_ROOT=${LIBDIR}/openimageio/
|
||||||
-DOSL_BUILD_TESTS=OFF
|
-DOSL_BUILD_TESTS=OFF
|
||||||
-DOSL_BUILD_MATERIALX=OFF
|
-DOSL_BUILD_MATERIALX=OFF
|
||||||
|
-DPNG_ROOT=${LIBDIR}/png
|
||||||
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
|
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
|
||||||
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
|
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
|
||||||
${OSL_FLEX_BISON}
|
${OSL_FLEX_BISON}
|
||||||
-DCMAKE_CXX_STANDARD_LIBRARIES=${OSL_CMAKE_CXX_STANDARD_LIBRARIES}
|
-DCMAKE_CXX_STANDARD_LIBRARIES=${OSL_CMAKE_CXX_STANDARD_LIBRARIES}
|
||||||
-DBUILD_SHARED_LIBS=OFF
|
-DBUILD_SHARED_LIBS=OFF
|
||||||
${OSL_PLATFORM_FLAGS}
|
-DLINKSTATIC=ON
|
||||||
-DOSL_BUILD_PLUGINS=OFF
|
-DOSL_BUILD_PLUGINS=OFF
|
||||||
-DSTOP_ON_WARNING=OFF
|
-DSTOP_ON_WARNING=OFF
|
||||||
-DUSE_LLVM_BITCODE=OFF
|
-DUSE_LLVM_BITCODE=OFF
|
||||||
@@ -69,13 +68,9 @@ set(OSL_EXTRA_ARGS
|
|||||||
${OSL_SIMD_FLAGS}
|
${OSL_SIMD_FLAGS}
|
||||||
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
||||||
-DUSE_PYTHON=OFF
|
-DUSE_PYTHON=OFF
|
||||||
|
-DCMAKE_CXX_STANDARD=14
|
||||||
)
|
)
|
||||||
|
|
||||||
# Apple arm64 uses LLVM 11, LLVM 10+ requires C++14
|
|
||||||
if (APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
|
||||||
list(APPEND OSL_EXTRA_ARGS -DCMAKE_CXX_STANDARD=14)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ExternalProject_Add(external_osl
|
ExternalProject_Add(external_osl
|
||||||
URL file://${PACKAGE_DIR}/${OSL_FILE}
|
URL file://${PACKAGE_DIR}/${OSL_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
@@ -93,10 +88,20 @@ add_dependencies(
|
|||||||
ll
|
ll
|
||||||
external_openexr
|
external_openexr
|
||||||
external_zlib
|
external_zlib
|
||||||
external_flexbison
|
|
||||||
external_openimageio
|
external_openimageio
|
||||||
external_pugixml
|
external_pugixml
|
||||||
)
|
)
|
||||||
|
if(WIN32)
|
||||||
|
add_dependencies(
|
||||||
|
external_osl
|
||||||
|
external_flexbison
|
||||||
|
)
|
||||||
|
elseif(UNIX AND NOT APPLE)
|
||||||
|
add_dependencies(
|
||||||
|
external_osl
|
||||||
|
external_flex
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
@@ -23,7 +23,7 @@ set(PNG_EXTRA_ARGS
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
if(BLENDER_PLATFORM_ARM)
|
||||||
set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=ON -DCMAKE_SYSTEM_PROCESSOR="aarch64")
|
set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=on -DCMAKE_SYSTEM_PROCESSOR="aarch64")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_png
|
ExternalProject_Add(external_png
|
||||||
|
@@ -152,35 +152,28 @@ set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0)
|
|||||||
set(OPENCOLORIO_HASH_TYPE MD5)
|
set(OPENCOLORIO_HASH_TYPE MD5)
|
||||||
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
|
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
|
||||||
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
set(LLVM_VERSION 12.0.0)
|
||||||
# Newer version required by ISPC with arm support.
|
|
||||||
set(LLVM_VERSION 11.0.1)
|
|
||||||
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
|
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||||
set(LLVM_HASH e700af40ab83463e4e9ab0ba3708312e)
|
set(LLVM_HASH 5a4fab4d7fc84aefffb118ac2c8a4fc0)
|
||||||
set(LLVM_HASH_TYPE MD5)
|
set(LLVM_HASH_TYPE MD5)
|
||||||
set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz)
|
set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
# Cloth physics test is crashing due to this bug:
|
||||||
|
# https://bugs.llvm.org/show_bug.cgi?id=50579
|
||||||
set(OPENMP_VERSION 9.0.1)
|
set(OPENMP_VERSION 9.0.1)
|
||||||
set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${OPENMP_VERSION}/openmp-${OPENMP_VERSION}.src.tar.xz)
|
|
||||||
set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
|
set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
|
||||||
|
else()
|
||||||
|
set(OPENMP_VERSION ${LLVM_VERSION})
|
||||||
|
set(OPENMP_HASH ac48ce3e4582ccb82f81ab59eb3fc9dc)
|
||||||
|
endif()
|
||||||
|
set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${OPENMP_VERSION}/openmp-${OPENMP_VERSION}.src.tar.xz)
|
||||||
set(OPENMP_HASH_TYPE MD5)
|
set(OPENMP_HASH_TYPE MD5)
|
||||||
set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz)
|
set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz)
|
||||||
else()
|
|
||||||
set(LLVM_VERSION 9.0.1)
|
|
||||||
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.tar.xz)
|
|
||||||
set(LLVM_HASH b4268e733dfe352960140dc07ef2efcb)
|
|
||||||
set(LLVM_HASH_TYPE MD5)
|
|
||||||
set(LLVM_FILE llvm-project-${LLVM_VERSION}.tar.xz)
|
|
||||||
|
|
||||||
set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz)
|
set(OPENIMAGEIO_VERSION 2.2.15.1)
|
||||||
set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
|
|
||||||
set(OPENMP_HASH_TYPE MD5)
|
|
||||||
set(OPENMP_FILE openmp-${LLVM_VERSION}.src.tar.xz)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(OPENIMAGEIO_VERSION 2.1.15.0)
|
|
||||||
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
|
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||||
set(OPENIMAGEIO_HASH f03aa5e3ac4795af04771ee4146e9832)
|
set(OPENIMAGEIO_HASH 3db5c5f0b3dc91597c75e5df09eb9072)
|
||||||
set(OPENIMAGEIO_HASH_TYPE MD5)
|
set(OPENIMAGEIO_HASH_TYPE MD5)
|
||||||
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||||
|
|
||||||
@@ -190,9 +183,9 @@ set(TIFF_HASH 2165e7aba557463acc0664e71a3ed424)
|
|||||||
set(TIFF_HASH_TYPE MD5)
|
set(TIFF_HASH_TYPE MD5)
|
||||||
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(OSL_VERSION 1.11.10.0)
|
set(OSL_VERSION 1.11.14.1)
|
||||||
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
||||||
set(OSL_HASH dfdc23597aeef083832cbada62211756)
|
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)
|
||||||
|
|
||||||
@@ -370,12 +363,18 @@ set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
|||||||
set(PUGIXML_HASH_TYPE MD5)
|
set(PUGIXML_HASH_TYPE MD5)
|
||||||
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(FLEXBISON_VERSION 2.5.5)
|
set(FLEXBISON_VERSION 2.5.24)
|
||||||
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||||
set(FLEXBISON_HASH d87a3938194520d904013abef3df10ce)
|
set(FLEXBISON_HASH 6b549d43e34ece0e8ed05af92daa31c4)
|
||||||
set(FLEXBISON_HASH_TYPE MD5)
|
set(FLEXBISON_HASH_TYPE MD5)
|
||||||
set(FLEXBISON_FILE win_flex_bison-${FLEXBISON_VERSION}.zip)
|
set(FLEXBISON_FILE win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||||
|
|
||||||
|
set(FLEX_VERSION 2.6.4)
|
||||||
|
set(FLEX_URI https://github.com/westes/flex/releases/download/v${FLEX_VERSION}/flex-${FLEX_VERSION}.tar.gz)
|
||||||
|
set(FLEX_HASH 2882e3179748cc9f9c23ec593d6adc8d)
|
||||||
|
set(FLEX_HASH_TYPE MD5)
|
||||||
|
set(FLEX_FILE flex-${FLEX_VERSION}.tar.gz)
|
||||||
|
|
||||||
# Libraries to keep Python modules static on Linux.
|
# Libraries to keep Python modules static on Linux.
|
||||||
|
|
||||||
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
||||||
@@ -432,9 +431,9 @@ set(USD_HASH 1dd1e2092d085ed393c1f7c450a4155a)
|
|||||||
set(USD_HASH_TYPE MD5)
|
set(USD_HASH_TYPE MD5)
|
||||||
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(OIDN_VERSION 1.4.0)
|
set(OIDN_VERSION 1.4.1)
|
||||||
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
||||||
set(OIDN_HASH 421824019becc5b664a22a2b98332bc5)
|
set(OIDN_HASH df4007b0ab93b1c41cdf223b075d01c0)
|
||||||
set(OIDN_HASH_TYPE MD5)
|
set(OIDN_HASH_TYPE MD5)
|
||||||
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
||||||
|
|
||||||
@@ -444,10 +443,10 @@ set(LIBGLU_HASH 151aef599b8259efe9acd599c96ea2a3)
|
|||||||
set(LIBGLU_HASH_TYPE MD5)
|
set(LIBGLU_HASH_TYPE MD5)
|
||||||
set(LIBGLU_FILE glu-${LIBGLU_VERSION}.tar.xz)
|
set(LIBGLU_FILE glu-${LIBGLU_VERSION}.tar.xz)
|
||||||
|
|
||||||
set(MESA_VERSION 20.3.4)
|
set(MESA_VERSION 21.1.5)
|
||||||
set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa/mesa-${MESA_VERSION}.tar.xz)
|
set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa/mesa-${MESA_VERSION}.tar.xz)
|
||||||
set(MESA_HASH 556338446aef8ae947a789b3e0b5e056)
|
set(MESA_HASH 022c7293074aeeced2278c872db4fa693147c70f8595b076cf3f1ef81520766d)
|
||||||
set(MESA_HASH_TYPE MD5)
|
set(MESA_HASH_TYPE SHA256)
|
||||||
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
||||||
|
|
||||||
set(NASM_VERSION 2.15.02)
|
set(NASM_VERSION 2.15.02)
|
||||||
@@ -456,25 +455,23 @@ set(NASM_HASH aded8b796c996a486a56e0515c83e414116decc3b184d88043480b32eb0a8589)
|
|||||||
set(NASM_HASH_TYPE SHA256)
|
set(NASM_HASH_TYPE SHA256)
|
||||||
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(XR_OPENXR_SDK_VERSION 1.0.14)
|
set(XR_OPENXR_SDK_VERSION 1.0.17)
|
||||||
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
set(XR_OPENXR_SDK_HASH 0df6b2fd6045423451a77ff6bc3e1a75)
|
set(XR_OPENXR_SDK_HASH bf0fd8828837edff01047474e90013e1)
|
||||||
set(XR_OPENXR_SDK_HASH_TYPE MD5)
|
set(XR_OPENXR_SDK_HASH_TYPE MD5)
|
||||||
set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
set(WL_PROTOCOLS_VERSION 1.21)
|
||||||
# Unreleased version with macOS arm support.
|
set(WL_PROTOCOLS_FILE wayland-protocols-${WL_PROTOCOLS_VERSION}.tar.gz)
|
||||||
set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
set(WL_PROTOCOLS_URI https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/${WL_PROTOCOLS_VERSION}/${WL_PROTOCOLS_FILE})
|
||||||
set(ISPC_HASH d382fea18d01dbd0cd05d9e1ede36d7d)
|
set(WL_PROTOCOLS_HASH af5ca07e13517cdbab33504492cef54a)
|
||||||
set(ISPC_HASH_TYPE MD5)
|
set(WL_PROTOCOLS_HASH_TYPE MD5)
|
||||||
set(ISPC_FILE f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
|
||||||
else()
|
set(ISPC_VERSION v1.16.0)
|
||||||
set(ISPC_VERSION v1.14.1)
|
|
||||||
set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
|
set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
|
||||||
set(ISPC_HASH 968fbc8dfd16a60ba4e32d2e0e03ea7a)
|
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)
|
||||||
endif()
|
|
||||||
|
|
||||||
set(GMP_VERSION 6.2.0)
|
set(GMP_VERSION 6.2.0)
|
||||||
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)
|
||||||
@@ -494,5 +491,11 @@ set(HARU_HASH 4f916aa49c3069b3a10850013c507460)
|
|||||||
set(HARU_HASH_TYPE MD5)
|
set(HARU_HASH_TYPE MD5)
|
||||||
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
||||||
|
|
||||||
|
set(ZSTD_VERSION 1.5.0)
|
||||||
|
set(ZSTD_URI https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz)
|
||||||
|
set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
|
||||||
|
set(ZSTD_HASH_TYPE SHA256)
|
||||||
|
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)
|
||||||
|
27
build_files/build_environment/cmake/wayland_protocols.cmake
Normal file
27
build_files/build_environment/cmake/wayland_protocols.cmake
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# ***** 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 *****
|
||||||
|
|
||||||
|
ExternalProject_Add(external_wayland_protocols
|
||||||
|
URL file://${PACKAGE_DIR}/${WL_PROTOCOLS_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${WL_PROTOCOLS_HASH_TYPE}=${WL_PROTOCOLS_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/wayland-protocols
|
||||||
|
CONFIGURE_COMMAND meson --prefix ${LIBDIR}/wayland-protocols . ../external_wayland_protocols -Dtests=false
|
||||||
|
BUILD_COMMAND ninja
|
||||||
|
INSTALL_COMMAND ninja install
|
||||||
|
)
|
51
build_files/build_environment/cmake/zstd.cmake
Normal file
51
build_files/build_environment/cmake/zstd.cmake
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# ***** 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(ZSTD_EXTRA_ARGS
|
||||||
|
-DZSTD_BUILD_PROGRAMS=OFF
|
||||||
|
-DZSTD_BUILD_SHARED=OFF
|
||||||
|
-DZSTD_BUILD_STATIC=ON
|
||||||
|
-DZSTD_BUILD_TESTS=OFF
|
||||||
|
-DZSTD_LEGACY_SUPPORT=OFF
|
||||||
|
-DZSTD_LZ4_SUPPORT=OFF
|
||||||
|
-DZSTD_LZMA_SUPPORT=OFF
|
||||||
|
-DZSTD_MULTITHREAD_SUPPORT=ON
|
||||||
|
-DZSTD_PROGRAMS_LINK_SHARED=OFF
|
||||||
|
-DZSTD_USE_STATIC_RUNTIME=OFF
|
||||||
|
-DZSTD_ZLIB_SUPPORT=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(external_zstd
|
||||||
|
URL file://${PACKAGE_DIR}/${ZSTD_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${ZSTD_HASH_TYPE}=${ZSTD_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/zstd
|
||||||
|
SOURCE_SUBDIR build/cmake
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/zstd ${DEFAULT_CMAKE_FLAGS} ${ZSTD_EXTRA_ARGS}
|
||||||
|
INSTALL_DIR ${LIBDIR}/zstd
|
||||||
|
)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
ExternalProject_Add_Step(external_zstd after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zstd/lib/zstd_static${LIBEXT} ${HARVEST_TARGET}/zstd/lib/zstd_static${LIBEXT}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/zstd/include/ ${HARVEST_TARGET}/zstd/include/
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
@@ -474,25 +474,25 @@ OPENEXR_FORCE_REBUILD=false
|
|||||||
OPENEXR_SKIP=false
|
OPENEXR_SKIP=false
|
||||||
_with_built_openexr=false
|
_with_built_openexr=false
|
||||||
|
|
||||||
OIIO_VERSION="2.1.15.0"
|
OIIO_VERSION="2.2.15.1"
|
||||||
OIIO_VERSION_SHORT="2.1"
|
OIIO_VERSION_SHORT="2.2"
|
||||||
OIIO_VERSION_MIN="2.1.12"
|
OIIO_VERSION_MIN="2.1.12"
|
||||||
OIIO_VERSION_MAX="2.2.10"
|
OIIO_VERSION_MAX="2.3.0"
|
||||||
OIIO_FORCE_BUILD=false
|
OIIO_FORCE_BUILD=false
|
||||||
OIIO_FORCE_REBUILD=false
|
OIIO_FORCE_REBUILD=false
|
||||||
OIIO_SKIP=false
|
OIIO_SKIP=false
|
||||||
|
|
||||||
LLVM_VERSION="9.0.1"
|
LLVM_VERSION="12.0.0"
|
||||||
LLVM_VERSION_SHORT="9.0"
|
LLVM_VERSION_SHORT="12.0"
|
||||||
LLVM_VERSION_MIN="6.0"
|
LLVM_VERSION_MIN="11.0"
|
||||||
LLVM_VERSION_MAX="12.0"
|
LLVM_VERSION_MAX="13.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.10.0"
|
OSL_VERSION="1.11.14.1"
|
||||||
OSL_VERSION_SHORT="1.11"
|
OSL_VERSION_SHORT="1.11"
|
||||||
OSL_VERSION_MIN="1.11"
|
OSL_VERSION_MIN="1.11"
|
||||||
OSL_VERSION_MAX="2.0"
|
OSL_VERSION_MAX="2.0"
|
||||||
@@ -553,7 +553,7 @@ EMBREE_FORCE_BUILD=false
|
|||||||
EMBREE_FORCE_REBUILD=false
|
EMBREE_FORCE_REBUILD=false
|
||||||
EMBREE_SKIP=false
|
EMBREE_SKIP=false
|
||||||
|
|
||||||
OIDN_VERSION="1.4.0"
|
OIDN_VERSION="1.4.1"
|
||||||
OIDN_VERSION_SHORT="1.4"
|
OIDN_VERSION_SHORT="1.4"
|
||||||
OIDN_VERSION_MIN="1.4.0"
|
OIDN_VERSION_MIN="1.4.0"
|
||||||
OIDN_VERSION_MAX="1.5"
|
OIDN_VERSION_MAX="1.5"
|
||||||
@@ -561,7 +561,7 @@ OIDN_FORCE_BUILD=false
|
|||||||
OIDN_FORCE_REBUILD=false
|
OIDN_FORCE_REBUILD=false
|
||||||
OIDN_SKIP=false
|
OIDN_SKIP=false
|
||||||
|
|
||||||
ISPC_VERSION="1.14.1"
|
ISPC_VERSION="1.16.0"
|
||||||
|
|
||||||
FFMPEG_VERSION="4.4"
|
FFMPEG_VERSION="4.4"
|
||||||
FFMPEG_VERSION_SHORT="4.4"
|
FFMPEG_VERSION_SHORT="4.4"
|
||||||
@@ -572,7 +572,7 @@ FFMPEG_FORCE_REBUILD=false
|
|||||||
FFMPEG_SKIP=false
|
FFMPEG_SKIP=false
|
||||||
_ffmpeg_list_sep=";"
|
_ffmpeg_list_sep=";"
|
||||||
|
|
||||||
XR_OPENXR_VERSION="1.0.14"
|
XR_OPENXR_VERSION="1.0.17"
|
||||||
XR_OPENXR_VERSION_SHORT="1.0"
|
XR_OPENXR_VERSION_SHORT="1.0"
|
||||||
XR_OPENXR_VERSION_MIN="1.0.8"
|
XR_OPENXR_VERSION_MIN="1.0.8"
|
||||||
XR_OPENXR_VERSION_MAX="2.0"
|
XR_OPENXR_VERSION_MAX="2.0"
|
||||||
@@ -1019,7 +1019,7 @@ PRINT ""
|
|||||||
PYTHON_SOURCE=( "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" )
|
PYTHON_SOURCE=( "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" )
|
||||||
|
|
||||||
_boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
|
_boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
|
||||||
BOOST_SOURCE=( "https://dl.bintray.com/boostorg/release/$BOOST_VERSION/source/boost_$_boost_version_nodots.tar.bz2" )
|
BOOST_SOURCE=( "https://boostorg.jfrog.io/artifactory/main/release/$BOOST_VERSION/source/boost_$_boost_version_nodots.tar.bz2" )
|
||||||
BOOST_BUILD_MODULES="--with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time --with-wave --with-iostreams --with-python --with-program_options --with-serialization --with-atomic"
|
BOOST_BUILD_MODULES="--with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time --with-wave --with-iostreams --with-python --with-program_options --with-serialization --with-atomic"
|
||||||
|
|
||||||
TBB_SOURCE=( "https://github.com/oneapi-src/oneTBB/archive/$TBB_VERSION$TBB_VERSION_UPDATE.tar.gz" )
|
TBB_SOURCE=( "https://github.com/oneapi-src/oneTBB/archive/$TBB_VERSION$TBB_VERSION_UPDATE.tar.gz" )
|
||||||
@@ -1108,9 +1108,9 @@ FFMPEG_SOURCE=( "http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2" )
|
|||||||
|
|
||||||
XR_OPENXR_USE_REPO=false
|
XR_OPENXR_USE_REPO=false
|
||||||
XR_OPENXR_SOURCE=("https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_VERSION}.tar.gz")
|
XR_OPENXR_SOURCE=("https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_VERSION}.tar.gz")
|
||||||
#~ XR_OPENXR_SOURCE_REPO=("https://github.com/KhronosGroup/OpenXR-SDK.git")
|
XR_OPENXR_SOURCE_REPO=("https://github.com/KhronosGroup/OpenXR-SDK.git")
|
||||||
#~ XR_OPENXR_REPO_UID="5900c51562769b03bea699dc0352cae56acb6419d"
|
XR_OPENXR_REPO_UID="bf21ccb1007bb531b45d9978919a56ea5059c245"
|
||||||
#~ XR_OPENXR_REPO_BRANCH="master"
|
XR_OPENXR_REPO_BRANCH="master"
|
||||||
|
|
||||||
# C++11 is required now
|
# C++11 is required now
|
||||||
CXXFLAGS_BACK=$CXXFLAGS
|
CXXFLAGS_BACK=$CXXFLAGS
|
||||||
@@ -1128,7 +1128,8 @@ Those libraries should be available as packages in all recent distributions (opt
|
|||||||
* Basics of dev environment (cmake, gcc, svn , git, ...).
|
* Basics of dev environment (cmake, gcc, svn , git, ...).
|
||||||
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
||||||
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
||||||
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
|
* libwayland-client0, libwayland-cursor0, libwayland-egl1, libxkbcommon0, libdbus-1-3, libegl1 (Wayland)
|
||||||
|
* libsqlite3, libzstd, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp, flex.
|
||||||
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
||||||
|
|
||||||
DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES:
|
DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES:
|
||||||
@@ -1446,9 +1447,7 @@ compile_Python() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "Python--$PYTHON_VERSION failed to compile, exiting"
|
ERROR "Python--$PYTHON_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -1464,6 +1463,9 @@ compile_Python() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-python option."
|
INFO "If you want to force rebuild of this lib, use the --force-python option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "python-$PYTHON_VERSION_SHORT"
|
run_ldconfig "python-$PYTHON_VERSION_SHORT"
|
||||||
|
|
||||||
# Extra step: install required modules with pip.
|
# Extra step: install required modules with pip.
|
||||||
@@ -1557,9 +1559,7 @@ compile_Boost() {
|
|||||||
--prefix=$_inst --disable-icu boost.locale.icu=off install
|
--prefix=$_inst --disable-icu boost.locale.icu=off install
|
||||||
./b2 --clean
|
./b2 --clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "Boost-$BOOST_VERSION failed to compile, exiting"
|
ERROR "Boost-$BOOST_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -1573,7 +1573,9 @@ compile_Boost() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-boost option."
|
INFO "If you want to force rebuild of this lib, use the --force-boost option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Just always run it, much simpler this way!
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "boost"
|
run_ldconfig "boost"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1686,9 +1688,7 @@ compile_TBB() {
|
|||||||
|
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "TBB-$TBB_VERSION$TBB_VERSION_UPDATE failed to compile, exiting"
|
ERROR "TBB-$TBB_VERSION$TBB_VERSION_UPDATE failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -1702,6 +1702,9 @@ compile_TBB() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-tbb option."
|
INFO "If you want to force rebuild of this lib, use the --force-tbb option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "tbb"
|
run_ldconfig "tbb"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1821,9 +1824,7 @@ compile_OCIO() {
|
|||||||
|
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenColorIO-$OCIO_VERSION failed to compile, exiting"
|
ERROR "OpenColorIO-$OCIO_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -1837,6 +1838,9 @@ compile_OCIO() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-ocio option."
|
INFO "If you want to force rebuild of this lib, use the --force-ocio option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "ocio"
|
run_ldconfig "ocio"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1952,9 +1956,7 @@ compile_OPENEXR() {
|
|||||||
|
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenEXR-$OPENEXR_VERSION failed to compile, exiting"
|
ERROR "OpenEXR-$OPENEXR_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -1970,7 +1972,9 @@ compile_OPENEXR() {
|
|||||||
|
|
||||||
_with_built_openexr=true
|
_with_built_openexr=true
|
||||||
|
|
||||||
# Just always run it, much simpler this way!
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "openexr"
|
run_ldconfig "openexr"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2111,9 +2115,7 @@ compile_OIIO() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenImageIO-$OIIO_VERSION failed to compile, exiting"
|
ERROR "OpenImageIO-$OIIO_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2127,7 +2129,9 @@ compile_OIIO() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-oiio option."
|
INFO "If you want to force rebuild of this lib, use the --force-oiio option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Just always run it, much simpler this way!
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "oiio"
|
run_ldconfig "oiio"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2236,9 +2240,7 @@ compile_LLVM() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
|
ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2251,6 +2253,10 @@ compile_LLVM() {
|
|||||||
INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
|
INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
|
||||||
INFO "If you want to force rebuild of this lib, use the --force-llvm option."
|
INFO "If you want to force rebuild of this lib, use the --force-llvm option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -2315,6 +2321,7 @@ compile_OSL() {
|
|||||||
tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
|
tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
|
||||||
-xf $_src.tar.gz
|
-xf $_src.tar.gz
|
||||||
fi
|
fi
|
||||||
|
patch -d $_src -p1 < $SCRIPT_DIR/patches/osl.diff
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd $_src
|
cd $_src
|
||||||
@@ -2337,7 +2344,6 @@ compile_OSL() {
|
|||||||
|
|
||||||
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
||||||
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
||||||
cmake_d="$cmake_d -D BUILD_TESTING=OFF"
|
|
||||||
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
||||||
cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF"
|
cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF"
|
||||||
cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF"
|
cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF"
|
||||||
@@ -2345,7 +2351,10 @@ compile_OSL() {
|
|||||||
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
||||||
cmake_d="$cmake_d -D OSL_BUILD_MATERIALX=OFF"
|
cmake_d="$cmake_d -D OSL_BUILD_MATERIALX=OFF"
|
||||||
cmake_d="$cmake_d -D USE_QT=OFF"
|
cmake_d="$cmake_d -D USE_QT=OFF"
|
||||||
|
cmake_d="$cmake_d -D USE_Qt5=OFF"
|
||||||
cmake_d="$cmake_d -D USE_PYTHON=OFF"
|
cmake_d="$cmake_d -D USE_PYTHON=OFF"
|
||||||
|
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
||||||
|
cmake_d="$cmake_d -D INSTALL_DOCS=OFF"
|
||||||
|
|
||||||
if [ $(uname -m) != "aarch64" ]; then
|
if [ $(uname -m) != "aarch64" ]; then
|
||||||
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
||||||
@@ -2367,10 +2376,7 @@ compile_OSL() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d $INST/oiio ]; then
|
if [ -d $INST/oiio ]; then
|
||||||
cmake_d="$cmake_d -D OPENIMAGEIO_ROOT_DIR=$INST/oiio"
|
cmake_d="$cmake_d -D OpenImageIO_ROOT=$INST/oiio"
|
||||||
# HACK! SIC!!!!
|
|
||||||
# Quiet incredible, but if root dir is given, path to lib is found, but not path to include...
|
|
||||||
cmake_d="$cmake_d -D OPENIMAGEIO_INCLUDE_DIR=$INST/oiio/include"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z $LLVM_VERSION_FOUND ]; then
|
if [ ! -z $LLVM_VERSION_FOUND ]; then
|
||||||
@@ -2389,9 +2395,7 @@ compile_OSL() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenShadingLanguage-$OSL_VERSION failed to compile, exiting"
|
ERROR "OpenShadingLanguage-$OSL_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2405,6 +2409,9 @@ compile_OSL() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-osl option."
|
INFO "If you want to force rebuild of this lib, use the --force-osl option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "osl"
|
run_ldconfig "osl"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2505,9 +2512,7 @@ compile_OSD() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenSubdiv-$OSD_VERSION failed to compile, exiting"
|
ERROR "OpenSubdiv-$OSD_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2521,6 +2526,9 @@ compile_OSD() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-osd option."
|
INFO "If you want to force rebuild of this lib, use the --force-osd option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "osd"
|
run_ldconfig "osd"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2610,9 +2618,7 @@ compile_BLOSC() {
|
|||||||
|
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "Blosc-$OPENVDB_BLOSC_VERSION failed to compile, exiting"
|
ERROR "Blosc-$OPENVDB_BLOSC_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2625,6 +2631,9 @@ compile_BLOSC() {
|
|||||||
|
|
||||||
magic_compile_set blosc-$OPENVDB_BLOSC_VERSION $blosc_magic
|
magic_compile_set blosc-$OPENVDB_BLOSC_VERSION $blosc_magic
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "blosc"
|
run_ldconfig "blosc"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2715,9 +2724,7 @@ install_NanoVDB() {
|
|||||||
#~ mkdir -p $_inst
|
#~ mkdir -p $_inst
|
||||||
#~ cp -r $_src/include $_inst/include
|
#~ cp -r $_src/include $_inst/include
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "NanoVDB-v$OPENVDB_VERSION failed to install, exiting"
|
ERROR "NanoVDB-v$OPENVDB_VERSION failed to install, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2729,6 +2736,10 @@ install_NanoVDB() {
|
|||||||
else
|
else
|
||||||
INFO "Own NanoVDB-v$OPENVDB_VERSION is up to date, nothing to do!"
|
INFO "Own NanoVDB-v$OPENVDB_VERSION is up to date, nothing to do!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2848,9 +2859,7 @@ compile_OPENVDB() {
|
|||||||
make -j$THREADS install
|
make -j$THREADS install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenVDB-$OPENVDB_VERSION failed to compile, exiting"
|
ERROR "OpenVDB-$OPENVDB_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2864,6 +2873,9 @@ compile_OPENVDB() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-openvdb option."
|
INFO "If you want to force rebuild of this lib, use the --force-openvdb option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "openvdb"
|
run_ldconfig "openvdb"
|
||||||
|
|
||||||
if [ "$WITH_NANOVDB" = true ]; then
|
if [ "$WITH_NANOVDB" = true ]; then
|
||||||
@@ -2961,9 +2973,7 @@ compile_ALEMBIC() {
|
|||||||
make -j$THREADS install
|
make -j$THREADS install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "Alembic-$ALEMBIC_VERSION failed to compile, exiting"
|
ERROR "Alembic-$ALEMBIC_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -2977,6 +2987,9 @@ compile_ALEMBIC() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-alembic option."
|
INFO "If you want to force rebuild of this lib, use the --force-alembic option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "alembic"
|
run_ldconfig "alembic"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3061,9 +3074,7 @@ compile_USD() {
|
|||||||
make -j$THREADS install
|
make -j$THREADS install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "USD-$USD_VERSION failed to compile, exiting"
|
ERROR "USD-$USD_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3077,6 +3088,9 @@ compile_USD() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-usd option."
|
INFO "If you want to force rebuild of this lib, use the --force-usd option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "usd"
|
run_ldconfig "usd"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3170,9 +3184,7 @@ compile_OpenCOLLADA() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenCOLLADA-$OPENCOLLADA_VERSION failed to compile, exiting"
|
ERROR "OpenCOLLADA-$OPENCOLLADA_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3185,6 +3197,10 @@ compile_OpenCOLLADA() {
|
|||||||
INFO "Own OpenCOLLADA-$OPENCOLLADA_VERSION is up to date, nothing to do!"
|
INFO "Own OpenCOLLADA-$OPENCOLLADA_VERSION is up to date, nothing to do!"
|
||||||
INFO "If you want to force rebuild of this lib, use the --force-opencollada option."
|
INFO "If you want to force rebuild of this lib, use the --force-opencollada option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -3285,9 +3301,7 @@ compile_Embree() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "Embree-$EMBREE_VERSION failed to compile, exiting"
|
ERROR "Embree-$EMBREE_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3300,6 +3314,10 @@ compile_Embree() {
|
|||||||
INFO "Own Embree-$EMBREE_VERSION is up to date, nothing to do!"
|
INFO "Own Embree-$EMBREE_VERSION is up to date, nothing to do!"
|
||||||
INFO "If you want to force rebuild of this lib, use the --force-embree option."
|
INFO "If you want to force rebuild of this lib, use the --force-embree option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -3362,9 +3380,7 @@ install_ISPC() {
|
|||||||
mkdir -p $_inst
|
mkdir -p $_inst
|
||||||
cp -r $_src/bin $_inst/bin
|
cp -r $_src/bin $_inst/bin
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "ISPC-v$ISPC_VERSION failed to install, exiting"
|
ERROR "ISPC-v$ISPC_VERSION failed to install, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3377,6 +3393,10 @@ install_ISPC() {
|
|||||||
INFO "Own ISPC-v$ISPC_VERSION is up to date, nothing to do!"
|
INFO "Own ISPC-v$ISPC_VERSION is up to date, nothing to do!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
|
|
||||||
_ispc_path_bin=$_inst/bin
|
_ispc_path_bin=$_inst/bin
|
||||||
run_ldconfig "ispc"
|
run_ldconfig "ispc"
|
||||||
}
|
}
|
||||||
@@ -3476,9 +3496,7 @@ compile_OIDN() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "OpenImageDenoise-$OIDN_VERSION failed to compile, exiting"
|
ERROR "OpenImageDenoise-$OIDN_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3492,6 +3510,9 @@ compile_OIDN() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-oidn option."
|
INFO "If you want to force rebuild of this lib, use the --force-oidn option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "oidn"
|
run_ldconfig "oidn"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3608,9 +3629,7 @@ compile_FFmpeg() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "FFmpeg-$FFMPEG_VERSION failed to compile, exiting"
|
ERROR "FFmpeg-$FFMPEG_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3623,6 +3642,10 @@ compile_FFmpeg() {
|
|||||||
INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
|
INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
|
||||||
INFO "If you want to force rebuild of this lib, use the --force-ffmpeg option."
|
INFO "If you want to force rebuild of this lib, use the --force-ffmpeg option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -3721,9 +3744,7 @@ compile_XR_OpenXR_SDK() {
|
|||||||
make -j$THREADS && make install
|
make -j$THREADS && make install
|
||||||
make clean
|
make clean
|
||||||
|
|
||||||
if [ -d $_inst ]; then
|
if [ ! -d $_inst ]; then
|
||||||
_create_inst_shortcut
|
|
||||||
else
|
|
||||||
ERROR "XR-OpenXR-SDK-$XR_OPENXR_VERSION failed to compile, exiting"
|
ERROR "XR-OpenXR-SDK-$XR_OPENXR_VERSION failed to compile, exiting"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -3737,6 +3758,9 @@ compile_XR_OpenXR_SDK() {
|
|||||||
INFO "If you want to force rebuild of this lib, use the --force-xr-openxr option."
|
INFO "If you want to force rebuild of this lib, use the --force-xr-openxr option."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d $_inst ]; then
|
||||||
|
_create_inst_shortcut
|
||||||
|
fi
|
||||||
run_ldconfig "xr-openxr-sdk"
|
run_ldconfig "xr-openxr-sdk"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3839,10 +3863,11 @@ install_DEB() {
|
|||||||
_packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev libtiff-dev \
|
_packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev libtiff-dev \
|
||||||
git libfreetype6-dev libfontconfig-dev libx11-dev flex bison libxxf86vm-dev \
|
git libfreetype6-dev libfontconfig-dev libx11-dev flex bison libxxf86vm-dev \
|
||||||
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
|
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
|
||||||
|
libwayland-dev wayland-protocols libegl-dev libxkbcommon-dev libdbus-1-dev linux-libc-dev \
|
||||||
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
||||||
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
||||||
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
||||||
libgmp-dev libpugixml-dev libpotrace-dev libhpdf-dev"
|
libgmp-dev libpugixml-dev libpotrace-dev libhpdf-dev libzstd-dev"
|
||||||
# libglewmx-dev (broken in deb testing currently...)
|
# libglewmx-dev (broken in deb testing currently...)
|
||||||
|
|
||||||
VORBIS_USE=true
|
VORBIS_USE=true
|
||||||
@@ -4110,6 +4135,8 @@ install_DEB() {
|
|||||||
|
|
||||||
|
|
||||||
PRINT ""
|
PRINT ""
|
||||||
|
# Debian OIIO includes again libopencv, without even properly dealing with this dependency...
|
||||||
|
OIIO_FORCE_BUILD=true
|
||||||
if [ "$OIIO_SKIP" = true ]; then
|
if [ "$OIIO_SKIP" = true ]; then
|
||||||
WARNING "Skipping OpenImageIO installation, as requested..."
|
WARNING "Skipping OpenImageIO installation, as requested..."
|
||||||
elif [ "$OIIO_FORCE_BUILD" = true ]; then
|
elif [ "$OIIO_FORCE_BUILD" = true ]; then
|
||||||
@@ -4508,10 +4535,11 @@ install_RPM() {
|
|||||||
_packages="gcc gcc-c++ git make cmake tar bzip2 xz findutils flex bison fontconfig-devel \
|
_packages="gcc gcc-c++ git make cmake tar bzip2 xz findutils flex bison fontconfig-devel \
|
||||||
libtiff-devel libjpeg-devel libpng-devel sqlite-devel fftw-devel SDL2-devel \
|
libtiff-devel libjpeg-devel libpng-devel sqlite-devel fftw-devel SDL2-devel \
|
||||||
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
||||||
|
wayland-devel wayland-protocols-devel mesa-libEGL-devel libxkbcommon-devel dbus-devel kernel-headers \
|
||||||
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
||||||
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
||||||
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
||||||
gmp-devel pugixml-devel potrace-devel libharu-devel"
|
gmp-devel pugixml-devel potrace-devel libharu-devel libzstd-devel"
|
||||||
|
|
||||||
OPENJPEG_USE=true
|
OPENJPEG_USE=true
|
||||||
VORBIS_USE=true
|
VORBIS_USE=true
|
||||||
@@ -5089,10 +5117,11 @@ install_ARCH() {
|
|||||||
BASE_DEVEL=`pacman -Sgq base-devel | sed -e 's/^gcc$/gcc-multilib/g' | paste -s -d' '`
|
BASE_DEVEL=`pacman -Sgq base-devel | sed -e 's/^gcc$/gcc-multilib/g' | paste -s -d' '`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_packages="$BASE_DEVEL git cmake fontconfig \
|
_packages="$BASE_DEVEL git cmake fontconfig flex \
|
||||||
libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
|
libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
|
||||||
$OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl2 fftw \
|
$OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl2 fftw \
|
||||||
libxml2 yaml-cpp tinyxml python-requests jemalloc gmp potrace pugixml libharu"
|
libxml2 yaml-cpp tinyxml python-requests jemalloc gmp potrace pugixml libharu \
|
||||||
|
zstd"
|
||||||
|
|
||||||
OPENJPEG_USE=true
|
OPENJPEG_USE=true
|
||||||
VORBIS_USE=true
|
VORBIS_USE=true
|
||||||
|
@@ -68,3 +68,32 @@
|
|||||||
+
|
+
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
--- a/libavcodec/rl.c
|
||||||
|
+++ b/libavcodec/rl.c
|
||||||
|
@@ -71,7 +71,7 @@ av_cold void ff_rl_init(RLTable *rl,
|
||||||
|
av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
||||||
|
{
|
||||||
|
int i, q;
|
||||||
|
- VLC_TYPE table[1500][2] = {{0}};
|
||||||
|
+ VLC_TYPE (*table)[2] = av_calloc(sizeof(VLC_TYPE), 1500 * 2);
|
||||||
|
VLC vlc = { .table = table, .table_allocated = static_size };
|
||||||
|
av_assert0(static_size <= FF_ARRAY_ELEMS(table));
|
||||||
|
init_vlc(&vlc, 9, rl->n + 1, &rl->table_vlc[0][1], 4, 2, &rl->table_vlc[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC);
|
||||||
|
@@ -80,8 +80,10 @@ av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
||||||
|
int qmul = q * 2;
|
||||||
|
int qadd = (q - 1) | 1;
|
||||||
|
|
||||||
|
- if (!rl->rl_vlc[q])
|
||||||
|
+ if (!rl->rl_vlc[q]){
|
||||||
|
+ av_free(table);
|
||||||
|
return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (q == 0) {
|
||||||
|
qmul = 1;
|
||||||
|
@@ -113,4 +115,5 @@ av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
||||||
|
rl->rl_vlc[q][i].run = run;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ av_free(table);
|
||||||
|
}
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
--- external_openimagedenoise/cmake/oidn_ispc.cmake 2021-02-15 17:29:34.000000000 +0100
|
|
||||||
+++ external_openimagedenoise/cmake/oidn_ispc.cmake2 2021-02-15 17:29:28.000000000 +0100
|
|
||||||
@@ -98,7 +98,7 @@
|
|
||||||
elseif(OIDN_ARCH STREQUAL "ARM64")
|
|
||||||
set(ISPC_ARCHITECTURE "aarch64")
|
|
||||||
if(APPLE)
|
|
||||||
- set(ISPC_TARGET_OS "--target-os=ios")
|
|
||||||
+ set(ISPC_TARGET_OS "--target-os=macos")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
@@ -34,24 +34,3 @@ diff -Naur orig/src/include/OpenImageIO/platform.h external_openimageio/src/incl
|
|||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
diff -Naur orig/src/libutil/ustring.cpp external_openimageio/src/libutil/ustring.cpp
|
|
||||||
--- orig/src/libutil/ustring.cpp 2020-05-11 05:43:52.000000000 +0200
|
|
||||||
+++ external_openimageio/src/libutil/ustring.cpp 2020-11-26 12:06:08.000000000 +0100
|
|
||||||
@@ -337,6 +337,8 @@
|
|
||||||
// the std::string to make it point to our chars! In such a case, the
|
|
||||||
// destructor will be careful not to allow a deallocation.
|
|
||||||
|
|
||||||
+ // Disable internal std::string for Apple silicon based Macs
|
|
||||||
+#if !(defined(__APPLE__) && defined(__arm64__))
|
|
||||||
#if defined(__GNUC__) && !defined(_LIBCPP_VERSION) \
|
|
||||||
&& defined(_GLIBCXX_USE_CXX11_ABI) && _GLIBCXX_USE_CXX11_ABI
|
|
||||||
// NEW gcc ABI
|
|
||||||
@@ -382,7 +384,7 @@
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-
|
|
||||||
+#endif
|
|
||||||
// Remaining cases - just assign the internal string. This may result
|
|
||||||
// in double allocation for the chars. If you care about that, do
|
|
||||||
// something special for your platform, much like we did for gcc and
|
|
@@ -1,18 +1,3 @@
|
|||||||
diff -Naur OpenShadingLanguage-Release-1.9.9/src/cmake/flexbison.cmake.rej external_osl/src/cmake/flexbison.cmake.rej
|
|
||||||
--- OpenShadingLanguage-Release-1.9.9/src/cmake/flexbison.cmake.rej 1969-12-31 17:00:00 -0700
|
|
||||||
+++ external_osl/src/cmake/flexbison.cmake.rej 2018-08-24 17:42:11 -0600
|
|
||||||
@@ -0,0 +1,11 @@
|
|
||||||
+--- src/cmake/flexbison.cmake 2018-05-01 16:39:02 -0600
|
|
||||||
++++ src/cmake/flexbison.cmake 2018-08-24 10:24:03 -0600
|
|
||||||
+@@ -77,7 +77,7 @@
|
|
||||||
+ DEPENDS ${${compiler_headers}}
|
|
||||||
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
|
|
||||||
+ ADD_CUSTOM_COMMAND ( OUTPUT ${flexoutputcxx}
|
|
||||||
+- COMMAND ${FLEX_EXECUTABLE} -o ${flexoutputcxx} "${CMAKE_CURRENT_SOURCE_DIR}/${flexsrc}"
|
|
||||||
++ COMMAND ${FLEX_EXECUTABLE} ${FLEX_EXTRA_OPTIONS} -o ${flexoutputcxx} "${CMAKE_CURRENT_SOURCE_DIR}/${flexsrc}"
|
|
||||||
+ MAIN_DEPENDENCY ${flexsrc}
|
|
||||||
+ DEPENDS ${${compiler_headers}}
|
|
||||||
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
|
|
||||||
diff -Naur OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
|
diff -Naur OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
|
||||||
--- OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h 2018-05-01 16:39:02 -0600
|
--- OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h 2018-05-01 16:39:02 -0600
|
||||||
+++ external_osl/src/include/OSL/llvm_util.h 2018-08-25 14:05:00 -0600
|
+++ external_osl/src/include/OSL/llvm_util.h 2018-08-25 14:05:00 -0600
|
||||||
@@ -63,19 +48,50 @@ diff -Naur org/CMakeLists.txt external_osl/CMakeLists.txt
|
|||||||
|
|
||||||
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
||||||
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
||||||
diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
index 445f6400..3d468de2 100644
|
index 990f50d69..46ef7351d 100644
|
||||||
--- a/src/liboslexec/llvm_util.cpp
|
--- a/CMakeLists.txt
|
||||||
+++ b/src/liboslexec/llvm_util.cpp
|
+++ b/CMakeLists.txt
|
||||||
@@ -3430,8 +3430,9 @@ LLVM_Util::call_function (llvm::Value *func, cspan<llvm::Value *> args)
|
@@ -252,11 +252,9 @@ install (EXPORT OSL_EXPORTED_TARGETS
|
||||||
#endif
|
FILE ${OSL_TARGETS_EXPORT_NAME}
|
||||||
//llvm_gen_debug_printf (std::string("start ") + std::string(name));
|
NAMESPACE ${PROJECT_NAME}::)
|
||||||
#if OSL_LLVM_VERSION >= 110
|
|
||||||
- OSL_DASSERT(llvm::isa<llvm::Function>(func));
|
-
|
||||||
- llvm::Value *r = builder().CreateCall(llvm::cast<llvm::Function>(func), llvm::ArrayRef<llvm::Value *>(args.data(), args.size()));
|
-
|
||||||
+ llvm::Value* r = builder().CreateCall(
|
-
|
||||||
+ llvm::cast<llvm::FunctionType>(func->getType()->getPointerElementType()), func,
|
-osl_add_all_tests()
|
||||||
+ llvm::ArrayRef<llvm::Value*>(args.data(), args.size()));
|
-
|
||||||
#else
|
+if (${PROJECT_NAME}_BUILD_TESTS AND NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||||
llvm::Value *r = builder().CreateCall (func, llvm::ArrayRef<llvm::Value *>(args.data(), args.size()));
|
+ osl_add_all_tests()
|
||||||
|
+endif ()
|
||||||
|
|
||||||
|
if (NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||||
|
include (packaging)
|
||||||
|
diff -Naur external_osl_orig/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake
|
||||||
|
--- external_osl_orig/src/cmake/externalpackages.cmake 2021-06-01 13:44:18 -0600
|
||||||
|
+++ external_osl/src/cmake/externalpackages.cmake 2021-06-28 07:44:32 -0600
|
||||||
|
@@ -80,6 +80,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
||||||
|
+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it
|
||||||
|
|
||||||
|
# IlmBase & OpenEXR
|
||||||
|
checked_find_package (OpenEXR REQUIRED
|
||||||
|
diff -Naur external_osl_orig/src/liboslcomp/oslcomp.cpp external_osl/src/liboslcomp/oslcomp.cpp
|
||||||
|
--- external_osl_orig/src/liboslcomp/oslcomp.cpp 2021-06-01 13:44:18 -0600
|
||||||
|
+++ external_osl/src/liboslcomp/oslcomp.cpp 2021-06-28 09:11:06 -0600
|
||||||
|
@@ -21,6 +21,13 @@
|
||||||
|
#if !defined(__STDC_CONSTANT_MACROS)
|
||||||
|
# define __STDC_CONSTANT_MACROS 1
|
||||||
#endif
|
#endif
|
||||||
|
+
|
||||||
|
+// clang uses CALLBACK in its templates which causes issues if it is already defined
|
||||||
|
+#ifdef _WIN32 && defined(CALLBACK)
|
||||||
|
+# undef CALLBACK
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+//
|
||||||
|
#include <clang/Basic/TargetInfo.h>
|
||||||
|
#include <clang/Frontend/CompilerInstance.h>
|
||||||
|
#include <clang/Frontend/TextDiagnosticPrinter.h>
|
||||||
|
66
build_files/cmake/Modules/FindZstd.cmake
Normal file
66
build_files/cmake/Modules/FindZstd.cmake
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# - Find Zstd library
|
||||||
|
# Find the native Zstd includes and library
|
||||||
|
# This module defines
|
||||||
|
# ZSTD_INCLUDE_DIRS, where to find zstd.h, Set when
|
||||||
|
# ZSTD_INCLUDE_DIR is found.
|
||||||
|
# ZSTD_LIBRARIES, libraries to link against to use Zstd.
|
||||||
|
# ZSTD_ROOT_DIR, The base directory to search for Zstd.
|
||||||
|
# This can also be an environment variable.
|
||||||
|
# ZSTD_FOUND, If false, do not try to use Zstd.
|
||||||
|
#
|
||||||
|
# also defined, but not for general use are
|
||||||
|
# ZSTD_LIBRARY, where to find the Zstd library.
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2019 Blender Foundation.
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
|
# see accompanying file Copyright.txt for details.
|
||||||
|
#
|
||||||
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the License for more information.
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
# If ZSTD_ROOT_DIR was defined in the environment, use it.
|
||||||
|
IF(NOT ZSTD_ROOT_DIR AND NOT $ENV{ZSTD_ROOT_DIR} STREQUAL "")
|
||||||
|
SET(ZSTD_ROOT_DIR $ENV{ZSTD_ROOT_DIR})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
SET(_zstd_SEARCH_DIRS
|
||||||
|
${ZSTD_ROOT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_PATH(ZSTD_INCLUDE_DIR
|
||||||
|
NAMES
|
||||||
|
zstd.h
|
||||||
|
HINTS
|
||||||
|
${_zstd_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
include
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(ZSTD_LIBRARY
|
||||||
|
NAMES
|
||||||
|
zstd
|
||||||
|
HINTS
|
||||||
|
${_zstd_SEARCH_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
lib64 lib
|
||||||
|
)
|
||||||
|
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set ZSTD_FOUND to TRUE if
|
||||||
|
# all listed variables are TRUE
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Zstd DEFAULT_MSG
|
||||||
|
ZSTD_LIBRARY ZSTD_INCLUDE_DIR)
|
||||||
|
|
||||||
|
IF(ZSTD_FOUND)
|
||||||
|
SET(ZSTD_LIBRARIES ${ZSTD_LIBRARY})
|
||||||
|
SET(ZSTD_INCLUDE_DIRS ${ZSTD_INCLUDE_DIR})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED(
|
||||||
|
ZSTD_INCLUDE_DIR
|
||||||
|
ZSTD_LIBRARY
|
||||||
|
)
|
@@ -8,6 +8,9 @@ IGNORE_SOURCE = (
|
|||||||
# specific source files
|
# specific source files
|
||||||
"extern/audaspace/",
|
"extern/audaspace/",
|
||||||
|
|
||||||
|
# Use for `WIN32` only.
|
||||||
|
"source/creator/blender_launcher_win32.c",
|
||||||
|
|
||||||
# specific source files
|
# specific source files
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
||||||
|
@@ -82,7 +82,7 @@ def create_nb_project_main():
|
|||||||
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
||||||
make_exe_basename = os.path.basename(make_exe)
|
make_exe_basename = os.path.basename(make_exe)
|
||||||
|
|
||||||
# --------------- NB specific
|
# --------------- NetBeans specific.
|
||||||
defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines]
|
defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines]
|
||||||
defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()]
|
defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()]
|
||||||
|
|
||||||
|
@@ -7,7 +7,6 @@
|
|||||||
set(WITH_ASSERT_ABORT ON CACHE BOOL "" FORCE)
|
set(WITH_ASSERT_ABORT ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE)
|
set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_COMPILER_ASAN ON CACHE BOOL "" FORCE)
|
set(WITH_COMPILER_ASAN ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_DEBUG ON CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_CYCLES_NATIVE_ONLY ON CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_NATIVE_ONLY ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_DOC_MANPAGE OFF CACHE BOOL "" FORCE)
|
set(WITH_DOC_MANPAGE OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_GTESTS ON CACHE BOOL "" FORCE)
|
set(WITH_GTESTS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -29,6 +29,7 @@ set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
|||||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_INPUT_IME ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -30,6 +30,7 @@ set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
|||||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_INPUT_IME ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -208,7 +208,7 @@ function(blender_source_group
|
|||||||
)
|
)
|
||||||
|
|
||||||
# if enabled, use the sources directories as filters.
|
# if enabled, use the sources directories as filters.
|
||||||
if(WINDOWS_USE_VISUAL_STUDIO_SOURCE_FOLDERS)
|
if(IDE_GROUP_SOURCES_IN_FOLDERS)
|
||||||
foreach(_SRC ${sources})
|
foreach(_SRC ${sources})
|
||||||
# remove ../'s
|
# remove ../'s
|
||||||
get_filename_component(_SRC_DIR ${_SRC} REALPATH)
|
get_filename_component(_SRC_DIR ${_SRC} REALPATH)
|
||||||
@@ -240,8 +240,8 @@ function(blender_source_group
|
|||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# if enabled, set the FOLDER property for visual studio projects
|
# if enabled, set the FOLDER property for the projects
|
||||||
if(WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS)
|
if(IDE_GROUP_PROJECTS_IN_FOLDERS)
|
||||||
get_filename_component(FolderDir ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
|
get_filename_component(FolderDir ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
|
||||||
string(REPLACE ${CMAKE_SOURCE_DIR} "" FolderDir ${FolderDir})
|
string(REPLACE ${CMAKE_SOURCE_DIR} "" FolderDir ${FolderDir})
|
||||||
set_target_properties(${name} PROPERTIES FOLDER ${FolderDir})
|
set_target_properties(${name} PROPERTIES FOLDER ${FolderDir})
|
||||||
|
@@ -404,32 +404,16 @@ endif()
|
|||||||
|
|
||||||
# CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
|
# CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
|
||||||
if(WITH_OPENMP)
|
if(WITH_OPENMP)
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0")
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
# Use OpenMP from our precompiled libraries.
|
# Use OpenMP from our precompiled libraries.
|
||||||
message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
|
message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
|
||||||
set(OPENMP_CUSTOM ON)
|
set(OPENMP_CUSTOM ON)
|
||||||
set(OPENMP_FOUND ON)
|
set(OPENMP_FOUND ON)
|
||||||
set(OpenMP_C_FLAGS "-Xclang -fopenmp -I'${LIBDIR}/openmp/include'")
|
set(OpenMP_C_FLAGS "-Xclang -fopenmp -I'${LIBDIR}/openmp/include'")
|
||||||
set(OpenMP_CXX_FLAGS "-Xclang -fopenmp -I'${LIBDIR}/openmp/include'")
|
set(OpenMP_CXX_FLAGS "-Xclang -fopenmp -I'${LIBDIR}/openmp/include'")
|
||||||
set(OpenMP_LINKER_FLAGS "-L'${LIBDIR}/openmp/lib' -lomp")
|
set(OpenMP_LIBRARY_DIR "${LIBDIR}/openmp/lib/")
|
||||||
|
set(OpenMP_LINKER_FLAGS "-L'${OpenMP_LIBRARY_DIR}' -lomp")
|
||||||
# Copy libomp.dylib to allow executables like datatoc and tests to work.
|
set(OpenMP_LIBRARY "${OpenMP_LIBRARY_DIR}/libomp.dylib")
|
||||||
# `@executable_path/../Resources/lib/` `LC_ID_DYLIB` is added by the deps builder.
|
|
||||||
# For single config generator datatoc, tests etc.
|
|
||||||
execute_process(
|
|
||||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/Resources/lib
|
|
||||||
COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/Resources/lib/libomp.dylib
|
|
||||||
)
|
|
||||||
# For multi-config generator datatoc, etc.
|
|
||||||
execute_process(
|
|
||||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/Resources/lib
|
|
||||||
COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/bin/Resources/lib/libomp.dylib
|
|
||||||
)
|
|
||||||
# For multi-config generator tests.
|
|
||||||
execute_process(
|
|
||||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/tests/Resources/lib
|
|
||||||
COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/bin/tests/Resources/lib/libomp.dylib
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -457,6 +441,9 @@ if(WITH_HARU)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(ZSTD_ROOT_DIR ${LIBDIR}/zstd)
|
||||||
|
find_package(Zstd REQUIRED)
|
||||||
|
|
||||||
if(EXISTS ${LIBDIR})
|
if(EXISTS ${LIBDIR})
|
||||||
without_system_libs_end()
|
without_system_libs_end()
|
||||||
endif()
|
endif()
|
||||||
@@ -480,10 +467,8 @@ else()
|
|||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic")
|
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
|
# Clang has too low template depth of 128 for libmv.
|
||||||
# Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
|
|
||||||
string(APPEND CMAKE_CXX_FLAGS " -ftemplate-depth=1024")
|
string(APPEND CMAKE_CXX_FLAGS " -ftemplate-depth=1024")
|
||||||
endif()
|
|
||||||
|
|
||||||
# Avoid conflicts with Luxrender, and other plug-ins that may use the same
|
# Avoid conflicts with Luxrender, and other plug-ins that may use the same
|
||||||
# libraries as Blender with a different version or build options.
|
# libraries as Blender with a different version or build options.
|
||||||
@@ -513,3 +498,15 @@ if(WITH_COMPILER_CCACHE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# For binaries that are built but not installed (also not distributed) (datatoc,
|
||||||
|
# makesdna, tests, etc.), we add an rpath to the OpenMP library dir through
|
||||||
|
# CMAKE_BUILD_RPATH. This avoids having to make many copies of the dylib next to each binary.
|
||||||
|
#
|
||||||
|
# For the installed Python module and installed Blender executable, CMAKE_INSTALL_RPATH
|
||||||
|
# is modified to find the dylib in an adjacent folder. Install step puts the libraries there.
|
||||||
|
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||||
|
list(APPEND CMAKE_BUILD_RPATH "${OpenMP_LIBRARY_DIR}")
|
||||||
|
|
||||||
|
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
|
||||||
|
list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../Resources/${BLENDER_VERSION}/lib")
|
||||||
|
@@ -99,6 +99,7 @@ endif()
|
|||||||
find_package_wrapper(JPEG REQUIRED)
|
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(Freetype REQUIRED)
|
find_package_wrapper(Freetype REQUIRED)
|
||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
|
@@ -57,8 +57,6 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ${WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS})
|
|
||||||
|
|
||||||
if(NOT WITH_PYTHON_MODULE)
|
if(NOT WITH_PYTHON_MODULE)
|
||||||
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT blender)
|
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT blender)
|
||||||
endif()
|
endif()
|
||||||
@@ -153,8 +151,8 @@ if(MSVC_CLANG) # Clangs version of cl doesn't support all flags
|
|||||||
string(APPEND CMAKE_CXX_FLAGS " ${CXX_WARN_FLAGS} /nologo /J /Gd /EHsc -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference ")
|
string(APPEND CMAKE_CXX_FLAGS " ${CXX_WARN_FLAGS} /nologo /J /Gd /EHsc -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference ")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference")
|
||||||
else()
|
else()
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /nologo /J /Gd /MP /EHsc /bigobj")
|
string(APPEND CMAKE_CXX_FLAGS " /nologo /J /Gd /MP /EHsc /bigobj /Zc:inline")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP /bigobj")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP /bigobj /Zc:inline")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# X64 ASAN is available and usable on MSVC 16.9 preview 4 and up)
|
# X64 ASAN is available and usable on MSVC 16.9 preview 4 and up)
|
||||||
@@ -261,7 +259,7 @@ if(NOT DEFINED LIBDIR)
|
|||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30130)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.30.30423)
|
||||||
message(STATUS "Visual Studio 2022 detected.")
|
message(STATUS "Visual Studio 2022 detected.")
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
||||||
elseif(MSVC_VERSION GREATER 1919)
|
elseif(MSVC_VERSION GREATER 1919)
|
||||||
@@ -875,3 +873,6 @@ if(WITH_HARU)
|
|||||||
set(WITH_HARU OFF)
|
set(WITH_HARU OFF)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(ZSTD_INCLUDE_DIRS ${LIBDIR}/zstd/include)
|
||||||
|
set(ZSTD_LIBRARIES ${LIBDIR}/zstd/lib/zstd_static.lib)
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
Pipeline Config
|
Pipeline Config
|
||||||
===============
|
===============
|
||||||
|
|
||||||
This configuration file is used by buildbot new pipeline for the `update-code` step.
|
The `yaml` configuration file is used by buildbot build pipeline `update-code` step.
|
||||||
|
|
||||||
It will soon be used by the ../utils/make_update.py script.
|
The file allows to set branches or specific commits for both git submodules and svn artifacts. Can also define various build package versions for use by build workers. Especially useful in experimental and release branches.
|
||||||
|
|
||||||
Both buildbot and developers will eventually use the same configuration file.
|
NOTE:
|
||||||
|
* The configuration file is ```NOT``` used by the `../utils/make_update.py` script.
|
||||||
|
* That will implemented in the future.
|
||||||
|
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"update-code":
|
|
||||||
{
|
|
||||||
"git" :
|
|
||||||
{
|
|
||||||
"submodules":
|
|
||||||
[
|
|
||||||
{ "path": "release/scripts/addons", "branch": "master", "commit_id": "HEAD" },
|
|
||||||
{ "path": "release/scripts/addons_contrib", "branch": "master", "commit_id": "HEAD" },
|
|
||||||
{ "path": "release/datafiles/locale", "branch": "master", "commit_id": "HEAD" },
|
|
||||||
{ "path": "source/tools", "branch": "master", "commit_id": "HEAD" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"svn":
|
|
||||||
{
|
|
||||||
"tests": { "path": "lib/tests", "branch": "trunk", "commit_id": "HEAD" },
|
|
||||||
"libraries":
|
|
||||||
{
|
|
||||||
"darwin-x86_64": { "path": "lib/darwin", "branch": "trunk", "commit_id": "HEAD" },
|
|
||||||
"darwin-arm64": { "path": "lib/darwin_arm64", "branch": "trunk", "commit_id": "HEAD" },
|
|
||||||
"linux-x86_64": { "path": "lib/linux_centos7_x86_64", "branch": "trunk", "commit_id": "HEAD" },
|
|
||||||
"windows-amd64": { "path": "lib/win64_vc15", "branch": "trunk", "commit_id": "HEAD" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buildbot":
|
|
||||||
{
|
|
||||||
"gcc":
|
|
||||||
{
|
|
||||||
"version": "9.0"
|
|
||||||
},
|
|
||||||
"sdks":
|
|
||||||
{
|
|
||||||
"optix":
|
|
||||||
{
|
|
||||||
"version": "7.1.0"
|
|
||||||
},
|
|
||||||
"cuda10":
|
|
||||||
{
|
|
||||||
"version": "10.1"
|
|
||||||
},
|
|
||||||
"cuda11":
|
|
||||||
{
|
|
||||||
"version": "11.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"cmake":
|
|
||||||
{
|
|
||||||
"default":
|
|
||||||
{
|
|
||||||
"version": "any",
|
|
||||||
"overrides":
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"darwin-x86_64":
|
|
||||||
{
|
|
||||||
"overrides":
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"darwin-arm64":
|
|
||||||
{
|
|
||||||
"overrides":
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"linux-x86_64":
|
|
||||||
{
|
|
||||||
"overrides":
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"windows-amd64":
|
|
||||||
{
|
|
||||||
"overrides":
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
70
build_files/config/pipeline_config.yaml
Normal file
70
build_files/config/pipeline_config.yaml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#
|
||||||
|
# Used by Buildbot build pipeline make_update.py script only for now
|
||||||
|
# We intended to update the make_update.py in the branches to use this file eventually
|
||||||
|
#
|
||||||
|
update-code:
|
||||||
|
git:
|
||||||
|
submodules:
|
||||||
|
- branch: master
|
||||||
|
commit_id: HEAD
|
||||||
|
path: release/scripts/addons
|
||||||
|
- branch: master
|
||||||
|
commit_id: HEAD
|
||||||
|
path: release/scripts/addons_contrib
|
||||||
|
- branch: master
|
||||||
|
commit_id: HEAD
|
||||||
|
path: release/datafiles/locale
|
||||||
|
- branch: master
|
||||||
|
commit_id: HEAD
|
||||||
|
path: source/tools
|
||||||
|
svn:
|
||||||
|
libraries:
|
||||||
|
darwin-arm64:
|
||||||
|
branch: trunk
|
||||||
|
commit_id: HEAD
|
||||||
|
path: lib/darwin_arm64
|
||||||
|
darwin-x86_64:
|
||||||
|
branch: trunk
|
||||||
|
commit_id: HEAD
|
||||||
|
path: lib/darwin
|
||||||
|
linux-x86_64:
|
||||||
|
branch: trunk
|
||||||
|
commit_id: HEAD
|
||||||
|
path: lib/linux_centos7_x86_64
|
||||||
|
windows-amd64:
|
||||||
|
branch: trunk
|
||||||
|
commit_id: HEAD
|
||||||
|
path: lib/win64_vc15
|
||||||
|
tests:
|
||||||
|
branch: trunk
|
||||||
|
commit_id: HEAD
|
||||||
|
path: lib/tests
|
||||||
|
benchmarks:
|
||||||
|
branch: trunk
|
||||||
|
commit_id: HEAD
|
||||||
|
path: lib/benchmarks
|
||||||
|
|
||||||
|
#
|
||||||
|
# Buildbot only configs
|
||||||
|
#
|
||||||
|
buildbot:
|
||||||
|
gcc:
|
||||||
|
version: '9.0.0'
|
||||||
|
cuda10:
|
||||||
|
version: '10.1.243'
|
||||||
|
cuda11:
|
||||||
|
version: '11.4.1'
|
||||||
|
optix:
|
||||||
|
version: '7.1.0'
|
||||||
|
cmake:
|
||||||
|
default:
|
||||||
|
version: any
|
||||||
|
overrides: {}
|
||||||
|
darwin-arm64:
|
||||||
|
overrides: {}
|
||||||
|
darwin-x86_64:
|
||||||
|
overrides: {}
|
||||||
|
linux-x86_64:
|
||||||
|
overrides: {}
|
||||||
|
windows-amd64:
|
||||||
|
overrides: {}
|
@@ -31,6 +31,7 @@ def parse_arguments():
|
|||||||
parser.add_argument("--no-submodules", action="store_true")
|
parser.add_argument("--no-submodules", action="store_true")
|
||||||
parser.add_argument("--use-tests", action="store_true")
|
parser.add_argument("--use-tests", action="store_true")
|
||||||
parser.add_argument("--svn-command", default="svn")
|
parser.add_argument("--svn-command", default="svn")
|
||||||
|
parser.add_argument("--svn-branch", default=None)
|
||||||
parser.add_argument("--git-command", default="git")
|
parser.add_argument("--git-command", default="git")
|
||||||
parser.add_argument("--use-centos-libraries", action="store_true")
|
parser.add_argument("--use-centos-libraries", action="store_true")
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
@@ -46,7 +47,7 @@ def svn_update(args, release_version):
|
|||||||
svn_non_interactive = [args.svn_command, '--non-interactive']
|
svn_non_interactive = [args.svn_command, '--non-interactive']
|
||||||
|
|
||||||
lib_dirpath = os.path.join(get_blender_git_root(), '..', 'lib')
|
lib_dirpath = os.path.join(get_blender_git_root(), '..', 'lib')
|
||||||
svn_url = make_utils.svn_libraries_base_url(release_version)
|
svn_url = make_utils.svn_libraries_base_url(release_version, args.svn_branch)
|
||||||
|
|
||||||
# Checkout precompiled libraries
|
# Checkout precompiled libraries
|
||||||
if sys.platform == 'darwin':
|
if sys.platform == 'darwin':
|
||||||
@@ -170,26 +171,28 @@ def submodules_update(args, release_version, branch):
|
|||||||
sys.stderr.write("git not found, can't update code\n")
|
sys.stderr.write("git not found, can't update code\n")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Update submodules to latest master or appropriate release branch.
|
# Update submodules to appropriate given branch,
|
||||||
if not release_version:
|
# falling back to master if none is given and/or found in a sub-repository.
|
||||||
branch = "master"
|
branch_fallback = "master"
|
||||||
|
if not branch:
|
||||||
|
branch = branch_fallback
|
||||||
|
|
||||||
submodules = [
|
submodules = [
|
||||||
("release/scripts/addons", branch),
|
("release/scripts/addons", branch, branch_fallback),
|
||||||
("release/scripts/addons_contrib", branch),
|
("release/scripts/addons_contrib", branch, branch_fallback),
|
||||||
("release/datafiles/locale", branch),
|
("release/datafiles/locale", branch, branch_fallback),
|
||||||
("source/tools", branch),
|
("source/tools", branch, branch_fallback),
|
||||||
]
|
]
|
||||||
|
|
||||||
# Initialize submodules only if needed.
|
# Initialize submodules only if needed.
|
||||||
for submodule_path, submodule_branch in submodules:
|
for submodule_path, submodule_branch, submodule_branch_fallback in submodules:
|
||||||
if not os.path.exists(os.path.join(submodule_path, ".git")):
|
if not os.path.exists(os.path.join(submodule_path, ".git")):
|
||||||
call([args.git_command, "submodule", "update", "--init", "--recursive"])
|
call([args.git_command, "submodule", "update", "--init", "--recursive"])
|
||||||
break
|
break
|
||||||
|
|
||||||
# Checkout appropriate branch and pull changes.
|
# Checkout appropriate branch and pull changes.
|
||||||
skip_msg = ""
|
skip_msg = ""
|
||||||
for submodule_path, submodule_branch in submodules:
|
for submodule_path, submodule_branch, submodule_branch_fallback in submodules:
|
||||||
cwd = os.getcwd()
|
cwd = os.getcwd()
|
||||||
try:
|
try:
|
||||||
os.chdir(submodule_path)
|
os.chdir(submodule_path)
|
||||||
@@ -201,6 +204,11 @@ def submodules_update(args, release_version, branch):
|
|||||||
call([args.git_command, "fetch", "origin"])
|
call([args.git_command, "fetch", "origin"])
|
||||||
call([args.git_command, "checkout", submodule_branch])
|
call([args.git_command, "checkout", submodule_branch])
|
||||||
call([args.git_command, "pull", "--rebase", "origin", submodule_branch])
|
call([args.git_command, "pull", "--rebase", "origin", submodule_branch])
|
||||||
|
# If we cannot find the specified branch for this submodule, fallback to default one (aka master).
|
||||||
|
if make_utils.git_branch(args.git_command) != submodule_branch:
|
||||||
|
call([args.git_command, "fetch", "origin"])
|
||||||
|
call([args.git_command, "checkout", submodule_branch_fallback])
|
||||||
|
call([args.git_command, "pull", "--rebase", "origin", submodule_branch_fallback])
|
||||||
finally:
|
finally:
|
||||||
os.chdir(cwd)
|
os.chdir(cwd)
|
||||||
|
|
||||||
@@ -214,6 +222,10 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
# Test if we are building a specific release version.
|
# Test if we are building a specific release version.
|
||||||
branch = make_utils.git_branch(args.git_command)
|
branch = make_utils.git_branch(args.git_command)
|
||||||
|
if branch == 'HEAD':
|
||||||
|
sys.stderr.write('Blender git repository is in detached HEAD state, must be in a branch\n')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
tag = make_utils.git_tag(args.git_command)
|
tag = make_utils.git_tag(args.git_command)
|
||||||
release_version = make_utils.git_branch_release_version(branch, tag)
|
release_version = make_utils.git_branch_release_version(branch, tag)
|
||||||
|
|
||||||
|
@@ -70,9 +70,11 @@ def git_branch_release_version(branch, tag):
|
|||||||
return release_version
|
return release_version
|
||||||
|
|
||||||
|
|
||||||
def svn_libraries_base_url(release_version):
|
def svn_libraries_base_url(release_version, branch=None):
|
||||||
if release_version:
|
if release_version:
|
||||||
svn_branch = "tags/blender-" + release_version + "-release"
|
svn_branch = "tags/blender-" + release_version + "-release"
|
||||||
|
elif branch:
|
||||||
|
svn_branch = "branches/" + branch
|
||||||
else:
|
else:
|
||||||
svn_branch = "trunk"
|
svn_branch = "trunk"
|
||||||
return "https://svn.blender.org/svnroot/bf-blender/" + svn_branch + "/lib/"
|
return "https://svn.blender.org/svnroot/bf-blender/" + svn_branch + "/lib/"
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
echo No explicit msvc version requested, autodetecting version.
|
echo No explicit msvc version requested, autodetecting version.
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2017.cmd"
|
call "%~dp0\detect_msvc2019.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2019.cmd"
|
call "%~dp0\detect_msvc2017.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2022.cmd"
|
call "%~dp0\detect_msvc2022.cmd"
|
||||||
|
34
build_files/windows/doc_py.cmd
Normal file
34
build_files/windows/doc_py.cmd
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
set SOURCEDIR=%BLENDER_DIR%/doc/python_api/sphinx-in
|
||||||
|
set BUILDDIR=%BLENDER_DIR%/doc/python_api/sphinx-out
|
||||||
|
if "%BF_LANG%" == "" set BF_LANG=en
|
||||||
|
set SPHINXOPTS=-j auto -D language=%BF_LANG%
|
||||||
|
|
||||||
|
call "%~dp0\find_sphinx.cmd"
|
||||||
|
|
||||||
|
if EXIST "%SPHINX_BIN%" (
|
||||||
|
goto detect_sphinx_done
|
||||||
|
)
|
||||||
|
|
||||||
|
echo unable to locate sphinx-build, run "set sphinx_BIN=full_path_to_sphinx-build.exe"
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:detect_sphinx_done
|
||||||
|
|
||||||
|
call "%~dp0\find_blender.cmd"
|
||||||
|
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
echo unable to locate blender, run "set BLENDER_BIN=full_path_to_blender.exe"
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:detect_blender_done
|
||||||
|
|
||||||
|
%BLENDER_BIN% ^
|
||||||
|
--background -noaudio --factory-startup ^
|
||||||
|
--python %BLENDER_DIR%/doc/python_api/sphinx_doc_gen.py
|
||||||
|
|
||||||
|
"%SPHINX_BIN%" -b html %SPHINXOPTS% %O% %SOURCEDIR% %BUILDDIR%
|
||||||
|
|
||||||
|
:EOF
|
28
build_files/windows/find_blender.cmd
Normal file
28
build_files/windows/find_blender.cmd
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
REM First see if there is an environment variable set
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Check the build folder next, if ninja was used there will be no
|
||||||
|
REM debug/release folder
|
||||||
|
set BLENDER_BIN=%BUILD_DIR%\bin\blender.exe
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Check the release folder next
|
||||||
|
set BLENDER_BIN=%BUILD_DIR%\bin\release\blender.exe
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Check the debug folder next
|
||||||
|
set BLENDER_BIN=%BUILD_DIR%\bin\debug\blender.exe
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM at this point, we don't know where blender is, clear the variable
|
||||||
|
set BLENDER_BIN=
|
||||||
|
|
||||||
|
:detect_blender_done
|
21
build_files/windows/find_inkscape.cmd
Normal file
21
build_files/windows/find_inkscape.cmd
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
REM First see if there is an environment variable set
|
||||||
|
if EXIST "%INKSCAPE_BIN%" (
|
||||||
|
goto detect_inkscape_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Then see if inkscape is available in the path
|
||||||
|
for %%X in (inkscape.exe) do (set INKSCAPE_BIN=%%~$PATH:X)
|
||||||
|
if EXIST "%INKSCAPE_BIN%" (
|
||||||
|
goto detect_inkscape_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Finally see if it is perhaps installed at the default location
|
||||||
|
set INKSCAPE_BIN=%ProgramFiles%\Inkscape\bin\inkscape.exe
|
||||||
|
if EXIST "%INKSCAPE_BIN%" (
|
||||||
|
goto detect_inkscape_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM If still not found clear the variable
|
||||||
|
set INKSCAPE_BIN=
|
||||||
|
|
||||||
|
:detect_inkscape_done
|
23
build_files/windows/find_sphinx.cmd
Normal file
23
build_files/windows/find_sphinx.cmd
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
REM First see if there is an environment variable set
|
||||||
|
if EXIST "%SPHINX_BIN%" (
|
||||||
|
goto detect_sphinx_done
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Then see if inkscape is available in the path
|
||||||
|
for %%X in (sphinx-build.exe) do (set SPHINX_BIN=%%~$PATH:X)
|
||||||
|
if EXIST "%SPHINX_BIN%" (
|
||||||
|
goto detect_sphinx_done
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINX_BIN environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.http://sphinx-doc.org/
|
||||||
|
|
||||||
|
REM If still not found clear the variable
|
||||||
|
set SPHINX_BIN=
|
||||||
|
|
||||||
|
:detect_sphinx_done
|
42
build_files/windows/icons.cmd
Normal file
42
build_files/windows/icons.cmd
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
if EXIST "%PYTHON%" (
|
||||||
|
goto detect_python_done
|
||||||
|
)
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
if EXIST "%INKSCAPE_BIN%" (
|
||||||
|
goto detect_inkscape_done
|
||||||
|
)
|
||||||
|
|
||||||
|
echo unable to locate inkscape, run "set inkscape_BIN=full_path_to_inkscape.exe"
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:detect_inkscape_done
|
||||||
|
|
||||||
|
call "%~dp0\find_blender.cmd"
|
||||||
|
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
echo unable to locate blender, run "set BLENDER_BIN=full_path_to_blender.exe"
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:detect_blender_done
|
||||||
|
|
||||||
|
%PYTHON% -B %BLENDER_DIR%\release\datafiles\blender_icons_update.py
|
||||||
|
%PYTHON% -B %BLENDER_DIR%\release\datafiles\prvicons_update.py
|
||||||
|
%PYTHON% -B %BLENDER_DIR%\release\datafiles\alert_icons_update.py
|
||||||
|
|
||||||
|
:EOF
|
29
build_files/windows/icons_geom.cmd
Normal file
29
build_files/windows/icons_geom.cmd
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
if EXIST %PYTHON% (
|
||||||
|
goto detect_python_done
|
||||||
|
)
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
if EXIST "%BLENDER_BIN%" (
|
||||||
|
goto detect_blender_done
|
||||||
|
)
|
||||||
|
|
||||||
|
echo unable to locate blender, run "set BLENDER_BIN=full_path_to_blender.exe"
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:detect_blender_done
|
||||||
|
|
||||||
|
%PYTHON% -B %BLENDER_DIR%\release\datafiles\blender_icons_geom_update.py
|
||||||
|
|
||||||
|
:EOF
|
@@ -107,6 +107,15 @@ if NOT "%1" == "" (
|
|||||||
set FORMAT=1
|
set FORMAT=1
|
||||||
set FORMAT_ARGS=%2 %3 %4 %5 %6 %7 %8 %9
|
set FORMAT_ARGS=%2 %3 %4 %5 %6 %7 %8 %9
|
||||||
goto EOF
|
goto EOF
|
||||||
|
) else if "%1" == "icons" (
|
||||||
|
set ICONS=1
|
||||||
|
goto EOF
|
||||||
|
) else if "%1" == "icons_geom" (
|
||||||
|
set ICONS_GEOM=1
|
||||||
|
goto EOF
|
||||||
|
) else if "%1" == "doc_py" (
|
||||||
|
set DOC_PY=1
|
||||||
|
goto EOF
|
||||||
) else (
|
) else (
|
||||||
echo Command "%1" unknown, aborting!
|
echo Command "%1" unknown, aborting!
|
||||||
goto ERR
|
goto ERR
|
||||||
|
@@ -31,3 +31,6 @@ set PYDEBUG_CMAKE_ARGS=
|
|||||||
set FORMAT=
|
set FORMAT=
|
||||||
set TEST=
|
set TEST=
|
||||||
set BUILD_WITH_SCCACHE=
|
set BUILD_WITH_SCCACHE=
|
||||||
|
set ICONS=
|
||||||
|
set ICONS_GEOM=
|
||||||
|
set DOC_PY=
|
||||||
|
@@ -31,6 +31,10 @@ 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.
|
||||||
|
echo Documentation Targets ^(Not associated with building^)
|
||||||
|
echo - doc_py ^(Generate sphinx python api docs^)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo Experimental options
|
echo Experimental options
|
||||||
echo - with_opengl_tests ^(enable both the render and draw opengl test suites^)
|
echo - with_opengl_tests ^(enable both the render and draw opengl test suites^)
|
||||||
|
@@ -123,7 +123,7 @@ def Align(handle):
|
|||||||
class BlendFile:
|
class BlendFile:
|
||||||
'''
|
'''
|
||||||
Reads a blendfile and store the header, all the fileblocks, and catalogue
|
Reads a blendfile and store the header, all the fileblocks, and catalogue
|
||||||
structs foound in the DNA fileblock
|
structs found in the DNA fileblock
|
||||||
|
|
||||||
- BlendFile.Header (BlendFileHeader instance)
|
- BlendFile.Header (BlendFileHeader instance)
|
||||||
- BlendFile.Blocks (list of BlendFileBlock instances)
|
- BlendFile.Blocks (list of BlendFileBlock instances)
|
||||||
|
@@ -122,7 +122,7 @@ is a full-featured 3D application. It supports the entirety of the 3D pipeline -
|
|||||||
'''modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
|
'''modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
|
||||||
|
|
||||||
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
||||||
r'''architectural and industrial visualizatons, and scientific visualizations.
|
r'''architectural and industrial visualizations, and scientific visualizations.
|
||||||
|
|
||||||
https://www.blender.org''')
|
https://www.blender.org''')
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@ such cases, lock the interface (Render → Lock Interface or
|
|||||||
Below is an example of a mesh that is altered from a handler:
|
Below is an example of a mesh that is altered from a handler:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def frame_change_pre(scene):
|
def frame_change_pre(scene):
|
||||||
# A triangle that shifts in the z direction
|
# A triangle that shifts in the z direction
|
||||||
zshift = scene.frame_current * 0.1
|
zshift = scene.frame_current * 0.1
|
||||||
|
@@ -16,10 +16,12 @@ execution_queue = queue.Queue()
|
|||||||
def run_in_main_thread(function):
|
def run_in_main_thread(function):
|
||||||
execution_queue.put(function)
|
execution_queue.put(function)
|
||||||
|
|
||||||
|
|
||||||
def execute_queued_functions():
|
def execute_queued_functions():
|
||||||
while not execution_queue.empty():
|
while not execution_queue.empty():
|
||||||
function = execution_queue.get()
|
function = execution_queue.get()
|
||||||
function()
|
function()
|
||||||
return 1.0
|
return 1.0
|
||||||
|
|
||||||
|
|
||||||
bpy.app.timers.register(execute_queued_functions)
|
bpy.app.timers.register(execute_queued_functions)
|
||||||
|
@@ -31,11 +31,13 @@ owner = object()
|
|||||||
|
|
||||||
subscribe_to = bpy.context.object.location
|
subscribe_to = bpy.context.object.location
|
||||||
|
|
||||||
|
|
||||||
def msgbus_callback(*args):
|
def msgbus_callback(*args):
|
||||||
# This will print:
|
# This will print:
|
||||||
# Something changed! (1, 2, 3)
|
# Something changed! (1, 2, 3)
|
||||||
print("Something changed!", args)
|
print("Something changed!", args)
|
||||||
|
|
||||||
|
|
||||||
bpy.msgbus.subscribe_rna(
|
bpy.msgbus.subscribe_rna(
|
||||||
key=subscribe_to,
|
key=subscribe_to,
|
||||||
owner=owner,
|
owner=owner,
|
||||||
|
@@ -21,6 +21,7 @@ batch = batch_for_shader(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def draw():
|
def draw():
|
||||||
shader.bind()
|
shader.bind()
|
||||||
shader.uniform_sampler("image", texture)
|
shader.uniform_sampler("image", texture)
|
||||||
|
@@ -31,7 +31,8 @@ def draw():
|
|||||||
context.space_data,
|
context.space_data,
|
||||||
context.region,
|
context.region,
|
||||||
view_matrix,
|
view_matrix,
|
||||||
projection_matrix)
|
projection_matrix,
|
||||||
|
True)
|
||||||
|
|
||||||
gpu.state.depth_mask_set(False)
|
gpu.state.depth_mask_set(False)
|
||||||
draw_texture_2d(offscreen.texture_color, (10, 10), WIDTH, HEIGHT)
|
draw_texture_2d(offscreen.texture_color, (10, 10), WIDTH, HEIGHT)
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
sphinx==3.5.4
|
sphinx==4.1.1
|
||||||
|
|
||||||
# Sphinx dependencies that are important
|
# Sphinx dependencies that are important
|
||||||
Jinja2==2.11.3
|
Jinja2==3.0.1
|
||||||
Pygments==2.9.0
|
Pygments==2.10.0
|
||||||
docutils==0.16
|
docutils==0.17.1
|
||||||
snowballstemmer==2.1.0
|
snowballstemmer==2.1.0
|
||||||
babel==2.9.1
|
babel==2.9.1
|
||||||
requests==2.25.1
|
requests==2.26.0
|
||||||
|
|
||||||
# Only needed to match the theme used for the official documentation.
|
# Only needed to match the theme used for the official documentation.
|
||||||
# Without this theme, the default theme will be used.
|
# Without this theme, the default theme will be used.
|
||||||
sphinx_rtd_theme==0.5.2
|
sphinx_rtd_theme==1.0.0
|
||||||
|
@@ -254,6 +254,8 @@ else:
|
|||||||
"gpu.shader",
|
"gpu.shader",
|
||||||
"gpu.state",
|
"gpu.state",
|
||||||
"gpu.texture",
|
"gpu.texture",
|
||||||
|
"gpu.platform",
|
||||||
|
"gpu.capabilities",
|
||||||
"gpu_extras",
|
"gpu_extras",
|
||||||
"idprop.types",
|
"idprop.types",
|
||||||
"mathutils",
|
"mathutils",
|
||||||
@@ -1037,16 +1039,21 @@ context_type_map = {
|
|||||||
# context_member: (RNA type, is_collection)
|
# context_member: (RNA type, is_collection)
|
||||||
"active_annotation_layer": ("GPencilLayer", False),
|
"active_annotation_layer": ("GPencilLayer", False),
|
||||||
"active_bone": ("EditBone", False),
|
"active_bone": ("EditBone", False),
|
||||||
|
"active_file": ("FileSelectEntry", False),
|
||||||
"active_gpencil_frame": ("GreasePencilLayer", True),
|
"active_gpencil_frame": ("GreasePencilLayer", True),
|
||||||
"active_gpencil_layer": ("GPencilLayer", True),
|
"active_gpencil_layer": ("GPencilLayer", True),
|
||||||
"active_node": ("Node", False),
|
"active_node": ("Node", False),
|
||||||
"active_object": ("Object", False),
|
"active_object": ("Object", False),
|
||||||
"active_operator": ("Operator", False),
|
"active_operator": ("Operator", False),
|
||||||
"active_pose_bone": ("PoseBone", False),
|
"active_pose_bone": ("PoseBone", False),
|
||||||
|
"active_sequence_strip": ("Sequence", False),
|
||||||
"active_editable_fcurve": ("FCurve", False),
|
"active_editable_fcurve": ("FCurve", False),
|
||||||
|
"active_nla_strip": ("NlaStrip", False),
|
||||||
|
"active_nla_track": ("NlaTrack", False),
|
||||||
"annotation_data": ("GreasePencil", False),
|
"annotation_data": ("GreasePencil", False),
|
||||||
"annotation_data_owner": ("ID", False),
|
"annotation_data_owner": ("ID", False),
|
||||||
"armature": ("Armature", False),
|
"armature": ("Armature", False),
|
||||||
|
"asset_library_ref": ("AssetLibraryReference", False),
|
||||||
"bone": ("Bone", False),
|
"bone": ("Bone", False),
|
||||||
"brush": ("Brush", False),
|
"brush": ("Brush", False),
|
||||||
"camera": ("Camera", False),
|
"camera": ("Camera", False),
|
||||||
@@ -1071,6 +1078,7 @@ context_type_map = {
|
|||||||
"gpencil_data": ("GreasePencil", False),
|
"gpencil_data": ("GreasePencil", False),
|
||||||
"gpencil_data_owner": ("ID", False),
|
"gpencil_data_owner": ("ID", False),
|
||||||
"hair": ("Hair", False),
|
"hair": ("Hair", False),
|
||||||
|
"id": ("ID", False),
|
||||||
"image_paint_object": ("Object", False),
|
"image_paint_object": ("Object", False),
|
||||||
"lattice": ("Lattice", False),
|
"lattice": ("Lattice", False),
|
||||||
"light": ("Light", False),
|
"light": ("Light", False),
|
||||||
@@ -1099,6 +1107,7 @@ context_type_map = {
|
|||||||
"selected_editable_keyframes": ("Keyframe", True),
|
"selected_editable_keyframes": ("Keyframe", True),
|
||||||
"selected_editable_objects": ("Object", True),
|
"selected_editable_objects": ("Object", True),
|
||||||
"selected_editable_sequences": ("Sequence", True),
|
"selected_editable_sequences": ("Sequence", True),
|
||||||
|
"selected_files": ("FileSelectEntry", True),
|
||||||
"selected_nla_strips": ("NlaStrip", True),
|
"selected_nla_strips": ("NlaStrip", True),
|
||||||
"selected_nodes": ("Node", True),
|
"selected_nodes": ("Node", True),
|
||||||
"selected_objects": ("Object", True),
|
"selected_objects": ("Object", True),
|
||||||
@@ -1113,6 +1122,7 @@ context_type_map = {
|
|||||||
"texture_slot": ("MaterialTextureSlot", False),
|
"texture_slot": ("MaterialTextureSlot", False),
|
||||||
"texture_user": ("ID", False),
|
"texture_user": ("ID", False),
|
||||||
"texture_user_property": ("Property", False),
|
"texture_user_property": ("Property", False),
|
||||||
|
"ui_list": ("UIList", False),
|
||||||
"vertex_paint_object": ("Object", False),
|
"vertex_paint_object": ("Object", False),
|
||||||
"view_layer": ("ViewLayer", False),
|
"view_layer": ("ViewLayer", False),
|
||||||
"visible_bones": ("EditBone", True),
|
"visible_bones": ("EditBone", True),
|
||||||
@@ -1194,6 +1204,7 @@ def pycontext2sphinx(basepath):
|
|||||||
"text_context_dir",
|
"text_context_dir",
|
||||||
"clip_context_dir",
|
"clip_context_dir",
|
||||||
"sequencer_context_dir",
|
"sequencer_context_dir",
|
||||||
|
"file_context_dir",
|
||||||
)
|
)
|
||||||
|
|
||||||
unique = set()
|
unique = set()
|
||||||
@@ -1991,13 +2002,15 @@ def write_rst_importable_modules(basepath):
|
|||||||
"blf": "Font Drawing",
|
"blf": "Font Drawing",
|
||||||
"imbuf": "Image Buffer",
|
"imbuf": "Image Buffer",
|
||||||
"imbuf.types": "Image Buffer Types",
|
"imbuf.types": "Image Buffer Types",
|
||||||
"gpu": "GPU Shader Module",
|
"gpu": "GPU Module",
|
||||||
"gpu.types": "GPU Types",
|
"gpu.types": "GPU Types",
|
||||||
"gpu.matrix": "GPU Matrix Utilities",
|
"gpu.matrix": "GPU Matrix Utilities",
|
||||||
"gpu.select": "GPU Select Utilities",
|
"gpu.select": "GPU Select Utilities",
|
||||||
"gpu.shader": "GPU Shader Utilities",
|
"gpu.shader": "GPU Shader Utilities",
|
||||||
"gpu.state": "GPU State Utilities",
|
"gpu.state": "GPU State Utilities",
|
||||||
"gpu.texture": "GPU Texture Utilities",
|
"gpu.texture": "GPU Texture Utilities",
|
||||||
|
"gpu.platform": "GPU Platform Utilities",
|
||||||
|
"gpu.capabilities": "GPU Capabilities Utilities",
|
||||||
"bmesh": "BMesh Module",
|
"bmesh": "BMesh Module",
|
||||||
"bmesh.ops": "BMesh Operators",
|
"bmesh.ops": "BMesh Operators",
|
||||||
"bmesh.types": "BMesh Types",
|
"bmesh.types": "BMesh Types",
|
||||||
|
2
extern/Eigen3/Eigen/src/Core/util/Macros.h
vendored
2
extern/Eigen3/Eigen/src/Core/util/Macros.h
vendored
@@ -389,7 +389,7 @@
|
|||||||
|
|
||||||
// Does the compiler support result_of?
|
// Does the compiler support result_of?
|
||||||
#ifndef EIGEN_HAS_STD_RESULT_OF
|
#ifndef EIGEN_HAS_STD_RESULT_OF
|
||||||
#if EIGEN_MAX_CPP_VER>=11 && ((__has_feature(cxx_lambdas) || (defined(__cplusplus) && __cplusplus >= 201103L)))
|
#if __cplusplus < 201703L && EIGEN_MAX_CPP_VER>=11 && ((__has_feature(cxx_lambdas) || (defined(__cplusplus) && __cplusplus >= 201103L && __cplusplus)))
|
||||||
#define EIGEN_HAS_STD_RESULT_OF 1
|
#define EIGEN_HAS_STD_RESULT_OF 1
|
||||||
#else
|
#else
|
||||||
#define EIGEN_HAS_STD_RESULT_OF 0
|
#define EIGEN_HAS_STD_RESULT_OF 0
|
||||||
|
2
extern/audaspace/bindings/C/AUD_Device.cpp
vendored
2
extern/audaspace/bindings/C/AUD_Device.cpp
vendored
@@ -221,7 +221,7 @@ AUD_API void AUD_Device_setListenerVelocity(AUD_Device* device, const float valu
|
|||||||
AUD_API double AUD_Device_getRate(AUD_Device* device)
|
AUD_API double AUD_Device_getRate(AUD_Device* device)
|
||||||
{
|
{
|
||||||
auto dev = device ? *device : DeviceManager::getDevice();
|
auto dev = device ? *device : DeviceManager::getDevice();
|
||||||
return dev->getSpecs().rate;
|
return dev ? dev->getSpecs().rate : 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device)
|
AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device)
|
||||||
|
4
extern/audaspace/bindings/C/AUD_Special.cpp
vendored
4
extern/audaspace/bindings/C/AUD_Special.cpp
vendored
@@ -86,6 +86,7 @@ AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
|
|||||||
info.specs.channels = AUD_CHANNELS_INVALID;
|
info.specs.channels = AUD_CHANNELS_INVALID;
|
||||||
info.specs.rate = AUD_RATE_INVALID;
|
info.specs.rate = AUD_RATE_INVALID;
|
||||||
info.length = 0.0f;
|
info.length = 0.0f;
|
||||||
|
info.start_offset = 0.0f;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -95,6 +96,7 @@ AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
|
|||||||
{
|
{
|
||||||
info.specs = convSpecToC(reader->getSpecs());
|
info.specs = convSpecToC(reader->getSpecs());
|
||||||
info.length = reader->getLength() / (float) info.specs.rate;
|
info.length = reader->getLength() / (float) info.specs.rate;
|
||||||
|
info.start_offset = reader->getStartOffset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception&)
|
catch(Exception&)
|
||||||
@@ -245,7 +247,7 @@ AUD_API int AUD_readSound(AUD_Sound* sound, float* buffer, int length, int sampl
|
|||||||
|
|
||||||
buffer[i * 3] = min;
|
buffer[i * 3] = min;
|
||||||
buffer[i * 3 + 1] = max;
|
buffer[i * 3 + 1] = max;
|
||||||
buffer[i * 3 + 2] = sqrt(power) / len;
|
buffer[i * 3 + 2] = sqrt(power / len); // RMS
|
||||||
|
|
||||||
if(overallmax < max)
|
if(overallmax < max)
|
||||||
overallmax = max;
|
overallmax = max;
|
||||||
|
1
extern/audaspace/bindings/C/AUD_Types.h
vendored
1
extern/audaspace/bindings/C/AUD_Types.h
vendored
@@ -176,4 +176,5 @@ typedef struct
|
|||||||
{
|
{
|
||||||
AUD_Specs specs;
|
AUD_Specs specs;
|
||||||
float length;
|
float length;
|
||||||
|
double start_offset;
|
||||||
} AUD_SoundInfo;
|
} AUD_SoundInfo;
|
||||||
|
2
extern/audaspace/bindings/python/setup.py.in
vendored
2
extern/audaspace/bindings/python/setup.py.in
vendored
@@ -1,4 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
6
extern/audaspace/include/IReader.h
vendored
6
extern/audaspace/include/IReader.h
vendored
@@ -70,6 +70,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual int getPosition() const=0;
|
virtual int getPosition() const=0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the start offset the sound should have to line up with related sources.
|
||||||
|
* \return The required start offset in seconds.
|
||||||
|
*/
|
||||||
|
virtual double getStartOffset() const { return 0.0;}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the specification of the reader.
|
* Returns the specification of the reader.
|
||||||
* \return The Specs structure.
|
* \return The Specs structure.
|
||||||
|
8
extern/audaspace/include/util/ThreadPool.h
vendored
8
extern/audaspace/include/util/ThreadPool.h
vendored
@@ -87,11 +87,17 @@ public:
|
|||||||
* \param args The arguments of the task.
|
* \param args The arguments of the task.
|
||||||
* \return A future of the same type as the return type of the task.
|
* \return A future of the same type as the return type of the task.
|
||||||
*/
|
*/
|
||||||
|
#if __cplusplus > 201703L
|
||||||
|
template<class T, class... Args>
|
||||||
|
std::future<typename std::invoke_result<T, Args...>::type> enqueue(T&& t, Args&&... args)
|
||||||
|
{
|
||||||
|
using pkgdTask = std::packaged_task<typename std::invoke_result<T, Args...>::type()>;
|
||||||
|
#else
|
||||||
template<class T, class... Args>
|
template<class T, class... Args>
|
||||||
std::future<typename std::result_of<T(Args...)>::type> enqueue(T&& t, Args&&... args)
|
std::future<typename std::result_of<T(Args...)>::type> enqueue(T&& t, Args&&... args)
|
||||||
{
|
{
|
||||||
using pkgdTask = std::packaged_task<typename std::result_of<T(Args...)>::type()>;
|
using pkgdTask = std::packaged_task<typename std::result_of<T(Args...)>::type()>;
|
||||||
|
#endif
|
||||||
std::shared_ptr<pkgdTask> task = std::make_shared<pkgdTask>(std::bind(std::forward<T>(t), std::forward<Args>(args)...));
|
std::shared_ptr<pkgdTask> task = std::make_shared<pkgdTask>(std::bind(std::forward<T>(t), std::forward<Args>(args)...));
|
||||||
auto result = task->get_future();
|
auto result = task->get_future();
|
||||||
|
|
||||||
|
66
extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
vendored
66
extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
vendored
@@ -126,7 +126,10 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer)
|
|||||||
void FFMPEGReader::init()
|
void FFMPEGReader::init()
|
||||||
{
|
{
|
||||||
m_position = 0;
|
m_position = 0;
|
||||||
|
m_start_offset = 0.0f;
|
||||||
m_pkgbuf_left = 0;
|
m_pkgbuf_left = 0;
|
||||||
|
m_st_time = 0;
|
||||||
|
m_duration = 0;
|
||||||
|
|
||||||
if(avformat_find_stream_info(m_formatCtx, nullptr) < 0)
|
if(avformat_find_stream_info(m_formatCtx, nullptr) < 0)
|
||||||
AUD_THROW(FileException, "File couldn't be read, ffmpeg couldn't find the stream info.");
|
AUD_THROW(FileException, "File couldn't be read, ffmpeg couldn't find the stream info.");
|
||||||
@@ -134,15 +137,41 @@ void FFMPEGReader::init()
|
|||||||
// find audio stream and codec
|
// find audio stream and codec
|
||||||
m_stream = -1;
|
m_stream = -1;
|
||||||
|
|
||||||
|
double dur_sec = 0;
|
||||||
|
|
||||||
for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
|
for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
|
||||||
{
|
{
|
||||||
#ifdef FFMPEG_OLD_CODE
|
#ifdef FFMPEG_OLD_CODE
|
||||||
if((m_formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
if(m_formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||||
#else
|
#else
|
||||||
if((m_formatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)
|
if(m_formatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||||
#endif
|
#endif
|
||||||
&& (m_stream < 0))
|
|
||||||
{
|
{
|
||||||
|
AVStream *audio_stream = m_formatCtx->streams[i];
|
||||||
|
double audio_timebase = av_q2d(audio_stream->time_base);
|
||||||
|
|
||||||
|
if (audio_stream->start_time != AV_NOPTS_VALUE)
|
||||||
|
{
|
||||||
|
m_st_time = audio_stream->start_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t ctx_start_time = 0;
|
||||||
|
if (m_formatCtx->start_time != AV_NOPTS_VALUE) {
|
||||||
|
ctx_start_time = m_formatCtx->start_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_start_offset = m_st_time * audio_timebase - (double)ctx_start_time / AV_TIME_BASE;
|
||||||
|
|
||||||
|
if(audio_stream->duration != AV_NOPTS_VALUE)
|
||||||
|
{
|
||||||
|
dur_sec = audio_stream->duration * audio_timebase;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* If the audio starts after the stream start time, subract this from the total duration. */
|
||||||
|
dur_sec = (double)m_formatCtx->duration / AV_TIME_BASE - m_start_offset;
|
||||||
|
}
|
||||||
|
|
||||||
m_stream=i;
|
m_stream=i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -213,6 +242,7 @@ void FFMPEGReader::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_specs.rate = (SampleRate) m_codecCtx->sample_rate;
|
m_specs.rate = (SampleRate) m_codecCtx->sample_rate;
|
||||||
|
m_duration = lround(dur_sec * m_codecCtx->sample_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
FFMPEGReader::FFMPEGReader(std::string filename) :
|
FFMPEGReader::FFMPEGReader(std::string filename) :
|
||||||
@@ -338,21 +368,17 @@ void FFMPEGReader::seek(int position)
|
|||||||
{
|
{
|
||||||
if(position >= 0)
|
if(position >= 0)
|
||||||
{
|
{
|
||||||
uint64_t st_time = m_formatCtx->start_time;
|
|
||||||
uint64_t seek_pos = ((uint64_t)position) * ((uint64_t)AV_TIME_BASE) / ((uint64_t)m_specs.rate);
|
|
||||||
|
|
||||||
if(st_time != AV_NOPTS_VALUE) {
|
|
||||||
seek_pos += st_time;
|
|
||||||
}
|
|
||||||
|
|
||||||
double pts_time_base =
|
double pts_time_base =
|
||||||
av_q2d(m_formatCtx->streams[m_stream]->time_base);
|
av_q2d(m_formatCtx->streams[m_stream]->time_base);
|
||||||
uint64_t pts_st_time =
|
|
||||||
((st_time != AV_NOPTS_VALUE) ? st_time : 0)
|
uint64_t seek_pts = (((uint64_t)position) / ((uint64_t)m_specs.rate)) / pts_time_base;
|
||||||
/ pts_time_base / (uint64_t) AV_TIME_BASE;
|
|
||||||
|
if(m_st_time != AV_NOPTS_VALUE) {
|
||||||
|
seek_pts += m_st_time;
|
||||||
|
}
|
||||||
|
|
||||||
// a value < 0 tells us that seeking failed
|
// a value < 0 tells us that seeking failed
|
||||||
if(av_seek_frame(m_formatCtx, -1, seek_pos,
|
if(av_seek_frame(m_formatCtx, m_stream, seek_pts,
|
||||||
AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0)
|
AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0)
|
||||||
{
|
{
|
||||||
avcodec_flush_buffers(m_codecCtx);
|
avcodec_flush_buffers(m_codecCtx);
|
||||||
@@ -374,7 +400,7 @@ void FFMPEGReader::seek(int position)
|
|||||||
if(packet.pts != AV_NOPTS_VALUE)
|
if(packet.pts != AV_NOPTS_VALUE)
|
||||||
{
|
{
|
||||||
// calculate real position, and read to frame!
|
// calculate real position, and read to frame!
|
||||||
m_position = (packet.pts - pts_st_time) * pts_time_base * m_specs.rate;
|
m_position = (packet.pts - m_st_time) * pts_time_base * m_specs.rate;
|
||||||
|
|
||||||
if(m_position < position)
|
if(m_position < position)
|
||||||
{
|
{
|
||||||
@@ -405,8 +431,7 @@ void FFMPEGReader::seek(int position)
|
|||||||
int FFMPEGReader::getLength() const
|
int FFMPEGReader::getLength() const
|
||||||
{
|
{
|
||||||
// return approximated remaning size
|
// return approximated remaning size
|
||||||
return (int)((m_formatCtx->duration * m_codecCtx->sample_rate)
|
return m_duration - m_position;
|
||||||
/ AV_TIME_BASE)-m_position;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int FFMPEGReader::getPosition() const
|
int FFMPEGReader::getPosition() const
|
||||||
@@ -414,6 +439,11 @@ int FFMPEGReader::getPosition() const
|
|||||||
return m_position;
|
return m_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double FFMPEGReader::getStartOffset() const
|
||||||
|
{
|
||||||
|
return m_start_offset;
|
||||||
|
}
|
||||||
|
|
||||||
Specs FFMPEGReader::getSpecs() const
|
Specs FFMPEGReader::getSpecs() const
|
||||||
{
|
{
|
||||||
return m_specs.specs;
|
return m_specs.specs;
|
||||||
@@ -450,12 +480,14 @@ void FFMPEGReader::read(int& length, bool& eos, sample_t* buffer)
|
|||||||
// decode the package
|
// decode the package
|
||||||
pkgbuf_pos = decode(packet, m_pkgbuf);
|
pkgbuf_pos = decode(packet, m_pkgbuf);
|
||||||
|
|
||||||
|
if (packet.pts >= m_st_time) {
|
||||||
// copy to output buffer
|
// copy to output buffer
|
||||||
data_size = std::min(pkgbuf_pos, left * sample_size);
|
data_size = std::min(pkgbuf_pos, left * sample_size);
|
||||||
m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(), data_size / AUD_FORMAT_SIZE(m_specs.format));
|
m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(), data_size / AUD_FORMAT_SIZE(m_specs.format));
|
||||||
buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
|
buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
|
||||||
left -= data_size / sample_size;
|
left -= data_size / sample_size;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
av_packet_unref(&packet);
|
av_packet_unref(&packet);
|
||||||
}
|
}
|
||||||
// read more data than necessary?
|
// read more data than necessary?
|
||||||
|
17
extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
vendored
17
extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
vendored
@@ -54,6 +54,22 @@ private:
|
|||||||
*/
|
*/
|
||||||
int m_position;
|
int m_position;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The start offset in seconds relative to the media container start time.
|
||||||
|
* IE how much the sound should be delayed to be kept in sync with the rest of the containter streams.
|
||||||
|
*/
|
||||||
|
double m_start_offset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The start time pts of the stream. All packets before this timestamp shouldn't be played back (only decoded).
|
||||||
|
*/
|
||||||
|
int64_t m_st_time;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The duration of the audio stream in samples.
|
||||||
|
*/
|
||||||
|
int64_t m_duration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The specification of the audio data.
|
* The specification of the audio data.
|
||||||
*/
|
*/
|
||||||
@@ -182,6 +198,7 @@ public:
|
|||||||
virtual void seek(int position);
|
virtual void seek(int position);
|
||||||
virtual int getLength() const;
|
virtual int getLength() const;
|
||||||
virtual int getPosition() const;
|
virtual int getPosition() const;
|
||||||
|
virtual double getStartOffset() const;
|
||||||
virtual Specs getSpecs() const;
|
virtual Specs getSpecs() const;
|
||||||
virtual void read(int& length, bool& eos, sample_t* buffer);
|
virtual void read(int& length, bool& eos, sample_t* buffer);
|
||||||
};
|
};
|
||||||
|
@@ -32,17 +32,24 @@ void PulseAudioDevice::PulseAudio_state_callback(pa_context *context, void *data
|
|||||||
device->m_state = AUD_pa_context_get_state(context);
|
device->m_state = AUD_pa_context_get_state(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PulseAudioDevice::PulseAudio_request(pa_stream *stream, size_t num_bytes, void *data)
|
void PulseAudioDevice::PulseAudio_request(pa_stream *stream, size_t total_bytes, void *data)
|
||||||
{
|
{
|
||||||
PulseAudioDevice* device = (PulseAudioDevice*)data;
|
PulseAudioDevice* device = (PulseAudioDevice*)data;
|
||||||
|
|
||||||
void* buffer;
|
void* buffer;
|
||||||
|
|
||||||
|
while(total_bytes > 0)
|
||||||
|
{
|
||||||
|
size_t num_bytes = total_bytes;
|
||||||
|
|
||||||
AUD_pa_stream_begin_write(stream, &buffer, &num_bytes);
|
AUD_pa_stream_begin_write(stream, &buffer, &num_bytes);
|
||||||
|
|
||||||
device->mix((data_t*)buffer, num_bytes / AUD_DEVICE_SAMPLE_SIZE(device->m_specs));
|
device->mix((data_t*)buffer, num_bytes / AUD_DEVICE_SAMPLE_SIZE(device->m_specs));
|
||||||
|
|
||||||
AUD_pa_stream_write(stream, buffer, num_bytes, nullptr, 0, PA_SEEK_RELATIVE);
|
AUD_pa_stream_write(stream, buffer, num_bytes, nullptr, 0, PA_SEEK_RELATIVE);
|
||||||
|
|
||||||
|
total_bytes -= num_bytes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PulseAudioDevice::PulseAudio_underflow(pa_stream *stream, void *data)
|
void PulseAudioDevice::PulseAudio_underflow(pa_stream *stream, void *data)
|
||||||
@@ -96,7 +103,6 @@ void PulseAudioDevice::runMixingThread()
|
|||||||
|
|
||||||
PulseAudioDevice::PulseAudioDevice(std::string name, DeviceSpecs specs, int buffersize) :
|
PulseAudioDevice::PulseAudioDevice(std::string name, DeviceSpecs specs, int buffersize) :
|
||||||
m_state(PA_CONTEXT_UNCONNECTED),
|
m_state(PA_CONTEXT_UNCONNECTED),
|
||||||
m_buffersize(buffersize),
|
|
||||||
m_underflows(0)
|
m_underflows(0)
|
||||||
{
|
{
|
||||||
m_mainloop = AUD_pa_mainloop_new();
|
m_mainloop = AUD_pa_mainloop_new();
|
||||||
@@ -187,6 +193,9 @@ PulseAudioDevice::PulseAudioDevice(std::string name, DeviceSpecs specs, int buff
|
|||||||
AUD_pa_stream_set_write_callback(m_stream, PulseAudio_request, this);
|
AUD_pa_stream_set_write_callback(m_stream, PulseAudio_request, this);
|
||||||
AUD_pa_stream_set_underflow_callback(m_stream, PulseAudio_underflow, this);
|
AUD_pa_stream_set_underflow_callback(m_stream, PulseAudio_underflow, this);
|
||||||
|
|
||||||
|
buffersize *= AUD_DEVICE_SAMPLE_SIZE(m_specs);
|
||||||
|
m_buffersize = buffersize;
|
||||||
|
|
||||||
pa_buffer_attr buffer_attr;
|
pa_buffer_attr buffer_attr;
|
||||||
|
|
||||||
buffer_attr.fragsize = -1U;
|
buffer_attr.fragsize = -1U;
|
||||||
|
@@ -59,7 +59,7 @@ private:
|
|||||||
* \param num_bytes The length in bytes to be supplied.
|
* \param num_bytes The length in bytes to be supplied.
|
||||||
* \param data The PulseAudio device.
|
* \param data The PulseAudio device.
|
||||||
*/
|
*/
|
||||||
AUD_LOCAL static void PulseAudio_request(pa_stream* stream, size_t num_bytes, void* data);
|
AUD_LOCAL static void PulseAudio_request(pa_stream* stream, size_t total_bytes, void* data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports an underflow from the PulseAudio server.
|
* Reports an underflow from the PulseAudio server.
|
||||||
|
1
extern/glog/README.blender
vendored
1
extern/glog/README.blender
vendored
@@ -7,3 +7,4 @@ Local modifications:
|
|||||||
checks for functions and so are needed.
|
checks for functions and so are needed.
|
||||||
* Added special definitions of HAVE_SNPRINTF and HAVE_LIB_GFLAGS
|
* Added special definitions of HAVE_SNPRINTF and HAVE_LIB_GFLAGS
|
||||||
in Windows' specific config.h.
|
in Windows' specific config.h.
|
||||||
|
* Silenced syscall deprecation warnings on macOS >= 10.12.
|
||||||
|
2
extern/glog/src/raw_logging.cc
vendored
2
extern/glog/src/raw_logging.cc
vendored
@@ -59,7 +59,7 @@
|
|||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)
|
#if (defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)) && (!(defined OS_MACOSX))
|
||||||
# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
|
# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
|
||||||
#else
|
#else
|
||||||
// Not so safe, but what can you do?
|
// Not so safe, but what can you do?
|
||||||
|
6
extern/glog/src/utilities.cc
vendored
6
extern/glog/src/utilities.cc
vendored
@@ -259,7 +259,13 @@ pid_t GetTID() {
|
|||||||
#endif
|
#endif
|
||||||
static bool lacks_gettid = false;
|
static bool lacks_gettid = false;
|
||||||
if (!lacks_gettid) {
|
if (!lacks_gettid) {
|
||||||
|
#ifdef OS_MACOSX
|
||||||
|
uint64_t tid64;
|
||||||
|
const int error = pthread_threadid_np(NULL, &tid64);
|
||||||
|
pid_t tid = error ? -1 : (pid_t)tid64;
|
||||||
|
#else
|
||||||
pid_t tid = syscall(__NR_gettid);
|
pid_t tid = syscall(__NR_gettid);
|
||||||
|
#endif
|
||||||
if (tid != -1) {
|
if (tid != -1) {
|
||||||
return tid;
|
return tid;
|
||||||
}
|
}
|
||||||
|
2
extern/mantaflow/UPDATE.sh
vendored
2
extern/mantaflow/UPDATE.sh
vendored
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
# YOUR INSTALLATION PATHS GO HERE:
|
# YOUR INSTALLATION PATHS GO HERE:
|
||||||
MANTA_INSTALLATION=/Users/sebbas/Developer/Mantaflow/mantaflowDevelop
|
MANTA_INSTALLATION=/Users/sebbas/Developer/Mantaflow/mantaflowDevelop
|
||||||
BLENDER_INSTALLATION=/Users/sebbas/Developer/Blender/fluid-mantaflow
|
BLENDER_INSTALLATION=/Users/sebbas/Developer/Blender
|
||||||
|
|
||||||
# Try to check out Mantaflow repository before building?
|
# Try to check out Mantaflow repository before building?
|
||||||
CLEAN_REPOSITORY=0
|
CLEAN_REPOSITORY=0
|
||||||
|
@@ -28,11 +28,13 @@ extern PyTypeObject PbVec3Type;
|
|||||||
extern PyTypeObject PbVec4Type;
|
extern PyTypeObject PbVec4Type;
|
||||||
|
|
||||||
struct PbVec3 {
|
struct PbVec3 {
|
||||||
PyObject_HEAD float data[3];
|
PyObject_HEAD
|
||||||
|
float data[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PbVec4 {
|
struct PbVec4 {
|
||||||
PyObject_HEAD float data[4];
|
PyObject_HEAD
|
||||||
|
float data[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
PyObject *getPyNone()
|
PyObject *getPyNone()
|
||||||
|
6
extern/mantaflow/helper/pwrapper/pvec3.cpp
vendored
6
extern/mantaflow/helper/pwrapper/pvec3.cpp
vendored
@@ -25,7 +25,8 @@ namespace Manta {
|
|||||||
extern PyTypeObject PbVec3Type;
|
extern PyTypeObject PbVec3Type;
|
||||||
|
|
||||||
struct PbVec3 {
|
struct PbVec3 {
|
||||||
PyObject_HEAD float data[3];
|
PyObject_HEAD
|
||||||
|
float data[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
static void PbVec3Dealloc(PbVec3 *self)
|
static void PbVec3Dealloc(PbVec3 *self)
|
||||||
@@ -293,7 +294,8 @@ inline PyObject *castPy(PyTypeObject *p)
|
|||||||
extern PyTypeObject PbVec4Type;
|
extern PyTypeObject PbVec4Type;
|
||||||
|
|
||||||
struct PbVec4 {
|
struct PbVec4 {
|
||||||
PyObject_HEAD float data[4];
|
PyObject_HEAD
|
||||||
|
float data[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyMethodDef PbVec4Methods[] = {
|
static PyMethodDef PbVec4Methods[] = {
|
||||||
|
@@ -76,7 +76,8 @@ struct ClassData {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct PbObject {
|
struct PbObject {
|
||||||
PyObject_HEAD Manta::PbClass *instance;
|
PyObject_HEAD
|
||||||
|
Manta::PbClass *instance;
|
||||||
ClassData *classdef;
|
ClassData *classdef;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
202
extern/mantaflow/preprocessed/fastmarch.cpp
vendored
202
extern/mantaflow/preprocessed/fastmarch.cpp
vendored
@@ -874,6 +874,136 @@ static const Vec3i nb[6] = {Vec3i(1, 0, 0),
|
|||||||
Vec3i(0, 0, 1),
|
Vec3i(0, 0, 1),
|
||||||
Vec3i(0, 0, -1)};
|
Vec3i(0, 0, -1)};
|
||||||
|
|
||||||
|
struct knMarkSkipCells : public KernelBase {
|
||||||
|
knMarkSkipCells(Grid<Real> &phi, Grid<int> &tmp, bool inside)
|
||||||
|
: KernelBase(&phi, 1), phi(phi), tmp(tmp), inside(inside)
|
||||||
|
{
|
||||||
|
runMessage();
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
inline void op(int i, int j, int k, Grid<Real> &phi, Grid<int> &tmp, bool inside) const
|
||||||
|
{
|
||||||
|
if (!inside && phi(i, j, k) < 0.) {
|
||||||
|
tmp(i, j, k) = 1;
|
||||||
|
}
|
||||||
|
if (inside && phi(i, j, k) > 0.) {
|
||||||
|
tmp(i, j, k) = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inline Grid<Real> &getArg0()
|
||||||
|
{
|
||||||
|
return phi;
|
||||||
|
}
|
||||||
|
typedef Grid<Real> type0;
|
||||||
|
inline Grid<int> &getArg1()
|
||||||
|
{
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
typedef Grid<int> type1;
|
||||||
|
inline bool &getArg2()
|
||||||
|
{
|
||||||
|
return inside;
|
||||||
|
}
|
||||||
|
typedef bool type2;
|
||||||
|
void runMessage()
|
||||||
|
{
|
||||||
|
debMsg("Executing kernel knMarkSkipCells ", 3);
|
||||||
|
debMsg("Kernel range"
|
||||||
|
<< " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ",
|
||||||
|
4);
|
||||||
|
};
|
||||||
|
void operator()(const tbb::blocked_range<IndexInt> &__r) const
|
||||||
|
{
|
||||||
|
const int _maxX = maxX;
|
||||||
|
const int _maxY = maxY;
|
||||||
|
if (maxZ > 1) {
|
||||||
|
for (int k = __r.begin(); k != (int)__r.end(); k++)
|
||||||
|
for (int j = 1; j < _maxY; j++)
|
||||||
|
for (int i = 1; i < _maxX; i++)
|
||||||
|
op(i, j, k, phi, tmp, inside);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const int k = 0;
|
||||||
|
for (int j = __r.begin(); j != (int)__r.end(); j++)
|
||||||
|
for (int i = 1; i < _maxX; i++)
|
||||||
|
op(i, j, k, phi, tmp, inside);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void run()
|
||||||
|
{
|
||||||
|
if (maxZ > 1)
|
||||||
|
tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this);
|
||||||
|
else
|
||||||
|
tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this);
|
||||||
|
}
|
||||||
|
Grid<Real> φ
|
||||||
|
Grid<int> &tmp;
|
||||||
|
bool inside;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct knSetFirstLayer : public KernelBase {
|
||||||
|
knSetFirstLayer(Grid<int> &tmp, int dim) : KernelBase(&tmp, 1), tmp(tmp), dim(dim)
|
||||||
|
{
|
||||||
|
runMessage();
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
inline void op(int i, int j, int k, Grid<int> &tmp, int dim) const
|
||||||
|
{
|
||||||
|
Vec3i p(i, j, k);
|
||||||
|
if (tmp(p))
|
||||||
|
return;
|
||||||
|
for (int n = 0; n < 2 * dim; ++n) {
|
||||||
|
if (tmp(p + nb[n]) == 1) {
|
||||||
|
tmp(i, j, k) = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inline Grid<int> &getArg0()
|
||||||
|
{
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
typedef Grid<int> type0;
|
||||||
|
inline int &getArg1()
|
||||||
|
{
|
||||||
|
return dim;
|
||||||
|
}
|
||||||
|
typedef int type1;
|
||||||
|
void runMessage()
|
||||||
|
{
|
||||||
|
debMsg("Executing kernel knSetFirstLayer ", 3);
|
||||||
|
debMsg("Kernel range"
|
||||||
|
<< " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ",
|
||||||
|
4);
|
||||||
|
};
|
||||||
|
void operator()(const tbb::blocked_range<IndexInt> &__r) const
|
||||||
|
{
|
||||||
|
const int _maxX = maxX;
|
||||||
|
const int _maxY = maxY;
|
||||||
|
if (maxZ > 1) {
|
||||||
|
for (int k = __r.begin(); k != (int)__r.end(); k++)
|
||||||
|
for (int j = 1; j < _maxY; j++)
|
||||||
|
for (int i = 1; i < _maxX; i++)
|
||||||
|
op(i, j, k, tmp, dim);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const int k = 0;
|
||||||
|
for (int j = __r.begin(); j != (int)__r.end(); j++)
|
||||||
|
for (int i = 1; i < _maxX; i++)
|
||||||
|
op(i, j, k, tmp, dim);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void run()
|
||||||
|
{
|
||||||
|
if (maxZ > 1)
|
||||||
|
tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this);
|
||||||
|
else
|
||||||
|
tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this);
|
||||||
|
}
|
||||||
|
Grid<int> &tmp;
|
||||||
|
int dim;
|
||||||
|
};
|
||||||
|
|
||||||
template<class S> struct knExtrapolateLsSimple : public KernelBase {
|
template<class S> struct knExtrapolateLsSimple : public KernelBase {
|
||||||
knExtrapolateLsSimple(Grid<S> &val, int distance, Grid<int> &tmp, const int d, S direction)
|
knExtrapolateLsSimple(Grid<S> &val, int distance, Grid<int> &tmp, const int d, S direction)
|
||||||
: KernelBase(&val, 1), val(val), distance(distance), tmp(tmp), d(d), direction(direction)
|
: KernelBase(&val, 1), val(val), distance(distance), tmp(tmp), d(d), direction(direction)
|
||||||
@@ -1043,39 +1173,12 @@ void extrapolateLsSimple(Grid<Real> &phi, int distance = 4, bool inside = false)
|
|||||||
tmp.clear();
|
tmp.clear();
|
||||||
const int dim = (phi.is3D() ? 3 : 2);
|
const int dim = (phi.is3D() ? 3 : 2);
|
||||||
|
|
||||||
// by default, march outside
|
// by default, march outside (ie mark all inside to be skipped)
|
||||||
Real direction = 1.;
|
Real direction = (inside) ? -1. : 1.;
|
||||||
if (!inside) {
|
knMarkSkipCells(phi, tmp, inside);
|
||||||
// mark all inside
|
|
||||||
FOR_IJK_BND(phi, 1)
|
|
||||||
{
|
|
||||||
if (phi(i, j, k) < 0.) {
|
|
||||||
tmp(i, j, k) = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
direction = -1.;
|
|
||||||
FOR_IJK_BND(phi, 1)
|
|
||||||
{
|
|
||||||
if (phi(i, j, k) > 0.) {
|
|
||||||
tmp(i, j, k) = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// + first layer around
|
// + first layer around
|
||||||
FOR_IJK_BND(phi, 1)
|
knSetFirstLayer(tmp, dim);
|
||||||
{
|
|
||||||
Vec3i p(i, j, k);
|
|
||||||
if (tmp(p))
|
|
||||||
continue;
|
|
||||||
for (int n = 0; n < 2 * dim; ++n) {
|
|
||||||
if (tmp(p + nb[n]) == 1) {
|
|
||||||
tmp(i, j, k) = 2;
|
|
||||||
n = 2 * dim;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// extrapolate for distance
|
// extrapolate for distance
|
||||||
for (int d = 2; d < 1 + distance; ++d) {
|
for (int d = 2; d < 1 + distance; ++d) {
|
||||||
@@ -1126,37 +1229,12 @@ void extrapolateVec3Simple(Grid<Vec3> &vel, Grid<Real> &phi, int distance = 4, b
|
|||||||
tmp.clear();
|
tmp.clear();
|
||||||
const int dim = (vel.is3D() ? 3 : 2);
|
const int dim = (vel.is3D() ? 3 : 2);
|
||||||
|
|
||||||
// mark initial cells, by default, march outside
|
// mark initial cells, by default, march outside (ie mark all inside to be skipped)
|
||||||
if (!inside) {
|
Real direction = (inside) ? -1. : 1.;
|
||||||
// mark all inside
|
knMarkSkipCells(phi, tmp, inside);
|
||||||
FOR_IJK_BND(phi, 1)
|
|
||||||
{
|
|
||||||
if (phi(i, j, k) < 0.) {
|
|
||||||
tmp(i, j, k) = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
FOR_IJK_BND(phi, 1)
|
|
||||||
{
|
|
||||||
if (phi(i, j, k) > 0.) {
|
|
||||||
tmp(i, j, k) = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// + first layer next to initial cells
|
// + first layer next to initial cells
|
||||||
FOR_IJK_BND(vel, 1)
|
knSetFirstLayer(tmp, dim);
|
||||||
{
|
|
||||||
Vec3i p(i, j, k);
|
|
||||||
if (tmp(p))
|
|
||||||
continue;
|
|
||||||
for (int n = 0; n < 2 * dim; ++n) {
|
|
||||||
if (tmp(p + nb[n]) == 1) {
|
|
||||||
tmp(i, j, k) = 2;
|
|
||||||
n = 2 * dim;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int d = 2; d < 1 + distance; ++d) {
|
for (int d = 2; d < 1 + distance; ++d) {
|
||||||
knExtrapolateLsSimple<Vec3>(vel, distance, tmp, d, Vec3(0.));
|
knExtrapolateLsSimple<Vec3>(vel, distance, tmp, d, Vec3(0.));
|
||||||
|
2
extern/mantaflow/preprocessed/gitinfo.h
vendored
2
extern/mantaflow/preprocessed/gitinfo.h
vendored
@@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
#define MANTA_GIT_VERSION "commit 8fbebe02459b7f72575872c20961f7cb757db408"
|
#define MANTA_GIT_VERSION "commit d5d9a6c28daa8f21426d7a285f48639c0d8fd13f"
|
||||||
|
7
extern/nanosvg/README.blender
vendored
Normal file
7
extern/nanosvg/README.blender
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Project: NanoSVG
|
||||||
|
URL: https://github.com/memononen/nanosvg
|
||||||
|
License: zlib
|
||||||
|
Upstream version:
|
||||||
|
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)
|
86
extern/nanosvg/patches/NanoSVG.diff
vendored
Normal file
86
extern/nanosvg/patches/NanoSVG.diff
vendored
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
diff --git a/c:/tmp/nanosvg_original.h b/c:/tmp/nanosvg_modif.h
|
||||||
|
index 24a01a86d3d..eca0d07e79d 100644
|
||||||
|
--- a/c:/tmp/nanosvg_original.h
|
||||||
|
+++ b/c:/tmp/nanosvg_modif.h
|
||||||
|
@@ -24,7 +24,8 @@
|
||||||
|
*
|
||||||
|
* Bounding box calculation based on http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
|
||||||
|
*
|
||||||
|
- */
|
||||||
|
+ * This is a modified version for Blender used by importers.
|
||||||
|
+ **/
|
||||||
|
|
||||||
|
#ifndef NANOSVG_H
|
||||||
|
#define NANOSVG_H
|
||||||
|
@@ -148,6 +149,8 @@ extern "C" {
|
||||||
|
typedef struct NSVGshape
|
||||||
|
{
|
||||||
|
char id[64]; // Optional 'id' attr of the shape or its group
|
||||||
|
+ /* Blender: Parent ID used for layer creation. */
|
||||||
|
+ char id_parent[64];
|
||||||
|
NSVGpaint fill; // Fill paint
|
||||||
|
NSVGpaint stroke; // Stroke paint
|
||||||
|
float opacity; // Opacity of the shape.
|
||||||
|
@@ -370,6 +373,7 @@ int nsvg__parseXML(char* input,
|
||||||
|
/* Simple SVG parser. */
|
||||||
|
|
||||||
|
#define NSVG_MAX_ATTR 128
|
||||||
|
+#define NSVG_MAX_BREADCRUMB 5
|
||||||
|
|
||||||
|
enum NSVGgradientUnits
|
||||||
|
{
|
||||||
|
@@ -471,6 +475,10 @@ typedef struct NSVGparser
|
||||||
|
float dpi;
|
||||||
|
char pathFlag;
|
||||||
|
char defsFlag;
|
||||||
|
+ /** Blender breadcrumb for layers. */
|
||||||
|
+ char breadcrumb[NSVG_MAX_BREADCRUMB][64];
|
||||||
|
+ /** Blender number of elements in breadcrumb. */
|
||||||
|
+ int breadcrumb_len;
|
||||||
|
} NSVGparser;
|
||||||
|
|
||||||
|
static void nsvg__xformIdentity(float* t)
|
||||||
|
@@ -980,6 +988,14 @@ static void nsvg__addShape(NSVGparser* p)
|
||||||
|
memset(shape, 0, sizeof(NSVGshape));
|
||||||
|
|
||||||
|
memcpy(shape->id, attr->id, sizeof shape->id);
|
||||||
|
+ /* Copy parent id from breadcrumb. */
|
||||||
|
+ if (p->breadcrumb_len > 0) {
|
||||||
|
+ memcpy(shape->id_parent, p->breadcrumb[0], sizeof shape->id_parent);
|
||||||
|
+ }
|
||||||
|
+ else {
|
||||||
|
+ memcpy(shape->id_parent, attr->id, sizeof shape->id_parent);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
scale = nsvg__getAverageScale(attr->xform);
|
||||||
|
shape->strokeWidth = attr->strokeWidth * scale;
|
||||||
|
shape->strokeDashOffset = attr->strokeDashOffset * scale;
|
||||||
|
@@ -2814,6 +2830,14 @@ static void nsvg__startElement(void* ud, const char* el, const char** attr)
|
||||||
|
if (strcmp(el, "g") == 0) {
|
||||||
|
nsvg__pushAttr(p);
|
||||||
|
nsvg__parseAttribs(p, attr);
|
||||||
|
+
|
||||||
|
+ /* Save the breadcrumb of groups. */
|
||||||
|
+ if (p->breadcrumb_len < NSVG_MAX_BREADCRUMB) {
|
||||||
|
+ NSVGattrib *attr_id = nsvg__getAttr(p);
|
||||||
|
+ memcpy(
|
||||||
|
+ p->breadcrumb[p->breadcrumb_len], attr_id->id, sizeof(p->breadcrumb[p->breadcrumb_len]));
|
||||||
|
+ p->breadcrumb_len++;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
else if (strcmp(el, "path") == 0) {
|
||||||
|
if (p->pathFlag) // Do not allow nested paths.
|
||||||
|
@@ -2874,7 +2898,12 @@ static void nsvg__endElement(void* ud, const char* el)
|
||||||
|
NSVGparser* p = (NSVGparser*)ud;
|
||||||
|
|
||||||
|
if (strcmp(el, "g") == 0) {
|
||||||
|
- nsvg__popAttr(p);
|
||||||
|
+ /* Remove the breadcrumb level. */
|
||||||
|
+ if (p->breadcrumb_len > 0) {
|
||||||
|
+ p->breadcrumb[p->breadcrumb_len - 1][0] = '\0';
|
||||||
|
+ p->breadcrumb_len--;
|
||||||
|
+ }
|
||||||
|
+ nsvg__popAttr(p);
|
||||||
|
}
|
||||||
|
else if (strcmp(el, "path") == 0) {
|
||||||
|
p->pathFlag = 0;
|
@@ -16,3 +16,4 @@ LINK_DIRECTORIES(
|
|||||||
|
|
||||||
# ADD_EXECUTABLE(myprog myprog-main.cc)
|
# ADD_EXECUTABLE(myprog myprog-main.cc)
|
||||||
# TARGET_LINK_LIBRARIES(myprog lemon)
|
# TARGET_LINK_LIBRARIES(myprog lemon)
|
||||||
|
|
||||||
|
@@ -88,3 +88,4 @@ INSTALL(
|
|||||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/lemon.pc
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/lemon.pc
|
||||||
DESTINATION lib/pkgconfig
|
DESTINATION lib/pkgconfig
|
||||||
)
|
)
|
||||||
|
|
||||||
|
3
extern/quadriflow/src/loader.cpp
vendored
3
extern/quadriflow/src/loader.cpp
vendored
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace qflow {
|
namespace qflow {
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ void load(const char* filename, MatrixXd& V, MatrixXi& F)
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// Hash function for obj_vertex
|
/// Hash function for obj_vertex
|
||||||
struct obj_vertexHash {
|
struct obj_vertexHash : std::function<size_t(obj_vertex)> {
|
||||||
std::size_t operator()(const obj_vertex &v) const {
|
std::size_t operator()(const obj_vertex &v) const {
|
||||||
size_t hash = std::hash<uint32_t>()(v.p);
|
size_t hash = std::hash<uint32_t>()(v.p);
|
||||||
hash = hash * 37 + std::hash<uint32_t>()(v.uv);
|
hash = hash * 37 + std::hash<uint32_t>()(v.uv);
|
||||||
|
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
@@ -32,7 +32,7 @@
|
|||||||
* - #TPOOL_STRUCT: Name for pool struct name.
|
* - #TPOOL_STRUCT: Name for pool struct name.
|
||||||
* - #TPOOL_CHUNK_SIZE: Chunk size (optional), use 64kb when not defined.
|
* - #TPOOL_CHUNK_SIZE: Chunk size (optional), use 64kb when not defined.
|
||||||
*
|
*
|
||||||
* \note #TPOOL_ALLOC_TYPE must be at least ``sizeof(void *)``.
|
* \note #TPOOL_ALLOC_TYPE must be at least `sizeof(void *)`.
|
||||||
*
|
*
|
||||||
* Defines the API, uses #TPOOL_IMPL_PREFIX to prefix each function.
|
* Defines the API, uses #TPOOL_IMPL_PREFIX to prefix each function.
|
||||||
*
|
*
|
||||||
|
BIN
icon_geom.blend
Normal file
BIN
icon_geom.blend
Normal file
Binary file not shown.
@@ -49,27 +49,27 @@
|
|||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint64_t atomic_add_and_fetch_uint64(uint64_t *p, uint64_t x)
|
ATOMIC_INLINE uint64_t atomic_add_and_fetch_uint64(uint64_t *p, uint64_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd64((int64_t *)p, (int64_t)x) + x;
|
return (uint64_t)(InterlockedExchangeAdd64((int64_t *)p, (int64_t)x) + (int64_t)x);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint64_t atomic_sub_and_fetch_uint64(uint64_t *p, uint64_t x)
|
ATOMIC_INLINE uint64_t atomic_sub_and_fetch_uint64(uint64_t *p, uint64_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x)) - x;
|
return (uint64_t)(InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x)) - (int64_t)x);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint64_t atomic_cas_uint64(uint64_t *v, uint64_t old, uint64_t _new)
|
ATOMIC_INLINE uint64_t atomic_cas_uint64(uint64_t *v, uint64_t old, uint64_t _new)
|
||||||
{
|
{
|
||||||
return InterlockedCompareExchange64((int64_t *)v, _new, old);
|
return (uint64_t)(InterlockedCompareExchange64((int64_t *)v, _new, old));
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x)
|
ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd64((int64_t *)p, (int64_t)x);
|
return (uint64_t)InterlockedExchangeAdd64((int64_t *)p, (int64_t)x);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint64_t atomic_fetch_and_sub_uint64(uint64_t *p, uint64_t x)
|
ATOMIC_INLINE uint64_t atomic_fetch_and_sub_uint64(uint64_t *p, uint64_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x));
|
return (uint64_t)InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signed */
|
/* Signed */
|
||||||
@@ -103,32 +103,32 @@ ATOMIC_INLINE int64_t atomic_fetch_and_sub_int64(int64_t *p, int64_t x)
|
|||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd(p, x) + x;
|
return (uint32_t)InterlockedExchangeAdd(p, x) + x;
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint32_t atomic_sub_and_fetch_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_sub_and_fetch_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd(p, -((int32_t)x)) - x;
|
return (uint32_t)InterlockedExchangeAdd(p, -((int32_t)x)) - x;
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint32_t atomic_cas_uint32(uint32_t *v, uint32_t old, uint32_t _new)
|
ATOMIC_INLINE uint32_t atomic_cas_uint32(uint32_t *v, uint32_t old, uint32_t _new)
|
||||||
{
|
{
|
||||||
return InterlockedCompareExchange((long *)v, _new, old);
|
return (uint32_t)InterlockedCompareExchange((long *)v, _new, old);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
return InterlockedExchangeAdd(p, x);
|
return (uint32_t)InterlockedExchangeAdd(p, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint32_t atomic_fetch_and_or_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_fetch_and_or_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
return InterlockedOr((long *)p, x);
|
return (uint32_t)InterlockedOr((long *)p, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATOMIC_INLINE uint32_t atomic_fetch_and_and_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_fetch_and_and_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
return InterlockedAnd((long *)p, x);
|
return (uint32_t)InterlockedAnd((long *)p, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Signed */
|
/* Signed */
|
||||||
@@ -205,9 +205,9 @@ ATOMIC_INLINE uint8_t atomic_fetch_and_or_uint8(uint8_t *p, uint8_t b)
|
|||||||
ATOMIC_INLINE int8_t atomic_fetch_and_and_int8(int8_t *p, int8_t b)
|
ATOMIC_INLINE int8_t atomic_fetch_and_and_int8(int8_t *p, int8_t b)
|
||||||
{
|
{
|
||||||
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
||||||
return InterlockedAnd8((char *)p, (char)b);
|
return (int8_t)InterlockedAnd8((char *)p, (char)b);
|
||||||
#else
|
#else
|
||||||
return _InterlockedAnd8((char *)p, (char)b);
|
return (int8_t)_InterlockedAnd8((char *)p, (char)b);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,9 +215,9 @@ ATOMIC_INLINE int8_t atomic_fetch_and_and_int8(int8_t *p, int8_t b)
|
|||||||
ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b)
|
ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b)
|
||||||
{
|
{
|
||||||
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
||||||
return InterlockedOr8((char *)p, (char)b);
|
return (int8_t)InterlockedOr8((char *)p, (char)b);
|
||||||
#else
|
#else
|
||||||
return _InterlockedOr8((char *)p, (char)b);
|
return (int8_t)_InterlockedOr8((char *)p, (char)b);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -49,9 +49,9 @@
|
|||||||
|
|
||||||
#include "atomic_ops_utils.h"
|
#include "atomic_ops_utils.h"
|
||||||
|
|
||||||
#if defined(__arm__)
|
#if defined(__arm__) || defined(__riscv)
|
||||||
/* Attempt to fix compilation error on Debian armel kernel.
|
/* Attempt to fix compilation error on Debian armel and RISC-V kernels.
|
||||||
* arm7 architecture does have both 32 and 64bit atomics, however
|
* Both architectures do have both 32 and 64bit atomics, however
|
||||||
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
|
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
|
||||||
*/
|
*/
|
||||||
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
|
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
|
||||||
@@ -60,9 +60,108 @@
|
|||||||
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_8
|
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************************************************************/
|
/* Define the `ATOMIC_FORCE_USE_FALLBACK` to force lock-based fallback implementation to be used
|
||||||
/* 64-bit operations. */
|
* (even on platforms where there is native implementation available via compiler.
|
||||||
#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_8))
|
* Useful for development purposes. */
|
||||||
|
#undef ATOMIC_FORCE_USE_FALLBACK
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name Spin-lock implementation
|
||||||
|
*
|
||||||
|
* Used to implement atomics on unsupported platforms.
|
||||||
|
* The spin implementation is shared for all platforms to make sure it compiles and tested.
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
typedef struct AtomicSpinLock {
|
||||||
|
volatile int lock;
|
||||||
|
|
||||||
|
/* Pad the structure size to a cache-line, to avoid unwanted sharing with other data. */
|
||||||
|
int pad[32 - sizeof(int)];
|
||||||
|
} __attribute__((aligned(32))) AtomicSpinLock;
|
||||||
|
|
||||||
|
ATOMIC_INLINE void atomic_spin_lock(volatile AtomicSpinLock *lock)
|
||||||
|
{
|
||||||
|
while (__sync_lock_test_and_set(&lock->lock, 1)) {
|
||||||
|
while (lock->lock) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ATOMIC_INLINE void atomic_spin_unlock(volatile AtomicSpinLock *lock)
|
||||||
|
{
|
||||||
|
__sync_lock_release(&lock->lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** \} */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name Common part of locking fallback implementation
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
/* Global lock, shared by all atomic operations implementations.
|
||||||
|
*
|
||||||
|
* Could be split into per-size locks, although added complexity and being more error-proone does
|
||||||
|
* not seem to worth it for a fall-back implementation. */
|
||||||
|
static _ATOMIC_MAYBE_UNUSED AtomicSpinLock _atomic_global_lock = {0};
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_OP_AND_FETCH_DEFINE(_type, _op_name, _op) \
|
||||||
|
ATOMIC_INLINE _type##_t atomic_##_op_name##_and_fetch_##_type(_type##_t *p, _type##_t x) \
|
||||||
|
{ \
|
||||||
|
atomic_spin_lock(&_atomic_global_lock); \
|
||||||
|
const _type##_t original_value = *(p); \
|
||||||
|
const _type##_t new_value = original_value _op(x); \
|
||||||
|
*(p) = new_value; \
|
||||||
|
atomic_spin_unlock(&_atomic_global_lock); \
|
||||||
|
return new_value; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, _op_name, _op) \
|
||||||
|
ATOMIC_INLINE _type##_t atomic_fetch_and_##_op_name##_##_type(_type##_t *p, _type##_t x) \
|
||||||
|
{ \
|
||||||
|
atomic_spin_lock(&_atomic_global_lock); \
|
||||||
|
const _type##_t original_value = *(p); \
|
||||||
|
*(p) = original_value _op(x); \
|
||||||
|
atomic_spin_unlock(&_atomic_global_lock); \
|
||||||
|
return original_value; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE(_type) \
|
||||||
|
ATOMIC_LOCKING_OP_AND_FETCH_DEFINE(_type, add, +)
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE(_type) \
|
||||||
|
ATOMIC_LOCKING_OP_AND_FETCH_DEFINE(_type, sub, -)
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE(_type) \
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, add, +)
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE(_type) \
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, sub, -)
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(_type) ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, or, |)
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(_type) \
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, and, &)
|
||||||
|
|
||||||
|
#define ATOMIC_LOCKING_CAS_DEFINE(_type) \
|
||||||
|
ATOMIC_INLINE _type##_t atomic_cas_##_type(_type##_t *v, _type##_t old, _type##_t _new) \
|
||||||
|
{ \
|
||||||
|
atomic_spin_lock(&_atomic_global_lock); \
|
||||||
|
const _type##_t original_value = *v; \
|
||||||
|
if (*v == old) { \
|
||||||
|
*v = _new; \
|
||||||
|
} \
|
||||||
|
atomic_spin_unlock(&_atomic_global_lock); \
|
||||||
|
return original_value; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/** \} */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name 64-bit operations
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
#if !defined(ATOMIC_FORCE_USE_FALLBACK) && \
|
||||||
|
(defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_8))
|
||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint64_t atomic_add_and_fetch_uint64(uint64_t *p, uint64_t x)
|
ATOMIC_INLINE uint64_t atomic_add_and_fetch_uint64(uint64_t *p, uint64_t x)
|
||||||
{
|
{
|
||||||
@@ -115,7 +214,7 @@ ATOMIC_INLINE int64_t atomic_cas_int64(int64_t *v, int64_t old, int64_t _new)
|
|||||||
return __sync_val_compare_and_swap(v, old, _new);
|
return __sync_val_compare_and_swap(v, old, _new);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif (defined(__amd64__) || defined(__x86_64__))
|
#elif !defined(ATOMIC_FORCE_USE_FALLBACK) && (defined(__amd64__) || defined(__x86_64__))
|
||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x)
|
ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x)
|
||||||
{
|
{
|
||||||
@@ -190,12 +289,36 @@ ATOMIC_INLINE int64_t atomic_cas_int64(int64_t *v, int64_t old, int64_t _new)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
# error "Missing implementation for 64-bit atomic operations"
|
|
||||||
|
/* Unsigned */
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE(uint64)
|
||||||
|
ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE(uint64)
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE(uint64)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE(uint64)
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_CAS_DEFINE(uint64)
|
||||||
|
|
||||||
|
/* Signed */
|
||||||
|
ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE(int64)
|
||||||
|
ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE(int64)
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE(int64)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE(int64)
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_CAS_DEFINE(int64)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************************************************************/
|
/** \} */
|
||||||
/* 32-bit operations. */
|
|
||||||
#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_4))
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name 32-bit operations
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
#if !defined(ATOMIC_FORCE_USE_FALLBACK) && \
|
||||||
|
(defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_4))
|
||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
@@ -228,7 +351,8 @@ ATOMIC_INLINE int32_t atomic_cas_int32(int32_t *v, int32_t old, int32_t _new)
|
|||||||
return __sync_val_compare_and_swap(v, old, _new);
|
return __sync_val_compare_and_swap(v, old, _new);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif (defined(__i386__) || defined(__amd64__) || defined(__x86_64__))
|
#elif !defined(ATOMIC_FORCE_USE_FALLBACK) && \
|
||||||
|
(defined(__i386__) || defined(__amd64__) || defined(__x86_64__))
|
||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
@@ -286,10 +410,25 @@ ATOMIC_INLINE int32_t atomic_cas_int32(int32_t *v, int32_t old, int32_t _new)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# error "Missing implementation for 32-bit atomic operations"
|
|
||||||
|
/* Unsigned */
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE(uint32)
|
||||||
|
ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE(uint32)
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_CAS_DEFINE(uint32)
|
||||||
|
|
||||||
|
/* Signed */
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE(int32)
|
||||||
|
ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE(int32)
|
||||||
|
|
||||||
|
ATOMIC_LOCKING_CAS_DEFINE(int32)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_4))
|
#if !defined(ATOMIC_FORCE_USE_FALLBACK) && \
|
||||||
|
(defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_4))
|
||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
|
ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
|
||||||
{
|
{
|
||||||
@@ -323,12 +462,27 @@ ATOMIC_INLINE int32_t atomic_fetch_and_and_int32(int32_t *p, int32_t x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# error "Missing implementation for 32-bit atomic operations"
|
|
||||||
|
/* Unsigned */
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE(uint32)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(uint32)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(uint32)
|
||||||
|
|
||||||
|
/* Signed */
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE(int32)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(int32)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(int32)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************************************************************/
|
/** \} */
|
||||||
/* 16-bit operations. */
|
|
||||||
#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_2))
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name 16-bit operations
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
#if !defined(ATOMIC_FORCE_USE_FALLBACK) && \
|
||||||
|
(defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_2))
|
||||||
|
|
||||||
/* Signed */
|
/* Signed */
|
||||||
ATOMIC_INLINE int16_t atomic_fetch_and_and_int16(int16_t *p, int16_t b)
|
ATOMIC_INLINE int16_t atomic_fetch_and_and_int16(int16_t *p, int16_t b)
|
||||||
@@ -341,12 +495,21 @@ ATOMIC_INLINE int16_t atomic_fetch_and_or_int16(int16_t *p, int16_t b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# error "Missing implementation for 16-bit atomic operations"
|
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(int16)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(int16)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************************************************************/
|
/** \} */
|
||||||
/* 8-bit operations. */
|
|
||||||
#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_1))
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name 8-bit operations
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
#if !defined(ATOMIC_FORCE_USE_FALLBACK) && \
|
||||||
|
(defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) || defined(JE_FORCE_SYNC_COMPARE_AND_SWAP_1))
|
||||||
|
|
||||||
/* Unsigned */
|
/* Unsigned */
|
||||||
ATOMIC_INLINE uint8_t atomic_fetch_and_and_uint8(uint8_t *p, uint8_t b)
|
ATOMIC_INLINE uint8_t atomic_fetch_and_and_uint8(uint8_t *p, uint8_t b)
|
||||||
{
|
{
|
||||||
@@ -368,7 +531,27 @@ ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# error "Missing implementation for 8-bit atomic operations"
|
|
||||||
|
/* Unsigned */
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(uint8)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(uint8)
|
||||||
|
|
||||||
|
/* Signed */
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(int8)
|
||||||
|
ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(int8)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** \} */
|
||||||
|
|
||||||
|
#undef ATOMIC_LOCKING_OP_AND_FETCH_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_FETCH_AND_OP_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_FETCH_AND_OR_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_FETCH_AND_AND_DEFINE
|
||||||
|
#undef ATOMIC_LOCKING_CAS_DEFINE
|
||||||
|
|
||||||
#endif /* __ATOMIC_OPS_UNIX_H__ */
|
#endif /* __ATOMIC_OPS_UNIX_H__ */
|
||||||
|
@@ -64,9 +64,11 @@
|
|||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
# define _ATOMIC_LIKELY(x) __builtin_expect(!!(x), 1)
|
# define _ATOMIC_LIKELY(x) __builtin_expect(!!(x), 1)
|
||||||
# define _ATOMIC_UNLIKELY(x) __builtin_expect(!!(x), 0)
|
# define _ATOMIC_UNLIKELY(x) __builtin_expect(!!(x), 0)
|
||||||
|
# define _ATOMIC_MAYBE_UNUSED __attribute__((unused))
|
||||||
#else
|
#else
|
||||||
# define _ATOMIC_LIKELY(x) (x)
|
# define _ATOMIC_LIKELY(x) (x)
|
||||||
# define _ATOMIC_UNLIKELY(x) (x)
|
# define _ATOMIC_UNLIKELY(x) (x)
|
||||||
|
# define _ATOMIC_MAYBE_UNUSED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__SIZEOF_POINTER__)
|
#if defined(__SIZEOF_POINTER__)
|
||||||
|
@@ -307,9 +307,9 @@ if(WITH_CYCLES_LOGGING)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Debugging capabilities (debug passes etc).
|
# NaN debugging
|
||||||
if(WITH_CYCLES_DEBUG)
|
if(WITH_CYCLES_DEBUG_NAN)
|
||||||
add_definitions(-DWITH_CYCLES_DEBUG)
|
add_definitions(-DWITH_CYCLES_DEBUG_NAN)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT OPENIMAGEIO_PUGIXML_FOUND)
|
if(NOT OPENIMAGEIO_PUGIXML_FOUND)
|
||||||
|
@@ -115,6 +115,16 @@ if(WITH_OPENVDB)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_ALEMBIC)
|
||||||
|
add_definitions(-DWITH_ALEMBIC)
|
||||||
|
list(APPEND INC_SYS
|
||||||
|
${ALEMBIC_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
list(APPEND LIB
|
||||||
|
${ALEMBIC_LIBRARIES}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_OPENIMAGEDENOISE)
|
if(WITH_OPENIMAGEDENOISE)
|
||||||
add_definitions(-DWITH_OPENIMAGEDENOISE)
|
add_definitions(-DWITH_OPENIMAGEDENOISE)
|
||||||
list(APPEND INC_SYS
|
list(APPEND INC_SYS
|
||||||
|
@@ -61,6 +61,7 @@ class CyclesRender(bpy.types.RenderEngine):
|
|||||||
bl_use_save_buffers = True
|
bl_use_save_buffers = True
|
||||||
bl_use_spherical_stereo = True
|
bl_use_spherical_stereo = True
|
||||||
bl_use_custom_freestyle = True
|
bl_use_custom_freestyle = True
|
||||||
|
bl_use_alembic_procedural = True
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.session = None
|
self.session = None
|
||||||
|
@@ -235,9 +235,12 @@ def system_info():
|
|||||||
|
|
||||||
|
|
||||||
def list_render_passes(scene, srl):
|
def list_render_passes(scene, srl):
|
||||||
# Builtin Blender passes.
|
crl = srl.cycles
|
||||||
|
|
||||||
|
# Combined pass.
|
||||||
yield ("Combined", "RGBA", 'COLOR')
|
yield ("Combined", "RGBA", 'COLOR')
|
||||||
|
|
||||||
|
# Data passes.
|
||||||
if srl.use_pass_z: yield ("Depth", "Z", 'VALUE')
|
if srl.use_pass_z: yield ("Depth", "Z", 'VALUE')
|
||||||
if srl.use_pass_mist: yield ("Mist", "Z", 'VALUE')
|
if srl.use_pass_mist: yield ("Mist", "Z", 'VALUE')
|
||||||
if srl.use_pass_normal: yield ("Normal", "XYZ", 'VECTOR')
|
if srl.use_pass_normal: yield ("Normal", "XYZ", 'VECTOR')
|
||||||
@@ -245,8 +248,8 @@ def list_render_passes(scene, srl):
|
|||||||
if srl.use_pass_uv: yield ("UV", "UVA", 'VECTOR')
|
if srl.use_pass_uv: yield ("UV", "UVA", 'VECTOR')
|
||||||
if srl.use_pass_object_index: yield ("IndexOB", "X", 'VALUE')
|
if srl.use_pass_object_index: yield ("IndexOB", "X", 'VALUE')
|
||||||
if srl.use_pass_material_index: yield ("IndexMA", "X", 'VALUE')
|
if srl.use_pass_material_index: yield ("IndexMA", "X", 'VALUE')
|
||||||
if srl.use_pass_shadow: yield ("Shadow", "RGB", 'COLOR')
|
|
||||||
if srl.use_pass_ambient_occlusion: yield ("AO", "RGB", 'COLOR')
|
# Light passes.
|
||||||
if srl.use_pass_diffuse_direct: yield ("DiffDir", "RGB", 'COLOR')
|
if srl.use_pass_diffuse_direct: yield ("DiffDir", "RGB", 'COLOR')
|
||||||
if srl.use_pass_diffuse_indirect: yield ("DiffInd", "RGB", 'COLOR')
|
if srl.use_pass_diffuse_indirect: yield ("DiffInd", "RGB", 'COLOR')
|
||||||
if srl.use_pass_diffuse_color: yield ("DiffCol", "RGB", 'COLOR')
|
if srl.use_pass_diffuse_color: yield ("DiffCol", "RGB", 'COLOR')
|
||||||
@@ -256,19 +259,16 @@ def list_render_passes(scene, srl):
|
|||||||
if srl.use_pass_transmission_direct: yield ("TransDir", "RGB", 'COLOR')
|
if srl.use_pass_transmission_direct: yield ("TransDir", "RGB", 'COLOR')
|
||||||
if srl.use_pass_transmission_indirect: yield ("TransInd", "RGB", 'COLOR')
|
if srl.use_pass_transmission_indirect: yield ("TransInd", "RGB", 'COLOR')
|
||||||
if srl.use_pass_transmission_color: yield ("TransCol", "RGB", 'COLOR')
|
if srl.use_pass_transmission_color: yield ("TransCol", "RGB", 'COLOR')
|
||||||
if srl.use_pass_emit: yield ("Emit", "RGB", 'COLOR')
|
|
||||||
if srl.use_pass_environment: yield ("Env", "RGB", 'COLOR')
|
|
||||||
|
|
||||||
# Cycles specific passes.
|
|
||||||
crl = srl.cycles
|
|
||||||
if crl.pass_debug_render_time: yield ("Debug Render Time", "X", 'VALUE')
|
|
||||||
if crl.pass_debug_bvh_traversed_nodes: yield ("Debug BVH Traversed Nodes", "X", 'VALUE')
|
|
||||||
if crl.pass_debug_bvh_traversed_instances: yield ("Debug BVH Traversed Instances", "X", 'VALUE')
|
|
||||||
if crl.pass_debug_bvh_intersections: yield ("Debug BVH Intersections", "X", 'VALUE')
|
|
||||||
if crl.pass_debug_ray_bounces: yield ("Debug Ray Bounces", "X", 'VALUE')
|
|
||||||
if crl.pass_debug_sample_count: yield ("Debug Sample Count", "X", 'VALUE')
|
|
||||||
if crl.use_pass_volume_direct: yield ("VolumeDir", "RGB", 'COLOR')
|
if crl.use_pass_volume_direct: yield ("VolumeDir", "RGB", 'COLOR')
|
||||||
if crl.use_pass_volume_indirect: yield ("VolumeInd", "RGB", 'COLOR')
|
if crl.use_pass_volume_indirect: yield ("VolumeInd", "RGB", 'COLOR')
|
||||||
|
if srl.use_pass_emit: yield ("Emit", "RGB", 'COLOR')
|
||||||
|
if srl.use_pass_environment: yield ("Env", "RGB", 'COLOR')
|
||||||
|
if srl.use_pass_shadow: yield ("Shadow", "RGB", 'COLOR')
|
||||||
|
if srl.use_pass_ambient_occlusion: yield ("AO", "RGB", 'COLOR')
|
||||||
|
|
||||||
|
# Debug passes.
|
||||||
|
if crl.pass_debug_render_time: yield ("Debug Render Time", "X", 'VALUE')
|
||||||
|
if crl.pass_debug_sample_count: yield ("Debug Sample Count", "X", 'VALUE')
|
||||||
|
|
||||||
# Cryptomatte passes.
|
# Cryptomatte passes.
|
||||||
crypto_depth = (srl.pass_cryptomatte_depth + 1) // 2
|
crypto_depth = (srl.pass_cryptomatte_depth + 1) // 2
|
||||||
|
@@ -227,6 +227,11 @@ def update_render_passes(self, context):
|
|||||||
view_layer.update_render_passes()
|
view_layer.update_render_passes()
|
||||||
|
|
||||||
|
|
||||||
|
def update_render_engine(self, context):
|
||||||
|
scene = context.scene
|
||||||
|
scene.update_render_engine()
|
||||||
|
|
||||||
|
|
||||||
class CyclesRenderSettings(bpy.types.PropertyGroup):
|
class CyclesRenderSettings(bpy.types.PropertyGroup):
|
||||||
|
|
||||||
device: EnumProperty(
|
device: EnumProperty(
|
||||||
@@ -240,6 +245,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
description="Feature set to use for rendering",
|
description="Feature set to use for rendering",
|
||||||
items=enum_feature_set,
|
items=enum_feature_set,
|
||||||
default='SUPPORTED',
|
default='SUPPORTED',
|
||||||
|
update=update_render_engine,
|
||||||
)
|
)
|
||||||
shading_system: BoolProperty(
|
shading_system: BoolProperty(
|
||||||
name="Open Shading Language",
|
name="Open Shading Language",
|
||||||
@@ -263,6 +269,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
name="Use Denoising",
|
name="Use Denoising",
|
||||||
description="Denoise the rendered image",
|
description="Denoise the rendered image",
|
||||||
default=False,
|
default=False,
|
||||||
|
update=update_render_passes,
|
||||||
)
|
)
|
||||||
use_preview_denoising: BoolProperty(
|
use_preview_denoising: BoolProperty(
|
||||||
name="Use Viewport Denoising",
|
name="Use Viewport Denoising",
|
||||||
@@ -401,7 +408,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
adaptive_threshold: FloatProperty(
|
adaptive_threshold: FloatProperty(
|
||||||
name="Adaptive Sampling Threshold",
|
name="Adaptive Sampling Threshold",
|
||||||
description="Noise level step to stop sampling at, lower values reduce noise the cost of render time. Zero for automatic setting based on number of AA samples",
|
description="Noise level step to stop sampling at, lower values reduce noise at the cost of render time. Zero for automatic setting based on number of AA samples",
|
||||||
min=0.0, max=1.0,
|
min=0.0, max=1.0,
|
||||||
default=0.0,
|
default=0.0,
|
||||||
precision=4,
|
precision=4,
|
||||||
@@ -482,7 +489,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
transparent_max_bounces: IntProperty(
|
transparent_max_bounces: IntProperty(
|
||||||
name="Transparent Max Bounces",
|
name="Transparent Max Bounces",
|
||||||
description="Maximum number of transparent bounces",
|
description="Maximum number of transparent bounces. This is independent of maximum number of other bounces ",
|
||||||
min=0, max=1024,
|
min=0, max=1024,
|
||||||
default=8,
|
default=8,
|
||||||
)
|
)
|
||||||
@@ -1163,12 +1170,6 @@ class CyclesVisibilitySettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def register(cls):
|
def register(cls):
|
||||||
bpy.types.Object.cycles_visibility = PointerProperty(
|
|
||||||
name="Cycles Visibility Settings",
|
|
||||||
description="Cycles visibility settings",
|
|
||||||
type=cls,
|
|
||||||
)
|
|
||||||
|
|
||||||
bpy.types.World.cycles_visibility = PointerProperty(
|
bpy.types.World.cycles_visibility = PointerProperty(
|
||||||
name="Cycles Visibility Settings",
|
name="Cycles Visibility Settings",
|
||||||
description="Cycles visibility settings",
|
description="Cycles visibility settings",
|
||||||
@@ -1177,7 +1178,6 @@ class CyclesVisibilitySettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def unregister(cls):
|
def unregister(cls):
|
||||||
del bpy.types.Object.cycles_visibility
|
|
||||||
del bpy.types.World.cycles_visibility
|
del bpy.types.World.cycles_visibility
|
||||||
|
|
||||||
|
|
||||||
@@ -1267,18 +1267,12 @@ class CyclesObjectSettings(bpy.types.PropertyGroup):
|
|||||||
default=0.1,
|
default=0.1,
|
||||||
)
|
)
|
||||||
|
|
||||||
is_shadow_catcher: BoolProperty(
|
ao_distance: FloatProperty(
|
||||||
name="Shadow Catcher",
|
name="AO Distance",
|
||||||
description="Only render shadows on this object, for compositing renders into real footage",
|
description="AO distance used for approximate global illumination (0 means use world setting)",
|
||||||
default=False,
|
min=0.0,
|
||||||
)
|
default=0.0,
|
||||||
|
subtype='DISTANCE',
|
||||||
is_holdout: BoolProperty(
|
|
||||||
name="Holdout",
|
|
||||||
description="Render objects as a holdout or matte, creating a "
|
|
||||||
"hole in the image with zero alpha, to fill out in "
|
|
||||||
"compositing with real footage or another render",
|
|
||||||
default=False,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -1324,30 +1318,6 @@ class CyclesCurveRenderSettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
|
class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
|
||||||
|
|
||||||
pass_debug_bvh_traversed_nodes: BoolProperty(
|
|
||||||
name="Debug BVH Traversed Nodes",
|
|
||||||
description="Store Debug BVH Traversed Nodes pass",
|
|
||||||
default=False,
|
|
||||||
update=update_render_passes,
|
|
||||||
)
|
|
||||||
pass_debug_bvh_traversed_instances: BoolProperty(
|
|
||||||
name="Debug BVH Traversed Instances",
|
|
||||||
description="Store Debug BVH Traversed Instances pass",
|
|
||||||
default=False,
|
|
||||||
update=update_render_passes,
|
|
||||||
)
|
|
||||||
pass_debug_bvh_intersections: BoolProperty(
|
|
||||||
name="Debug BVH Intersections",
|
|
||||||
description="Store Debug BVH Intersections",
|
|
||||||
default=False,
|
|
||||||
update=update_render_passes,
|
|
||||||
)
|
|
||||||
pass_debug_ray_bounces: BoolProperty(
|
|
||||||
name="Debug Ray Bounces",
|
|
||||||
description="Store Debug Ray Bounces pass",
|
|
||||||
default=False,
|
|
||||||
update=update_render_passes,
|
|
||||||
)
|
|
||||||
pass_debug_render_time: BoolProperty(
|
pass_debug_render_time: BoolProperty(
|
||||||
name="Debug Render Time",
|
name="Debug Render Time",
|
||||||
description="Render time in milliseconds per sample and pixel",
|
description="Render time in milliseconds per sample and pixel",
|
||||||
|
@@ -485,10 +485,12 @@ class CYCLES_RENDER_PT_light_paths_max_bounces(CyclesButtonsPanel, Panel):
|
|||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.prop(cscene, "diffuse_bounces", text="Diffuse")
|
col.prop(cscene, "diffuse_bounces", text="Diffuse")
|
||||||
col.prop(cscene, "glossy_bounces", text="Glossy")
|
col.prop(cscene, "glossy_bounces", text="Glossy")
|
||||||
col.prop(cscene, "transparent_max_bounces", text="Transparency")
|
|
||||||
col.prop(cscene, "transmission_bounces", text="Transmission")
|
col.prop(cscene, "transmission_bounces", text="Transmission")
|
||||||
col.prop(cscene, "volume_bounces", text="Volume")
|
col.prop(cscene, "volume_bounces", text="Volume")
|
||||||
|
|
||||||
|
col = layout.column(align=True)
|
||||||
|
col.prop(cscene, "transparent_max_bounces", text="Transparent")
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_light_paths_clamping(CyclesButtonsPanel, Panel):
|
class CYCLES_RENDER_PT_light_paths_clamping(CyclesButtonsPanel, Panel):
|
||||||
bl_label = "Clamping"
|
bl_label = "Clamping"
|
||||||
@@ -934,29 +936,6 @@ class CYCLES_RENDER_PT_passes_crypto(CyclesButtonsPanel, ViewLayerCryptomattePan
|
|||||||
bl_parent_id = "CYCLES_RENDER_PT_passes"
|
bl_parent_id = "CYCLES_RENDER_PT_passes"
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_passes_debug(CyclesButtonsPanel, Panel):
|
|
||||||
bl_label = "Debug"
|
|
||||||
bl_context = "view_layer"
|
|
||||||
bl_parent_id = "CYCLES_RENDER_PT_passes"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def poll(cls, context):
|
|
||||||
import _cycles
|
|
||||||
return _cycles.with_cycles_debug
|
|
||||||
|
|
||||||
def draw(self, context):
|
|
||||||
layout = self.layout
|
|
||||||
layout.use_property_split = True
|
|
||||||
layout.use_property_decorate = False
|
|
||||||
|
|
||||||
cycles_view_layer = context.view_layer.cycles
|
|
||||||
|
|
||||||
layout.prop(cycles_view_layer, "pass_debug_bvh_traversed_nodes")
|
|
||||||
layout.prop(cycles_view_layer, "pass_debug_bvh_traversed_instances")
|
|
||||||
layout.prop(cycles_view_layer, "pass_debug_bvh_intersections")
|
|
||||||
layout.prop(cycles_view_layer, "pass_debug_ray_bounces")
|
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_passes_aov(CyclesButtonsPanel, ViewLayerAOVPanel):
|
class CYCLES_RENDER_PT_passes_aov(CyclesButtonsPanel, ViewLayerAOVPanel):
|
||||||
bl_label = "Shader AOV"
|
bl_label = "Shader AOV"
|
||||||
bl_context = "view_layer"
|
bl_context = "view_layer"
|
||||||
@@ -1123,7 +1102,7 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
|
|
||||||
if ob:
|
if ob:
|
||||||
is_sortable = len(ob.material_slots) > 1
|
is_sortable = len(ob.material_slots) > 1
|
||||||
rows = 1
|
rows = 3
|
||||||
if (is_sortable):
|
if (is_sortable):
|
||||||
rows = 4
|
rows = 4
|
||||||
|
|
||||||
@@ -1134,7 +1113,7 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
col = row.column(align=True)
|
col = row.column(align=True)
|
||||||
col.operator("object.material_slot_add", icon='ADD', text="")
|
col.operator("object.material_slot_add", icon='ADD', text="")
|
||||||
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
||||||
|
col.separator()
|
||||||
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
||||||
|
|
||||||
if is_sortable:
|
if is_sortable:
|
||||||
@@ -1149,16 +1128,15 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
row.operator("object.material_slot_select", text="Select")
|
row.operator("object.material_slot_select", text="Select")
|
||||||
row.operator("object.material_slot_deselect", text="Deselect")
|
row.operator("object.material_slot_deselect", text="Deselect")
|
||||||
|
|
||||||
split = layout.split(factor=0.65)
|
row = layout.row()
|
||||||
|
|
||||||
if ob:
|
if ob:
|
||||||
split.template_ID(ob, "active_material", new="material.new")
|
row.template_ID(ob, "active_material", new="material.new")
|
||||||
row = split.row()
|
|
||||||
|
|
||||||
if slot:
|
if slot:
|
||||||
row.prop(slot, "link", text="")
|
icon_link = 'MESH_DATA' if slot.link == 'DATA' else 'OBJECT_DATA'
|
||||||
else:
|
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
||||||
row.label()
|
|
||||||
elif mat:
|
elif mat:
|
||||||
split.template_ID(space, "pin_id")
|
split.template_ID(space, "pin_id")
|
||||||
split.separator()
|
split.separator()
|
||||||
@@ -1250,6 +1228,26 @@ class CYCLES_OBJECT_PT_shading_shadow_terminator(CyclesButtonsPanel, Panel):
|
|||||||
flow.prop(cob, "shadow_terminator_offset", text="Shading Offset")
|
flow.prop(cob, "shadow_terminator_offset", text="Shading Offset")
|
||||||
|
|
||||||
|
|
||||||
|
class CYCLES_OBJECT_PT_shading_gi_approximation(CyclesButtonsPanel, Panel):
|
||||||
|
bl_label = "Fast GI Approximation"
|
||||||
|
bl_parent_id = "CYCLES_OBJECT_PT_shading"
|
||||||
|
bl_context = "object"
|
||||||
|
|
||||||
|
def draw(self, context):
|
||||||
|
layout = self.layout
|
||||||
|
layout.use_property_split = True
|
||||||
|
|
||||||
|
scene = context.scene
|
||||||
|
ob = context.object
|
||||||
|
|
||||||
|
cob = ob.cycles
|
||||||
|
cscene = scene.cycles
|
||||||
|
|
||||||
|
col = layout.column()
|
||||||
|
col.active = cscene.use_fast_gi
|
||||||
|
col.prop(cob, "ao_distance")
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_OBJECT_PT_visibility(CyclesButtonsPanel, Panel):
|
class CYCLES_OBJECT_PT_visibility(CyclesButtonsPanel, Panel):
|
||||||
bl_label = "Visibility"
|
bl_label = "Visibility"
|
||||||
bl_context = "object"
|
bl_context = "object"
|
||||||
@@ -1272,10 +1270,9 @@ class CYCLES_OBJECT_PT_visibility(CyclesButtonsPanel, Panel):
|
|||||||
col.prop(ob, "hide_render", text="Renders", invert_checkbox=True, toggle=False)
|
col.prop(ob, "hide_render", text="Renders", invert_checkbox=True, toggle=False)
|
||||||
|
|
||||||
if has_geometry_visibility(ob):
|
if has_geometry_visibility(ob):
|
||||||
cob = ob.cycles
|
|
||||||
col = layout.column(heading="Mask")
|
col = layout.column(heading="Mask")
|
||||||
col.prop(cob, "is_shadow_catcher")
|
col.prop(ob, "is_shadow_catcher")
|
||||||
col.prop(cob, "is_holdout")
|
col.prop(ob, "is_holdout")
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_OBJECT_PT_visibility_ray_visibility(CyclesButtonsPanel, Panel):
|
class CYCLES_OBJECT_PT_visibility_ray_visibility(CyclesButtonsPanel, Panel):
|
||||||
@@ -1295,19 +1292,17 @@ class CYCLES_OBJECT_PT_visibility_ray_visibility(CyclesButtonsPanel, Panel):
|
|||||||
|
|
||||||
scene = context.scene
|
scene = context.scene
|
||||||
ob = context.object
|
ob = context.object
|
||||||
cob = ob.cycles
|
|
||||||
visibility = ob.cycles_visibility
|
|
||||||
|
|
||||||
col = layout.column()
|
col = layout.column()
|
||||||
col.prop(visibility, "camera")
|
col.prop(ob, "visible_camera", text="Camera")
|
||||||
col.prop(visibility, "diffuse")
|
col.prop(ob, "visible_diffuse", text="Diffuse")
|
||||||
col.prop(visibility, "glossy")
|
col.prop(ob, "visible_glossy", text="Glossy")
|
||||||
col.prop(visibility, "transmission")
|
col.prop(ob, "visible_transmission", text="Transmission")
|
||||||
col.prop(visibility, "scatter")
|
col.prop(ob, "visible_volume_scatter", text="Volume Scatter")
|
||||||
|
|
||||||
if ob.type != 'LIGHT':
|
if ob.type != 'LIGHT':
|
||||||
sub = col.column()
|
sub = col.column()
|
||||||
sub.prop(visibility, "shadow")
|
sub.prop(ob, "visible_shadow", text="Shadow")
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_OBJECT_PT_visibility_culling(CyclesButtonsPanel, Panel):
|
class CYCLES_OBJECT_PT_visibility_culling(CyclesButtonsPanel, Panel):
|
||||||
@@ -2316,7 +2311,6 @@ classes = (
|
|||||||
CYCLES_RENDER_PT_passes_data,
|
CYCLES_RENDER_PT_passes_data,
|
||||||
CYCLES_RENDER_PT_passes_light,
|
CYCLES_RENDER_PT_passes_light,
|
||||||
CYCLES_RENDER_PT_passes_crypto,
|
CYCLES_RENDER_PT_passes_crypto,
|
||||||
CYCLES_RENDER_PT_passes_debug,
|
|
||||||
CYCLES_RENDER_PT_passes_aov,
|
CYCLES_RENDER_PT_passes_aov,
|
||||||
CYCLES_RENDER_PT_filter,
|
CYCLES_RENDER_PT_filter,
|
||||||
CYCLES_RENDER_PT_override,
|
CYCLES_RENDER_PT_override,
|
||||||
@@ -2328,6 +2322,7 @@ classes = (
|
|||||||
CYCLES_OBJECT_PT_motion_blur,
|
CYCLES_OBJECT_PT_motion_blur,
|
||||||
CYCLES_OBJECT_PT_shading,
|
CYCLES_OBJECT_PT_shading,
|
||||||
CYCLES_OBJECT_PT_shading_shadow_terminator,
|
CYCLES_OBJECT_PT_shading_shadow_terminator,
|
||||||
|
CYCLES_OBJECT_PT_shading_gi_approximation,
|
||||||
CYCLES_OBJECT_PT_visibility,
|
CYCLES_OBJECT_PT_visibility,
|
||||||
CYCLES_OBJECT_PT_visibility_ray_visibility,
|
CYCLES_OBJECT_PT_visibility_ray_visibility,
|
||||||
CYCLES_OBJECT_PT_visibility_culling,
|
CYCLES_OBJECT_PT_visibility_culling,
|
||||||
|
@@ -526,8 +526,13 @@ bool BlenderSync::object_has_particle_hair(BL::Object b_ob)
|
|||||||
|
|
||||||
/* Old particle hair. */
|
/* Old particle hair. */
|
||||||
void BlenderSync::sync_particle_hair(
|
void BlenderSync::sync_particle_hair(
|
||||||
Hair *hair, BL::Mesh &b_mesh, BL::Object &b_ob, bool motion, int motion_step)
|
Hair *hair, BL::Mesh &b_mesh, BObjectInfo &b_ob_info, bool motion, int motion_step)
|
||||||
{
|
{
|
||||||
|
if (!b_ob_info.is_real_object_data()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BL::Object b_ob = b_ob_info.real_object;
|
||||||
|
|
||||||
/* obtain general settings */
|
/* obtain general settings */
|
||||||
if (b_ob.mode() == b_ob.mode_PARTICLE_EDIT || b_ob.mode() == b_ob.mode_EDIT) {
|
if (b_ob.mode() == b_ob.mode_PARTICLE_EDIT || b_ob.mode() == b_ob.mode_EDIT) {
|
||||||
return;
|
return;
|
||||||
@@ -788,10 +793,10 @@ static void export_hair_curves_motion(Hair *hair, BL::Hair b_hair, int motion_st
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Hair object. */
|
/* Hair object. */
|
||||||
void BlenderSync::sync_hair(Hair *hair, BL::Object &b_ob, bool motion, int motion_step)
|
void BlenderSync::sync_hair(Hair *hair, BObjectInfo &b_ob_info, bool motion, int motion_step)
|
||||||
{
|
{
|
||||||
/* Convert Blender hair to Cycles curves. */
|
/* Convert Blender hair to Cycles curves. */
|
||||||
BL::Hair b_hair(b_ob.data());
|
BL::Hair b_hair(b_ob_info.object_data);
|
||||||
if (motion) {
|
if (motion) {
|
||||||
export_hair_curves_motion(hair, b_hair, motion_step);
|
export_hair_curves_motion(hair, b_hair, motion_step);
|
||||||
}
|
}
|
||||||
@@ -800,16 +805,16 @@ void BlenderSync::sync_hair(Hair *hair, BL::Object &b_ob, bool motion, int motio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void BlenderSync::sync_hair(Hair *hair, BL::Object &b_ob, bool motion, int motion_step)
|
void BlenderSync::sync_hair(Hair *hair, BObjectInfo &b_ob_info, bool motion, int motion_step)
|
||||||
{
|
{
|
||||||
(void)hair;
|
(void)hair;
|
||||||
(void)b_ob;
|
(void)b_ob_info;
|
||||||
(void)motion;
|
(void)motion;
|
||||||
(void)motion_step;
|
(void)motion_step;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BL::Object b_ob, Hair *hair)
|
void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, Hair *hair)
|
||||||
{
|
{
|
||||||
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
||||||
* attributes */
|
* attributes */
|
||||||
@@ -819,19 +824,19 @@ void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BL::Object b_ob, Hair *ha
|
|||||||
new_hair.set_used_shaders(used_shaders);
|
new_hair.set_used_shaders(used_shaders);
|
||||||
|
|
||||||
if (view_layer.use_hair) {
|
if (view_layer.use_hair) {
|
||||||
if (b_ob.type() == BL::Object::type_HAIR) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair)) {
|
||||||
/* Hair object. */
|
/* Hair object. */
|
||||||
sync_hair(&new_hair, b_ob, false);
|
sync_hair(&new_hair, b_ob_info, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Particle hair. */
|
/* Particle hair. */
|
||||||
bool need_undeformed = new_hair.need_attribute(scene, ATTR_STD_GENERATED);
|
bool need_undeformed = new_hair.need_attribute(scene, ATTR_STD_GENERATED);
|
||||||
BL::Mesh b_mesh = object_to_mesh(
|
BL::Mesh b_mesh = object_to_mesh(
|
||||||
b_data, b_ob, b_depsgraph, need_undeformed, Mesh::SUBDIVISION_NONE);
|
b_data, b_ob_info, b_depsgraph, need_undeformed, Mesh::SUBDIVISION_NONE);
|
||||||
|
|
||||||
if (b_mesh) {
|
if (b_mesh) {
|
||||||
sync_particle_hair(&new_hair, b_mesh, b_ob, false);
|
sync_particle_hair(&new_hair, b_mesh, b_ob_info, false);
|
||||||
free_object_to_mesh(b_data, b_ob, b_mesh);
|
free_object_to_mesh(b_data, b_ob_info, b_mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -859,7 +864,7 @@ void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BL::Object b_ob, Hair *ha
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSync::sync_hair_motion(BL::Depsgraph b_depsgraph,
|
void BlenderSync::sync_hair_motion(BL::Depsgraph b_depsgraph,
|
||||||
BL::Object b_ob,
|
BObjectInfo &b_ob_info,
|
||||||
Hair *hair,
|
Hair *hair,
|
||||||
int motion_step)
|
int motion_step)
|
||||||
{
|
{
|
||||||
@@ -869,18 +874,19 @@ void BlenderSync::sync_hair_motion(BL::Depsgraph b_depsgraph,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Export deformed coordinates. */
|
/* Export deformed coordinates. */
|
||||||
if (ccl::BKE_object_is_deform_modified(b_ob, b_scene, preview)) {
|
if (ccl::BKE_object_is_deform_modified(b_ob_info, b_scene, preview)) {
|
||||||
if (b_ob.type() == BL::Object::type_HAIR) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair)) {
|
||||||
/* Hair object. */
|
/* Hair object. */
|
||||||
sync_hair(hair, b_ob, true, motion_step);
|
sync_hair(hair, b_ob_info, true, motion_step);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Particle hair. */
|
/* Particle hair. */
|
||||||
BL::Mesh b_mesh = object_to_mesh(b_data, b_ob, b_depsgraph, false, Mesh::SUBDIVISION_NONE);
|
BL::Mesh b_mesh = object_to_mesh(
|
||||||
|
b_data, b_ob_info, b_depsgraph, false, Mesh::SUBDIVISION_NONE);
|
||||||
if (b_mesh) {
|
if (b_mesh) {
|
||||||
sync_particle_hair(hair, b_mesh, b_ob, true, motion_step);
|
sync_particle_hair(hair, b_mesh, b_ob_info, true, motion_step);
|
||||||
free_object_to_mesh(b_data, b_ob, b_mesh);
|
free_object_to_mesh(b_data, b_ob_info, b_mesh);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -29,13 +29,15 @@
|
|||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
static Geometry::Type determine_geom_type(BL::Object &b_ob, bool use_particle_hair)
|
static Geometry::Type determine_geom_type(BObjectInfo &b_ob_info, bool use_particle_hair)
|
||||||
{
|
{
|
||||||
if (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair) || use_particle_hair) {
|
||||||
return Geometry::HAIR;
|
return Geometry::HAIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b_ob.type() == BL::Object::type_VOLUME || object_fluid_gas_domain_find(b_ob)) {
|
if (b_ob_info.object_data.is_a(&RNA_Volume) ||
|
||||||
|
(b_ob_info.object_data == b_ob_info.real_object.data() &&
|
||||||
|
object_fluid_gas_domain_find(b_ob_info.real_object))) {
|
||||||
return Geometry::VOLUME;
|
return Geometry::VOLUME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,20 +73,17 @@ array<Node *> BlenderSync::find_used_shaders(BL::Object &b_ob)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
||||||
BL::Object &b_ob,
|
BObjectInfo &b_ob_info,
|
||||||
BL::Object &b_ob_instance,
|
|
||||||
bool object_updated,
|
bool object_updated,
|
||||||
bool use_particle_hair,
|
bool use_particle_hair,
|
||||||
TaskPool *task_pool)
|
TaskPool *task_pool)
|
||||||
{
|
{
|
||||||
/* Test if we can instance or if the object is modified. */
|
/* Test if we can instance or if the object is modified. */
|
||||||
BL::ID b_ob_data = b_ob.data();
|
Geometry::Type geom_type = determine_geom_type(b_ob_info, use_particle_hair);
|
||||||
BL::ID b_key_id = (BKE_object_is_modified(b_ob)) ? b_ob_instance : b_ob_data;
|
GeometryKey key(b_ob_info.object_data, geom_type);
|
||||||
Geometry::Type geom_type = determine_geom_type(b_ob, use_particle_hair);
|
|
||||||
GeometryKey key(b_key_id.ptr.data, geom_type);
|
|
||||||
|
|
||||||
/* Find shader indices. */
|
/* Find shader indices. */
|
||||||
array<Node *> used_shaders = find_used_shaders(b_ob);
|
array<Node *> used_shaders = find_used_shaders(b_ob_info.iter_object);
|
||||||
|
|
||||||
/* Ensure we only sync instanced geometry once. */
|
/* Ensure we only sync instanced geometry once. */
|
||||||
Geometry *geom = geometry_map.find(key);
|
Geometry *geom = geometry_map.find(key);
|
||||||
@@ -111,7 +110,7 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Test if we need to update existing geometry. */
|
/* Test if we need to update existing geometry. */
|
||||||
sync = geometry_map.update(geom, b_key_id);
|
sync = geometry_map.update(geom, b_ob_info.object_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sync) {
|
if (!sync) {
|
||||||
@@ -144,7 +143,7 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
|||||||
|
|
||||||
geometry_synced.insert(geom);
|
geometry_synced.insert(geom);
|
||||||
|
|
||||||
geom->name = ustring(b_ob_data.name().c_str());
|
geom->name = ustring(b_ob_info.object_data.name().c_str());
|
||||||
|
|
||||||
/* Store the shaders immediately for the object attribute code. */
|
/* Store the shaders immediately for the object attribute code. */
|
||||||
geom->set_used_shaders(used_shaders);
|
geom->set_used_shaders(used_shaders);
|
||||||
@@ -153,19 +152,19 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
|||||||
if (progress.get_cancel())
|
if (progress.get_cancel())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
progress.set_sync_status("Synchronizing object", b_ob.name());
|
progress.set_sync_status("Synchronizing object", b_ob_info.real_object.name());
|
||||||
|
|
||||||
if (geom_type == Geometry::HAIR) {
|
if (geom_type == Geometry::HAIR) {
|
||||||
Hair *hair = static_cast<Hair *>(geom);
|
Hair *hair = static_cast<Hair *>(geom);
|
||||||
sync_hair(b_depsgraph, b_ob, hair);
|
sync_hair(b_depsgraph, b_ob_info, hair);
|
||||||
}
|
}
|
||||||
else if (geom_type == Geometry::VOLUME) {
|
else if (geom_type == Geometry::VOLUME) {
|
||||||
Volume *volume = static_cast<Volume *>(geom);
|
Volume *volume = static_cast<Volume *>(geom);
|
||||||
sync_volume(b_ob, volume);
|
sync_volume(b_ob_info, volume);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Mesh *mesh = static_cast<Mesh *>(geom);
|
Mesh *mesh = static_cast<Mesh *>(geom);
|
||||||
sync_mesh(b_depsgraph, b_ob, mesh);
|
sync_mesh(b_depsgraph, b_ob_info, mesh);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -181,7 +180,7 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
||||||
BL::Object &b_ob,
|
BObjectInfo &b_ob_info,
|
||||||
Object *object,
|
Object *object,
|
||||||
float motion_time,
|
float motion_time,
|
||||||
bool use_particle_hair,
|
bool use_particle_hair,
|
||||||
@@ -190,8 +189,10 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
|||||||
/* Ensure we only sync instanced geometry once. */
|
/* Ensure we only sync instanced geometry once. */
|
||||||
Geometry *geom = object->get_geometry();
|
Geometry *geom = object->get_geometry();
|
||||||
|
|
||||||
if (geometry_motion_synced.find(geom) != geometry_motion_synced.end())
|
if (geometry_motion_synced.find(geom) != geometry_motion_synced.end() ||
|
||||||
|
geometry_motion_attribute_synced.find(geom) != geometry_motion_attribute_synced.end()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
geometry_motion_synced.insert(geom);
|
geometry_motion_synced.insert(geom);
|
||||||
|
|
||||||
@@ -210,16 +211,17 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
|||||||
if (progress.get_cancel())
|
if (progress.get_cancel())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair) || use_particle_hair) {
|
||||||
Hair *hair = static_cast<Hair *>(geom);
|
Hair *hair = static_cast<Hair *>(geom);
|
||||||
sync_hair_motion(b_depsgraph, b_ob, hair, motion_step);
|
sync_hair_motion(b_depsgraph, b_ob_info, hair, motion_step);
|
||||||
}
|
}
|
||||||
else if (b_ob.type() == BL::Object::type_VOLUME || object_fluid_gas_domain_find(b_ob)) {
|
else if (b_ob_info.object_data.is_a(&RNA_Volume) ||
|
||||||
|
object_fluid_gas_domain_find(b_ob_info.real_object)) {
|
||||||
/* No volume motion blur support yet. */
|
/* No volume motion blur support yet. */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Mesh *mesh = static_cast<Mesh *>(geom);
|
Mesh *mesh = static_cast<Mesh *>(geom);
|
||||||
sync_mesh_motion(b_depsgraph, b_ob, mesh, motion_step);
|
sync_mesh_motion(b_depsgraph, b_ob_info, mesh, motion_step);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -137,9 +137,9 @@ bool BlenderImageLoader::load_pixels(const ImageMetaData &metadata,
|
|||||||
/* Premultiply, byte images are always straight for Blender. */
|
/* Premultiply, byte images are always straight for Blender. */
|
||||||
unsigned char *cp = (unsigned char *)pixels;
|
unsigned char *cp = (unsigned char *)pixels;
|
||||||
for (size_t i = 0; i < num_pixels; i++, cp += channels) {
|
for (size_t i = 0; i < num_pixels; i++, cp += channels) {
|
||||||
cp[0] = (cp[0] * cp[3]) >> 8;
|
cp[0] = (cp[0] * cp[3]) / 255;
|
||||||
cp[1] = (cp[1] * cp[3]) >> 8;
|
cp[1] = (cp[1] * cp[3]) / 255;
|
||||||
cp[2] = (cp[2] * cp[3]) >> 8;
|
cp[2] = (cp[2] * cp[3]) / 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,15 +27,14 @@ CCL_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
void BlenderSync::sync_light(BL::Object &b_parent,
|
void BlenderSync::sync_light(BL::Object &b_parent,
|
||||||
int persistent_id[OBJECT_PERSISTENT_ID_SIZE],
|
int persistent_id[OBJECT_PERSISTENT_ID_SIZE],
|
||||||
BL::Object &b_ob,
|
BObjectInfo &b_ob_info,
|
||||||
BL::Object &b_ob_instance,
|
|
||||||
int random_id,
|
int random_id,
|
||||||
Transform &tfm,
|
Transform &tfm,
|
||||||
bool *use_portal)
|
bool *use_portal)
|
||||||
{
|
{
|
||||||
/* test if we need to sync */
|
/* test if we need to sync */
|
||||||
ObjectKey key(b_parent, persistent_id, b_ob_instance, false);
|
ObjectKey key(b_parent, persistent_id, b_ob_info.real_object, false);
|
||||||
BL::Light b_light(b_ob.data());
|
BL::Light b_light(b_ob_info.object_data);
|
||||||
|
|
||||||
Light *light = light_map.find(key);
|
Light *light = light_map.find(key);
|
||||||
|
|
||||||
@@ -44,7 +43,7 @@ void BlenderSync::sync_light(BL::Object &b_parent,
|
|||||||
const bool tfm_updated = (light && light->get_tfm() != tfm);
|
const bool tfm_updated = (light && light->get_tfm() != tfm);
|
||||||
|
|
||||||
/* Update if either object or light data changed. */
|
/* Update if either object or light data changed. */
|
||||||
if (!light_map.add_or_update(&light, b_ob, b_parent, key) && !tfm_updated) {
|
if (!light_map.add_or_update(&light, b_ob_info.real_object, b_parent, key) && !tfm_updated) {
|
||||||
Shader *shader;
|
Shader *shader;
|
||||||
if (!shader_map.add_or_update(&shader, b_light)) {
|
if (!shader_map.add_or_update(&shader, b_light)) {
|
||||||
if (light->get_is_portal())
|
if (light->get_is_portal())
|
||||||
@@ -139,11 +138,11 @@ void BlenderSync::sync_light(BL::Object &b_parent,
|
|||||||
|
|
||||||
light->set_max_bounces(get_int(clight, "max_bounces"));
|
light->set_max_bounces(get_int(clight, "max_bounces"));
|
||||||
|
|
||||||
if (b_ob != b_ob_instance) {
|
if (b_ob_info.real_object != b_ob_info.iter_object) {
|
||||||
light->set_random_id(random_id);
|
light->set_random_id(random_id);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
light->set_random_id(hash_uint2(hash_string(b_ob.name().c_str()), 0));
|
light->set_random_id(hash_uint2(hash_string(b_ob_info.real_object.name().c_str()), 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (light->get_light_type() == LIGHT_AREA)
|
if (light->get_light_type() == LIGHT_AREA)
|
||||||
@@ -155,7 +154,7 @@ void BlenderSync::sync_light(BL::Object &b_parent,
|
|||||||
*use_portal = true;
|
*use_portal = true;
|
||||||
|
|
||||||
/* visibility */
|
/* visibility */
|
||||||
uint visibility = object_ray_visibility(b_ob);
|
uint visibility = object_ray_visibility(b_ob_info.real_object);
|
||||||
light->set_use_diffuse((visibility & PATH_RAY_DIFFUSE) != 0);
|
light->set_use_diffuse((visibility & PATH_RAY_DIFFUSE) != 0);
|
||||||
light->set_use_glossy((visibility & PATH_RAY_GLOSSY) != 0);
|
light->set_use_glossy((visibility & PATH_RAY_GLOSSY) != 0);
|
||||||
light->set_use_transmission((visibility & PATH_RAY_TRANSMIT) != 0);
|
light->set_use_transmission((visibility & PATH_RAY_TRANSMIT) != 0);
|
||||||
|
@@ -347,16 +347,57 @@ static void fill_generic_attribute(BL::Mesh &b_mesh,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void attr_create_generic(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, bool subdivision)
|
static void attr_create_motion(Mesh *mesh, BL::Attribute &b_attribute, const float motion_scale)
|
||||||
|
{
|
||||||
|
if (!(b_attribute.domain() == BL::Attribute::domain_POINT) &&
|
||||||
|
(b_attribute.data_type() == BL::Attribute::data_type_FLOAT_VECTOR)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BL::FloatVectorAttribute b_vector_attribute(b_attribute);
|
||||||
|
const int numverts = mesh->get_verts().size();
|
||||||
|
|
||||||
|
/* Find or add attribute */
|
||||||
|
float3 *P = &mesh->get_verts()[0];
|
||||||
|
Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
|
|
||||||
|
if (!attr_mP) {
|
||||||
|
attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only export previous and next frame, we don't have any in between data. */
|
||||||
|
float motion_times[2] = {-1.0f, 1.0f};
|
||||||
|
for (int step = 0; step < 2; step++) {
|
||||||
|
const float relative_time = motion_times[step] * 0.5f * motion_scale;
|
||||||
|
float3 *mP = attr_mP->data_float3() + step * numverts;
|
||||||
|
|
||||||
|
for (int i = 0; i < numverts; i++) {
|
||||||
|
mP[i] = P[i] + get_float3(b_vector_attribute.data[i].vector()) * relative_time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void attr_create_generic(Scene *scene,
|
||||||
|
Mesh *mesh,
|
||||||
|
BL::Mesh &b_mesh,
|
||||||
|
const bool subdivision,
|
||||||
|
const bool need_motion,
|
||||||
|
const float motion_scale)
|
||||||
{
|
{
|
||||||
if (subdivision) {
|
if (subdivision) {
|
||||||
/* TODO: Handle subdivision correctly. */
|
/* TODO: Handle subdivision correctly. */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AttributeSet &attributes = mesh->attributes;
|
AttributeSet &attributes = mesh->attributes;
|
||||||
|
static const ustring u_velocity("velocity");
|
||||||
|
|
||||||
for (BL::Attribute &b_attribute : b_mesh.attributes) {
|
for (BL::Attribute &b_attribute : b_mesh.attributes) {
|
||||||
const ustring name{b_attribute.name().c_str()};
|
const ustring name{b_attribute.name().c_str()};
|
||||||
|
|
||||||
|
if (need_motion && name == u_velocity) {
|
||||||
|
attr_create_motion(mesh, b_attribute, motion_scale);
|
||||||
|
}
|
||||||
|
|
||||||
if (!mesh->need_attribute(scene, name)) {
|
if (!mesh->need_attribute(scene, name)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -859,8 +900,10 @@ static void create_mesh(Scene *scene,
|
|||||||
Mesh *mesh,
|
Mesh *mesh,
|
||||||
BL::Mesh &b_mesh,
|
BL::Mesh &b_mesh,
|
||||||
const array<Node *> &used_shaders,
|
const array<Node *> &used_shaders,
|
||||||
bool subdivision = false,
|
const bool need_motion,
|
||||||
bool subdivide_uvs = true)
|
const float motion_scale,
|
||||||
|
const bool subdivision = false,
|
||||||
|
const bool subdivide_uvs = true)
|
||||||
{
|
{
|
||||||
/* count vertices and faces */
|
/* count vertices and faces */
|
||||||
int numverts = b_mesh.vertices.length();
|
int numverts = b_mesh.vertices.length();
|
||||||
@@ -974,7 +1017,7 @@ static void create_mesh(Scene *scene,
|
|||||||
attr_create_vertex_color(scene, mesh, b_mesh, subdivision);
|
attr_create_vertex_color(scene, mesh, b_mesh, subdivision);
|
||||||
attr_create_sculpt_vertex_color(scene, mesh, b_mesh, subdivision);
|
attr_create_sculpt_vertex_color(scene, mesh, b_mesh, subdivision);
|
||||||
attr_create_random_per_island(scene, mesh, b_mesh, subdivision);
|
attr_create_random_per_island(scene, mesh, b_mesh, subdivision);
|
||||||
attr_create_generic(scene, mesh, b_mesh, subdivision);
|
attr_create_generic(scene, mesh, b_mesh, subdivision, need_motion, motion_scale);
|
||||||
|
|
||||||
if (subdivision) {
|
if (subdivision) {
|
||||||
attr_create_subd_uv_map(scene, mesh, b_mesh, subdivide_uvs);
|
attr_create_subd_uv_map(scene, mesh, b_mesh, subdivide_uvs);
|
||||||
@@ -999,16 +1042,20 @@ static void create_mesh(Scene *scene,
|
|||||||
|
|
||||||
static void create_subd_mesh(Scene *scene,
|
static void create_subd_mesh(Scene *scene,
|
||||||
Mesh *mesh,
|
Mesh *mesh,
|
||||||
BL::Object &b_ob,
|
BObjectInfo &b_ob_info,
|
||||||
BL::Mesh &b_mesh,
|
BL::Mesh &b_mesh,
|
||||||
const array<Node *> &used_shaders,
|
const array<Node *> &used_shaders,
|
||||||
|
const bool need_motion,
|
||||||
|
const float motion_scale,
|
||||||
float dicing_rate,
|
float dicing_rate,
|
||||||
int max_subdivisions)
|
int max_subdivisions)
|
||||||
{
|
{
|
||||||
|
BL::Object b_ob = b_ob_info.real_object;
|
||||||
|
|
||||||
BL::SubsurfModifier subsurf_mod(b_ob.modifiers[b_ob.modifiers.length() - 1]);
|
BL::SubsurfModifier subsurf_mod(b_ob.modifiers[b_ob.modifiers.length() - 1]);
|
||||||
bool subdivide_uvs = subsurf_mod.uv_smooth() != BL::SubsurfModifier::uv_smooth_NONE;
|
bool subdivide_uvs = subsurf_mod.uv_smooth() != BL::SubsurfModifier::uv_smooth_NONE;
|
||||||
|
|
||||||
create_mesh(scene, mesh, b_mesh, used_shaders, true, subdivide_uvs);
|
create_mesh(scene, mesh, b_mesh, used_shaders, need_motion, motion_scale, true, subdivide_uvs);
|
||||||
|
|
||||||
/* export creases */
|
/* export creases */
|
||||||
size_t num_creases = 0;
|
size_t num_creases = 0;
|
||||||
@@ -1038,107 +1085,41 @@ static void create_subd_mesh(Scene *scene,
|
|||||||
|
|
||||||
/* Sync */
|
/* Sync */
|
||||||
|
|
||||||
static BL::MeshSequenceCacheModifier object_mesh_cache_find(BL::Object &b_ob)
|
/* Check whether some of "built-in" motion-related attributes are needed to be exported (includes
|
||||||
|
* things like velocity from cache modifier, fluid simulation).
|
||||||
|
*
|
||||||
|
* NOTE: This code is run prior to object motion blur initialization. so can not access properties
|
||||||
|
* set by `sync_object_motion_init()`. */
|
||||||
|
static bool mesh_need_motion_attribute(BObjectInfo &b_ob_info, Scene *scene)
|
||||||
{
|
{
|
||||||
if (b_ob.modifiers.length() > 0) {
|
const Scene::MotionType need_motion = scene->need_motion();
|
||||||
BL::Modifier b_mod = b_ob.modifiers[b_ob.modifiers.length() - 1];
|
if (need_motion == Scene::MOTION_NONE) {
|
||||||
|
/* Simple case: neither motion pass nor motion blur is needed, no need in the motion related
|
||||||
if (b_mod.type() == BL::Modifier::type_MESH_SEQUENCE_CACHE) {
|
* attributes. */
|
||||||
BL::MeshSequenceCacheModifier mesh_cache = BL::MeshSequenceCacheModifier(b_mod);
|
return false;
|
||||||
|
|
||||||
if (MeshSequenceCacheModifier_has_velocity_get(&mesh_cache.ptr)) {
|
|
||||||
return mesh_cache;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return BL::MeshSequenceCacheModifier(PointerRNA_NULL);
|
if (need_motion == Scene::MOTION_BLUR) {
|
||||||
}
|
/* A bit tricky and implicit case:
|
||||||
|
* - Motion blur is enabled in the scene, which implies specific number of time steps for
|
||||||
static void sync_mesh_cached_velocities(BL::Object &b_ob, Scene *scene, Mesh *mesh)
|
* objects.
|
||||||
{
|
* - If the object has motion blur disabled on it, it will have 0 time steps.
|
||||||
if (scene->need_motion() == Scene::MOTION_NONE)
|
* - Motion attribute expects non-zero time steps.
|
||||||
return;
|
*
|
||||||
|
* Avoid adding motion attributes if the motion blur will enforce 0 motion steps. */
|
||||||
BL::MeshSequenceCacheModifier b_mesh_cache = object_mesh_cache_find(b_ob);
|
PointerRNA cobject = RNA_pointer_get(&b_ob_info.real_object.ptr, "cycles");
|
||||||
|
const bool use_motion = get_boolean(cobject, "use_motion_blur");
|
||||||
if (!b_mesh_cache) {
|
if (!use_motion) {
|
||||||
return;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
if (!MeshSequenceCacheModifier_read_velocity_get(&b_mesh_cache.ptr)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const size_t numverts = mesh->get_verts().size();
|
|
||||||
|
|
||||||
if (b_mesh_cache.vertex_velocities.length() != numverts) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find or add attribute */
|
|
||||||
float3 *P = &mesh->get_verts()[0];
|
|
||||||
Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
|
||||||
|
|
||||||
if (!attr_mP) {
|
|
||||||
attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Only export previous and next frame, we don't have any in between data. */
|
|
||||||
float motion_times[2] = {-1.0f, 1.0f};
|
|
||||||
for (int step = 0; step < 2; step++) {
|
|
||||||
const float relative_time = motion_times[step] * scene->motion_shutter_time() * 0.5f;
|
|
||||||
float3 *mP = attr_mP->data_float3() + step * numverts;
|
|
||||||
|
|
||||||
BL::MeshSequenceCacheModifier::vertex_velocities_iterator vvi;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (b_mesh_cache.vertex_velocities.begin(vvi); vvi != b_mesh_cache.vertex_velocities.end();
|
|
||||||
++vvi, ++i) {
|
|
||||||
mP[i] = P[i] + get_float3(vvi->velocity()) * relative_time;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Motion pass which implies 3 motion steps, or motion blur which is not disabled on object
|
||||||
|
* level. */
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sync_mesh_fluid_motion(BL::Object &b_ob, Scene *scene, Mesh *mesh)
|
void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, Mesh *mesh)
|
||||||
{
|
|
||||||
if (scene->need_motion() == Scene::MOTION_NONE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
BL::FluidDomainSettings b_fluid_domain = object_fluid_liquid_domain_find(b_ob);
|
|
||||||
|
|
||||||
if (!b_fluid_domain)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* If the mesh has modifiers following the fluid domain we can't export motion. */
|
|
||||||
if (b_fluid_domain.mesh_vertices.length() != mesh->get_verts().size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Find or add attribute */
|
|
||||||
float3 *P = &mesh->get_verts()[0];
|
|
||||||
Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
|
||||||
|
|
||||||
if (!attr_mP) {
|
|
||||||
attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Only export previous and next frame, we don't have any in between data. */
|
|
||||||
float motion_times[2] = {-1.0f, 1.0f};
|
|
||||||
for (int step = 0; step < 2; step++) {
|
|
||||||
float relative_time = motion_times[step] * scene->motion_shutter_time() * 0.5f;
|
|
||||||
float3 *mP = attr_mP->data_float3() + step * mesh->get_verts().size();
|
|
||||||
|
|
||||||
BL::FluidDomainSettings::mesh_vertices_iterator svi;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (b_fluid_domain.mesh_vertices.begin(svi); svi != b_fluid_domain.mesh_vertices.end();
|
|
||||||
++svi, ++i) {
|
|
||||||
mP[i] = P[i] + get_float3(svi->velocity()) * relative_time;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *mesh)
|
|
||||||
{
|
{
|
||||||
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
||||||
* attributes */
|
* attributes */
|
||||||
@@ -1151,37 +1132,47 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *me
|
|||||||
/* Adaptive subdivision setup. Not for baking since that requires
|
/* Adaptive subdivision setup. Not for baking since that requires
|
||||||
* exact mapping to the Blender mesh. */
|
* exact mapping to the Blender mesh. */
|
||||||
if (!scene->bake_manager->get_baking()) {
|
if (!scene->bake_manager->get_baking()) {
|
||||||
new_mesh.set_subdivision_type(object_subdivision_type(b_ob, preview, experimental));
|
new_mesh.set_subdivision_type(
|
||||||
|
object_subdivision_type(b_ob_info.real_object, preview, experimental));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For some reason, meshes do not need this... */
|
/* For some reason, meshes do not need this... */
|
||||||
bool need_undeformed = new_mesh.need_attribute(scene, ATTR_STD_GENERATED);
|
bool need_undeformed = new_mesh.need_attribute(scene, ATTR_STD_GENERATED);
|
||||||
BL::Mesh b_mesh = object_to_mesh(
|
BL::Mesh b_mesh = object_to_mesh(
|
||||||
b_data, b_ob, b_depsgraph, need_undeformed, new_mesh.get_subdivision_type());
|
b_data, b_ob_info, b_depsgraph, need_undeformed, new_mesh.get_subdivision_type());
|
||||||
|
|
||||||
if (b_mesh) {
|
if (b_mesh) {
|
||||||
|
/* Motion blur attribute is relative to seconds, we need it relative to frames. */
|
||||||
|
const bool need_motion = mesh_need_motion_attribute(b_ob_info, scene);
|
||||||
|
const float motion_scale = (need_motion) ?
|
||||||
|
scene->motion_shutter_time() /
|
||||||
|
(b_scene.render().fps() / b_scene.render().fps_base()) :
|
||||||
|
0.0f;
|
||||||
|
|
||||||
/* Sync mesh itself. */
|
/* Sync mesh itself. */
|
||||||
if (new_mesh.get_subdivision_type() != Mesh::SUBDIVISION_NONE)
|
if (new_mesh.get_subdivision_type() != Mesh::SUBDIVISION_NONE)
|
||||||
create_subd_mesh(scene,
|
create_subd_mesh(scene,
|
||||||
&new_mesh,
|
&new_mesh,
|
||||||
b_ob,
|
b_ob_info,
|
||||||
b_mesh,
|
b_mesh,
|
||||||
new_mesh.get_used_shaders(),
|
new_mesh.get_used_shaders(),
|
||||||
|
need_motion,
|
||||||
|
motion_scale,
|
||||||
dicing_rate,
|
dicing_rate,
|
||||||
max_subdivisions);
|
max_subdivisions);
|
||||||
else
|
else
|
||||||
create_mesh(scene, &new_mesh, b_mesh, new_mesh.get_used_shaders(), false);
|
create_mesh(scene,
|
||||||
|
&new_mesh,
|
||||||
|
b_mesh,
|
||||||
|
new_mesh.get_used_shaders(),
|
||||||
|
need_motion,
|
||||||
|
motion_scale,
|
||||||
|
false);
|
||||||
|
|
||||||
free_object_to_mesh(b_data, b_ob, b_mesh);
|
free_object_to_mesh(b_data, b_ob_info, b_mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cached velocities (e.g. from alembic archive) */
|
|
||||||
sync_mesh_cached_velocities(b_ob, scene, &new_mesh);
|
|
||||||
|
|
||||||
/* mesh fluid motion mantaflow */
|
|
||||||
sync_mesh_fluid_motion(b_ob, scene, &new_mesh);
|
|
||||||
|
|
||||||
/* update original sockets */
|
/* update original sockets */
|
||||||
|
|
||||||
mesh->clear_non_sockets();
|
mesh->clear_non_sockets();
|
||||||
@@ -1211,22 +1202,10 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *me
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
||||||
BL::Object b_ob,
|
BObjectInfo &b_ob_info,
|
||||||
Mesh *mesh,
|
Mesh *mesh,
|
||||||
int motion_step)
|
int motion_step)
|
||||||
{
|
{
|
||||||
/* Fluid motion blur already exported. */
|
|
||||||
BL::FluidDomainSettings b_fluid_domain = object_fluid_liquid_domain_find(b_ob);
|
|
||||||
if (b_fluid_domain) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Cached motion blur already exported. */
|
|
||||||
BL::MeshSequenceCacheModifier mesh_cache = object_mesh_cache_find(b_ob);
|
|
||||||
if (mesh_cache) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Skip if no vertices were exported. */
|
/* Skip if no vertices were exported. */
|
||||||
size_t numverts = mesh->get_verts().size();
|
size_t numverts = mesh->get_verts().size();
|
||||||
if (numverts == 0) {
|
if (numverts == 0) {
|
||||||
@@ -1236,11 +1215,13 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
|||||||
/* Skip objects without deforming modifiers. this is not totally reliable,
|
/* Skip objects without deforming modifiers. this is not totally reliable,
|
||||||
* would need a more extensive check to see which objects are animated. */
|
* would need a more extensive check to see which objects are animated. */
|
||||||
BL::Mesh b_mesh(PointerRNA_NULL);
|
BL::Mesh b_mesh(PointerRNA_NULL);
|
||||||
if (ccl::BKE_object_is_deform_modified(b_ob, b_scene, preview)) {
|
if (ccl::BKE_object_is_deform_modified(b_ob_info, b_scene, preview)) {
|
||||||
/* get derived mesh */
|
/* get derived mesh */
|
||||||
b_mesh = object_to_mesh(b_data, b_ob, b_depsgraph, false, Mesh::SUBDIVISION_NONE);
|
b_mesh = object_to_mesh(b_data, b_ob_info, b_depsgraph, false, Mesh::SUBDIVISION_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string ob_name = b_ob_info.real_object.name();
|
||||||
|
|
||||||
/* TODO(sergey): Perform preliminary check for number of vertices. */
|
/* TODO(sergey): Perform preliminary check for number of vertices. */
|
||||||
if (b_mesh) {
|
if (b_mesh) {
|
||||||
/* Export deformed coordinates. */
|
/* Export deformed coordinates. */
|
||||||
@@ -1276,17 +1257,17 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
|||||||
memcmp(mP, &mesh->get_verts()[0], sizeof(float3) * numverts) == 0) {
|
memcmp(mP, &mesh->get_verts()[0], sizeof(float3) * numverts) == 0) {
|
||||||
/* no motion, remove attributes again */
|
/* no motion, remove attributes again */
|
||||||
if (b_mesh.vertices.length() != numverts) {
|
if (b_mesh.vertices.length() != numverts) {
|
||||||
VLOG(1) << "Topology differs, disabling motion blur for object " << b_ob.name();
|
VLOG(1) << "Topology differs, disabling motion blur for object " << ob_name;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
VLOG(1) << "No actual deformation motion for object " << b_ob.name();
|
VLOG(1) << "No actual deformation motion for object " << ob_name;
|
||||||
}
|
}
|
||||||
mesh->attributes.remove(ATTR_STD_MOTION_VERTEX_POSITION);
|
mesh->attributes.remove(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
if (attr_mN)
|
if (attr_mN)
|
||||||
mesh->attributes.remove(ATTR_STD_MOTION_VERTEX_NORMAL);
|
mesh->attributes.remove(ATTR_STD_MOTION_VERTEX_NORMAL);
|
||||||
}
|
}
|
||||||
else if (motion_step > 0) {
|
else if (motion_step > 0) {
|
||||||
VLOG(1) << "Filling deformation motion for object " << b_ob.name();
|
VLOG(1) << "Filling deformation motion for object " << ob_name;
|
||||||
/* motion, fill up previous steps that we might have skipped because
|
/* motion, fill up previous steps that we might have skipped because
|
||||||
* they had no motion, but we need them anyway now */
|
* they had no motion, but we need them anyway now */
|
||||||
float3 *P = &mesh->get_verts()[0];
|
float3 *P = &mesh->get_verts()[0];
|
||||||
@@ -1300,8 +1281,8 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (b_mesh.vertices.length() != numverts) {
|
if (b_mesh.vertices.length() != numverts) {
|
||||||
VLOG(1) << "Topology differs, discarding motion blur for object " << b_ob.name()
|
VLOG(1) << "Topology differs, discarding motion blur for object " << ob_name << " at time "
|
||||||
<< " at time " << motion_step;
|
<< motion_step;
|
||||||
memcpy(mP, &mesh->get_verts()[0], sizeof(float3) * numverts);
|
memcpy(mP, &mesh->get_verts()[0], sizeof(float3) * numverts);
|
||||||
if (mN != NULL) {
|
if (mN != NULL) {
|
||||||
memcpy(mN, attr_N->data_float3(), sizeof(float3) * numverts);
|
memcpy(mN, attr_N->data_float3(), sizeof(float3) * numverts);
|
||||||
@@ -1309,7 +1290,7 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free_object_to_mesh(b_data, b_ob, b_mesh);
|
free_object_to_mesh(b_data, b_ob_info, b_mesh);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "render/alembic.h"
|
||||||
#include "render/camera.h"
|
#include "render/camera.h"
|
||||||
#include "render/graph.h"
|
#include "render/graph.h"
|
||||||
#include "render/integrator.h"
|
#include "render/integrator.h"
|
||||||
@@ -109,23 +110,23 @@ void BlenderSync::sync_object_motion_init(BL::Object &b_parent, BL::Object &b_ob
|
|||||||
}
|
}
|
||||||
|
|
||||||
Geometry *geom = object->get_geometry();
|
Geometry *geom = object->get_geometry();
|
||||||
geom->set_use_motion_blur(false);
|
|
||||||
geom->set_motion_steps(0);
|
|
||||||
|
|
||||||
uint motion_steps;
|
int motion_steps = 0;
|
||||||
|
bool use_motion_blur = false;
|
||||||
|
|
||||||
if (need_motion == Scene::MOTION_BLUR) {
|
if (need_motion == Scene::MOTION_BLUR) {
|
||||||
motion_steps = object_motion_steps(b_parent, b_ob, Object::MAX_MOTION_STEPS);
|
motion_steps = object_motion_steps(b_parent, b_ob, Object::MAX_MOTION_STEPS);
|
||||||
geom->set_motion_steps(motion_steps);
|
|
||||||
if (motion_steps && object_use_deform_motion(b_parent, b_ob)) {
|
if (motion_steps && object_use_deform_motion(b_parent, b_ob)) {
|
||||||
geom->set_use_motion_blur(true);
|
use_motion_blur = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
motion_steps = 3;
|
motion_steps = 3;
|
||||||
geom->set_motion_steps(motion_steps);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
geom->set_use_motion_blur(use_motion_blur);
|
||||||
|
geom->set_motion_steps(motion_steps);
|
||||||
|
|
||||||
motion.resize(motion_steps, transform_empty());
|
motion.resize(motion_steps, transform_empty());
|
||||||
|
|
||||||
if (motion_steps) {
|
if (motion_steps) {
|
||||||
@@ -153,7 +154,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
const bool is_instance = b_instance.is_instance();
|
const bool is_instance = b_instance.is_instance();
|
||||||
BL::Object b_ob = b_instance.object();
|
BL::Object b_ob = b_instance.object();
|
||||||
BL::Object b_parent = is_instance ? b_instance.parent() : b_instance.object();
|
BL::Object b_parent = is_instance ? b_instance.parent() : b_instance.object();
|
||||||
BL::Object b_ob_instance = is_instance ? b_instance.instance_object() : b_ob;
|
BObjectInfo b_ob_info{b_ob, is_instance ? b_instance.instance_object() : b_ob, b_ob.data()};
|
||||||
const bool motion = motion_time != 0.0f;
|
const bool motion = motion_time != 0.0f;
|
||||||
/*const*/ Transform tfm = get_transform(b_ob.matrix_world());
|
/*const*/ Transform tfm = get_transform(b_ob.matrix_world());
|
||||||
int *persistent_id = NULL;
|
int *persistent_id = NULL;
|
||||||
@@ -177,8 +178,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
{
|
{
|
||||||
sync_light(b_parent,
|
sync_light(b_parent,
|
||||||
persistent_id,
|
persistent_id,
|
||||||
b_ob,
|
b_ob_info,
|
||||||
b_ob_instance,
|
|
||||||
is_instance ? b_instance.random_id() : 0,
|
is_instance ? b_instance.random_id() : 0,
|
||||||
tfm,
|
tfm,
|
||||||
use_portal);
|
use_portal);
|
||||||
@@ -199,8 +199,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
|
|
||||||
/* Visibility flags for both parent and child. */
|
/* Visibility flags for both parent and child. */
|
||||||
PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
|
PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
|
||||||
bool use_holdout = get_boolean(cobject, "is_holdout") ||
|
bool use_holdout = b_parent.holdout_get(PointerRNA_NULL, b_view_layer);
|
||||||
b_parent.holdout_get(PointerRNA_NULL, b_view_layer);
|
|
||||||
uint visibility = object_ray_visibility(b_ob) & PATH_RAY_ALL_VISIBILITY;
|
uint visibility = object_ray_visibility(b_ob) & PATH_RAY_ALL_VISIBILITY;
|
||||||
|
|
||||||
if (b_parent.ptr.data != b_ob.ptr.data) {
|
if (b_parent.ptr.data != b_ob.ptr.data) {
|
||||||
@@ -231,7 +230,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
TaskPool *object_geom_task_pool = (is_instance) ? NULL : geom_task_pool;
|
TaskPool *object_geom_task_pool = (is_instance) ? NULL : geom_task_pool;
|
||||||
|
|
||||||
/* key to lookup object */
|
/* key to lookup object */
|
||||||
ObjectKey key(b_parent, persistent_id, b_ob_instance, use_particle_hair);
|
ObjectKey key(b_parent, persistent_id, b_ob_info.real_object, use_particle_hair);
|
||||||
Object *object;
|
Object *object;
|
||||||
|
|
||||||
/* motion vector case */
|
/* motion vector case */
|
||||||
@@ -249,12 +248,8 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
|
|
||||||
/* mesh deformation */
|
/* mesh deformation */
|
||||||
if (object->get_geometry())
|
if (object->get_geometry())
|
||||||
sync_geometry_motion(b_depsgraph,
|
sync_geometry_motion(
|
||||||
b_ob_instance,
|
b_depsgraph, b_ob_info, object, motion_time, use_particle_hair, object_geom_task_pool);
|
||||||
object,
|
|
||||||
motion_time,
|
|
||||||
use_particle_hair,
|
|
||||||
object_geom_task_pool);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
@@ -265,15 +260,8 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
(tfm != object->get_tfm());
|
(tfm != object->get_tfm());
|
||||||
|
|
||||||
/* mesh sync */
|
/* mesh sync */
|
||||||
/* b_ob is owned by the iterator and will go out of scope at the end of the block.
|
Geometry *geometry = sync_geometry(
|
||||||
* b_ob_instance is the original object and will remain valid for deferred geometry
|
b_depsgraph, b_ob_info, object_updated, use_particle_hair, object_geom_task_pool);
|
||||||
* sync. */
|
|
||||||
Geometry *geometry = sync_geometry(b_depsgraph,
|
|
||||||
b_ob_instance,
|
|
||||||
b_ob_instance,
|
|
||||||
object_updated,
|
|
||||||
use_particle_hair,
|
|
||||||
object_geom_task_pool);
|
|
||||||
object->set_geometry(geometry);
|
object->set_geometry(geometry);
|
||||||
|
|
||||||
/* special case not tracked by object update flags */
|
/* special case not tracked by object update flags */
|
||||||
@@ -287,8 +275,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
|
|
||||||
object->set_visibility(visibility);
|
object->set_visibility(visibility);
|
||||||
|
|
||||||
bool is_shadow_catcher = get_boolean(cobject, "is_shadow_catcher");
|
object->set_is_shadow_catcher(b_ob.is_shadow_catcher());
|
||||||
object->set_is_shadow_catcher(is_shadow_catcher);
|
|
||||||
|
|
||||||
float shadow_terminator_shading_offset = get_float(cobject, "shadow_terminator_offset");
|
float shadow_terminator_shading_offset = get_float(cobject, "shadow_terminator_offset");
|
||||||
object->set_shadow_terminator_shading_offset(shadow_terminator_shading_offset);
|
object->set_shadow_terminator_shading_offset(shadow_terminator_shading_offset);
|
||||||
@@ -297,6 +284,13 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
"shadow_terminator_geometry_offset");
|
"shadow_terminator_geometry_offset");
|
||||||
object->set_shadow_terminator_geometry_offset(shadow_terminator_geometry_offset);
|
object->set_shadow_terminator_geometry_offset(shadow_terminator_geometry_offset);
|
||||||
|
|
||||||
|
float ao_distance = get_float(cobject, "ao_distance");
|
||||||
|
if (ao_distance == 0.0f && b_parent.ptr.data != b_ob.ptr.data) {
|
||||||
|
PointerRNA cparent = RNA_pointer_get(&b_parent.ptr, "cycles");
|
||||||
|
ao_distance = get_float(cparent, "ao_distance");
|
||||||
|
}
|
||||||
|
object->set_ao_distance(ao_distance);
|
||||||
|
|
||||||
/* sync the asset name for Cryptomatte */
|
/* sync the asset name for Cryptomatte */
|
||||||
BL::Object parent = b_ob.parent();
|
BL::Object parent = b_ob.parent();
|
||||||
ustring parent_name;
|
ustring parent_name;
|
||||||
@@ -370,7 +364,7 @@ static bool lookup_property(BL::ID b_id, const string &name, float4 *r_value)
|
|||||||
if (type == PROP_FLOAT)
|
if (type == PROP_FLOAT)
|
||||||
value = RNA_property_float_get(&ptr, prop);
|
value = RNA_property_float_get(&ptr, prop);
|
||||||
else if (type == PROP_INT)
|
else if (type == PROP_INT)
|
||||||
value = RNA_property_int_get(&ptr, prop);
|
value = static_cast<float>(RNA_property_int_get(&ptr, prop));
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -479,6 +473,72 @@ bool BlenderSync::sync_object_attributes(BL::DepsgraphObjectInstance &b_instance
|
|||||||
|
|
||||||
/* Object Loop */
|
/* Object Loop */
|
||||||
|
|
||||||
|
void BlenderSync::sync_procedural(BL::Object &b_ob,
|
||||||
|
BL::MeshSequenceCacheModifier &b_mesh_cache,
|
||||||
|
bool has_subdivision_modifier)
|
||||||
|
{
|
||||||
|
#ifdef WITH_ALEMBIC
|
||||||
|
BL::CacheFile cache_file = b_mesh_cache.cache_file();
|
||||||
|
void *cache_file_key = cache_file.ptr.data;
|
||||||
|
|
||||||
|
AlembicProcedural *procedural = static_cast<AlembicProcedural *>(
|
||||||
|
procedural_map.find(cache_file_key));
|
||||||
|
|
||||||
|
if (procedural == nullptr) {
|
||||||
|
procedural = scene->create_node<AlembicProcedural>();
|
||||||
|
procedural_map.add(cache_file_key, procedural);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
procedural_map.used(procedural);
|
||||||
|
}
|
||||||
|
|
||||||
|
float current_frame = static_cast<float>(b_scene.frame_current());
|
||||||
|
if (cache_file.override_frame()) {
|
||||||
|
current_frame = cache_file.frame();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cache_file.override_frame()) {
|
||||||
|
procedural->set_start_frame(static_cast<float>(b_scene.frame_start()));
|
||||||
|
procedural->set_end_frame(static_cast<float>(b_scene.frame_end()));
|
||||||
|
}
|
||||||
|
|
||||||
|
procedural->set_frame(current_frame);
|
||||||
|
procedural->set_frame_rate(b_scene.render().fps() / b_scene.render().fps_base());
|
||||||
|
procedural->set_frame_offset(cache_file.frame_offset());
|
||||||
|
|
||||||
|
string absolute_path = blender_absolute_path(b_data, b_ob, b_mesh_cache.cache_file().filepath());
|
||||||
|
procedural->set_filepath(ustring(absolute_path));
|
||||||
|
|
||||||
|
procedural->set_scale(cache_file.scale());
|
||||||
|
|
||||||
|
procedural->set_use_prefetch(cache_file.use_prefetch());
|
||||||
|
procedural->set_prefetch_cache_size(cache_file.prefetch_cache_size());
|
||||||
|
|
||||||
|
/* create or update existing AlembicObjects */
|
||||||
|
ustring object_path = ustring(b_mesh_cache.object_path());
|
||||||
|
|
||||||
|
AlembicObject *abc_object = procedural->get_or_create_object(object_path);
|
||||||
|
|
||||||
|
array<Node *> used_shaders = find_used_shaders(b_ob);
|
||||||
|
abc_object->set_used_shaders(used_shaders);
|
||||||
|
|
||||||
|
PointerRNA cobj = RNA_pointer_get(&b_ob.ptr, "cycles");
|
||||||
|
const float subd_dicing_rate = max(0.1f, RNA_float_get(&cobj, "dicing_rate") * dicing_rate);
|
||||||
|
abc_object->set_subd_dicing_rate(subd_dicing_rate);
|
||||||
|
abc_object->set_subd_max_level(max_subdivisions);
|
||||||
|
|
||||||
|
abc_object->set_ignore_subdivision(!has_subdivision_modifier);
|
||||||
|
|
||||||
|
if (abc_object->is_modified() || procedural->is_modified()) {
|
||||||
|
procedural->tag_update(scene);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
(void)b_ob;
|
||||||
|
(void)b_mesh_cache;
|
||||||
|
(void)has_subdivision_modifier;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
||||||
BL::SpaceView3D &b_v3d,
|
BL::SpaceView3D &b_v3d,
|
||||||
float motion_time)
|
float motion_time)
|
||||||
@@ -494,6 +554,7 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
|||||||
light_map.pre_sync();
|
light_map.pre_sync();
|
||||||
geometry_map.pre_sync();
|
geometry_map.pre_sync();
|
||||||
object_map.pre_sync();
|
object_map.pre_sync();
|
||||||
|
procedural_map.pre_sync();
|
||||||
particle_system_map.pre_sync();
|
particle_system_map.pre_sync();
|
||||||
motion_times.clear();
|
motion_times.clear();
|
||||||
}
|
}
|
||||||
@@ -534,6 +595,29 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
|||||||
|
|
||||||
/* Object itself. */
|
/* Object itself. */
|
||||||
if (b_instance.show_self()) {
|
if (b_instance.show_self()) {
|
||||||
|
#ifdef WITH_ALEMBIC
|
||||||
|
bool use_procedural = false;
|
||||||
|
bool has_subdivision_modifier = false;
|
||||||
|
BL::MeshSequenceCacheModifier b_mesh_cache(PointerRNA_NULL);
|
||||||
|
|
||||||
|
/* Experimental as Blender does not have good support for procedurals at the moment, also
|
||||||
|
* only available in preview renders since currently do not have a good cache policy, the
|
||||||
|
* data being loaded at once for all the frames. */
|
||||||
|
if (experimental && b_v3d) {
|
||||||
|
b_mesh_cache = object_mesh_cache_find(b_ob, &has_subdivision_modifier);
|
||||||
|
use_procedural = b_mesh_cache && b_mesh_cache.cache_file().use_render_procedural();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_procedural) {
|
||||||
|
/* Skip in the motion case, as generating motion blur data will be handled in the
|
||||||
|
* procedural. */
|
||||||
|
if (!motion) {
|
||||||
|
sync_procedural(b_ob, b_mesh_cache, has_subdivision_modifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
sync_object(b_depsgraph,
|
sync_object(b_depsgraph,
|
||||||
b_view_layer,
|
b_view_layer,
|
||||||
b_instance,
|
b_instance,
|
||||||
@@ -544,6 +628,7 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
|||||||
&use_portal,
|
&use_portal,
|
||||||
sync_hair ? NULL : &geom_task_pool);
|
sync_hair ? NULL : &geom_task_pool);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Particle hair as separate object. */
|
/* Particle hair as separate object. */
|
||||||
if (sync_hair) {
|
if (sync_hair) {
|
||||||
@@ -575,6 +660,7 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
|||||||
object_map.post_sync();
|
object_map.post_sync();
|
||||||
geometry_map.post_sync();
|
geometry_map.post_sync();
|
||||||
particle_system_map.post_sync();
|
particle_system_map.post_sync();
|
||||||
|
procedural_map.post_sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (motion)
|
if (motion)
|
||||||
@@ -633,6 +719,14 @@ void BlenderSync::sync_motion(BL::RenderSettings &b_render,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check which geometry already has motion blur so it can be skipped. */
|
||||||
|
geometry_motion_attribute_synced.clear();
|
||||||
|
for (Geometry *geom : scene->geometry) {
|
||||||
|
if (geom->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION)) {
|
||||||
|
geometry_motion_attribute_synced.insert(geom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* note iteration over motion_times set happens in sorted order */
|
/* note iteration over motion_times set happens in sorted order */
|
||||||
foreach (float relative_time, motion_times) {
|
foreach (float relative_time, motion_times) {
|
||||||
/* center time is already handled. */
|
/* center time is already handled. */
|
||||||
@@ -663,6 +757,8 @@ void BlenderSync::sync_motion(BL::RenderSettings &b_render,
|
|||||||
sync_objects(b_depsgraph, b_v3d, relative_time);
|
sync_objects(b_depsgraph, b_v3d, relative_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
geometry_motion_attribute_synced.clear();
|
||||||
|
|
||||||
/* we need to set the python thread state again because this
|
/* we need to set the python thread state again because this
|
||||||
* function assumes it is being executed from python and will
|
* function assumes it is being executed from python and will
|
||||||
* try to save the thread state */
|
* try to save the thread state */
|
||||||
|
@@ -71,7 +71,7 @@ bool BlenderSync::sync_dupli_particle(BL::Object &b_ob,
|
|||||||
Particle pa;
|
Particle pa;
|
||||||
|
|
||||||
pa.index = persistent_id[0];
|
pa.index = persistent_id[0];
|
||||||
pa.age = b_scene.frame_current() - b_pa.birth_time();
|
pa.age = b_scene.frame_current_final() - b_pa.birth_time();
|
||||||
pa.lifetime = b_pa.lifetime();
|
pa.lifetime = b_pa.lifetime();
|
||||||
pa.location = get_float3(b_pa.location());
|
pa.location = get_float3(b_pa.location());
|
||||||
pa.rotation = get_float4(b_pa.rotation());
|
pa.rotation = get_float4(b_pa.rotation());
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user