Compare commits
1140 Commits
PRE_OSG_PL
...
2.2.0-rc1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1670f88e54 | ||
|
|
58c7edfed6 | ||
|
|
122d7f681f | ||
|
|
acec1ba4bf | ||
|
|
0040757cd3 | ||
|
|
49d554e9d8 | ||
|
|
fa3389ed23 | ||
|
|
188a84a893 | ||
|
|
ceff1622c1 | ||
|
|
8d15cacf92 | ||
|
|
80161bfa96 | ||
|
|
c32ab1b84f | ||
|
|
73c0ce628b | ||
|
|
dc68397e48 | ||
|
|
c934b47f2e | ||
|
|
07d3d6508a | ||
|
|
e4a8896fdc | ||
|
|
33e1a9457a | ||
|
|
b6a20fd6e4 | ||
|
|
ae9757bf43 | ||
|
|
b9a34b1b05 | ||
|
|
c33f66b691 | ||
|
|
cf8d6c2621 | ||
|
|
6c789f7165 | ||
|
|
7d77eff4f4 | ||
|
|
f83278bd61 | ||
|
|
9a96018cc2 | ||
|
|
ab3612517f | ||
|
|
0909722bb5 | ||
|
|
1cb8f9237c | ||
|
|
4cac366468 | ||
|
|
a6138b3445 | ||
|
|
093e4614d3 | ||
|
|
82efb8a784 | ||
|
|
be720709fe | ||
|
|
325b13b101 | ||
|
|
203d1c2b45 | ||
|
|
c3c97f2956 | ||
|
|
ac535de2fa | ||
|
|
9d4f0f5824 | ||
|
|
b4f5eaa541 | ||
|
|
66cdbf6215 | ||
|
|
c9e0bfb7fe | ||
|
|
6da8ef83af | ||
|
|
f53559b8d0 | ||
|
|
49f038b9d1 | ||
|
|
ce67657e0a | ||
|
|
56c520f455 | ||
|
|
9f88b077ee | ||
|
|
50315a7346 | ||
|
|
6b58afe823 | ||
|
|
167cba9e93 | ||
|
|
ce89a410d2 | ||
|
|
98d0f33f8f | ||
|
|
c305341ef4 | ||
|
|
0607a67a92 | ||
|
|
5f2f95676c | ||
|
|
4bf16243fc | ||
|
|
607738f22e | ||
|
|
200df49d6e | ||
|
|
580a1b7fc2 | ||
|
|
3372f9fc0d | ||
|
|
4787ac64ff | ||
|
|
fef625ce27 | ||
|
|
0b53dd8fa7 | ||
|
|
fe628e44e1 | ||
|
|
d314b6a552 | ||
|
|
02462d1752 | ||
|
|
5b734d8c52 | ||
|
|
81d640ed7c | ||
|
|
7e2ad05fae | ||
|
|
bda5890f17 | ||
|
|
c7dd293e01 | ||
|
|
fbf0a20f38 | ||
|
|
87ccfbab02 | ||
|
|
97f39282ef | ||
|
|
4fd3d49fc1 | ||
|
|
a70c8a9cae | ||
|
|
c0926633e8 | ||
|
|
1ae91097ba | ||
|
|
bfd76880a9 | ||
|
|
662578dbe7 | ||
|
|
48c6d3d89a | ||
|
|
7bdb530440 | ||
|
|
bfe953c18d | ||
|
|
136676012f | ||
|
|
0994ffc195 | ||
|
|
df19feac34 | ||
|
|
961fa89b7a | ||
|
|
ddf9e08069 | ||
|
|
b5f3978b8a | ||
|
|
82dc6c32ec | ||
|
|
889e2d6f06 | ||
|
|
9a28642a4e | ||
|
|
0b953462f7 | ||
|
|
061eb686c6 | ||
|
|
937297561f | ||
|
|
bf70d6f087 | ||
|
|
26fdfc42f4 | ||
|
|
abab8c6ec8 | ||
|
|
a7697f6095 | ||
|
|
49270e99e5 | ||
|
|
d75ce1e12e | ||
|
|
289e768ca5 | ||
|
|
44c587400d | ||
|
|
df467b9dba | ||
|
|
510543e14b | ||
|
|
c3133f020d | ||
|
|
a7439aa056 | ||
|
|
d7bea0c4c6 | ||
|
|
764a3c29e9 | ||
|
|
3c57572b89 | ||
|
|
fe7c6554f7 | ||
|
|
19bb7f5a83 | ||
|
|
c0e20ad56b | ||
|
|
49887ff06e | ||
|
|
1f6555c9ad | ||
|
|
7f8efa7cef | ||
|
|
8106956be2 | ||
|
|
cc435ba817 | ||
|
|
0c55a4d7bb | ||
|
|
c4b4c0ce59 | ||
|
|
d31c1df639 | ||
|
|
780286ea81 | ||
|
|
20a75b9c9e | ||
|
|
2a2e2716bd | ||
|
|
6a07c22826 | ||
|
|
7c294915c8 | ||
|
|
7788cb288e | ||
|
|
c1762c709e | ||
|
|
8690528080 | ||
|
|
5376294389 | ||
|
|
fa1b703bf8 | ||
|
|
72d2c7f078 | ||
|
|
09ecc66e53 | ||
|
|
879dc295a8 | ||
|
|
8a5a1d3301 | ||
|
|
67c8067aed | ||
|
|
123e32e345 | ||
|
|
3a09d67f59 | ||
|
|
ec3ed8fbcd | ||
|
|
18370ebd08 | ||
|
|
acbc09b232 | ||
|
|
9d1cf253b4 | ||
|
|
e46304d1ce | ||
|
|
668c62b1f4 | ||
|
|
49f418f146 | ||
|
|
c46c735f2f | ||
|
|
82aa7fcbad | ||
|
|
2cfeeb4b13 | ||
|
|
aa859c488f | ||
|
|
1b2915aa2a | ||
|
|
e99c3d4705 | ||
|
|
d23491646a | ||
|
|
1d740a63bd | ||
|
|
d1897fabf0 | ||
|
|
d4178d6440 | ||
|
|
f4d42289d4 | ||
|
|
d0def466da | ||
|
|
959f44502b | ||
|
|
1840541f6d | ||
|
|
c5ec6927b3 | ||
|
|
7beaf3705e | ||
|
|
792ffa2d26 | ||
|
|
bbd61977f1 | ||
|
|
e3d1fa2686 | ||
|
|
293d3b4fb3 | ||
|
|
e1d8155565 | ||
|
|
c37b27a926 | ||
|
|
6b3a05e23f | ||
|
|
0e92bb58b0 | ||
|
|
63cbd4deb0 | ||
|
|
17bcd4e2ab | ||
|
|
72f301c655 | ||
|
|
a62a8518b9 | ||
|
|
fa169d6aa2 | ||
|
|
d2bcb86e1e | ||
|
|
ed7361622b | ||
|
|
3117ec5a7d | ||
|
|
cb4716f403 | ||
|
|
b48c0e968f | ||
|
|
aa2ed5fb0c | ||
|
|
8b7a279c61 | ||
|
|
b286e9d337 | ||
|
|
d671c3d9fa | ||
|
|
7086f2dc89 | ||
|
|
7e8bb9ea00 | ||
|
|
4e46bb6671 | ||
|
|
de35658096 | ||
|
|
034f5db3bd | ||
|
|
57375bfd73 | ||
|
|
b846e33ee3 | ||
|
|
cc9b817f0e | ||
|
|
0d419aba8a | ||
|
|
ae22321d9c | ||
|
|
87169febf8 | ||
|
|
dd044844e5 | ||
|
|
0c8c596ee5 | ||
|
|
b9496fef1d | ||
|
|
b4b9d3a4b7 | ||
|
|
0128c89f8d | ||
|
|
9e77d06c72 | ||
|
|
25bb1cc957 | ||
|
|
2c6f8299f0 | ||
|
|
6a2773c3ac | ||
|
|
1eea917121 | ||
|
|
ea1bbbabfa | ||
|
|
399d2bc73c | ||
|
|
0759dbcdc9 | ||
|
|
1ae0f9c19d | ||
|
|
e8364a03bc | ||
|
|
046d88ab2d | ||
|
|
f161f78a33 | ||
|
|
1912444886 | ||
|
|
b6ef5a0a3d | ||
|
|
401c88adbb | ||
|
|
42984d1bfb | ||
|
|
6997082b03 | ||
|
|
139217dc79 | ||
|
|
2cc2a857a2 | ||
|
|
7dfb463ba9 | ||
|
|
da07871bc6 | ||
|
|
530d2309e7 | ||
|
|
7e7a5d38f8 | ||
|
|
ecf949dee0 | ||
|
|
9b0ba10b0b | ||
|
|
9f9c4cf32c | ||
|
|
536ebf604f | ||
|
|
03a616b737 | ||
|
|
0b05f67114 | ||
|
|
0ede690580 | ||
|
|
d81545a871 | ||
|
|
1cda1fc201 | ||
|
|
490dad7838 | ||
|
|
13ecbb8bce | ||
|
|
3346bfc9a8 | ||
|
|
c5de65f115 | ||
|
|
4fffcf9975 | ||
|
|
8962d9b293 | ||
|
|
050c1560e8 | ||
|
|
68b3041f50 | ||
|
|
1ddd153399 | ||
|
|
df0a60caae | ||
|
|
675c86582d | ||
|
|
e6d01ed1a3 | ||
|
|
d8d1064e05 | ||
|
|
5d04cb81ba | ||
|
|
5d5906e980 | ||
|
|
2e7b862ad3 | ||
|
|
ad86e22824 | ||
|
|
536b8a213b | ||
|
|
2e13877926 | ||
|
|
967d63dec4 | ||
|
|
573c4268b6 | ||
|
|
f19e83dcf1 | ||
|
|
caabe8fc87 | ||
|
|
7c4e5309fc | ||
|
|
542124e90c | ||
|
|
e0d02be0f5 | ||
|
|
461e6d1b5b | ||
|
|
d767e6d7eb | ||
|
|
bff1584012 | ||
|
|
3d91a11b95 | ||
|
|
1349b46a8c | ||
|
|
74330ba1dd | ||
|
|
64ab227f62 | ||
|
|
1c51fbd1b4 | ||
|
|
4c2dd553f2 | ||
|
|
2fb985afa4 | ||
|
|
44c93d5074 | ||
|
|
dcf07a46aa | ||
|
|
284a9e0612 | ||
|
|
60349a8690 | ||
|
|
64072be83c | ||
|
|
229abb8412 | ||
|
|
7b1d1fd288 | ||
|
|
1ca1f6ad22 | ||
|
|
0ad66f4bc4 | ||
|
|
d5757c4fb8 | ||
|
|
7fe40bce86 | ||
|
|
5da3d64ede | ||
|
|
2e93b06ac0 | ||
|
|
1e6aa4b40f | ||
|
|
262383395d | ||
|
|
127226c421 | ||
|
|
fabcb021cb | ||
|
|
60ab1ab83e | ||
|
|
1f37095087 | ||
|
|
93c2f70b64 | ||
|
|
b0562df6bb | ||
|
|
65d6a5c774 | ||
|
|
650af0f7b0 | ||
|
|
cf9de25c25 | ||
|
|
fc4009aa50 | ||
|
|
d04cf4d897 | ||
|
|
2e45c67ef2 | ||
|
|
b6d8e1f842 | ||
|
|
284bc364fe | ||
|
|
a050654b4c | ||
|
|
7311dae483 | ||
|
|
c57c3cd1d3 | ||
|
|
3ec5e85485 | ||
|
|
ff95af0367 | ||
|
|
aa9c7d5435 | ||
|
|
dcc9f33357 | ||
|
|
1ace645505 | ||
|
|
dc2b87dce1 | ||
|
|
8e47f5d494 | ||
|
|
333d381f41 | ||
|
|
f9b064cc19 | ||
|
|
116a6c1b2e | ||
|
|
c4506b8e6c | ||
|
|
6786a7be4a | ||
|
|
bb370a304d | ||
|
|
fdcf53c688 | ||
|
|
d3f575547c | ||
|
|
68797e51c6 | ||
|
|
c76c55cdee | ||
|
|
f529ec3018 | ||
|
|
ad667be0d7 | ||
|
|
133fa09261 | ||
|
|
acf19cebf8 | ||
|
|
5dfa4c0840 | ||
|
|
f918602f58 | ||
|
|
2cf2dd24a4 | ||
|
|
eefb069d08 | ||
|
|
3dcffc7df8 | ||
|
|
b121277142 | ||
|
|
d283fcf7b4 | ||
|
|
e7f151ad02 | ||
|
|
0710b781d3 | ||
|
|
7c01ad6917 | ||
|
|
56d2f06631 | ||
|
|
9e47911b19 | ||
|
|
ef80497fbe | ||
|
|
e22cf106c2 | ||
|
|
5ffb270ec1 | ||
|
|
f85f3b0f25 | ||
|
|
e7ec83d626 | ||
|
|
11479cd8c3 | ||
|
|
176e760de1 | ||
|
|
430c60ed1a | ||
|
|
dfea3623f6 | ||
|
|
b38783e4cb | ||
|
|
9382a4c21b | ||
|
|
3cd4c5566f | ||
|
|
601c0977df | ||
|
|
c56f036bab | ||
|
|
44dd50c0ef | ||
|
|
56919ae45f | ||
|
|
6c14e7127d | ||
|
|
578af00b0d | ||
|
|
d6c0bf69b6 | ||
|
|
e8884b4ec0 | ||
|
|
5e79609955 | ||
|
|
4950c96f1c | ||
|
|
51b0cf535e | ||
|
|
4cc17a7f6e | ||
|
|
dca07c5634 | ||
|
|
fd42294faf | ||
|
|
c1246e8c4e | ||
|
|
59fc902cfb | ||
|
|
1fe9755d01 | ||
|
|
1da09a4706 | ||
|
|
f3c591469b | ||
|
|
b1200f9f59 | ||
|
|
47617d6c04 | ||
|
|
4794ab6095 | ||
|
|
bc85767f19 | ||
|
|
e37c218c2a | ||
|
|
a0aaa23904 | ||
|
|
27a6c72091 | ||
|
|
2dcc66f03e | ||
|
|
d70a05a088 | ||
|
|
c2317edf8a | ||
|
|
cb7ac404d9 | ||
|
|
5abc6c995f | ||
|
|
0f21c39e49 | ||
|
|
f6513127ce | ||
|
|
ddd72b2b37 | ||
|
|
7f5df1fb66 | ||
|
|
2e71b64de1 | ||
|
|
45f1f9263f | ||
|
|
878288f06a | ||
|
|
406cdf8d16 | ||
|
|
5b28b024ae | ||
|
|
7c693d8107 | ||
|
|
b8a6d1ac4d | ||
|
|
40533f50df | ||
|
|
539ced191b | ||
|
|
1a400b890b | ||
|
|
ebe5a5579c | ||
|
|
afb18ca75b | ||
|
|
01c62932bd | ||
|
|
6cd8db7b28 | ||
|
|
bb46d91bc6 | ||
|
|
3cd5322496 | ||
|
|
cadecdcab7 | ||
|
|
cd4030b7db | ||
|
|
0a2264cad4 | ||
|
|
bb2a02daa8 | ||
|
|
5991195062 | ||
|
|
54c4055af3 | ||
|
|
cb07210bc7 | ||
|
|
3e40d624a8 | ||
|
|
63ce675914 | ||
|
|
14e5e87a4d | ||
|
|
e7e81c6639 | ||
|
|
23d0601d82 | ||
|
|
6db9138eeb | ||
|
|
6a7c200002 | ||
|
|
e3f70b7125 | ||
|
|
a25e859fa7 | ||
|
|
5b2af1f6b3 | ||
|
|
59df72c4b0 | ||
|
|
4e2eb2f24c | ||
|
|
b905f4b8aa | ||
|
|
fefe87ed1e | ||
|
|
b66905c2f6 | ||
|
|
39472e4d81 | ||
|
|
85fba1325a | ||
|
|
0f39f05fa1 | ||
|
|
8d551c2664 | ||
|
|
346a22f684 | ||
|
|
b1571e4437 | ||
|
|
5ac2abe3ab | ||
|
|
5b15426cc6 | ||
|
|
1ac944b7c1 | ||
|
|
fd90dbb123 | ||
|
|
6ccad91537 | ||
|
|
c89db53ebf | ||
|
|
4ffd70a42a | ||
|
|
bbeb48a60d | ||
|
|
aefe9bc116 | ||
|
|
bcb95f647d | ||
|
|
145a7fa146 | ||
|
|
06f0b6030a | ||
|
|
191ee3a0ed | ||
|
|
f6358694ae | ||
|
|
af14d65a98 | ||
|
|
9fe75dc521 | ||
|
|
0051bea034 | ||
|
|
76c79dba8e | ||
|
|
84dc82506a | ||
|
|
ae1625734c | ||
|
|
e2ce4c0fa9 | ||
|
|
a06a15e769 | ||
|
|
7c5de29b61 | ||
|
|
5f9befebae | ||
|
|
6a7b885891 | ||
|
|
cd8e7bbdca | ||
|
|
5d731ad8c3 | ||
|
|
7964270929 | ||
|
|
ea513d392e | ||
|
|
feba9024eb | ||
|
|
b3e16ce8e0 | ||
|
|
31dd77c694 | ||
|
|
ae58f89fbf | ||
|
|
b3bc36b253 | ||
|
|
7287509fef | ||
|
|
b1c49045a8 | ||
|
|
0d5634475c | ||
|
|
e6bfe7d40c | ||
|
|
811cd0653f | ||
|
|
e2b8a21ff5 | ||
|
|
24c7941f65 | ||
|
|
600a9ee4c5 | ||
|
|
fdfdfedf01 | ||
|
|
a67688322d | ||
|
|
6fe057e277 | ||
|
|
f23e8bfb02 | ||
|
|
eab9da98f2 | ||
|
|
f161992836 | ||
|
|
40e13b91fe | ||
|
|
af6824605b | ||
|
|
babf58f8d2 | ||
|
|
968f5d7693 | ||
|
|
4cc6bd69ae | ||
|
|
199437e859 | ||
|
|
e5fac0a01d | ||
|
|
5d14b84969 | ||
|
|
bcccd06cee | ||
|
|
6b0ab9a49a | ||
|
|
023002ae73 | ||
|
|
579d384c04 | ||
|
|
e2e1524454 | ||
|
|
4a5853c1c2 | ||
|
|
64756d14d0 | ||
|
|
bac2ef601d | ||
|
|
cf3bab89f9 | ||
|
|
dfe41ad984 | ||
|
|
b784bebaa9 | ||
|
|
bcf727cf58 | ||
|
|
ecd0a53412 | ||
|
|
3456434e37 | ||
|
|
454c5b1ed2 | ||
|
|
dc2c437a1a | ||
|
|
819d3f5ded | ||
|
|
4f802689f2 | ||
|
|
9cbbe55598 | ||
|
|
7e2dafdcb8 | ||
|
|
c7873d68f7 | ||
|
|
939ec526a8 | ||
|
|
b20a635db0 | ||
|
|
a656bee0df | ||
|
|
42f07e3f14 | ||
|
|
5803b05bd5 | ||
|
|
ccf0ba50c4 | ||
|
|
f3bc977d32 | ||
|
|
80609e0816 | ||
|
|
795d481ca6 | ||
|
|
1b936b9af8 | ||
|
|
f141cc28b0 | ||
|
|
4cb64b58be | ||
|
|
028af34d3d | ||
|
|
ce54997be5 | ||
|
|
3d213fa713 | ||
|
|
e71f3790ce | ||
|
|
67b9cba4d3 | ||
|
|
78a471f684 | ||
|
|
d4289c5d54 | ||
|
|
0c17c5440a | ||
|
|
c4116da564 | ||
|
|
d0821953bb | ||
|
|
e782adef94 | ||
|
|
d3572c2562 | ||
|
|
1f3838b155 | ||
|
|
6aa459073e | ||
|
|
0932c33185 | ||
|
|
5e542aa841 | ||
|
|
6d53abd5af | ||
|
|
3ea58bf8db | ||
|
|
71a4c2c3d2 | ||
|
|
a3e391a523 | ||
|
|
9cb15b302c | ||
|
|
15c1a28d37 | ||
|
|
d3a500e54e | ||
|
|
a0a5eb8aef | ||
|
|
a92955eade | ||
|
|
f043f3d4f9 | ||
|
|
992a057a1b | ||
|
|
07da1e7e1a | ||
|
|
2c07222ef6 | ||
|
|
918e315d47 | ||
|
|
c824731bc6 | ||
|
|
0c39caa622 | ||
|
|
1f1e28baf8 | ||
|
|
0c303389d6 | ||
|
|
01a896ef5b | ||
|
|
0e5e760135 | ||
|
|
7e7d877874 | ||
|
|
57ccb6fd6b | ||
|
|
efa2876e29 | ||
|
|
59ef7d8fd1 | ||
|
|
1f308c9ec3 | ||
|
|
4943d3aa53 | ||
|
|
828d561113 | ||
|
|
fcf72a7123 | ||
|
|
d3f5bc6e2d | ||
|
|
f525a05be8 | ||
|
|
fc7ec4299e | ||
|
|
21d053b1b6 | ||
|
|
68e64a5aa7 | ||
|
|
8e718fe288 | ||
|
|
efec9070e1 | ||
|
|
e3646d4d4a | ||
|
|
4219f16f61 | ||
|
|
c3b1802e95 | ||
|
|
40fe078021 | ||
|
|
a5a6600e74 | ||
|
|
03b9303f22 | ||
|
|
b5a59ea6f9 | ||
|
|
c6b2124129 | ||
|
|
d320a6facb | ||
|
|
0793c2cb8c | ||
|
|
d14755abb8 | ||
|
|
abd4aa2e6b | ||
|
|
58417e78e5 | ||
|
|
390eb1c6e9 | ||
|
|
d4c6530a72 | ||
|
|
ff17b44a41 | ||
|
|
5bd2d47571 | ||
|
|
f8e475cd34 | ||
|
|
a05e063949 | ||
|
|
eb06a90109 | ||
|
|
e2f6632fee | ||
|
|
5c5c583dcc | ||
|
|
0d8d5c02d0 | ||
|
|
382e0c6ad2 | ||
|
|
a8d1c44408 | ||
|
|
78b4318c34 | ||
|
|
b47031a099 | ||
|
|
0f7b65a921 | ||
|
|
33f7903aeb | ||
|
|
f3c2740917 | ||
|
|
09a57c7a52 | ||
|
|
9068f0606e | ||
|
|
c577b7e369 | ||
|
|
5850464ba7 | ||
|
|
50e240d5e4 | ||
|
|
75c2a45b25 | ||
|
|
c958d63897 | ||
|
|
b633b8d0d3 | ||
|
|
76948416a9 | ||
|
|
f4a527c57c | ||
|
|
c491baff0e | ||
|
|
6d05fc6f57 | ||
|
|
ca53add820 | ||
|
|
6fe3099ab4 | ||
|
|
a34eceb327 | ||
|
|
c9042c3186 | ||
|
|
b46fe0d51c | ||
|
|
6d1d3173fe | ||
|
|
030d044d03 | ||
|
|
29fb8e0f74 | ||
|
|
6e326976d5 | ||
|
|
03a7d72a62 | ||
|
|
f913febd71 | ||
|
|
daa0fbdc6b | ||
|
|
d4c52b599d | ||
|
|
ec88373eb7 | ||
|
|
4286cafdeb | ||
|
|
3880d8e2f2 | ||
|
|
671c84ad44 | ||
|
|
a0d687bb24 | ||
|
|
704385ff0a | ||
|
|
81a657edec | ||
|
|
9d0bad29c0 | ||
|
|
2fb8e32104 | ||
|
|
c522e499b2 | ||
|
|
4700955480 | ||
|
|
2c66081fa4 | ||
|
|
855e88da43 | ||
|
|
ad302db9a8 | ||
|
|
bfa5fff500 | ||
|
|
01c64fd554 | ||
|
|
13a2b92a32 | ||
|
|
29e79f8f61 | ||
|
|
8f7527ede0 | ||
|
|
7cd149a4d8 | ||
|
|
e45912fd8a | ||
|
|
56c4ba67c6 | ||
|
|
7e7ce2f38e | ||
|
|
7dc9eba2d0 | ||
|
|
f91d96b51a | ||
|
|
bc19609147 | ||
|
|
1ccaf3a0bd | ||
|
|
03bfd829da | ||
|
|
e1f7a1e0a0 | ||
|
|
ceeac0ecf0 | ||
|
|
c9d0eac739 | ||
|
|
8f24d924ee | ||
|
|
8537cc9edf | ||
|
|
58f3985567 | ||
|
|
872db67f21 | ||
|
|
006f90997a | ||
|
|
26b4776394 | ||
|
|
66c64459e6 | ||
|
|
dc8657f57f | ||
|
|
9d647b90e0 | ||
|
|
f5730c950b | ||
|
|
15d37daebd | ||
|
|
795c9876af | ||
|
|
45f653167d | ||
|
|
403d9b6ac1 | ||
|
|
722af5f659 | ||
|
|
471b9f02ec | ||
|
|
fd294b6f98 | ||
|
|
88baaa72be | ||
|
|
61084cf1ba | ||
|
|
5b63f0755a | ||
|
|
9eb5cf6c98 | ||
|
|
679db5a22b | ||
|
|
0e35168bdb | ||
|
|
035dcc7ab7 | ||
|
|
252deed5b9 | ||
|
|
c2c4cad753 | ||
|
|
42e76477cf | ||
|
|
1eade74e5a | ||
|
|
f1f0fa0aa9 | ||
|
|
deef158822 | ||
|
|
fef2006663 | ||
|
|
5c97fd576a | ||
|
|
c4eb6b7b65 | ||
|
|
31324761cc | ||
|
|
e495f03ee9 | ||
|
|
f5769627e4 | ||
|
|
06ad73f85b | ||
|
|
fa20363853 | ||
|
|
2564432e71 | ||
|
|
addf47600d | ||
|
|
7f534a7966 | ||
|
|
eabffece1f | ||
|
|
afed842ad1 | ||
|
|
c46cfb5d47 | ||
|
|
34fe42bbd9 | ||
|
|
0c1d96b749 | ||
|
|
9b67f52d56 | ||
|
|
d37907d35d | ||
|
|
fee8d0cf78 | ||
|
|
f5f9c6b81f | ||
|
|
4e3460a34b | ||
|
|
8545b6ce6b | ||
|
|
e417903c23 | ||
|
|
81eae3fa48 | ||
|
|
90c58087e8 | ||
|
|
19bc1e6313 | ||
|
|
4a4e8c87b8 | ||
|
|
f04e559dc2 | ||
|
|
8e5e657344 | ||
|
|
a4f1f62068 | ||
|
|
a3e279f06f | ||
|
|
d11954e80c | ||
|
|
812170ebce | ||
|
|
fdd3c77298 | ||
|
|
342de209a2 | ||
|
|
caeb32488e | ||
|
|
ff7e70f4d5 | ||
|
|
950f51909c | ||
|
|
f86e6d344c | ||
|
|
08581282dd | ||
|
|
e1e47e76ec | ||
|
|
3ff059848c | ||
|
|
22c7df5936 | ||
|
|
81a44d1340 | ||
|
|
2c089e6166 | ||
|
|
589dae7b0c | ||
|
|
3ff13189aa | ||
|
|
7151c3fac1 | ||
|
|
3e023b77dd | ||
|
|
e3fc89890c | ||
|
|
ce2a6cfe5c | ||
|
|
31d9eaf54c | ||
|
|
781c445d14 | ||
|
|
26a416399f | ||
|
|
f7dc7f039e | ||
|
|
3c74fea087 | ||
|
|
be0635bfd3 | ||
|
|
6723ef95c2 | ||
|
|
1a8fd62680 | ||
|
|
8b57ed46b1 | ||
|
|
25c08e56c2 | ||
|
|
0f148b6ab6 | ||
|
|
47575fe357 | ||
|
|
7c14453b5a | ||
|
|
a47d5536fa | ||
|
|
db8f7f21e8 | ||
|
|
3c312c55f1 | ||
|
|
2d11419cba | ||
|
|
07a4508944 | ||
|
|
62913739bb | ||
|
|
55e9d8d944 | ||
|
|
a9439d58c7 | ||
|
|
800ad40c4c | ||
|
|
62864637a3 | ||
|
|
4d4ac7ea24 | ||
|
|
119651482d | ||
|
|
ecf0a1a736 | ||
|
|
94942d1ac4 | ||
|
|
b0a5b54949 | ||
|
|
ac57eab8ac | ||
|
|
74a4144193 | ||
|
|
5c44cb0f01 | ||
|
|
c044d711ef | ||
|
|
f2132f6a7d | ||
|
|
69871b15ff | ||
|
|
f4ec02a592 | ||
|
|
53f7743678 | ||
|
|
15893bc558 | ||
|
|
73b974f1b5 | ||
|
|
0e7bdc208b | ||
|
|
e0a07b7a92 | ||
|
|
4da58e8846 | ||
|
|
966b9e5c2b | ||
|
|
1625192c81 | ||
|
|
c5e8c6603c | ||
|
|
37e541d326 | ||
|
|
862a827fe6 | ||
|
|
b96c5c9e4b | ||
|
|
f7e91f1f08 | ||
|
|
2d77178ba3 | ||
|
|
b38e6d8bf3 | ||
|
|
b601cdb6a5 | ||
|
|
2803154213 | ||
|
|
ae5297e6d7 | ||
|
|
fa7490fb38 | ||
|
|
bad80521a8 | ||
|
|
8303e30033 | ||
|
|
27de1e271e | ||
|
|
98cecfe940 | ||
|
|
2e65538fb5 | ||
|
|
e6371cbf9c | ||
|
|
0b8b6ac56a | ||
|
|
cc17cc4af7 | ||
|
|
6afd7e1a38 | ||
|
|
91e22c1fb3 | ||
|
|
ad6129816d | ||
|
|
409db9d7ef | ||
|
|
2ccd58e917 | ||
|
|
7585ad430a | ||
|
|
c105c5a449 | ||
|
|
54065b59a1 | ||
|
|
f9250ae522 | ||
|
|
2f8621ed3d | ||
|
|
98a3e7cffa | ||
|
|
d7f2966216 | ||
|
|
8687b214e7 | ||
|
|
f5f1f0da8e | ||
|
|
818359bfd0 | ||
|
|
8174005ac8 | ||
|
|
0180cae8c3 | ||
|
|
dd1ea541ec | ||
|
|
19aac5b14c | ||
|
|
f3f8a211cd | ||
|
|
3edcbc3b99 | ||
|
|
5a1cc8745e | ||
|
|
12495547c4 | ||
|
|
ff654ab094 | ||
|
|
e55f55cd3e | ||
|
|
29aad066f0 | ||
|
|
74d3bdc68c | ||
|
|
7f9b3a8666 | ||
|
|
426f6de16f | ||
|
|
cf19b81dd4 | ||
|
|
d4c7e95092 | ||
|
|
aa07b5bdd8 | ||
|
|
c7cbb22667 | ||
|
|
ff72b68731 | ||
|
|
433be0e46b | ||
|
|
900607034e | ||
|
|
733e6fa14f | ||
|
|
cd72eb20c6 | ||
|
|
d754e616a5 | ||
|
|
d613e0a488 | ||
|
|
942fa53ed9 | ||
|
|
1729841083 | ||
|
|
315d83bc88 | ||
|
|
223aa0ccd5 | ||
|
|
38494a48d8 | ||
|
|
38456bddb5 | ||
|
|
b8a12b0e5b | ||
|
|
2d37c0aa42 | ||
|
|
c8c693db53 | ||
|
|
cdff0fceea | ||
|
|
3b6f47aea1 | ||
|
|
7bc37651c3 | ||
|
|
4fe43c3e50 | ||
|
|
0826b7c3ca | ||
|
|
d219c5c4c6 | ||
|
|
1a498348ee | ||
|
|
c6b03555f7 | ||
|
|
bb1a270532 | ||
|
|
69ea4b846a | ||
|
|
373a0e4a7d | ||
|
|
f4f5ab2392 | ||
|
|
b20b3229bf | ||
|
|
77fb93bb61 | ||
|
|
ec72b46dcb | ||
|
|
367f1813de | ||
|
|
74116057a7 | ||
|
|
9deb40216e | ||
|
|
daef76ec0b | ||
|
|
569a29fbbc | ||
|
|
0c06bfd3d9 | ||
|
|
8f46f2cac8 | ||
|
|
8f48515b80 | ||
|
|
c7dab4abea | ||
|
|
5e4c4725bc | ||
|
|
9861d74221 | ||
|
|
bb3b606820 | ||
|
|
09fb51189e | ||
|
|
bd19899bbc | ||
|
|
b69753fb76 | ||
|
|
9dc1b5f6f5 | ||
|
|
55c1ac36e3 | ||
|
|
c12e6cdc09 | ||
|
|
85562e8b95 | ||
|
|
fd34cc0b87 | ||
|
|
6322393782 | ||
|
|
1f9e954610 | ||
|
|
6491746809 | ||
|
|
6d2f1ff81e | ||
|
|
c724e5fb20 | ||
|
|
600726976c | ||
|
|
49b5c2058d | ||
|
|
21df21b144 | ||
|
|
620e71e800 | ||
|
|
db2216848d | ||
|
|
cfffe91ed5 | ||
|
|
a95aed1047 | ||
|
|
2883a36c76 | ||
|
|
ac4245013f | ||
|
|
b09e484492 | ||
|
|
dc63ddb010 | ||
|
|
09778a8eab | ||
|
|
8cbe9f1bd0 | ||
|
|
be61689458 | ||
|
|
4b63bc051e | ||
|
|
a098ba5e79 | ||
|
|
edee4b3fe5 | ||
|
|
0c9013e60e | ||
|
|
701c4bcf27 | ||
|
|
22f2fac56b | ||
|
|
605125c0e7 | ||
|
|
65d0ee126a | ||
|
|
4db6435090 | ||
|
|
4383fd3c45 | ||
|
|
b6be76b0ab | ||
|
|
92d8fa1193 | ||
|
|
9c51bf3edf | ||
|
|
cf0e4e6f8c | ||
|
|
c3719f35e3 | ||
|
|
0b1f074bcf | ||
|
|
7fe8514434 | ||
|
|
37c4dcf8ba | ||
|
|
e33dd3c499 | ||
|
|
94be52886e | ||
|
|
6646aa5644 | ||
|
|
d556eba296 | ||
|
|
a5b573b2d3 | ||
|
|
18d30ea8fa | ||
|
|
4324ffccf4 | ||
|
|
182ee9d7e4 | ||
|
|
68c1cfed46 | ||
|
|
1159784538 | ||
|
|
e683b5fdec | ||
|
|
3c409c5070 | ||
|
|
4b7361dfe7 | ||
|
|
037d5c11a5 | ||
|
|
95d857e091 | ||
|
|
4efa087cd1 | ||
|
|
60f0003436 | ||
|
|
fdb265cd6e | ||
|
|
34704a17f2 | ||
|
|
4a959ec2fd | ||
|
|
f182886fce | ||
|
|
2fbaddbecf | ||
|
|
cafcecf03d | ||
|
|
49473845cf | ||
|
|
d4d4ed22a0 | ||
|
|
240ed6f0b1 | ||
|
|
084a24e958 | ||
|
|
cd9e3648e9 | ||
|
|
7ed51be4e6 | ||
|
|
0c8358ae67 | ||
|
|
25cefd9129 | ||
|
|
af75c0ca0c | ||
|
|
a91b2629d3 | ||
|
|
de9070dba1 | ||
|
|
813b518b6f | ||
|
|
c47e800f60 | ||
|
|
8398f45d43 | ||
|
|
aeaaa50f6c | ||
|
|
f33ce846b8 | ||
|
|
4718b9dc07 | ||
|
|
fba00f7c5a | ||
|
|
3360383fd7 | ||
|
|
6c30f62693 | ||
|
|
ab5b0382da | ||
|
|
671f3f5890 | ||
|
|
9bae445624 | ||
|
|
30529ccdf5 | ||
|
|
a8a02d3a2e | ||
|
|
5da33ca244 | ||
|
|
04c1e95f08 | ||
|
|
2186fc1fc7 | ||
|
|
fb49a9192e | ||
|
|
ccbc5abec6 | ||
|
|
7aa6fd479d | ||
|
|
3fcc16c1a0 | ||
|
|
b3e0298189 | ||
|
|
7e1fe7d852 | ||
|
|
5d7d77d4b6 | ||
|
|
418856769b | ||
|
|
46a32dd3ee | ||
|
|
ecb4dc57b4 | ||
|
|
89d426470b | ||
|
|
23c7a1b5b7 | ||
|
|
3b21e9434f | ||
|
|
d4a4428e64 | ||
|
|
2dfc057135 | ||
|
|
a25eebef9b | ||
|
|
741c4ca15a | ||
|
|
0bcdf2e4dc | ||
|
|
cd5a720211 | ||
|
|
5cb04946b0 | ||
|
|
c8953c6275 | ||
|
|
e8dc9c9454 | ||
|
|
a0c325681f | ||
|
|
8d3bf19422 | ||
|
|
4477867ef4 | ||
|
|
e696c884dc | ||
|
|
80bcaa49e6 | ||
|
|
0096c1bb02 | ||
|
|
38b37a068d | ||
|
|
0281f31df2 | ||
|
|
40b182c550 | ||
|
|
d1dedc7511 | ||
|
|
04cd9b3eb6 | ||
|
|
de6003367d | ||
|
|
a5f42eeddf | ||
|
|
a8ba041b67 | ||
|
|
e700fc6f34 | ||
|
|
af29d3d257 | ||
|
|
487701a143 | ||
|
|
f32e037c58 | ||
|
|
8bd903dd96 | ||
|
|
560c100484 | ||
|
|
52444d177b | ||
|
|
b4f7ff29ef | ||
|
|
f7c6a5bfa2 | ||
|
|
6fe14f7a6b | ||
|
|
786e5addd8 | ||
|
|
2e9a15f523 | ||
|
|
bb0d2ddc53 | ||
|
|
702fb014a5 | ||
|
|
834eab9457 | ||
|
|
a85da04601 | ||
|
|
414f1c27e4 | ||
|
|
c76e2eb900 | ||
|
|
c523e15302 | ||
|
|
2dc8de295d | ||
|
|
d645fd6327 | ||
|
|
219a7f3a07 | ||
|
|
d95e3e0055 | ||
|
|
2cc31ff425 | ||
|
|
8258fd7d9f | ||
|
|
784cca2233 | ||
|
|
436539a700 | ||
|
|
dcb3da9f28 | ||
|
|
a354c841f1 | ||
|
|
3824f064cd | ||
|
|
cba6db752b | ||
|
|
a458e26581 | ||
|
|
9d68727a84 | ||
|
|
38b9a874e0 | ||
|
|
7a680fb9f2 | ||
|
|
a5f9262adb | ||
|
|
b05e32fa8c | ||
|
|
53d8cff835 | ||
|
|
00fe97ff88 | ||
|
|
607511fd64 | ||
|
|
8663c265d8 | ||
|
|
6c5d35d6ce | ||
|
|
95532cb318 | ||
|
|
4d91bc5908 | ||
|
|
b13900402d | ||
|
|
1bb6c03bd0 | ||
|
|
1445949e31 | ||
|
|
360d3834ca | ||
|
|
aacdcad529 | ||
|
|
ad9341835f | ||
|
|
b028adb6af | ||
|
|
39f683b272 | ||
|
|
a6c46c89eb | ||
|
|
d534cf6f02 | ||
|
|
dd4326f7c4 | ||
|
|
40aecd688e | ||
|
|
63730a6e2c | ||
|
|
4d4d26aef8 | ||
|
|
de6b32d8c6 | ||
|
|
a0af7f0524 | ||
|
|
c043bd3422 | ||
|
|
18ae1d6940 | ||
|
|
d6f64f9773 | ||
|
|
db99a4cb90 | ||
|
|
108689661f | ||
|
|
d3e00dba8e | ||
|
|
fcd33e5035 | ||
|
|
af9082cd9f | ||
|
|
6a0bb18fca | ||
|
|
8aa8d87781 | ||
|
|
4998af8d7a | ||
|
|
c6aa95f3f3 | ||
|
|
481be29366 | ||
|
|
3617b6ad8c | ||
|
|
3fb8e19a38 | ||
|
|
2ea2f1b4f2 | ||
|
|
26cb8ec4f1 | ||
|
|
7fe56bea86 | ||
|
|
11b16b8a86 | ||
|
|
de020ee695 | ||
|
|
3b83487611 | ||
|
|
09bab4f162 | ||
|
|
49fcc799ca | ||
|
|
10bc803775 | ||
|
|
4f40770fc6 | ||
|
|
a4495c6ef1 | ||
|
|
67d837c4ec | ||
|
|
138825af6d | ||
|
|
c093841336 | ||
|
|
2df1da4226 | ||
|
|
2792d60e2d | ||
|
|
656a3ace07 | ||
|
|
aec8e88c14 | ||
|
|
bdd5ca140d | ||
|
|
8b3b0def03 | ||
|
|
6440ece177 | ||
|
|
bd3518637c | ||
|
|
aef2a1c484 | ||
|
|
a4b28e5737 | ||
|
|
a3bc2eb836 | ||
|
|
3059da5805 | ||
|
|
18d5a492c8 | ||
|
|
160b0ea7d9 | ||
|
|
4dd1267bea | ||
|
|
b5c4328682 | ||
|
|
571fc69ef4 | ||
|
|
f51595cfc9 | ||
|
|
d54aea0036 | ||
|
|
51bb2974bc | ||
|
|
7a859061fd | ||
|
|
cefa9fcd75 | ||
|
|
d3bacd0b73 | ||
|
|
b94a98fc90 | ||
|
|
e0b2687231 | ||
|
|
cc6179a4dd | ||
|
|
e947bac4a3 | ||
|
|
11ecbb6ca7 | ||
|
|
322789cd4c | ||
|
|
f28464dba0 | ||
|
|
8f6456b1f8 | ||
|
|
1f32786c82 | ||
|
|
829c729ee9 | ||
|
|
5d3aacb892 | ||
|
|
741e9c5ed5 | ||
|
|
1408c1b623 | ||
|
|
c256f8d09e | ||
|
|
55c018c525 | ||
|
|
3fa94b5143 | ||
|
|
5127e2f89c | ||
|
|
3175fa3aca | ||
|
|
5614174b39 | ||
|
|
39fc52fe0a | ||
|
|
81188705b1 | ||
|
|
63c4873d8a | ||
|
|
1a85dcd890 | ||
|
|
27470fc504 | ||
|
|
65d18445d3 | ||
|
|
84dd54b33a |
18
.cvsignore → .gitignore
vendored
18
.cvsignore → .gitignore
vendored
@@ -1,19 +1,17 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
SimGear.spec
|
||||
aclocal.m4
|
||||
.deps
|
||||
autom4te.cache
|
||||
config.cache
|
||||
config.guess
|
||||
config.log
|
||||
config.status
|
||||
configure
|
||||
do-config.sh
|
||||
.cdtproject
|
||||
.project
|
||||
config.guess
|
||||
config.sub
|
||||
configure
|
||||
depcomp
|
||||
INSTALL
|
||||
install-sh
|
||||
missing
|
||||
mkinstalldirs
|
||||
aclocal.m4
|
||||
INSTALL
|
||||
SimGear.spec
|
||||
*.o
|
||||
lib*.a
|
||||
128
CMakeLists.txt
Normal file
128
CMakeLists.txt
Normal file
@@ -0,0 +1,128 @@
|
||||
cmake_minimum_required (VERSION 2.6)
|
||||
include (CheckFunctionExists)
|
||||
include (CheckIncludeFile)
|
||||
include (CheckCXXSourceCompiles)
|
||||
include (CPack)
|
||||
|
||||
project(SimGear)
|
||||
|
||||
set(SIMGEAR_VERSION "2.2.0")
|
||||
|
||||
#packaging
|
||||
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING")
|
||||
SET(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README")
|
||||
|
||||
# We have some custom .cmake scripts not in the official distribution.
|
||||
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
|
||||
|
||||
option(SIMGEAR_SHARED "Set to ON to build SimGear as a shared library/framework" OFF)
|
||||
option(SIMGEAR_HEADLESS "Set to ON to build SimGear with GUI/graphics support" OFF)
|
||||
option(JPEG_FACTORY "Enable JPEG-factory support" OFF)
|
||||
set(MSVC_3RDPARTY_DIR NOT_FOUND CACHE PATH "Location where the third-party dependencies are extracted")
|
||||
|
||||
if (MSVC_3RDPARTY_DIR)
|
||||
message(STATUS "3rdparty files located in ${MSVC_3RDPARTY_DIR}")
|
||||
set (CMAKE_LIBRARY_PATH ${MSVC_3RDPARTY_DIR}/3rdParty/lib ${MSVC_3RDPARTY_DIR}/install/msvc90/OpenScenegraph/lib )
|
||||
set (CMAKE_INCLUDE_PATH ${MSVC_3RDPARTY_DIR}/3rdParty/include ${MSVC_3RDPARTY_DIR}/install/msvc90/OpenScenegraph/include)
|
||||
set (BOOST_ROOT ${MSVC_3RDPARTY_DIR}/boost_1_44_0)
|
||||
set (OPENAL_INCLUDE_DIR ${MSVC_3RDPARTY_DIR}/3rdParty/include)
|
||||
set (ALUT_INCLUDE_DIR ${MSVC_3RDPARTY_DIR}/3rdParty/include)
|
||||
set (OPENAL_LIBRARY_DIR ${MSVC_3RDPARTY_DIR}/3rdParty/lib)
|
||||
endif (MSVC_3RDPARTY_DIR)
|
||||
|
||||
find_package(Boost REQUIRED)
|
||||
set (BOOST_CXX_FLAGS "-DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION -DBOOST_BIMAP_DISABLE_SERIALIZATION")
|
||||
|
||||
find_package(ZLIB REQUIRED)
|
||||
find_package(Threads REQUIRED)
|
||||
|
||||
if (${SIMGEAR_HEADLESS})
|
||||
message(STATUS "headlesss mode")
|
||||
set(NO_OPENSCENEGRAPH_INTERFACE 1)
|
||||
else()
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(OpenAL REQUIRED)
|
||||
find_package(ALUT REQUIRED)
|
||||
find_package(OpenSceneGraph 2.8.2 REQUIRED osgText osgSim osgDB osgParticle osgUtil)
|
||||
endif()
|
||||
|
||||
if(JPEG_FACTORY)
|
||||
message(STATUS "JPEG-factory enabled")
|
||||
find_package(JPEG REQUIRED)
|
||||
include_directories(${JPEG_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
check_include_file(sys/time.h HAVE_SYS_TIME_H)
|
||||
check_include_file(sys/timeb.h HAVE_SYS_TIMEB_H)
|
||||
check_include_file(unistd.h HAVE_UNISTD_H)
|
||||
check_include_file(windows.h HAVE_WINDOWS_H)
|
||||
|
||||
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
|
||||
check_function_exists(ftime HAVE_FTIME)
|
||||
check_function_exists(timegm HAVE_TIMEGM)
|
||||
check_function_exists(rint HAVE_RINT)
|
||||
|
||||
SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
|
||||
SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
|
||||
SET(CMAKE_RELWITHDEBINFO_POSTFIX "rd" CACHE STRING "add a postfix, usually empty on windows")
|
||||
SET(CMAKE_MINSIZEREL_POSTFIX "s" CACHE STRING "add a postfix, usually empty on windows")
|
||||
|
||||
# isnan might not be real symbol, so can't check using function_exists
|
||||
check_cxx_source_compiles(
|
||||
"#include <cmath>
|
||||
void f() { isnan(0.0);} "
|
||||
HAVE_ISNAN)
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
set(WARNING_FLAGS -Wall)
|
||||
endif(CMAKE_COMPILER_IS_GNUCXX)
|
||||
|
||||
if(WIN32)
|
||||
|
||||
if(MSVC)
|
||||
# turn off various warnings
|
||||
# foreach(warning 4244 4251 4267 4275 4290 4786 4305 4996)
|
||||
# SET(WARNING_FLAGS "${WARNING_FLAGS} /wd${warning}")
|
||||
# endforeach(warning)
|
||||
|
||||
set(MSVC_FLAGS "-DWIN32 -DNOMINMAX -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D__CRT_NONSTDC_NO_WARNINGS")
|
||||
endif(MSVC)
|
||||
|
||||
# assumed on Windows
|
||||
set(HAVE_GETLOCALTIME 1)
|
||||
endif(WIN32)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS} ${MSVC_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS} ${MSVC_FLAGS} ${BOOST_CXX_FLAGS}")
|
||||
|
||||
include_directories(${PROJECT_SOURCE_DIR})
|
||||
include_directories(${PROJECT_BINARY_DIR}/simgear)
|
||||
|
||||
include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}
|
||||
${Boost_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}
|
||||
${ALUT_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR} )
|
||||
|
||||
|
||||
add_definitions(-DHAVE_CONFIG_H)
|
||||
|
||||
# configure a header file to pass some of the CMake settings
|
||||
# to the source code
|
||||
configure_file (
|
||||
"${PROJECT_SOURCE_DIR}/simgear/simgear_config_cmake.h.in"
|
||||
"${PROJECT_BINARY_DIR}/simgear/simgear_config.h"
|
||||
)
|
||||
|
||||
install (FILES ${PROJECT_BINARY_DIR}/simgear/simgear_config.h DESTINATION include/simgear/)
|
||||
add_subdirectory(simgear)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
### uninstall target
|
||||
#-----------------------------------------------------------------------------
|
||||
CONFIGURE_FILE(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
ADD_CUSTOM_TARGET(uninstall
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
||||
|
||||
|
||||
67
CMakeModules/FindALUT.cmake
Normal file
67
CMakeModules/FindALUT.cmake
Normal file
@@ -0,0 +1,67 @@
|
||||
# Locate ALUT
|
||||
# This module defines
|
||||
# ALUT_LIBRARY
|
||||
# ALUT_FOUND, if false, do not try to link to ALUT
|
||||
# ALUT_INCLUDE_DIR, where to find the headers
|
||||
#
|
||||
# $ALUTDIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$ALUTDIR
|
||||
# used in building ALUT.
|
||||
#
|
||||
# Created by James Turner. This was influenced by the FindOpenAL.cmake module.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2005-2009 Kitware, Inc.
|
||||
#
|
||||
# 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.
|
||||
#=============================================================================
|
||||
# (To distributed this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
# Per my request, CMake should search for frameworks first in
|
||||
# the following order:
|
||||
# ~/Library/Frameworks/OpenAL.framework/Headers
|
||||
# /Library/Frameworks/OpenAL.framework/Headers
|
||||
# /System/Library/Frameworks/OpenAL.framework/Headers
|
||||
#
|
||||
# On OS X, this will prefer the Framework version (if found) over others.
|
||||
# People will have to manually change the cache values of
|
||||
# OPENAL_LIBRARY to override this selection or set the CMake environment
|
||||
# CMAKE_INCLUDE_PATH to modify the search paths.
|
||||
|
||||
FIND_PATH(ALUT_INCLUDE_DIR alut.h
|
||||
HINTS
|
||||
$ENV{ALUTDIR}
|
||||
PATH_SUFFIXES include/AL include/ALUT include
|
||||
PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local
|
||||
/usr
|
||||
/opt
|
||||
)
|
||||
|
||||
FIND_LIBRARY(ALUT_LIBRARY
|
||||
NAMES ALUT alut
|
||||
HINTS
|
||||
$ENV{ALUTDIR}
|
||||
PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
|
||||
PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local
|
||||
/usr
|
||||
/opt
|
||||
)
|
||||
|
||||
|
||||
SET(ALUT_FOUND "NO")
|
||||
IF(ALUT_LIBRARY AND ALUT_INCLUDE_DIR)
|
||||
SET(ALUT_FOUND "YES")
|
||||
ENDIF(ALUT_LIBRARY AND ALUT_INCLUDE_DIR)
|
||||
|
||||
23
CMakeModules/SimGearComponent.cmake
Normal file
23
CMakeModules/SimGearComponent.cmake
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
macro(simgear_component name includePath sources headers)
|
||||
|
||||
if (SIMGEAR_SHARED)
|
||||
foreach(s ${sources})
|
||||
set_property(GLOBAL
|
||||
APPEND PROPERTY ALL_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${s}")
|
||||
endforeach()
|
||||
|
||||
foreach(h ${headers})
|
||||
set_property(GLOBAL
|
||||
APPEND PROPERTY PUBLIC_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/${h}")
|
||||
endforeach()
|
||||
|
||||
else()
|
||||
set(libName "sg${name}")
|
||||
add_library(${libName} STATIC ${sources} )
|
||||
|
||||
install (TARGETS ${libName} ARCHIVE DESTINATION lib${LIB_SUFFIX})
|
||||
install (FILES ${headers} DESTINATION include/simgear/${includePath})
|
||||
endif()
|
||||
|
||||
endmacro()
|
||||
22
CMakeModules/cmake_uninstall.cmake.in
Normal file
22
CMakeModules/cmake_uninstall.cmake.in
Normal file
@@ -0,0 +1,22 @@
|
||||
IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||
ENDIF()
|
||||
|
||||
FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||
STRING(REGEX REPLACE "\n" ";" files "${files}")
|
||||
|
||||
FOREACH(file ${files})
|
||||
MESSAGE(STATUS "Uninstalling \"${file}\"")
|
||||
IF(EXISTS "${file}")
|
||||
EXEC_PROGRAM(
|
||||
"@CMAKE_COMMAND@" ARGS "-E remove \"${file}\""
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RETURN_VALUE rm_retval
|
||||
)
|
||||
IF(NOT "${rm_retval}" STREQUAL 0)
|
||||
MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"")
|
||||
ENDIF()
|
||||
ELSE()
|
||||
MESSAGE(STATUS "File \"${file}\" does not exist.")
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
2
Doxyfile
2
Doxyfile
@@ -22,7 +22,7 @@ PROJECT_NAME = SimGear
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.3.10
|
||||
PROJECT_NUMBER = 2.2.0
|
||||
|
||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||
# base path where the generated documentation will be put.
|
||||
|
||||
13
Makefile.am
13
Makefile.am
@@ -2,19 +2,14 @@ EXTRA_DIST = \
|
||||
acinclude.m4 \
|
||||
autogen.sh \
|
||||
DoxygenMain.cxx \
|
||||
project/VC8 \
|
||||
README.MSVC \
|
||||
README.zlib \
|
||||
projects \
|
||||
SimGear.dsp \
|
||||
SimGear.dsw
|
||||
README.plib \
|
||||
README.OpenAL \
|
||||
README.OSG \
|
||||
projects
|
||||
|
||||
SUBDIRS = simgear
|
||||
|
||||
dist-hook:
|
||||
(cd $(top_srcdir); $(HOME)/Projects/FlightGear/admin/am2dsp.pl)
|
||||
rm -rf `find $(distdir)/projects -name CVS`
|
||||
|
||||
#
|
||||
# Rule to build RPM distribution package
|
||||
#
|
||||
|
||||
12
NEWS
12
NEWS
@@ -1,3 +1,15 @@
|
||||
Version 1.9.0
|
||||
* Thu Dec 18 15:12:15 CST 2008
|
||||
|
||||
|
||||
Version 1.8.6
|
||||
* Mon Dec 1 14:02:47 CST 2008
|
||||
|
||||
|
||||
Version 1.8.5
|
||||
* October 30, 2008 (source code snapshot release)
|
||||
|
||||
|
||||
New in 0.3.10
|
||||
* April 5, 2006
|
||||
|
||||
|
||||
24
README.MSVC
24
README.MSVC
@@ -1,24 +0,0 @@
|
||||
This document describes how to build SimGear using the supplied workspace and
|
||||
project files.
|
||||
|
||||
Unpack the SimGear source file into your work directory. This creates a new
|
||||
subdirectory called SimGear-X.Y.Z. Rename this to SimGear. Before we can
|
||||
build SimGear you must unpack and build the third party libraries metakit and
|
||||
zlib. Sources for these are included in the SimGear/src-libs directory.
|
||||
Unpack these into the top level SimGear directory. At this point your
|
||||
directory structure should look something like this:
|
||||
|
||||
<work_dir>/
|
||||
SimGear/
|
||||
metakit-x.y.z/
|
||||
simgear/
|
||||
src-libs/
|
||||
zlib-x.y.z/
|
||||
|
||||
Now open the SimGear workspace. This workspace file contains projects for
|
||||
building metakit(mklib), SimGear and zlib. Select each project as the active
|
||||
project and build all. Order is unimportant since there are no dependencies
|
||||
between the projects.
|
||||
|
||||
The workspace and project files are generated by a perl script with extra
|
||||
input from the am2dsp.cfg file.
|
||||
27
README.OSG
Normal file
27
README.OSG
Normal file
@@ -0,0 +1,27 @@
|
||||
[This file is mirrored in both the FlightGear and SimGear packages.]
|
||||
|
||||
You *must* have OpenSceneGraph (OSG) installed to build this version of
|
||||
FlightGear.
|
||||
|
||||
Notice that FlightGear 1.9.0 requires at least version 2.7.8. Using earlier
|
||||
versions of OSG will yield serious rendering bugs.
|
||||
|
||||
You can get the latest version of OSG from:
|
||||
|
||||
http://www.openscenegraph.org/
|
||||
|
||||
Build notes:
|
||||
|
||||
Unzip the file OpenSceneGraph-x.x.zip and install using the following
|
||||
commands:
|
||||
|
||||
unzip OpenSceneGraph-x.x
|
||||
cd OpenSceneGraph
|
||||
ccmake .
|
||||
|
||||
[ While running ccmake: press 'c' to configure, press 'c' once more, and
|
||||
then press 'g' to generate and exit ]
|
||||
|
||||
make
|
||||
sudo make install
|
||||
|
||||
@@ -3,10 +3,27 @@
|
||||
You *must* have the development components of OpenAL installed on your system
|
||||
to build FlightGear!" You can get a copy here:
|
||||
|
||||
http://www.openal.org
|
||||
http://connect.creativelabs.com/openal/default.aspx
|
||||
|
||||
Build notes:
|
||||
|
||||
The OpenAL developers do not make "versioned" releases so we recommend that
|
||||
you pull the latest version via anonymous CVS (follow the instructions at
|
||||
the OpenAL web site) and build/install that.
|
||||
You can download a versioned release of the openal library from
|
||||
http://www.openal.org/downloads.html. Download the openal source,
|
||||
release 0.0.8 (dated February 11, 2006) and run:
|
||||
tar xjvf openal-soft-1.5.304.tar.bz2
|
||||
cd openal-soft-1.5.304/
|
||||
ccmake .
|
||||
|
||||
[ While running ccmake: press 'c' to configure, press 'c' once more, and
|
||||
then press 'g' to generate and exit ]
|
||||
|
||||
|
||||
The alut library is also required, but comes separately in the package
|
||||
freelut-1.1.0.tar.gz. This package can be downloaded from the same page
|
||||
(http://connect.creativelabs.com/openal/default.aspx). Download and run:
|
||||
tar xzvf freelut-1.1.0.tar.gz
|
||||
cd freealut-1.1.0
|
||||
./configure
|
||||
make
|
||||
sudo make install
|
||||
|
||||
|
||||
18
README.plib
18
README.plib
@@ -1,6 +1,6 @@
|
||||
[This file is mirrored in both the FlightGear and SimGear packages.]
|
||||
|
||||
You *must* have plib version 1.6.0 or later installed on your system
|
||||
You *must* have plib version 1.8.5 or later installed on your system
|
||||
to build FlightGear!" Flight Gear is no longer compatible with the
|
||||
earlier versions of the library.
|
||||
|
||||
@@ -14,3 +14,19 @@ You should be able to just run "./configure" to configure the package
|
||||
and use all of plib's defaults. Then run "make" followed by "make
|
||||
install". By default, plib installs itself into /usr so if you don't
|
||||
like this, be sure to specify an alternate prefix such as --prefix=/usr/local
|
||||
|
||||
As of this writing (2007-11-18), many linux distributions are shipped with a
|
||||
working version of plib, so chances are that this library is already
|
||||
installed. It should be noted, that currently plib version no longer compiles
|
||||
using recent versions of gcc (confirmed on version gcc 4.1.2, as shipped with
|
||||
SuSe 10.2). As a workaround, it is possible to either use plib SVN. Run the
|
||||
following commands:
|
||||
|
||||
|
||||
svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib
|
||||
cd plib
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
|
||||
2161
SimGear.dsp
2161
SimGear.dsp
File diff suppressed because it is too large
Load Diff
29
SimGear.dsw
29
SimGear.dsw
@@ -1,29 +0,0 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "SimGear"=".\SimGear.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
23
Thanks
23
Thanks
@@ -47,6 +47,18 @@ Jean-Francois Doue
|
||||
http://www.animats.com/simpleppp/ftp/public_html/topics/developers.html
|
||||
|
||||
|
||||
Melchior Franz
|
||||
METAR parser and fetcher. "material" animation (based on Jim Wilsons's
|
||||
"emission" animation). Debugging and extension of property listener
|
||||
features. Addition of removeChildren.
|
||||
|
||||
|
||||
Mathias Froehlich
|
||||
Reworked and cleaned up large parts of the infrastructure, of math
|
||||
files, animations and rendering in preparation of a transition to
|
||||
the OSG library. Added new handlers for shared and referenced objects.
|
||||
|
||||
|
||||
Bruce Finney <bfinney@gte.net>
|
||||
MSVC5 compatibility.
|
||||
|
||||
@@ -71,6 +83,10 @@ Bruce Jackson of NASA <e.b.jackson@larc.nasa.gov>
|
||||
http://dcb.larc.nasa.gov/www/DCBStaff/ebj/ebj.html
|
||||
|
||||
|
||||
Maik Justus
|
||||
Fixed an old bug in the SGPropertyNode class.
|
||||
|
||||
|
||||
Richard Kaszeta <bofh@me.umn.edu>
|
||||
Contributed screen buffer to ppm screen shot routine.
|
||||
Rich has also helped in the early development of the Flight Gear "altitude
|
||||
@@ -90,6 +106,11 @@ David Megginson <david@megginson.com>
|
||||
SimGear property manager/registry
|
||||
|
||||
|
||||
Tim Moore
|
||||
Ported the (chrome) "shader" animation to OSG, and helped with porting
|
||||
the "material" animation.
|
||||
|
||||
|
||||
Curt Olson http://www.flightgear.org/~curt/
|
||||
Curt is responsible for overall project and source code management.
|
||||
He has his hands in many of the areas.
|
||||
@@ -99,7 +120,7 @@ Petter Reinholdtsen <pere@games.no>
|
||||
Incorporated the Gnu automake/autoconf system (with libtool).
|
||||
This should streamline and standardize the build process for all
|
||||
Unix-like platforms. It should have little effect on IDE type
|
||||
environments since the don't use the Unix make system.
|
||||
environments since these don't use the Unix make system.
|
||||
|
||||
|
||||
Paul Schlyter <pausch@saaf.se>
|
||||
|
||||
387
acinclude.m4
387
acinclude.m4
@@ -6,19 +6,25 @@ dnl
|
||||
AC_DEFUN([wi_EXTRA_IDIR], [
|
||||
incdir="$1"
|
||||
if test -r $incdir ; then
|
||||
case "$CPPFLAGS" in
|
||||
*-I${incdir}*)
|
||||
# echo " + already had $incdir" 1>&6
|
||||
;;
|
||||
*)
|
||||
if test "$CPPFLAGS" = "" ; then
|
||||
CPPFLAGS="-I$incdir"
|
||||
else
|
||||
CPPFLAGS="$CPPFLAGS -I$incdir"
|
||||
fi
|
||||
echo " + found $incdir" 1>&6
|
||||
;;
|
||||
esac
|
||||
already=""
|
||||
for CPPflag in $CPPFLAGS ; do
|
||||
if test "_$CPPflag" = "_-I${incdir}" ; then
|
||||
already=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -n "$already" ; then
|
||||
echo " + already had -I$incdir" 1>&AS_MESSAGE_LOG_FD
|
||||
else
|
||||
if test "$CPPFLAGS" = "" ; then
|
||||
CPPFLAGS="-I$incdir"
|
||||
else
|
||||
CPPFLAGS="$CPPFLAGS -I$incdir"
|
||||
fi
|
||||
echo " + added -I$incdir" 1>&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
else
|
||||
echo " + IDIR is not accessible: '$myincdir'" 1>&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
])
|
||||
dnl
|
||||
@@ -28,19 +34,25 @@ dnl
|
||||
AC_DEFUN([wi_EXTRA_LDIR], [
|
||||
mylibdir="$1"
|
||||
if test -r $mylibdir ; then
|
||||
case "$LDFLAGS" in
|
||||
*-L${mylibdir}*)
|
||||
# echo " + already had $mylibdir" 1>&6
|
||||
;;
|
||||
*)
|
||||
if test "$LDFLAGS" = "" ; then
|
||||
LDFLAGS="-L$mylibdir"
|
||||
else
|
||||
LDFLAGS="$LDFLAGS -L$mylibdir"
|
||||
fi
|
||||
echo " + found $mylibdir" 1>&6
|
||||
;;
|
||||
esac
|
||||
already=""
|
||||
for LDflag in $LDFLAGS ; do
|
||||
if test "_$LDflag" = "_-L${mylibdir}" ; then
|
||||
already=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -n "$already" ; then
|
||||
echo " + already had -L$mylibdir" 1>&AS_MESSAGE_LOG_FD
|
||||
else
|
||||
if test "$LDFLAGS" = "" ; then
|
||||
LDFLAGS="-L$mylibdir"
|
||||
else
|
||||
LDFLAGS="$LDFLAGS -L$mylibdir"
|
||||
fi
|
||||
echo " + added -L$mylibdir" 1>&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
else
|
||||
echo " + LDIR is not accessible: '$mylibdir'" 1>&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
])
|
||||
dnl
|
||||
@@ -50,12 +62,9 @@ dnl
|
||||
AC_DEFUN([wi_EXTRA_PDIR], [
|
||||
progdir="$1"
|
||||
if test -r $progdir ; then
|
||||
case "$PATH" in
|
||||
*:${progdir}*)
|
||||
# echo " + already had $progdir" 1>&6
|
||||
;;
|
||||
*${progdir}:*)
|
||||
# echo " + already had $progdir" 1>&6
|
||||
case ":$PATH:" in
|
||||
*:${progdir}:*)
|
||||
echo " + already had $progdir in \$PATH" 1>&AS_MESSAGE_LOG_FD
|
||||
;;
|
||||
*)
|
||||
if test "$PATH" = "" ; then
|
||||
@@ -63,9 +72,11 @@ if test -r $progdir ; then
|
||||
else
|
||||
PATH="$PATH:$progdir"
|
||||
fi
|
||||
echo " + found $progdir" 1>&6
|
||||
echo " + appended $progdir to \$PATH" 1>&AS_MESSAGE_LOG_FD
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo " + PDIR is not accessible: '$progdir'" 1>&AS_MESSAGE_LOG_FD
|
||||
fi
|
||||
])
|
||||
dnl
|
||||
@@ -89,23 +100,32 @@ if test "$subexdirs" = "" ; then
|
||||
subexdirs="-"
|
||||
fi
|
||||
for subexdir in $subexdirs ; do
|
||||
if test "$subexdir" = "-" ; then
|
||||
subexdir=""
|
||||
else
|
||||
subexdir="/$subexdir"
|
||||
fi
|
||||
for exdir in $exdirs ; do
|
||||
if test "$exdir" != "/usr" || test "$subexdir" != ""; then
|
||||
incdir="${exdir}/include${subexdir}"
|
||||
wi_EXTRA_IDIR($incdir)
|
||||
if test "$subexdir" = "-" ; then
|
||||
subexdir=""
|
||||
else
|
||||
subexdir="/$subexdir"
|
||||
fi
|
||||
for exdir in $exdirs ; do
|
||||
if test "$exdir" != "/usr" || test "$subexdir" != ""; then
|
||||
incdir="${exdir}/include${subexdir}"
|
||||
wi_EXTRA_IDIR($incdir)
|
||||
|
||||
mylibdir="${exdir}/lib${subexdir}"
|
||||
wi_EXTRA_LDIR($mylibdir)
|
||||
dnl On 64-bit machines, if lib64/ exists and is not identical to lib/
|
||||
dnl then it should be listed here, listed ahead of lib/.
|
||||
mylibdir64="${exdir}/lib64${subexdir}"
|
||||
mylibdir32="${exdir}/lib${subexdir}"
|
||||
|
||||
progdir="${exdir}/bin${subexdir}"
|
||||
wi_EXTRA_PDIR($progdir)
|
||||
fi
|
||||
done
|
||||
if test "x86_64" = $(uname -m) \
|
||||
-a ! ${mylibdir64} -ef ${mylibdir32} ; then
|
||||
wi_EXTRA_LDIR($mylibdir64)
|
||||
fi
|
||||
|
||||
wi_EXTRA_LDIR($mylibdir32)
|
||||
|
||||
progdir="${exdir}/bin${subexdir}"
|
||||
wi_EXTRA_PDIR($progdir)
|
||||
fi
|
||||
done
|
||||
done
|
||||
])
|
||||
dnl
|
||||
@@ -413,3 +433,274 @@ AC_DEFUN([AC_SG_SET_COMPILER],
|
||||
## CFLAGS=
|
||||
;;
|
||||
esac])
|
||||
|
||||
pushdef([AC_PROG_INSTALL],
|
||||
[
|
||||
dnl our own version, testing for a -p flag
|
||||
popdef([AC_PROG_INSTALL])
|
||||
dnl as AC_PROG_INSTALL works as it works we first have
|
||||
dnl to save if the user didn't specify INSTALL, as the
|
||||
dnl autoconf one overwrites INSTALL and we have no chance to find
|
||||
dnl out afterwards
|
||||
AC_PROG_INSTALL
|
||||
|
||||
# OK, user hasn't given any INSTALL, autoconf found one for us
|
||||
# now we test, if it supports the -p flag
|
||||
AC_MSG_CHECKING(for -p flag to install)
|
||||
rm -f confinst.$$.* > /dev/null 2>&1
|
||||
echo "Testtest" > confinst.$$.orig
|
||||
ac_res=no
|
||||
if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then
|
||||
if test -f confinst.$$.new ; then
|
||||
# OK, -p seems to do no harm to install
|
||||
INSTALL="${INSTALL} -p"
|
||||
ac_res=yes
|
||||
fi
|
||||
fi
|
||||
rm -f confinst.$$.*
|
||||
AC_MSG_RESULT($ac_res)
|
||||
dnl the following tries to resolve some signs and wonders coming up
|
||||
dnl with different autoconf/automake versions
|
||||
dnl e.g.:
|
||||
dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s
|
||||
dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS)
|
||||
dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s
|
||||
dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has
|
||||
dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the
|
||||
dnl install-@DIR@PROGRAMS targets to explicitly use that flag
|
||||
dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as
|
||||
dnl INSTALL_SCRIPT, which breaks with automake <= 1.4
|
||||
dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure
|
||||
dnl to clean up that mess we:
|
||||
dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG
|
||||
dnl which cleans KDE's program with automake > 1.4;
|
||||
dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems
|
||||
dnl with automake<=1.4
|
||||
dnl note that dues to this sometimes two '-s' flags are used
|
||||
INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)'
|
||||
INSTALL_SCRIPT='${INSTALL}'
|
||||
])dnl
|
||||
|
||||
# ===========================================================================
|
||||
# http://autoconf-archive.cryp.to/ax_boost_base.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_BOOST_BASE([MINIMUM-VERSION])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Test for the Boost C++ libraries of a particular version (or newer)
|
||||
#
|
||||
# If no path to the installed boost library is given the macro searchs
|
||||
# under /usr, /usr/local, /opt and /opt/local and evaluates the
|
||||
# $BOOST_ROOT environment variable. Further documentation is available at
|
||||
# <http://randspringer.de/boost/index.html>.
|
||||
#
|
||||
# This macro calls:
|
||||
#
|
||||
# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
|
||||
#
|
||||
# And sets:
|
||||
#
|
||||
# HAVE_BOOST
|
||||
#
|
||||
# LAST MODIFICATION
|
||||
#
|
||||
# 2008-04-12
|
||||
#
|
||||
# COPYLEFT
|
||||
#
|
||||
# Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved.
|
||||
|
||||
AC_DEFUN([AX_BOOST_BASE],
|
||||
[
|
||||
AC_ARG_WITH([boost],
|
||||
AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]),
|
||||
[
|
||||
if test "$withval" = "no"; then
|
||||
want_boost="no"
|
||||
elif test "$withval" = "yes"; then
|
||||
want_boost="yes"
|
||||
ac_boost_path=""
|
||||
else
|
||||
want_boost="yes"
|
||||
ac_boost_path="$withval"
|
||||
fi
|
||||
],
|
||||
[want_boost="yes"])
|
||||
|
||||
|
||||
AC_ARG_WITH([boost-libdir],
|
||||
AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
|
||||
[Force given directory for boost libraries. Note that this will overwrite library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
|
||||
[
|
||||
if test -d $withval
|
||||
then
|
||||
ac_boost_lib_path="$withval"
|
||||
else
|
||||
AC_MSG_ERROR(--with-boost-libdir expected directory name)
|
||||
fi
|
||||
],
|
||||
[ac_boost_lib_path=""]
|
||||
)
|
||||
|
||||
if test "x$want_boost" = "xyes"; then
|
||||
boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
|
||||
boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
|
||||
boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
|
||||
boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
|
||||
boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
|
||||
if test "x$boost_lib_version_req_sub_minor" = "x" ; then
|
||||
boost_lib_version_req_sub_minor="0"
|
||||
fi
|
||||
WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
|
||||
AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
|
||||
succeeded=no
|
||||
|
||||
dnl first we check the system location for boost libraries
|
||||
dnl this location ist chosen if boost libraries are installed with the --layout=system option
|
||||
dnl or if you install boost with RPM
|
||||
if test "$ac_boost_path" != ""; then
|
||||
BOOST_LDFLAGS="-L$ac_boost_path/lib"
|
||||
BOOST_CPPFLAGS="-I$ac_boost_path/include"
|
||||
else
|
||||
for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
|
||||
if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
|
||||
BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib"
|
||||
BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
dnl overwrite ld flags if we have required special directory with
|
||||
dnl --with-boost-libdir parameter
|
||||
if test "$ac_boost_lib_path" != ""; then
|
||||
BOOST_LDFLAGS="-L$ac_boost_lib_path"
|
||||
fi
|
||||
|
||||
CPPFLAGS_SAVED="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||
export CPPFLAGS
|
||||
|
||||
LDFLAGS_SAVED="$LDFLAGS"
|
||||
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
|
||||
export LDFLAGS
|
||||
|
||||
AC_LANG_PUSH(C++)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
@%:@include <boost/version.hpp>
|
||||
]], [[
|
||||
#if BOOST_VERSION >= $WANT_BOOST_VERSION
|
||||
// Everything is okay
|
||||
#else
|
||||
# error Boost version is too old
|
||||
#endif
|
||||
]])],[
|
||||
AC_MSG_RESULT(yes)
|
||||
succeeded=yes
|
||||
found_system=yes
|
||||
],[
|
||||
])
|
||||
AC_LANG_POP([C++])
|
||||
|
||||
|
||||
|
||||
dnl if we found no boost with system layout we search for boost libraries
|
||||
dnl built and installed without the --layout=system option or for a staged(not installed) version
|
||||
if test "x$succeeded" != "xyes"; then
|
||||
_version=0
|
||||
if test "$ac_boost_path" != ""; then
|
||||
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
|
||||
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
|
||||
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
|
||||
V_CHECK=`expr $_version_tmp \> $_version`
|
||||
if test "$V_CHECK" = "1" ; then
|
||||
_version=$_version_tmp
|
||||
fi
|
||||
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
|
||||
BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
|
||||
done
|
||||
fi
|
||||
else
|
||||
for ac_boost_path in /usr /usr/local /opt /opt/local ; do
|
||||
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
|
||||
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
|
||||
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
|
||||
V_CHECK=`expr $_version_tmp \> $_version`
|
||||
if test "$V_CHECK" = "1" ; then
|
||||
_version=$_version_tmp
|
||||
best_path=$ac_boost_path
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
|
||||
BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
|
||||
if test "$ac_boost_lib_path" = ""
|
||||
then
|
||||
BOOST_LDFLAGS="-L$best_path/lib"
|
||||
fi
|
||||
|
||||
if test "x$BOOST_ROOT" != "x"; then
|
||||
if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then
|
||||
version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
|
||||
stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
|
||||
stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
|
||||
V_CHECK=`expr $stage_version_shorten \>\= $_version`
|
||||
if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
|
||||
AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
|
||||
BOOST_CPPFLAGS="-I$BOOST_ROOT"
|
||||
BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||
export CPPFLAGS
|
||||
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
|
||||
export LDFLAGS
|
||||
|
||||
AC_LANG_PUSH(C++)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
@%:@include <boost/version.hpp>
|
||||
]], [[
|
||||
#if BOOST_VERSION >= $WANT_BOOST_VERSION
|
||||
// Everything is okay
|
||||
#else
|
||||
# error Boost version is too old
|
||||
#endif
|
||||
]])],[
|
||||
AC_MSG_RESULT(yes)
|
||||
succeeded=yes
|
||||
found_system=yes
|
||||
],[
|
||||
])
|
||||
AC_LANG_POP([C++])
|
||||
fi
|
||||
|
||||
if test "$succeeded" != "yes" ; then
|
||||
if test "$_version" = "0" ; then
|
||||
AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
|
||||
else
|
||||
AC_MSG_ERROR([Your boost libraries seems to old (version $_version).])
|
||||
fi
|
||||
else
|
||||
AC_SUBST(BOOST_CPPFLAGS)
|
||||
AC_SUBST(BOOST_LDFLAGS)
|
||||
AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
|
||||
fi
|
||||
|
||||
CPPFLAGS="$CPPFLAGS_SAVED"
|
||||
LDFLAGS="$LDFLAGS_SAVED"
|
||||
fi
|
||||
|
||||
])
|
||||
|
||||
227
configure.ac
227
configure.ac
@@ -8,7 +8,7 @@ dnl Require at least automake 2.52
|
||||
AC_PREREQ(2.52)
|
||||
|
||||
dnl Initialize the automake stuff
|
||||
AM_INIT_AUTOMAKE(SimGear, 0.3.10)
|
||||
AM_INIT_AUTOMAKE(SimGear, 2.2.0)
|
||||
|
||||
dnl Specify KAI C++ compiler and flags.
|
||||
dnl Borrowed with slight modification from blitz distribution.
|
||||
@@ -24,17 +24,33 @@ AC_ARG_WITH(cxx,
|
||||
esac
|
||||
])
|
||||
|
||||
echo CXX = $CXX
|
||||
echo CC = $CC
|
||||
AC_ARG_ENABLE(headless,
|
||||
AS_HELP_STRING([--enable-headless],[Enable only packages for headless build]))
|
||||
|
||||
AC_MSG_CHECKING([for headless mode])
|
||||
AC_MSG_RESULT([$enable_headless])
|
||||
|
||||
AM_CONDITIONAL(WANT_HEADLESS,[test "x$enable_headless" = "xyes"])
|
||||
|
||||
AC_MSG_CHECKING([CXX])
|
||||
AC_MSG_RESULT([$CXX])
|
||||
AC_MSG_CHECKING([CC])
|
||||
AC_MSG_RESULT([$CC])
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CXXCPP
|
||||
AC_PROG_RANLIB
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AX_BOOST_BASE([1.37.0])
|
||||
|
||||
if test "x$BOOST_CPPFLAGS" != "x-I/usr/include" ; then
|
||||
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||
fi
|
||||
|
||||
dnl set the $host variable based on local machine/os
|
||||
AC_CANONICAL_HOST
|
||||
@@ -76,6 +92,10 @@ AC_SUBST(AR)
|
||||
AC_SUBST(ARFLAGS)
|
||||
AC_SUBST(compatibility_DIR)
|
||||
|
||||
# Show all compiler warnings by default
|
||||
CXXFLAGS="$CXXFLAGS -Wall"
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
|
||||
if echo $includedir | egrep "simgear$" > /dev/null; then
|
||||
echo "includedir is" $includedir "libdir is" $libdir
|
||||
else
|
||||
@@ -111,12 +131,27 @@ else
|
||||
fi
|
||||
AM_CONDITIONAL(ENABLE_JPEG_SERVER, test "x$with_jpeg_factory" = "xyes")
|
||||
|
||||
# specify the plib location
|
||||
AC_ARG_WITH(plib, [ --with-plib=PREFIX Specify the prefix path to plib])
|
||||
# specify the osg location
|
||||
AC_ARG_WITH(osg, [ --with-osg=PREFIX Specify the prefix path to osg])
|
||||
|
||||
if test "x$with_plib" != "x" ; then
|
||||
echo "plib prefix is $with_plib"
|
||||
EXTRA_DIRS="${EXTRA_DIRS} $with_plib"
|
||||
if test "x$with_osg" != "x" ; then
|
||||
echo "osg prefix is $with_osg"
|
||||
EXTRA_DIRS="${EXTRA_DIRS} $with_osg"
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(osg_framework, [ --with-osg-framework=PREFIX Specify the prefix path to OSG.framework ])
|
||||
|
||||
if test "x$with_osg_framework" != "x"; then
|
||||
echo "osg framework prefix is $with_osg_framework"
|
||||
CPPFLAGS = "$CPPFLAGS -F$with-osg-framework"
|
||||
export DYLD_FRAMEWORK_PATH="$DYLD_FRAMEWORK_PATH:$with_osg_framework"
|
||||
fi
|
||||
|
||||
dnl specifying ALUT.framework (for user provided ALUT.framework)
|
||||
AC_ARG_WITH(alut_framework, [ --with-alut-framework=PREFIX Specify the prefix path to ALUT.framework ])
|
||||
|
||||
if test "x$with_alut_framework" != "x"; then
|
||||
echo "ALUT framework prefix is $with_alut_framework"
|
||||
fi
|
||||
|
||||
dnl Determine an extra directories to add to include/lib search paths
|
||||
@@ -188,6 +223,7 @@ LIBS=""
|
||||
|
||||
dnl check for some default libraries
|
||||
AC_SEARCH_LIBS(cos, m)
|
||||
AC_SEARCH_LIBS(clock_gettime, rt)
|
||||
|
||||
base_LIBS="$LIBS"
|
||||
|
||||
@@ -250,33 +286,77 @@ case "${host}" in
|
||||
|
||||
esac
|
||||
|
||||
AC_SEARCH_LIBS(glutGetModifiers, [ glut glut32 freeglut ], have_glut=yes, have_glut=no)
|
||||
AM_CONDITIONAL(HAVE_GLUT, test "x$have_glut" = "xyes")
|
||||
|
||||
opengl_LIBS="$LIBS"
|
||||
LIBS="$base_LIBS"
|
||||
|
||||
dnl check for OpenAL libraries
|
||||
OPENAL_OK="no"
|
||||
ALUT_OK="no"
|
||||
case "${host}" in
|
||||
*-*-cygwin* | *-*-mingw32*)
|
||||
dnl CygWin under Windoze.
|
||||
INCLUDES="$INCLUDES -I/usr/local/include/"
|
||||
LIBS="$LIBS -L/usr/local/lib"
|
||||
AC_SEARCH_LIBS(alGenBuffers, [ openal32 openal ] )
|
||||
AC_SEARCH_LIBS(alGenBuffers, [ openal32 openal 'openal -ldsound -lwinmm' ] )
|
||||
AC_SEARCH_LIBS(alutInit, [ openal32 ALut alut ] )
|
||||
LIBS="$LIBS -lwinmm -ldsound -ldxguid -lole32"
|
||||
openal_LIBS="$LIBS"
|
||||
OPENAL_OK="$ac_cv_search_alGenBuffers"
|
||||
ALUT_OK="$ac_cv_search_alutInit"
|
||||
;;
|
||||
|
||||
*-apple-darwin*)
|
||||
dnl Mac OS X
|
||||
|
||||
LIBS="$LIBS -framework IOKit -framework OpenAL"
|
||||
LIBS="$LIBS -framework IOKit -framework OpenAL -framework ALUT"
|
||||
openal_LIBS="$LIBS"
|
||||
# not sure how to test if OpenAL exists on MacOS (does it come by default?)
|
||||
OPENAL_OK="yes"
|
||||
|
||||
if test "x$with_openal_lib" != "x"; then
|
||||
echo "libopenal is not supported on Mac OS platform."
|
||||
openal_LIBS=""
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADERS([OpenAL/al.h],[OPENAL_OK="yes"])
|
||||
# Looking for alut.h
|
||||
AC_CHECK_HEADERS([ALUT/alut.h],[ALUT_OK="yes"])
|
||||
|
||||
dnl Thank you Christian Bauer from SheepSaver
|
||||
dnl Modified by Tatsuhiro Nishioka for accepting a given framework path
|
||||
dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES, $3=FRAMEWORK_PATH, $4=ACTION_IF_TRUE) ; $3 is optional
|
||||
AC_DEFUN([AC_CHECK_FRAMEWORK], [
|
||||
AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
|
||||
AC_CACHE_CHECK([whether compiler supports framework $1],
|
||||
ac_Framework, [
|
||||
saved_LIBS="$LIBS"
|
||||
FRAMEWORKS="$FRAMEWORKS -framework $1"
|
||||
if test "$3" = ""; then
|
||||
FRAMEWORKS="$FRAMEWORKS $ADD2LD"
|
||||
elif test "`echo $FRAMEWORKS | grep -- -F$3`" = ""; then
|
||||
FRAMEWORKS="$FRAMEWORKS -F$3"
|
||||
CXXFLAGS="$CXXFLAGS -F$3"
|
||||
CPPFLAGS="$CPPFLAGS -F$3"
|
||||
CCFLAGS="$CCFLAGS -F$3"
|
||||
dnl This is needed for AC_TRY_LINK when a framework path is specified
|
||||
export DYLD_FRAMEWORK_PATH="${DYLD_FRAMEWORK_PATH}:$3"
|
||||
fi
|
||||
AC_TRY_LINK(
|
||||
[$2], [],
|
||||
[AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
|
||||
)
|
||||
])
|
||||
AS_IF([test AS_VAR_GET(ac_Framework) = yes],
|
||||
[AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
|
||||
)
|
||||
AS_IF([test AS_VAR_GET(ac_Framework) = yes], $4)
|
||||
|
||||
AS_VAR_POPDEF([ac_Framework])dnl
|
||||
])
|
||||
|
||||
dnl Check for ALUT.framework when --with-alut-framework is specified
|
||||
if test "x$with_alut_framework" != "x"; then
|
||||
AC_CHECK_FRAMEWORK(ALUT, [#include <ALUT/alut.h>], $with_alut_framework, [ALUT_OK="yes"])
|
||||
fi
|
||||
|
||||
;;
|
||||
|
||||
*)
|
||||
@@ -287,13 +367,14 @@ case "${host}" in
|
||||
AC_SEARCH_LIBS(alGenBuffers, openal)
|
||||
AC_SEARCH_LIBS(alutInit, [ alut openal ] )
|
||||
OPENAL_OK="$ac_cv_search_alGenBuffers"
|
||||
ALUT_OK="$ac_cv_search_alutInit"
|
||||
openal_LIBS="$LIBS"
|
||||
LIBS=$save_LIBS
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
if test "$OPENAL_OK" == "no"; then
|
||||
if test "$OPENAL_OK" == "no" -a "x$enable_headless" != "xyes"; then
|
||||
echo
|
||||
echo "You *must* have the openal library installed on your system to build"
|
||||
echo "SimGear!"
|
||||
@@ -304,6 +385,19 @@ if test "$OPENAL_OK" == "no"; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if test "$ALUT_OK" == "no" -a "x$enable_headless" != "xyes"; then
|
||||
echo
|
||||
echo "You *must* have the alut library installed on your system to build"
|
||||
echo "SimGear!"
|
||||
echo
|
||||
echo "Please see README.OpenAL for more details."
|
||||
echo
|
||||
echo "configure aborted."
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
|
||||
LIBS="$base_LIBS"
|
||||
|
||||
AC_SUBST(base_LIBS)
|
||||
@@ -319,46 +413,83 @@ AM_CONDITIONAL(EXTGL_NEEDED, test "x$ac_cv_header_windows_h" = "xyes")
|
||||
# The following are C++ items that need to be tested for with the c++
|
||||
# compiler
|
||||
|
||||
CXXCPP="g++ -E"
|
||||
AC_LANG_PUSH(C++)
|
||||
|
||||
dnl Check for "plib" without which we cannot go on
|
||||
AC_CHECK_HEADER(plib/ul.h)
|
||||
if test "x$ac_cv_header_plib_ul_h" != "xyes"; then
|
||||
# OpenSceneGraph
|
||||
case "${host}" in
|
||||
*-apple-darwin*)
|
||||
if test "x$with_osg_framework" != "x"; then
|
||||
# AC_CHECK_FRAMEWORK(osgViewer, [#include <osgViewer/Version>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgGA, [#include <osgGA/Version>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgText, [#include <osgText/Version>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgFX, [#include <osgFX/AnisotropicLighting>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgUtil, [#include <osgUtil/Version>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgDB, [#include <osgDB/Version>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgSim, [#include <osgSim/Version>], $with_osg_framework)
|
||||
# AC_CHECK_FRAMEWORK(osgParticle, [#include <osgParticle/Version>], $with_osg_framework)
|
||||
AC_CHECK_FRAMEWORK(osg, [#include <osg/Version>], $with_osg_framework)
|
||||
# osg_FRAMEWORKS="$FRAMEWORKS"
|
||||
# FRAMEWORKS=""
|
||||
# AC_SUBST(osg_FRAMEWORKS)
|
||||
AC_CHECK_FRAMEWORK(OpenThreads, [#include <OpenThreads/Version>], $with_osg_framework)
|
||||
openthreads_FRAMEWORK="$FRAMEWORKS"
|
||||
FRAMEWORKS=""
|
||||
AC_SUBST(openthreads_FRAMEWORK)
|
||||
else
|
||||
dnl
|
||||
dnl This is needed when osg dynamic libs are specified
|
||||
dnl instead of OSG frameworks on Mac OS X
|
||||
dnl
|
||||
AC_CHECK_LIB(OpenThreads,OpenThreadsGetVersion)
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_osgdebug" = "xyes"; then
|
||||
AC_CHECK_LIB(OpenThreadsd,OpenThreadsGetVersion)
|
||||
else
|
||||
AC_CHECK_LIB(OpenThreads,OpenThreadsGetVersion)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL(HAVE_FRAMEWORK_OSG, test "x$ac_cv_framework_osg" != "x")
|
||||
|
||||
AC_CHECK_HEADER(osg/Version)
|
||||
|
||||
if test "x$ac_cv_header_osg_Version" != "xyes" -o "x$ac_cv_lib_OpenThreads_OpenThreadsGetVersion" != "xyes"; then
|
||||
if test "x$ac_cv_framework_osg" != "xyes"; then
|
||||
echo
|
||||
echo "You *must* have the plib library installed on your system to build"
|
||||
echo "SimGear!"
|
||||
echo "You *must* have the OpenThreads library installed on your system"
|
||||
echo "to build this version of SimGear!"
|
||||
echo " Maybe you need to specify --with-osg=DIR."
|
||||
echo " Maybe you need to specify some LDFLAGS to help the linker."
|
||||
echo
|
||||
echo "Please see README.plib for more details."
|
||||
echo " LIBS: '$LIBS'"
|
||||
echo " LDFLAGS: '$LDFLAGS'"
|
||||
echo " CPPFLAGS: '$CPPFLAGS'"
|
||||
echo
|
||||
echo "Please see README.OSG for more details."
|
||||
echo
|
||||
echo "configure aborted."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADER(boost/version.hpp)
|
||||
if test "x$ac_cv_header_boost_version_hpp" != "xyes"; then
|
||||
echo
|
||||
echo "You *must* have the Boost library installed on your system"
|
||||
echo "to build this version of SimGear!"
|
||||
echo
|
||||
echo " LIBS: '$LIBS'"
|
||||
echo " LDFLAGS: '$LDFLAGS'"
|
||||
echo " CPPFLAGS: '$CPPFLAGS'"
|
||||
echo
|
||||
echo "configure aborted."
|
||||
exit
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for plib 1.8.4 or newer])
|
||||
AC_TRY_RUN([
|
||||
#include <plib/ul.h>
|
||||
|
||||
#define MIN_PLIB_VERSION 184
|
||||
|
||||
int main() {
|
||||
int major, minor, micro;
|
||||
|
||||
if ( PLIB_VERSION < MIN_PLIB_VERSION ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
],
|
||||
AC_MSG_RESULT(yes),
|
||||
[AC_MSG_RESULT(wrong version);
|
||||
AC_MSG_ERROR([Install plib 1.8.4 or later first...])],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
|
||||
LIBS="$saved_LIBS"
|
||||
|
||||
AC_LANG_POP
|
||||
|
||||
dnl Check for system installed zlib
|
||||
@@ -426,10 +557,12 @@ AC_CONFIG_FILES([ \
|
||||
simgear/props/Makefile \
|
||||
simgear/route/Makefile \
|
||||
simgear/scene/Makefile \
|
||||
simgear/scene/bvh/Makefile \
|
||||
simgear/scene/material/Makefile \
|
||||
simgear/scene/model/Makefile \
|
||||
simgear/scene/sky/Makefile \
|
||||
simgear/scene/tgdb/Makefile \
|
||||
simgear/scene/util/Makefile \
|
||||
simgear/screen/Makefile \
|
||||
simgear/serial/Makefile \
|
||||
simgear/sound/Makefile \
|
||||
|
||||
5
projects/VC100/.gitignore
vendored
Normal file
5
projects/VC100/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
Win32
|
||||
x64
|
||||
*.user
|
||||
*.sdf
|
||||
*.suo
|
||||
37
projects/VC100/SimGear-alone.sln
Normal file
37
projects/VC100/SimGear-alone.sln
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimGear-install", "SimGear-install.vcxproj", "{1781C058-4D52-43AB-9028-EA0A7730057D}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED} = {22540CD3-D3CA-4C86-A773-80AEEE3ACDED}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimGear", "SimGear.vcxproj", "{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{1781C058-4D52-43AB-9028-EA0A7730057D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{1781C058-4D52-43AB-9028-EA0A7730057D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{1781C058-4D52-43AB-9028-EA0A7730057D}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{1781C058-4D52-43AB-9028-EA0A7730057D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{1781C058-4D52-43AB-9028-EA0A7730057D}.Release|Win32.Build.0 = Release|Win32
|
||||
{1781C058-4D52-43AB-9028-EA0A7730057D}.Release|x64.ActiveCfg = Release|Win32
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Debug|x64.Build.0 = Debug|x64
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Release|Win32.Build.0 = Release|Win32
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Release|x64.ActiveCfg = Release|x64
|
||||
{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
67
projects/VC100/SimGear-install.vcxproj
Normal file
67
projects/VC100/SimGear-install.vcxproj
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{1781C058-4D52-43AB-9028-EA0A7730057D}</ProjectGuid>
|
||||
<RootNamespace>SimGearinstall</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
17
projects/VC100/SimGear-install.vcxproj.filters
Normal file
17
projects/VC100/SimGear-install.vcxproj.filters
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Fichiers sources">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Fichiers d%27en-tête">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Fichiers de ressources">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
607
projects/VC100/SimGear.vcxproj
Normal file
607
projects/VC100/SimGear.vcxproj
Normal file
@@ -0,0 +1,607 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{22540CD3-D3CA-4C86-A773-80AEEE3ACDED}</ProjectGuid>
|
||||
<RootNamespace>SimGear</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\simgear;..\..\..;..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\3rdparty\include;..\..\..\boost_1_44_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>HAVE_CONFIG_H;NDEBUG;WIN32;_USE_MATH_DEFINES;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Lib>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
<ProjectReference />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\simgear;..\..\..;..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\3rdparty.x64\include;..\..\..\boost_1_44_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>HAVE_CONFIG_H;NDEBUG;WIN32;_USE_MATH_DEFINES;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Lib>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\simgear;..\..\..;..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\3rdparty\include;..\..\..\boost_1_44_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>HAVE_CONFIG_H;_DEBUG;WIN32;_USE_MATH_DEFINES;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<BrowseInformation>true</BrowseInformation>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Lib>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\simgear;..\..\..;..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\3rdparty.x64\include;..\..\..\boost_1_44_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>HAVE_CONFIG_H;_DEBUG;WIN32;_USE_MATH_DEFINES;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<BrowseInformation>true</BrowseInformation>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Lib>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\simgear\bucket\newbucket.cxx" />
|
||||
<ClCompile Include="..\..\simgear\debug\logstream.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\celestialBody.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\ephemeris.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\jupiter.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\mars.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\mercury.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\moonpos.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\neptune.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\saturn.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\star.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\stardata.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\uranus.cxx" />
|
||||
<ClCompile Include="..\..\simgear\ephemeris\venus.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\iochannel.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\lowlevel.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\raw_socket.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_binobj.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_file.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_netBuffer.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_netChannel.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_netChat.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_serial.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_socket.cxx" />
|
||||
<ClCompile Include="..\..\simgear\io\sg_socket_udp.cxx" />
|
||||
<ClCompile Include="..\..\simgear\magvar\coremag.cxx" />
|
||||
<ClCompile Include="..\..\simgear\magvar\magvar.cxx" />
|
||||
<ClCompile Include="..\..\simgear\math\interpolater.cxx" />
|
||||
<ClCompile Include="..\..\simgear\math\leastsqs.cxx" />
|
||||
<ClCompile Include="..\..\simgear\math\project.cxx" />
|
||||
<ClCompile Include="..\..\simgear\math\sg_random.c" />
|
||||
<ClCompile Include="..\..\simgear\math\SGGeod.cxx" />
|
||||
<ClCompile Include="..\..\simgear\math\SGGeodesy.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\interpolator.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\PathOptions.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\sg_dir.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\sg_path.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\sgstream.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\sg_sleep.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\strutils.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\tabbed_values.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\texcoord.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\zfstream.cxx" />
|
||||
<ClCompile Include="..\..\simgear\misc\ResourceManager.cxx" />
|
||||
<ClCompile Include="..\..\simgear\props\propertyObject.cxx" />
|
||||
<ClCompile Include="..\..\simgear\route\route.cxx" />
|
||||
<ClCompile Include="..\..\simgear\route\waypoint.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\mipmap.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\ConditionNode.cxx" />
|
||||
<ClCompile Include="..\..\simgear\screen\extensions.cxx" />
|
||||
<ClCompile Include="..\..\simgear\screen\jpgfactory.cxx" />
|
||||
<ClCompile Include="..\..\simgear\screen\screen-dump.cxx" />
|
||||
<ClCompile Include="..\..\simgear\screen\tr.cxx" />
|
||||
<ClCompile Include="..\..\simgear\serial\serial.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\cloud.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\cloudfield.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\CloudShaderGeometry.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\dome.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\moon.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\newcloud.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\oursun.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\sky.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\sphere.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\sky\stars.cxx" />
|
||||
<ClCompile Include="..\..\simgear\timing\lowleveltime.cxx" />
|
||||
<ClCompile Include="..\..\simgear\timing\sg_time.cxx" />
|
||||
<ClCompile Include="..\..\simgear\timing\timestamp.cxx" />
|
||||
<ClCompile Include="..\..\simgear\timing\timezone.cxx" />
|
||||
<ClCompile Include="..\..\simgear\xml\easyxml.cxx" />
|
||||
<ClCompile Include="..\..\simgear\xml\hashtable.c" />
|
||||
<ClCompile Include="..\..\simgear\xml\xmlparse.c" />
|
||||
<ClCompile Include="..\..\simgear\xml\xmlrole.c" />
|
||||
<ClCompile Include="..\..\simgear\xml\xmltok.c" />
|
||||
<ClCompile Include="..\..\simgear\props\AtomicChangeListener.cxx" />
|
||||
<ClCompile Include="..\..\simgear\props\condition.cxx" />
|
||||
<ClCompile Include="..\..\simgear\props\props.cxx" />
|
||||
<ClCompile Include="..\..\simgear\props\props_io.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\animation.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\CheckSceneryVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\model.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\modellib.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\ModelRegistry.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\particles.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\persparam.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\placement.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGClipGroup.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGInteractionAnimation.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGMaterialAnimation.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGOffsetTransform.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGPagedLOD.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGReaderWriterXML.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGRotateTransform.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGScaleTransform.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGText.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\SGTranslateTransform.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\model\shadanim.cxx" />
|
||||
<ClCompile Include="..\..\simgear\sound\sample_group.cxx" />
|
||||
<ClCompile Include="..\..\simgear\sound\sample_openal.cxx" />
|
||||
<ClCompile Include="..\..\simgear\sound\soundmgr_openal.cxx" />
|
||||
<ClCompile Include="..\..\simgear\sound\xmlsound.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\Effect.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\EffectBuilder.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\EffectCullVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\EffectGeode.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\GLPredicate.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\makeEffect.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\mat.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\matlib.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\matmodel.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\Noise.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\Pass.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\Technique.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\material\TextureBuilder.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\apt_signs.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\GroundLightManager.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\obj.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\pt_lights.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\ReaderWriterSTG.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\SGOceanTile.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\SGReaderWriterBTG.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\SGVasiDrawable.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\ShaderGeometry.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\TileCache.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\TileEntry.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\TreeBin.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\tgdb\userdata.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\commands.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\event_mgr.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\exception.cxx">
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\simgear\structure\SGBinding.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\SGExpression.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\SGSmplhist.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\SGSmplstat.cxx" />
|
||||
<ClCompile Include="..\..\simgear\structure\subsystem_mgr.cxx" />
|
||||
<ClCompile Include="..\..\simgear\nasal\bitslib.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\code.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\codegen.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\gc.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\hash.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\iolib.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\lex.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\lib.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\mathlib.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\misc.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\parse.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\string.c">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
|
||||
<InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
|
||||
<InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='Release|x64'">OnlyExplicitInline</InlineFunctionExpansion>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\simgear\nasal\thread-win32.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\threadlib.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\utf8lib.c" />
|
||||
<ClCompile Include="..\..\simgear\nasal\vector.c">
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\simgear\environment\metar.cxx" />
|
||||
<ClCompile Include="..\..\simgear\environment\precipitation.cxx" />
|
||||
<ClCompile Include="..\..\simgear\environment\visual_enviro.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\CopyOp.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\NodeAndDrawableVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\PrimitiveUtils.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\QuadTreeBuilder.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\SGEnlargeBoundingBox.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\SGSceneFeatures.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\SGSceneUserData.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\SGStateAttributeVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\SGTextureStateAttributeVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\SplicingVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\StateAttributeFactory.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\util\UpdateOnceCallback.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHGroup.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHLineGeometry.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHLineSegmentVisitor.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHMotionTransform.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHNode.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHStaticBinary.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHStaticGeometry.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHStaticLeaf.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHStaticNode.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHStaticTriangle.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHSubTreeCollector.cxx" />
|
||||
<ClCompile Include="..\..\simgear\scene\bvh\BVHTransform.cxx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\simgear\bucket\newbucket.hxx" />
|
||||
<ClInclude Include="..\..\simgear\debug\debug_types.h" />
|
||||
<ClInclude Include="..\..\simgear\debug\logstream.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\celestialBody.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\ephemeris.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\jupiter.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\mars.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\mercury.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\moonpos.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\neptune.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\pluto.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\saturn.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\star.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\stardata.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\uranus.hxx" />
|
||||
<ClInclude Include="..\..\simgear\ephemeris\venus.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\iochannel.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\lowlevel.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\raw_socket.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_binobj.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_file.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_netBuffer.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_netChannel.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_netChat.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_serial.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_socket.hxx" />
|
||||
<ClInclude Include="..\..\simgear\io\sg_socket_udp.hxx" />
|
||||
<ClInclude Include="..\..\simgear\magvar\coremag.hxx" />
|
||||
<ClInclude Include="..\..\simgear\magvar\magvar.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\beziercurve.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\interpolater.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\leastsqs.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\linintp2.h" />
|
||||
<ClInclude Include="..\..\simgear\math\localconsts.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\point3d.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\polar3d.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\project.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\sg_geodesy.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\sg_random.h" />
|
||||
<ClInclude Include="..\..\simgear\math\sg_types.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\SGGeodesy.hxx" />
|
||||
<ClInclude Include="..\..\simgear\math\sphrintp.h" />
|
||||
<ClInclude Include="..\..\simgear\misc\interpolator.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\PathOptions.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\sg_dir.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\sg_path.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\sgstream.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\sg_sleep.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\stopwatch.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\strutils.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\tabbed_values.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\texcoord.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\zfstream.hxx" />
|
||||
<ClInclude Include="..\..\simgear\misc\ResourceManager.hxx" />
|
||||
<ClInclude Include="..\..\simgear\props\propertyObject.hxx" />
|
||||
<ClInclude Include="..\..\simgear\route\route.hxx" />
|
||||
<ClInclude Include="..\..\simgear\route\waypoint.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\mipmap.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\ConditionNode.hxx" />
|
||||
<ClInclude Include="..\..\simgear\screen\colors.hxx" />
|
||||
<ClInclude Include="..\..\simgear\screen\extensions.hxx" />
|
||||
<ClInclude Include="..\..\simgear\screen\jpgfactory.hxx" />
|
||||
<ClInclude Include="..\..\simgear\screen\screen-dump.hxx" />
|
||||
<ClInclude Include="..\..\simgear\screen\tr.h" />
|
||||
<ClInclude Include="..\..\simgear\screen\win32-printer.h" />
|
||||
<ClInclude Include="..\..\simgear\serial\serial.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\cloud.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\cloudfield.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\CloudShaderGeometry.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\dome.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\moon.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\newcloud.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\oursun.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\sky.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\sphere.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\sky\stars.hxx" />
|
||||
<ClInclude Include="..\..\simgear\timing\lowleveltime.h" />
|
||||
<ClInclude Include="..\..\simgear\timing\sg_time.hxx" />
|
||||
<ClInclude Include="..\..\simgear\timing\timestamp.hxx" />
|
||||
<ClInclude Include="..\..\simgear\timing\timezone.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\asciitab.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\easyxml.hxx" />
|
||||
<ClInclude Include="..\..\simgear\xml\hashtable.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\iasciitab.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\latin1tab.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\nametab.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\utf8tab.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\xmldef.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\xmlparse.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\xmlrole.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\xmltok.h" />
|
||||
<ClInclude Include="..\..\simgear\xml\xmltok_impl.h" />
|
||||
<ClInclude Include="..\..\simgear\props\AtomicChangeListener.hxx" />
|
||||
<ClInclude Include="..\..\simgear\props\condition.hxx" />
|
||||
<ClInclude Include="..\..\simgear\props\ExtendedPropertyAdapter.hxx" />
|
||||
<ClInclude Include="..\..\simgear\props\props.hxx" />
|
||||
<ClInclude Include="..\..\simgear\props\props_io.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\animation.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\CheckSceneryVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\model.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\modellib.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\ModelRegistry.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\particles.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\persparam.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\placement.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGClipGroup.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGInteractionAnimation.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGMaterialAnimation.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGOffsetTransform.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGPagedLOD.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGReaderWriterXML.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGReaderWriterXMLOptions.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGRotateTransform.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGScaleTransform.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGText.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\model\SGTranslateTransform.hxx" />
|
||||
<ClInclude Include="..\..\simgear\sound\sample_group.hxx" />
|
||||
<ClInclude Include="..\..\simgear\sound\sample_openal.hxx" />
|
||||
<ClInclude Include="..\..\simgear\sound\soundmgr_openal.hxx" />
|
||||
<ClInclude Include="..\..\simgear\sound\xmlsound.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\Effect.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\EffectBuilder.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\EffectCullVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\EffectGeode.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\GLPredicate.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\mat.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\matlib.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\matmodel.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\Noise.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\Pass.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\Technique.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\material\TextureBuilder.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\apt_signs.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\GroundLightManager.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\obj.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\pt_lights.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\SGModelBin.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\SGOceanTile.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\SGReaderWriterBTG.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\SGReaderWriterBTGOptions.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\SGVasiDrawable.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\ShaderGeometry.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\TileCache.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\TileEntry.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\TreeBin.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\tgdb\userdata.hxx" />
|
||||
<ClInclude Include="..\..\simgear\threads\SGGuard.hxx" />
|
||||
<ClInclude Include="..\..\simgear\threads\SGQueue.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\callback.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\commands.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\event_mgr.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\exception.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\OSGVersion.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\SGBinding.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\SGExpression.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\SGReferenced.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\SGSharedPtr.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\SGSmplhist.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\SGSmplstat.hxx" />
|
||||
<ClInclude Include="..\..\simgear\structure\subsystem_mgr.hxx" />
|
||||
<ClInclude Include="..\..\simgear\nasal\code.h" />
|
||||
<ClInclude Include="..\..\simgear\nasal\data.h" />
|
||||
<ClInclude Include="..\..\simgear\nasal\iolib.h" />
|
||||
<ClInclude Include="..\..\simgear\nasal\nasal.h" />
|
||||
<ClInclude Include="..\..\simgear\nasal\parse.h" />
|
||||
<ClInclude Include="..\..\simgear\environment\metar.hxx" />
|
||||
<ClInclude Include="..\..\simgear\environment\precipitation.hxx" />
|
||||
<ClInclude Include="..\..\simgear\environment\visual_enviro.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\CopyOp.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\NodeAndDrawableVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\PrimitiveUtils.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\QuadTreeBuilder.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\RenderConstants.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGDebugDrawCallback.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGEnlargeBoundingBox.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGNodeMasks.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGSceneFeatures.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGSceneUserData.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGStateAttributeVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGTextureStateAttributeVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SGUpdateVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\SplicingVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\StateAttributeFactory.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\util\UpdateOnceCallback.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHBoundingBoxVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHDebugCollectVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHGroup.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHLineGeometry.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHLineSegmentVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHMotionTransform.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHNode.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticBinary.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticData.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticGeometry.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticGeometryBuilder.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticLeaf.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticNode.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHStaticTriangle.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHSubTreeCollector.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHTransform.hxx" />
|
||||
<ClInclude Include="..\..\simgear\scene\bvh\BVHVisitor.hxx" />
|
||||
<ClInclude Include="..\..\simgear\compiler.h" />
|
||||
<ClInclude Include="..\..\simgear\version.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\simgear\math\linintp2.inl" />
|
||||
<CustomBuild Include="..\..\simgear\simgear_config.h-msvc90">
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generation of simgear_config.h</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\simgear\simgear_config.h;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generation of simgear_config.h</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\simgear\simgear_config.h;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generation of simgear_config.h</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\simgear\simgear_config.h;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generation of simgear_config.h</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\simgear\simgear_config.h;%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
1225
projects/VC100/SimGear.vcxproj.filters
Normal file
1225
projects/VC100/SimGear.vcxproj.filters
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,20 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual C++ Express 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimGear", "SimGear.vcproj", "{952B5B5B-7FC8-4AE9-A664-333322BEEEB0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{952B5B5B-7FC8-4AE9-A664-333322BEEEB0}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{952B5B5B-7FC8-4AE9-A664-333322BEEEB0}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{952B5B5B-7FC8-4AE9-A664-333322BEEEB0}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{952B5B5B-7FC8-4AE9-A664-333322BEEEB0}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
File diff suppressed because it is too large
Load Diff
3
projects/VC90/.gitignore
vendored
Normal file
3
projects/VC90/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*.user
|
||||
Win32
|
||||
x64
|
||||
2044
projects/VC90/SimGear.vcproj
Normal file
2044
projects/VC90/SimGear.vcproj
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
simgear_config.h
|
||||
simgear_config.h.in
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
stamp-h1
|
||||
version.h
|
||||
4
simgear/.gitignore
vendored
Normal file
4
simgear/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
simgear_config.h
|
||||
simgear_config.h.*
|
||||
stamp-h1
|
||||
version.h
|
||||
57
simgear/CMakeLists.txt
Normal file
57
simgear/CMakeLists.txt
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
file(WRITE ${PROJECT_BINARY_DIR}/simgear/version.h "#define SIMGEAR_VERSION ${SIMGEAR_VERSION}")
|
||||
|
||||
foreach( mylibfolder
|
||||
bucket
|
||||
debug
|
||||
ephemeris
|
||||
io
|
||||
magvar
|
||||
math
|
||||
misc
|
||||
nasal
|
||||
props
|
||||
route
|
||||
serial
|
||||
structure
|
||||
threads
|
||||
timing
|
||||
xml
|
||||
)
|
||||
|
||||
add_subdirectory(${mylibfolder})
|
||||
|
||||
endforeach( mylibfolder )
|
||||
|
||||
if (NOT SIMGEAR_HEADLESS)
|
||||
add_subdirectory(environment)
|
||||
add_subdirectory(screen)
|
||||
add_subdirectory(scene)
|
||||
add_subdirectory(sound)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
set(HEADERS compiler.h constants.h sg_inlines.h ${PROJECT_BINARY_DIR}/simgear/version.h)
|
||||
install (FILES ${HEADERS} DESTINATION include/simgear/)
|
||||
|
||||
if(SIMGEAR_SHARED)
|
||||
message(STATUS "building shared library")
|
||||
get_property(allSources GLOBAL PROPERTY ALL_SOURCES)
|
||||
get_property(publicHeaders GLOBAL PROPERTY PUBLIC_HEADERS)
|
||||
|
||||
add_library(SimGear SHARED ${allSources})
|
||||
set_property(TARGET SimGear PROPERTY FRAMEWORK 1)
|
||||
message(STATUS "public header: ${publicHeaders}")
|
||||
set_property(TARGET SimGear PROPERTY PUBLIC_HEADER "${publicHeaders}")
|
||||
set_property(TARGET SimGear PROPERTY LINKER_LANGUAGE CXX)
|
||||
|
||||
target_link_libraries(SimGear ${ZLIB_LIBRARY}
|
||||
${OPENSCENEGRAPH_LIBRARIES}
|
||||
${OPENAL_LIBRARY} ${ALUT_LIBRARY}
|
||||
${OPENGL_LIBRARY})
|
||||
|
||||
install(TARGETS SimGear LIBRARY DESTINATION lib${LIB_SUFFIX}
|
||||
PUBLIC_HEADER DESTINATION include/simgear)
|
||||
endif(SIMGEAR_SHARED)
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
EXTRA_DIST = simgear_config.h.vc5 simgear_config.h-msvc71 version.h.in
|
||||
|
||||
include_HEADERS = \
|
||||
compiler.h constants.h sg_inlines.h version.h
|
||||
|
||||
if WANT_HEADLESS
|
||||
SG_EXTRA_DIRS =
|
||||
METAR_DIRS =
|
||||
else
|
||||
SG_EXTRA_DIRS = scene sound screen
|
||||
METAR_DIRS = environment
|
||||
endif
|
||||
|
||||
if HAVE_THREADS
|
||||
SGTHREAD_DIR = threads
|
||||
else
|
||||
SGTHREAD_DIR =
|
||||
endif
|
||||
|
||||
# METAR_DIRS =
|
||||
METAR_DIRS = environment
|
||||
|
||||
EXTRA_DIST = simgear_config.h.vc5 version.h.in
|
||||
|
||||
include_HEADERS = \
|
||||
compiler.h constants.h sg_inlines.h sg_traits.hxx version.h
|
||||
|
||||
SUBDIRS = \
|
||||
$(compatibility_DIR) \
|
||||
SUBDIRS_ALWAYS = \
|
||||
xml \
|
||||
debug \
|
||||
misc \
|
||||
@@ -23,15 +27,17 @@ SUBDIRS = \
|
||||
io \
|
||||
magvar \
|
||||
math \
|
||||
$(METAR_DIRS) \
|
||||
nasal \
|
||||
props \
|
||||
route \
|
||||
scene \
|
||||
screen \
|
||||
serial \
|
||||
sound \
|
||||
$(SGTHREAD_DIR) \
|
||||
timing
|
||||
|
||||
DIST_SUBDIRS = $(SUBDIRS) compatibility threads
|
||||
SUBDIRS = $(SUBDIRS_ALWAYS) \
|
||||
$(compatibility_DIR) \
|
||||
$(METAR_DIRS) \
|
||||
$(SG_EXTRA_DIRS) \
|
||||
$(SGTHREAD_DIR)
|
||||
|
||||
DIST_SUBDIRS = $(SUBDIRS_ALWAYS) compatibility scene sound screen environment threads
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
7
simgear/bucket/CMakeLists.txt
Normal file
7
simgear/bucket/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
include (SimGearComponent)
|
||||
|
||||
set(HEADERS newbucket.hxx)
|
||||
set(SOURCES newbucket.cxx)
|
||||
|
||||
simgear_component(bucket bucket "${SOURCES}" "${HEADERS}")
|
||||
@@ -11,7 +11,7 @@ libsgbucket_a_SOURCES = newbucket.cxx
|
||||
# testbucket_SOURCES = testbucket.cxx
|
||||
|
||||
# testbucket_LDADD = \
|
||||
# $(top_builddir)/bucket/libsgbucket.a \
|
||||
# libsgbucket.a \
|
||||
# $(top_builddir)/misc/libsgmisc.a
|
||||
|
||||
INCLUDES = -I$(top_srcdir)
|
||||
|
||||
@@ -44,6 +44,9 @@ SGBucket::SGBucket(const double dlon, const double dlat) {
|
||||
set_bucket(dlon, dlat);
|
||||
}
|
||||
|
||||
SGBucket::SGBucket(const SGGeod& geod) {
|
||||
set_bucket(geod);
|
||||
}
|
||||
|
||||
// create an impossible bucket if false
|
||||
SGBucket::SGBucket(const bool is_good) {
|
||||
@@ -73,11 +76,6 @@ SGBucket::SGBucket(const long int bindex) {
|
||||
}
|
||||
|
||||
|
||||
// default destructor
|
||||
SGBucket::~SGBucket() {
|
||||
}
|
||||
|
||||
|
||||
// Set the bucket params for the specified lat and lon
|
||||
void SGBucket::set_bucket( double *lonlat ) {
|
||||
set_bucket( lonlat[0], lonlat[1] );
|
||||
@@ -94,6 +92,11 @@ void SGBucket::set_bucket( double dlon, double dlat ) {
|
||||
|
||||
// cout << "diff = " << diff << " span = " << span << endl;
|
||||
|
||||
/* Calculate the greatest integral longitude less than
|
||||
* or equal to the given longitude (floor(dlon)),
|
||||
* but attribute coordinates near the east border
|
||||
* to the next tile.
|
||||
*/
|
||||
if ( (dlon >= 0) || (fabs(diff) < SG_EPSILON) ) {
|
||||
lon = (int)dlon;
|
||||
} else {
|
||||
@@ -102,22 +105,48 @@ void SGBucket::set_bucket( double dlon, double dlat ) {
|
||||
|
||||
// find subdivision or super lon if needed
|
||||
if ( span < SG_EPSILON ) {
|
||||
/* sg_bucket_span() never returns 0.0
|
||||
* or anything near it, so this really
|
||||
* should not occur at any time.
|
||||
*/
|
||||
// polar cap
|
||||
lon = 0;
|
||||
x = 0;
|
||||
} else if ( span <= 1.0 ) {
|
||||
/* We have more than one tile per degree of
|
||||
* longitude, so we need an x offset.
|
||||
*/
|
||||
x = (int)((dlon - lon) / span);
|
||||
} else {
|
||||
if ( (dlon >= 0) || (fabs(diff) < SG_EPSILON) ) {
|
||||
lon = (int)( (int)(lon / span) * span);
|
||||
} else {
|
||||
// cout << " lon = " << lon
|
||||
// << " tmp = " << (int)((lon-1) / span) << endl;
|
||||
lon = (int)( (int)((lon + 1) / span) * span - span);
|
||||
if ( lon < -180 ) {
|
||||
lon = -180;
|
||||
}
|
||||
}
|
||||
/* We have one or more degrees per tile,
|
||||
* so we need to find the base longitude
|
||||
* of that tile.
|
||||
*
|
||||
* First we calculate the integral base longitude
|
||||
* (e.g. -85.5 => -86) and then find the greatest
|
||||
* multiple of span that is less than or equal to
|
||||
* that longitude.
|
||||
*
|
||||
* That way, the Greenwich Meridian is always
|
||||
* a tile border.
|
||||
*
|
||||
* This gets us into trouble with the polar caps,
|
||||
* which have width 360 and thus either span
|
||||
* the range from 0 to 360 or from -360 to 0
|
||||
* degrees, depending on whether lon is positive
|
||||
* or negative!
|
||||
*
|
||||
* We also get into trouble with the 8 degree tiles
|
||||
* north of 88N and south of 88S, because the west-
|
||||
* and east-most tiles in that range will cover 184W
|
||||
* to 176W and 176E to 184E respectively, with their
|
||||
* center at 180E/W!
|
||||
*/
|
||||
lon=(int)floor(floor((lon+SG_EPSILON)/span)*span);
|
||||
/* Correct the polar cap issue */
|
||||
if ( lon < -180 ) {
|
||||
lon = -180;
|
||||
}
|
||||
x = 0;
|
||||
}
|
||||
|
||||
@@ -126,17 +155,26 @@ void SGBucket::set_bucket( double dlon, double dlat ) {
|
||||
//
|
||||
diff = dlat - (double)(int)dlat;
|
||||
|
||||
/* Again, a modified floor() function (see longitude) */
|
||||
if ( (dlat >= 0) || (fabs(diff) < SG_EPSILON) ) {
|
||||
lat = (int)dlat;
|
||||
} else {
|
||||
lat = (int)dlat - 1;
|
||||
}
|
||||
/* Latitude base and offset are easier, as
|
||||
* tiles always are 1/8 degree of latitude wide.
|
||||
*/
|
||||
y = (int)((dlat - lat) * 8);
|
||||
}
|
||||
|
||||
|
||||
void SGBucket::set_bucket(const SGGeod& geod)
|
||||
{
|
||||
set_bucket(geod.getLongitudeDeg(), geod.getLatitudeDeg());
|
||||
}
|
||||
|
||||
// Build the path name for this bucket
|
||||
string SGBucket::gen_base_path() const {
|
||||
std::string SGBucket::gen_base_path() const {
|
||||
// long int index;
|
||||
int top_lon, top_lat, main_lon, main_lat;
|
||||
char hem, pole;
|
||||
@@ -186,6 +224,17 @@ string SGBucket::gen_base_path() const {
|
||||
|
||||
// return width of the tile in degrees
|
||||
double SGBucket::get_width() const {
|
||||
if (lon==-180 && (lat==-89 || lat==88) ) {
|
||||
/* Normally the tile at 180W in 88N and 89S
|
||||
* would cover 184W to 176W and the next
|
||||
* on the east side starts at 176W.
|
||||
* To correct, make this a special tile
|
||||
* from 180W to 176W with 4 degrees width
|
||||
* instead of the normal 8 degrees at
|
||||
* that latitude.
|
||||
*/
|
||||
return 4.0;
|
||||
}
|
||||
return sg_bucket_span( get_center_lat() );
|
||||
}
|
||||
|
||||
@@ -210,7 +259,7 @@ double SGBucket::get_width_m() const {
|
||||
double local_perimeter = local_radius * SGD_2PI;
|
||||
double degree_width = local_perimeter / 360.0;
|
||||
|
||||
return sg_bucket_span( get_center_lat() ) * degree_width;
|
||||
return get_width() * degree_width;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
|
||||
/** \file newbucket.hxx
|
||||
* A class and associated utiltity functions to manage world scenery tiling.
|
||||
*
|
||||
* Tile borders are aligned along circles of latitude and longitude.
|
||||
* All tiles are 1/8 degree of latitude high and their width in degrees
|
||||
* longitude depends on their latitude, adjusted in such a way that
|
||||
* all tiles cover about the same amount of area of the earth surface.
|
||||
*/
|
||||
|
||||
#ifndef _NEWBUCKET_HXX
|
||||
@@ -31,30 +36,12 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
#include <simgear/constants.h>
|
||||
#include <simgear/math/SGMath.hxx>
|
||||
|
||||
#ifdef SG_HAVE_STD_INCLUDES
|
||||
# include <cmath>
|
||||
# include <cstdio> // sprintf()
|
||||
#else
|
||||
# include <math.h>
|
||||
# include <stdio.h> // sprintf()
|
||||
#endif
|
||||
|
||||
#include STL_IOSTREAM
|
||||
|
||||
// I don't understand ... <math.h> or <cmath> should be included
|
||||
// already depending on how you defined SG_HAVE_STD_INCLUDES, but I
|
||||
// can go ahead and add this -- CLO
|
||||
#ifdef __MWERKS__
|
||||
SG_USING_STD(sprintf);
|
||||
SG_USING_STD(fabs);
|
||||
#endif
|
||||
|
||||
#include STL_STRING
|
||||
|
||||
SG_USING_STD(string);
|
||||
SG_USING_STD(ostream);
|
||||
|
||||
#include <cmath>
|
||||
#include <cstdio> // sprintf()
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
|
||||
/**
|
||||
* standard size of a bucket in degrees (1/8 of a degree)
|
||||
@@ -113,7 +100,6 @@ static double sg_bucket_span( double l ) {
|
||||
class SGBucket {
|
||||
|
||||
private:
|
||||
double cx, cy; // centerpoint (lon, lat) in degrees of bucket
|
||||
short lon; // longitude index (-180 to 179)
|
||||
short lat; // latitude index (-90 to 89)
|
||||
char x; // x subdivision (0 to 7)
|
||||
@@ -133,6 +119,13 @@ public:
|
||||
*/
|
||||
SGBucket(const double dlon, const double dlat);
|
||||
|
||||
/**
|
||||
* Construct a bucket given a specific location.
|
||||
* @param dlon longitude specified in degrees
|
||||
* @param dlat latitude specified in degrees
|
||||
*/
|
||||
SGBucket(const SGGeod& geod);
|
||||
|
||||
/** Construct a bucket.
|
||||
* @param is_good if false, create an invalid bucket. This is
|
||||
* useful * if you are comparing cur_bucket to last_bucket and
|
||||
@@ -146,11 +139,6 @@ public:
|
||||
*/
|
||||
SGBucket(const long int bindex);
|
||||
|
||||
/**
|
||||
* Default destructor.
|
||||
*/
|
||||
~SGBucket();
|
||||
|
||||
/**
|
||||
* Reset a bucket to represent a new lat and lon
|
||||
* @param dlon longitude specified in degrees
|
||||
@@ -165,6 +153,13 @@ public:
|
||||
*/
|
||||
void set_bucket( double *lonlat );
|
||||
|
||||
/**
|
||||
* Reset a bucket to represent a new lat and lon
|
||||
* @param dlon longitude specified in degrees
|
||||
* @param dlat latitude specified in degrees
|
||||
*/
|
||||
void set_bucket(const SGGeod& geod);
|
||||
|
||||
/**
|
||||
* Create an impossible bucket.
|
||||
* This is useful if you are comparing cur_bucket to last_bucket
|
||||
@@ -200,18 +195,19 @@ public:
|
||||
* string form.
|
||||
* @return tile index in string form
|
||||
*/
|
||||
inline string gen_index_str() const {
|
||||
inline std::string gen_index_str() const {
|
||||
char tmp[20];
|
||||
sprintf(tmp, "%ld",
|
||||
(((long)lon + 180) << 14) + ((lat + 90) << 6) + (y << 3) + x);
|
||||
return (string)tmp;
|
||||
std::sprintf(tmp, "%ld",
|
||||
(((long)lon + 180) << 14) + ((lat + 90) << 6)
|
||||
+ (y << 3) + x);
|
||||
return (std::string)tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the base path name for this bucket.
|
||||
* @return base path in string form
|
||||
*/
|
||||
string gen_base_path() const;
|
||||
std::string gen_base_path() const;
|
||||
|
||||
/**
|
||||
* @return the center lon of a tile.
|
||||
@@ -220,9 +216,9 @@ public:
|
||||
double span = sg_bucket_span( lat + y / 8.0 + SG_HALF_BUCKET_SPAN );
|
||||
|
||||
if ( span >= 1.0 ) {
|
||||
return lon + span / 2.0;
|
||||
return lon + get_width() / 2.0;
|
||||
} else {
|
||||
return lon + x * span + span / 2.0;
|
||||
return lon + x * span + get_width() / 2.0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,7 +248,24 @@ public:
|
||||
* @return the height of the tile in meters.
|
||||
*/
|
||||
double get_height_m() const;
|
||||
|
||||
|
||||
/**
|
||||
* @return the center of the bucket in geodetic coordinates.
|
||||
*/
|
||||
SGGeod get_center() const
|
||||
{ return SGGeod::fromDeg(get_center_lon(), get_center_lat()); }
|
||||
|
||||
/**
|
||||
* @return the center of the bucket in geodetic coordinates.
|
||||
*/
|
||||
SGGeod get_corner(unsigned num) const
|
||||
{
|
||||
double lonFac = ((num + 1) & 2) ? 0.5 : -0.5;
|
||||
double latFac = ((num ) & 2) ? 0.5 : -0.5;
|
||||
return SGGeod::fromDeg(get_center_lon() + lonFac*get_width(),
|
||||
get_center_lat() + latFac*get_height());
|
||||
}
|
||||
|
||||
// Informational methods.
|
||||
|
||||
/**
|
||||
@@ -279,10 +292,15 @@ public:
|
||||
|
||||
// friends
|
||||
|
||||
friend ostream& operator<< ( ostream&, const SGBucket& );
|
||||
friend std::ostream& operator<< ( std::ostream&, const SGBucket& );
|
||||
friend bool operator== ( const SGBucket&, const SGBucket& );
|
||||
};
|
||||
|
||||
inline bool operator!= (const SGBucket& lhs, const SGBucket& rhs)
|
||||
{
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \relates SGBucket
|
||||
@@ -313,10 +331,10 @@ void sgBucketDiff( const SGBucket& b1, const SGBucket& b2, int *dx, int *dy );
|
||||
* @param out output stream
|
||||
* @param b bucket
|
||||
*/
|
||||
inline ostream&
|
||||
operator<< ( ostream& out, const SGBucket& b )
|
||||
inline std::ostream&
|
||||
operator<< ( std::ostream& out, const SGBucket& b )
|
||||
{
|
||||
return out << b.lon << ":" << b.x << ", " << b.lat << ":" << b.y;
|
||||
return out << b.lon << ":" << (int)b.x << ", " << b.lat << ":" << (int)b.y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -23,48 +23,9 @@
|
||||
* A set of defines to encapsulate compiler and platform differences.
|
||||
* Please refer to the source code for full documentation on this file.
|
||||
*
|
||||
* Here is a summary of what this file does.
|
||||
* This file is useful to set compiler-specific options in every file - for
|
||||
* example, disabling warnings.
|
||||
*
|
||||
* (1) Defines macros for some STL includes which may be affected
|
||||
* by file name length limitations.
|
||||
*
|
||||
* (2) Defines macros for some features not supported by all C++ compilers.
|
||||
*
|
||||
* (3) Defines 'explicit' as a null macro if the compiler doesn't support
|
||||
* the explicit keyword.
|
||||
*
|
||||
* (4) Defines 'typename' as a null macro if the compiler doesn't support
|
||||
* the typename keyword.
|
||||
*
|
||||
* (5) Defines bool, true and false if the compiler doesn't do so.
|
||||
*
|
||||
* (6) Defines SG_EXPLICIT_FUNCTION_TMPL_ARGS if the compiler
|
||||
* supports calling a function template by providing its template
|
||||
* arguments explicitly.
|
||||
*
|
||||
* (7) Defines SG_NEED_AUTO_PTR if STL doesn't provide auto_ptr<>.
|
||||
*
|
||||
* (8) Defines SG_NO_ARROW_OPERATOR if the compiler is unable
|
||||
* to support operator->() for iterators.
|
||||
*
|
||||
* (9) Defines SG_USE_EXCEPTIONS if the compiler supports exceptions.
|
||||
* Note: no FlightGear code uses exceptions.
|
||||
*
|
||||
* (10) Define SG_NAMESPACES if the compiler supports namespaces.
|
||||
*
|
||||
* (11) SG_MATH_FN_IN_NAMESPACE_STD -- not used??
|
||||
*
|
||||
* (12) Define SG_HAVE_STD if std namespace is supported.
|
||||
*
|
||||
* (13) Defines SG_CLASS_PARTIAL_SPECIALIZATION if the compiler
|
||||
* supports partial specialization of class templates.
|
||||
*
|
||||
* (14) Defines SG_HAVE_STD_INCLUDES to use ISO C++ Standard headers.
|
||||
*
|
||||
* (15) Defines SG_HAVE_STREAMBUF if <streambuf> of <streambuf.h> are present.
|
||||
*
|
||||
* (16) Define SG_MATH_EXCEPTION_CLASH if math.h defines an exception class
|
||||
* that clashes with the one defined in <stdexcept>.
|
||||
*/
|
||||
|
||||
#ifndef _SG_COMPILER_H
|
||||
@@ -79,157 +40,37 @@
|
||||
#define SG_DO_STRINGIZE(X) #X
|
||||
|
||||
#ifdef __GNUC__
|
||||
# if __GNUC__ == 2
|
||||
# if __GNUC_MINOR__ < 8
|
||||
|
||||
// g++-2.7.x
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip.h>
|
||||
# define STL_IOSTREAM <iostream.h>
|
||||
# define STL_ITERATOR <iterator.h>
|
||||
# define STL_FSTREAM <fstream.h>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
# define STL_STRSTREAM <strstream.h>
|
||||
|
||||
# define SG_NEED_AUTO_PTR
|
||||
# define SG_NO_DEFAULT_TEMPLATE_ARGS
|
||||
# define SG_INCOMPLETE_FUNCTIONAL
|
||||
# define SG_NO_ARROW_OPERATOR
|
||||
|
||||
# elif __GNUC_MINOR__ >= 8
|
||||
|
||||
// g++-2.8.x and egcs-1.x
|
||||
# define SG_EXPLICIT_FUNCTION_TMPL_ARGS
|
||||
# define SG_NEED_AUTO_PTR
|
||||
# define SG_MEMBER_TEMPLATES
|
||||
# define SG_NAMESPACES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_HAVE_STREAMBUF
|
||||
# define SG_CLASS_PARTIAL_SPECIALIZATION
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
# define STL_STRSTREAM <strstream>
|
||||
|
||||
# endif
|
||||
# elif __GNUC__ >= 3
|
||||
// g++-3.0.x
|
||||
# define SG_EXPLICIT_FUNCTION_TMPL_ARGS
|
||||
# define SG_NEED_AUTO_PTR
|
||||
# define SG_MEMBER_TEMPLATES
|
||||
# define SG_NAMESPACES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_HAVE_STREAMBUF
|
||||
# define SG_CLASS_PARTIAL_SPECIALIZATION
|
||||
# define SG_HAVE_STD_INCLUDES
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
# define STL_STRSTREAM <strstream>
|
||||
# else
|
||||
# error Time to upgrade. GNU compilers < 2.7 not supported
|
||||
# if __GNUC__ < 3
|
||||
# error Time to upgrade. GNU compilers < 3.0 not supported
|
||||
# elif (__GNUC__ == 3) && (__GNUC_MINOR__ < 4)
|
||||
# warning GCC compilers prior to 3.4 are suspect
|
||||
# endif
|
||||
|
||||
# define SG_COMPILER_STR "GNU C++ version " SG_STRINGIZE(__GNUC__) "." SG_STRINGIZE(__GNUC_MINOR__)
|
||||
|
||||
#endif // __GNUC__
|
||||
|
||||
/* KAI C++ */
|
||||
#if defined(__KCC)
|
||||
|
||||
# define SG_NAMESPACES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_HAVE_STREAMBUF
|
||||
# define SG_HAVE_TRAITS
|
||||
# define SG_HAVE_STD_INCLUDES
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
# define STL_STRSTREAM <strstream>
|
||||
|
||||
# define SG_COMPILER_STR "Kai C++ version " SG_STRINGIZE(__KCC_VERSION)
|
||||
|
||||
#endif // __KCC
|
||||
|
||||
//
|
||||
// Metrowerks
|
||||
//
|
||||
#if defined(__MWERKS__)
|
||||
/*
|
||||
CodeWarrior compiler from Metrowerks, Inc.
|
||||
*/
|
||||
# define SG_HAVE_TRAITS
|
||||
# define SG_HAVE_STD_INCLUDES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_NAMESPACES
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
|
||||
// Temp:
|
||||
# define bcopy(from, to, n) memcpy(to, from, n)
|
||||
|
||||
// -rp- please use FG_MEM_COPY everywhere !
|
||||
// #define FG_MEM_COPY(to,from,n) memcpy(to, from, n)
|
||||
|
||||
// -dw- currently used glut has no game mode stuff
|
||||
# define GLUT_WRONG_VERSION
|
||||
|
||||
# define SG_COMPILER_STR "Metrowerks CodeWarrior C++ version " SG_STRINGIZE(__MWERKS__)
|
||||
|
||||
#endif // __MWERKS__
|
||||
|
||||
//
|
||||
// Microsoft compilers.
|
||||
//
|
||||
#ifdef _MSC_VER
|
||||
# define bcopy(from, to, n) memcpy(to, from, n)
|
||||
# define FG_MEM_COPY(to,from,n) memcpy(to, from, n)
|
||||
|
||||
# if _MSC_VER >= 1200 // msvc++ 6.0 or greater
|
||||
# define SG_NAMESPACES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_HAVE_STD_INCLUDES
|
||||
# define SG_HAVE_STREAMBUF
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
# define STL_STRSTREAM <strstream>
|
||||
|
||||
# define isnan _isnan
|
||||
# define snprintf _snprintf
|
||||
# if _MSC_VER < 1500
|
||||
# define vsnprintf _vsnprintf
|
||||
# endif
|
||||
# define copysign _copysign
|
||||
# define strcasecmp stricmp
|
||||
|
||||
# undef min
|
||||
# undef max
|
||||
|
||||
# pragma warning(disable: 4786) // identifier was truncated to '255' characters
|
||||
# pragma warning(disable: 4244) // conversion from double to float
|
||||
@@ -243,79 +84,23 @@
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# if defined(HAVE_SGI_STL_PORT)
|
||||
|
||||
// Use quotes around long file names to get around Borland's include hackery
|
||||
|
||||
# define STL_ALGORITHM "algorithm"
|
||||
# define STL_FUNCTIONAL "functional"
|
||||
|
||||
# define SG_MATH_EXCEPTION_CLASH
|
||||
|
||||
# else
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRSTREAM <strstream>
|
||||
|
||||
# define SG_INCOMPLETE_FUNCTIONAL
|
||||
|
||||
# endif // HAVE_SGI_STL_PORT
|
||||
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STRING <string>
|
||||
# define SG_NO_DEFAULT_TEMPLATE_ARGS
|
||||
# define SG_NAMESPACES
|
||||
// # define SG_HAVE_STD
|
||||
|
||||
# define SG_COMPILER_STR "Borland C++ version " SG_STRINGIZE(__BORLANDC__)
|
||||
|
||||
#endif // __BORLANDC__
|
||||
|
||||
//
|
||||
// Native SGI compilers
|
||||
//
|
||||
|
||||
#if defined ( sgi ) && !defined( __GNUC__ )
|
||||
# define SG_HAVE_NATIVE_SGI_COMPILERS
|
||||
# if (_COMPILER_VERSION < 740)
|
||||
# error Need MipsPro 7.4.0 or higher now
|
||||
# endif
|
||||
|
||||
# define SG_EXPLICIT_FUNCTION_TMPL_ARGS
|
||||
# define SG_CLASS_PARTIAL_SPECIALIZATION
|
||||
# define SG_NEED_AUTO_PTR
|
||||
# define SG_MEMBER_TEMPLATES
|
||||
# define SG_NAMESPACES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_HAVE_STREAMBUF
|
||||
# define SG_HAVE_TRAITS
|
||||
# define SG_HAVE_STD_INCLUDES
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
#if (_COMPILER_VERSION < 740)
|
||||
# define STL_STRING <irix_string>
|
||||
#else
|
||||
# define STL_STRING <string>
|
||||
#endif
|
||||
# define STL_STRSTREAM <strstream>
|
||||
#define SG_HAVE_NATIVE_SGI_COMPILERS
|
||||
|
||||
#pragma set woff 1001,1012,1014,1116,1155,1172,1174
|
||||
#pragma set woff 1401,1460,1551,1552,1681
|
||||
|
||||
#ifdef __cplusplus
|
||||
#pragma set woff 1682,3303
|
||||
#if (_COMPILER_VERSION >= 740)
|
||||
# pragma set woff 3624
|
||||
#endif
|
||||
# pragma set woff 1682,3303
|
||||
# pragma set woff 3624
|
||||
#endif
|
||||
|
||||
# define SG_COMPILER_STR "SGI MipsPro compiler version " SG_STRINGIZE(_COMPILER_VERSION)
|
||||
@@ -324,6 +109,7 @@
|
||||
|
||||
|
||||
#if defined (__sun)
|
||||
# define SG_UNIX
|
||||
# include <strings.h>
|
||||
# include <memory.h>
|
||||
# if defined ( __cplusplus )
|
||||
@@ -345,24 +131,7 @@
|
||||
// Intel C++ Compiler
|
||||
//
|
||||
#if defined(__ICC) || defined (__ECC)
|
||||
# define SG_NAMESPACES
|
||||
# define SG_HAVE_STD
|
||||
# define SG_HAVE_STREAMBUF
|
||||
# define SG_HAVE_TRAITS
|
||||
# define SG_HAVE_STD_INCLUDES
|
||||
|
||||
# define STL_ALGORITHM <algorithm>
|
||||
# define STL_FUNCTIONAL <functional>
|
||||
# define STL_IOMANIP <iomanip>
|
||||
# define STL_IOSTREAM <iostream>
|
||||
# define STL_ITERATOR <iterator>
|
||||
# define STL_FSTREAM <fstream>
|
||||
# define STL_STDEXCEPT <stdexcept>
|
||||
# define STL_STRING <string>
|
||||
# define STL_STRSTREAM <strstream>
|
||||
|
||||
# define SG_COMPILER_STR "Intel C++ version " SG_STRINGIZE(__ICC)
|
||||
|
||||
#endif // __ICC
|
||||
|
||||
//
|
||||
@@ -370,101 +139,51 @@
|
||||
//
|
||||
|
||||
#ifdef __APPLE__
|
||||
# define SG_GL_H <OpenGL/gl.h>
|
||||
# define SG_GLX_H <AGL/agl.h>
|
||||
# define SG_GLU_H <OpenGL/glu.h>
|
||||
# define SG_GLEXT_H <OpenGL/glext.h>
|
||||
# define SG_GLUT_H <GLUT/glut.h>
|
||||
|
||||
# define SG_MAC
|
||||
# define SG_UNIX
|
||||
# ifdef __GNUC__
|
||||
# if ( __GNUC__ > 3 ) || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 3 )
|
||||
inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
|
||||
#else
|
||||
# define SG_GL_H <GL/gl.h>
|
||||
# define SG_GLX_H <GL/glx.h>
|
||||
# define SG_GLU_H <GL/glu.h>
|
||||
# define SG_GLEXT_H <GL/glext.h>
|
||||
# define SG_GLUT_H <GL/glut.h>
|
||||
# else
|
||||
// any C++ header file undefines isinf and isnan
|
||||
// so this should be included before <iostream>
|
||||
// the functions are STILL in libm (libSystem on mac os x)
|
||||
extern "C" int (isnan)(double);
|
||||
extern "C" int (isinf)(double);
|
||||
# endif
|
||||
# else
|
||||
inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined (__FreeBSD__)
|
||||
# define SG_UNIX
|
||||
#include <sys/param.h>
|
||||
# if __FreeBSD_version < 500000
|
||||
extern "C" {
|
||||
inline int isnan(double r) { return !(r <= 0 || r >= 0); }
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined (__CYGWIN__)
|
||||
# define SG_WINDOWS
|
||||
# define SG_UNIX
|
||||
# include <ieeefp.h> // isnan
|
||||
#endif
|
||||
|
||||
// includes both MSVC and mingw compilers
|
||||
#if defined(_WIN32) || defined(__WIN32__)
|
||||
# define SG_WINDOWS
|
||||
#endif
|
||||
|
||||
#if defined(__linux__) || defined(_AIX) || defined ( sgi )
|
||||
# define SG_UNIX
|
||||
#endif
|
||||
|
||||
//
|
||||
// No user modifiable definitions beyond here.
|
||||
//
|
||||
|
||||
#ifdef SG_NEED_EXPLICIT
|
||||
# define explicit
|
||||
#endif
|
||||
|
||||
#ifdef SG_NEED_TYPENAME
|
||||
# define typename
|
||||
#endif
|
||||
|
||||
#ifdef SG_NEED_MUTABLE
|
||||
# define mutable
|
||||
#endif
|
||||
|
||||
#ifdef SG_NEED_BOOL
|
||||
typedef int bool;
|
||||
# define true 1
|
||||
# define false 0
|
||||
#endif
|
||||
|
||||
#ifdef SG_EXPLICIT_FUNCTION_TMPL_ARGS
|
||||
# define SG_NULL_TMPL_ARGS <>
|
||||
#else
|
||||
# define SG_NULL_TMPL_ARGS
|
||||
#endif
|
||||
|
||||
#ifdef SG_CLASS_PARTIAL_SPECIALIZATION
|
||||
# define SG_TEMPLATE_NULL template<>
|
||||
#else
|
||||
# define SG_TEMPLATE_NULL
|
||||
#endif
|
||||
|
||||
// SG_NO_NAMESPACES is a hook so that users can disable namespaces
|
||||
// without having to edit library headers.
|
||||
#if defined(SG_NAMESPACES) && !defined(SG_NO_NAMESPACES)
|
||||
# define SG_NAMESPACE(X) namespace X {
|
||||
# define SG_NAMESPACE_END }
|
||||
# define SG_USING_NAMESPACE(X) using namespace X
|
||||
# else
|
||||
# define SG_NAMESPACE(X)
|
||||
# define SG_NAMESPACE_END
|
||||
# define SG_USING_NAMESPACE(X)
|
||||
#endif
|
||||
|
||||
/** \def SG_USING_STD(x)
|
||||
* Expands to using std::x if SG_HAVE_STD is defined
|
||||
*/
|
||||
# ifdef SG_HAVE_STD
|
||||
# define SG_USING_STD(X) using std::X
|
||||
# define STD std
|
||||
# else
|
||||
# define SG_USING_STD(X)
|
||||
# define STD
|
||||
# endif
|
||||
|
||||
// Additional <functional> implementation from SGI STL 3.11
|
||||
// Adapter function objects: pointers to member functions
|
||||
#ifdef SG_INCOMPLETE_FUNCTIONAL
|
||||
|
||||
template <class _Ret, class _Tp>
|
||||
class const_mem_fun_ref_t
|
||||
#ifndef __BORLANDC__
|
||||
: public unary_function<_Tp,_Ret>
|
||||
#endif // __BORLANDC__
|
||||
{
|
||||
public:
|
||||
explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
|
||||
_Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
|
||||
private:
|
||||
_Ret (_Tp::*_M_f)() const;
|
||||
};
|
||||
|
||||
template <class _Ret, class _Tp>
|
||||
inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const)
|
||||
{ return const_mem_fun_ref_t<_Ret,_Tp>(__f); }
|
||||
|
||||
#endif // SG_INCOMPLETE_FUNCTIONAL
|
||||
|
||||
#endif // _SG_COMPILER_H
|
||||
|
||||
|
||||
@@ -31,24 +31,25 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#ifdef SG_HAVE_STD_INCLUDES
|
||||
# include <cmath>
|
||||
#else
|
||||
# ifdef SG_MATH_EXCEPTION_CLASH
|
||||
# define exception C_exception
|
||||
# endif
|
||||
# include <math.h>
|
||||
#endif
|
||||
|
||||
#include <plib/sg.h>
|
||||
#include <cmath>
|
||||
|
||||
|
||||
// Make sure PI is defined in its various forms
|
||||
|
||||
// SG_PI and SGD_PI (float and double) come from plib/sg.h
|
||||
#ifndef SGD_PI // remove me once FlightGear no longer uses PLIB
|
||||
|
||||
#ifdef M_PI
|
||||
const double SGD_PI = M_PI;
|
||||
const float SG_PI = M_PI;
|
||||
#else
|
||||
const float SG_PI = 3.1415926535f;
|
||||
const double SGD_PI = 3.1415926535;
|
||||
#endif
|
||||
|
||||
#endif // of PLIB-SG guard
|
||||
|
||||
/** 2 * PI */
|
||||
#define SGD_2PI 6.28318530717958647692
|
||||
const double SGD_2PI = SGD_PI * 2.0;
|
||||
|
||||
/** PI / 2 */
|
||||
#ifdef M_PI_2
|
||||
@@ -58,7 +59,17 @@
|
||||
#endif
|
||||
|
||||
/** PI / 4 */
|
||||
#define SGD_PI_4 0.78539816339744830961
|
||||
const double SGD_PI_4 = 0.78539816339744830961;
|
||||
|
||||
#ifndef SGD_DEGREES_TO_RADIANS // // remove me once FlightGear no longer uses PLIB
|
||||
|
||||
const double SGD_DEGREES_TO_RADIANS = SGD_PI / 180.0;
|
||||
const double SGD_RADIANS_TO_DEGREES = 180.0 / SGD_PI;
|
||||
|
||||
const float SG_DEGREES_TO_RADIANS = SG_PI / 180.0f;
|
||||
const float SG_RADIANS_TO_DEGREES = 180.0f / SG_PI;
|
||||
|
||||
#endif // of PLIB-SG guard
|
||||
|
||||
/** \def SG_E "e" */
|
||||
#ifdef M_E
|
||||
@@ -75,6 +86,8 @@
|
||||
* 6378.165 but this is probably close enough */
|
||||
#define SG_EARTH_RAD 6378.155
|
||||
|
||||
// Maximum terrain elevation from sea level
|
||||
#define SG_MAX_ELEVATION_M 9000.0
|
||||
|
||||
// Earth parameters for WGS 84, taken from LaRCsim/ls_constants.h
|
||||
|
||||
@@ -122,10 +135,10 @@
|
||||
/** Nautical Miles to Radians */
|
||||
#define SG_RAD_TO_NM 3437.7467707849392526
|
||||
|
||||
/** Miles per second to Knots */
|
||||
/** meters per second to Knots */
|
||||
#define SG_MPS_TO_KT 1.9438444924406046432
|
||||
|
||||
/** Knots to Miles per second */
|
||||
/** Knots to meters per second */
|
||||
#define SG_KT_TO_MPS 0.5144444444444444444
|
||||
|
||||
/** Feet per second to Knots */
|
||||
@@ -134,16 +147,16 @@
|
||||
/** Knots to Feet per second */
|
||||
#define SG_KT_TO_FPS 1.6878098571011956874
|
||||
|
||||
/** Miles per second to Miles per hour */
|
||||
/** meters per second to Miles per hour */
|
||||
#define SG_MPS_TO_MPH 2.2369362920544020312
|
||||
|
||||
/** Miles per hour to Miles per second */
|
||||
/** meetrs per hour to Miles per second */
|
||||
#define SG_MPH_TO_MPS 0.44704
|
||||
|
||||
/** Meters per second to Kilometers per hour */
|
||||
#define SG_MPS_TO_KMH 3.6
|
||||
|
||||
/** Kilometers per hour to Miles per second */
|
||||
/** Kilometers per hour to meters per second */
|
||||
#define SG_KMH_TO_MPS 0.2777777777777777778
|
||||
|
||||
/** Pascal to Inch Mercury */
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
7
simgear/debug/CMakeLists.txt
Normal file
7
simgear/debug/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
include (SimGearComponent)
|
||||
|
||||
set(HEADERS debug_types.h logstream.hxx)
|
||||
set(SOURCES logstream.cxx)
|
||||
|
||||
simgear_component(debug debug "${SOURCES}" "${HEADERS}")
|
||||
@@ -20,18 +20,31 @@
|
||||
//
|
||||
// $Id$
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "logstream.hxx"
|
||||
|
||||
logstream *global_logstream = NULL;
|
||||
logstream *logstream::global_logstream = 0;
|
||||
|
||||
bool logbuf::logging_enabled = true;
|
||||
#ifdef _MSC_VER
|
||||
#ifdef _WIN32
|
||||
bool logbuf::has_console = true;
|
||||
#endif
|
||||
sgDebugClass logbuf::logClass = SG_NONE;
|
||||
sgDebugPriority logbuf::logPriority = SG_INFO;
|
||||
streambuf* logbuf::sbuf = NULL;
|
||||
|
||||
namespace {
|
||||
struct ignore_me
|
||||
{
|
||||
ignore_me()
|
||||
{
|
||||
logstream::initGlobalLogstream();
|
||||
}
|
||||
};
|
||||
static ignore_me im;
|
||||
}
|
||||
|
||||
logbuf::logbuf()
|
||||
{
|
||||
// if ( sbuf == NULL )
|
||||
@@ -90,3 +103,12 @@ logstream::setLogLevels( sgDebugClass c, sgDebugPriority p )
|
||||
logbuf::set_log_level( c, p );
|
||||
}
|
||||
|
||||
logstream *
|
||||
logstream::initGlobalLogstream()
|
||||
{
|
||||
// Force initialization of cerr.
|
||||
static std::ios_base::Init initializer;
|
||||
if( !global_logstream )
|
||||
global_logstream = new logstream(std::cerr);
|
||||
return global_logstream;
|
||||
}
|
||||
|
||||
@@ -27,29 +27,18 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#ifdef _WIN32
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef SG_HAVE_STD_INCLUDES
|
||||
# include <streambuf>
|
||||
# include <iostream>
|
||||
#else
|
||||
# include <iostream.h>
|
||||
# include <simgear/sg_traits.hxx>
|
||||
#endif
|
||||
#include <streambuf>
|
||||
#include <ostream>
|
||||
#include <cstdio>
|
||||
|
||||
#include <simgear/debug/debug_types.h>
|
||||
|
||||
SG_USING_STD(streambuf);
|
||||
SG_USING_STD(ostream);
|
||||
SG_USING_STD(cout);
|
||||
SG_USING_STD(cerr);
|
||||
SG_USING_STD(endl);
|
||||
|
||||
#ifdef __MWERKS__
|
||||
SG_USING_STD(iostream);
|
||||
#endif
|
||||
using std::streambuf;
|
||||
using std::ostream;
|
||||
|
||||
//
|
||||
// TODO:
|
||||
@@ -67,17 +56,10 @@ SG_USING_STD(iostream);
|
||||
#ifdef SG_NEED_STREAMBUF_HACK
|
||||
class logbuf : public __streambuf
|
||||
#else
|
||||
class logbuf : public streambuf
|
||||
class logbuf : public std::streambuf
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
|
||||
#ifndef SG_HAVE_STD_INCLUDES
|
||||
typedef char_traits<char> traits_type;
|
||||
typedef char_traits<char>::int_type int_type;
|
||||
// typedef char_traits<char>::pos_type pos_type;
|
||||
// typedef char_traits<char>::off_type off_type;
|
||||
#endif
|
||||
// logbuf( streambuf* sb ) : sbuf(sb) {}
|
||||
/** Constructor */
|
||||
logbuf();
|
||||
@@ -97,6 +79,8 @@ public:
|
||||
*/
|
||||
void set_log_state( sgDebugClass c, sgDebugPriority p );
|
||||
|
||||
bool would_log( sgDebugClass c, sgDebugPriority p ) const;
|
||||
|
||||
/**
|
||||
* Set the global logging level.
|
||||
* @param c debug class
|
||||
@@ -137,9 +121,9 @@ public:
|
||||
* Set the stream buffer
|
||||
* @param sb stream buffer
|
||||
*/
|
||||
void set_sb( streambuf* sb );
|
||||
void set_sb( std::streambuf* sb );
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#ifdef _WIN32
|
||||
static void has_no_console() { has_console = false; }
|
||||
#endif
|
||||
|
||||
@@ -155,10 +139,10 @@ protected:
|
||||
private:
|
||||
|
||||
// The streambuf used for actual output. Defaults to cerr.rdbuf().
|
||||
static streambuf* sbuf;
|
||||
static std::streambuf* sbuf;
|
||||
|
||||
static bool logging_enabled;
|
||||
#ifdef _MSC_VER
|
||||
#ifdef _WIN32
|
||||
static bool has_console;
|
||||
#endif
|
||||
static sgDebugClass logClass;
|
||||
@@ -174,11 +158,7 @@ private:
|
||||
inline int
|
||||
logbuf::sync()
|
||||
{
|
||||
#ifdef SG_HAVE_STD_INCLUDES
|
||||
return sbuf->pubsync();
|
||||
#else
|
||||
return sbuf->sync();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void
|
||||
@@ -187,10 +167,16 @@ logbuf::set_log_state( sgDebugClass c, sgDebugPriority p )
|
||||
logging_enabled = ((c & logClass) != 0 && p >= logPriority);
|
||||
}
|
||||
|
||||
inline bool
|
||||
logbuf::would_log( sgDebugClass c, sgDebugPriority p ) const
|
||||
{
|
||||
return ((c & logClass) != 0 && p >= logPriority);
|
||||
}
|
||||
|
||||
inline logbuf::int_type
|
||||
logbuf::overflow( int c )
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef _WIN32
|
||||
if ( logging_enabled ) {
|
||||
if ( !has_console ) {
|
||||
AllocConsole();
|
||||
@@ -238,23 +224,23 @@ struct logstream_base
|
||||
/**
|
||||
* Class to manage the debug logging stream.
|
||||
*/
|
||||
class logstream : private logstream_base, public ostream
|
||||
class logstream : private logstream_base, public std::ostream
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* The default is to send messages to cerr.
|
||||
* @param out output stream
|
||||
*/
|
||||
logstream( ostream& out )
|
||||
logstream( std::ostream& out )
|
||||
// : logstream_base(out.rdbuf()),
|
||||
: logstream_base(),
|
||||
ostream(&lbuf) { lbuf.set_sb(out.rdbuf());}
|
||||
std::ostream(&lbuf) { lbuf.set_sb(out.rdbuf());}
|
||||
|
||||
/**
|
||||
* Set the output stream
|
||||
* @param out output stream
|
||||
*/
|
||||
void set_output( ostream& out ) { lbuf.set_sb( out.rdbuf() ); }
|
||||
void set_output( std::ostream& out ) { lbuf.set_sb( out.rdbuf() ); }
|
||||
|
||||
/**
|
||||
* Set the global log class and priority level.
|
||||
@@ -263,22 +249,29 @@ public:
|
||||
*/
|
||||
void setLogLevels( sgDebugClass c, sgDebugPriority p );
|
||||
|
||||
bool would_log( sgDebugClass c, sgDebugPriority p ) const
|
||||
{
|
||||
return lbuf.would_log( c, p );
|
||||
};
|
||||
|
||||
/**
|
||||
* Output operator to capture the debug level and priority of a message.
|
||||
* @param l log level
|
||||
*/
|
||||
inline ostream& operator<< ( const loglevel& l );
|
||||
inline std::ostream& operator<< ( const loglevel& l );
|
||||
friend logstream& sglog();
|
||||
static logstream *initGlobalLogstream();
|
||||
protected:
|
||||
static logstream *global_logstream;
|
||||
};
|
||||
|
||||
inline ostream&
|
||||
inline std::ostream&
|
||||
logstream::operator<< ( const loglevel& l )
|
||||
{
|
||||
lbuf.set_log_state( l.logClass, l.logPriority );
|
||||
return *this;
|
||||
}
|
||||
|
||||
extern logstream *global_logstream;
|
||||
|
||||
/**
|
||||
* \relates logstream
|
||||
* Return the one and only logstream instance.
|
||||
@@ -289,22 +282,7 @@ extern logstream *global_logstream;
|
||||
inline logstream&
|
||||
sglog()
|
||||
{
|
||||
if (global_logstream == NULL) {
|
||||
|
||||
#ifdef __APPLE__
|
||||
/**
|
||||
* There appears to be a bug in the C++ runtime in Mac OS X that
|
||||
* will crash if certain funtions are called (in this case
|
||||
* cerr.rdbuf()) during static initialization of a class. This
|
||||
* print statement is hack to kick the library in the pants so it
|
||||
* won't crash when cerr.rdbuf() is first called -DW
|
||||
**/
|
||||
cout << "Using Mac OS X hack for initializing C++ stdio..." << endl;
|
||||
#endif
|
||||
global_logstream = new logstream (cerr);
|
||||
}
|
||||
|
||||
return *global_logstream;
|
||||
return *logstream::initGlobalLogstream();
|
||||
}
|
||||
|
||||
|
||||
@@ -316,12 +294,15 @@ sglog()
|
||||
*/
|
||||
#ifdef FG_NDEBUG
|
||||
# define SG_LOG(C,P,M)
|
||||
#elif defined( __MWERKS__ )
|
||||
# define SG_LOG(C,P,M) ::sglog() << ::loglevel(C,P) << M << std::endl
|
||||
#else
|
||||
# define SG_LOG(C,P,M) sglog() << loglevel(C,P) << M << endl
|
||||
# define SG_LOG(C,P,M) do { \
|
||||
logstream& __tmplogstreamref(sglog()); \
|
||||
if(__tmplogstreamref.would_log(C,P)) { \
|
||||
__tmplogstreamref << loglevel(C,P) << M << std::endl; } \
|
||||
} while(0)
|
||||
#endif
|
||||
|
||||
#define SG_ORIGIN __FILE__ ":" SG_STRINGIZE(__LINE__)
|
||||
|
||||
#endif // _LOGSTREAM_H
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include <string>
|
||||
#include "Debug/logstream.hxx"
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
class Test {
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
metar
|
||||
7
simgear/environment/CMakeLists.txt
Normal file
7
simgear/environment/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
include (SimGearComponent)
|
||||
|
||||
set(HEADERS metar.hxx visual_enviro.hxx precipitation.hxx)
|
||||
set(SOURCES metar.cxx visual_enviro.cxx precipitation.cxx)
|
||||
|
||||
simgear_component(environment environment "${SOURCES}" "${HEADERS}")
|
||||
@@ -2,8 +2,8 @@ includedir = @includedir@/environment
|
||||
|
||||
lib_LIBRARIES = libsgenvironment.a
|
||||
|
||||
include_HEADERS = metar.hxx visual_enviro.hxx
|
||||
include_HEADERS = metar.hxx visual_enviro.hxx precipitation.hxx
|
||||
|
||||
libsgenvironment_a_SOURCES = metar.cxx visual_enviro.cxx
|
||||
libsgenvironment_a_SOURCES = metar.cxx visual_enviro.cxx precipitation.cxx
|
||||
|
||||
INCLUDES = -I$(top_srcdir)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <time.h>
|
||||
#include <cstring>
|
||||
|
||||
#include <simgear/io/sg_socket.hxx>
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
@@ -159,7 +160,7 @@ void SGMetar::useCurrentDate()
|
||||
{
|
||||
struct tm now;
|
||||
time_t now_sec = time(0);
|
||||
#if defined( _MSC_VER ) || defined ( __MINGW32__ )
|
||||
#ifdef _WIN32
|
||||
now = *gmtime(&now_sec);
|
||||
#else
|
||||
gmtime_r(&now_sec, &now);
|
||||
@@ -189,11 +190,12 @@ char *SGMetar::loadData(const char *id, const string& proxy, const string& port,
|
||||
const int buflen = 512;
|
||||
char buf[2 * buflen];
|
||||
|
||||
string host = proxy.empty() ? "weather.noaa.gov" : proxy;
|
||||
string metar_server = "weather.noaa.gov";
|
||||
string host = proxy.empty() ? metar_server : proxy;
|
||||
string path = "/pub/data/observations/metar/stations/";
|
||||
|
||||
path += string(id) + ".TXT";
|
||||
_url = "http://weather.noaa.gov" + path;
|
||||
_url = "http://" + metar_server + path;
|
||||
|
||||
SGSocket *sock = new SGSocket(host, port.empty() ? "80" : port, "tcp");
|
||||
sock->set_timeout(10000);
|
||||
@@ -204,10 +206,11 @@ char *SGMetar::loadData(const char *id, const string& proxy, const string& port,
|
||||
|
||||
string get = "GET ";
|
||||
if (!proxy.empty())
|
||||
get += "http://weather.noaa.gov";
|
||||
get += "http://" + metar_server;
|
||||
|
||||
sprintf(buf, "%ld", time);
|
||||
get += path + " HTTP/1.0\015\012X-Time: " + buf + "\015\012";
|
||||
get += "Host: " + metar_server + "\015\012";
|
||||
|
||||
if (!auth.empty())
|
||||
get += "Proxy-Authorization: " + auth + "\015\012";
|
||||
@@ -465,11 +468,13 @@ bool SGMetar::scanVisibility()
|
||||
int modifier = SGMetarVisibility::EQUALS;
|
||||
// \d{4}(N|NE|E|SE|S|SW|W|NW)?
|
||||
if (scanNumber(&m, &i, 4)) {
|
||||
if (*m == 'E')
|
||||
if( strncmp( m, "NDV",3 ) == 0 ) {
|
||||
m+=3; // tolerate NDV (no directional validation)
|
||||
} else if (*m == 'E') {
|
||||
m++, dir = 90;
|
||||
else if (*m == 'W')
|
||||
} else if (*m == 'W') {
|
||||
m++, dir = 270;
|
||||
else if (*m == 'N') {
|
||||
} else if (*m == 'N') {
|
||||
m++;
|
||||
if (*m == 'E')
|
||||
m++, dir = 45;
|
||||
@@ -485,7 +490,7 @@ bool SGMetar::scanVisibility()
|
||||
m++, dir = 225;
|
||||
else
|
||||
dir = 180;
|
||||
}
|
||||
}
|
||||
if (i == 0)
|
||||
i = 50, modifier = SGMetarVisibility::LESS_THAN;
|
||||
else if (i == 9999)
|
||||
@@ -493,7 +498,6 @@ bool SGMetar::scanVisibility()
|
||||
distance = i;
|
||||
} else {
|
||||
// M?(\d{1,2}|\d{1,2}/\d{1,2}|\d{1,2} \d{1,2}/\d{1,2})(SM|KM)
|
||||
modifier = 0;
|
||||
if (*m == 'M')
|
||||
m++, modifier = SGMetarVisibility::LESS_THAN;
|
||||
|
||||
@@ -613,8 +617,8 @@ bool SGMetar::scanRwyVisRange()
|
||||
|
||||
static const struct Token special[] = {
|
||||
{ "NSW", "no significant weather" },
|
||||
{ "VCSH", "showers in the vicinity" },
|
||||
{ "VCTS", "thunderstorm in the vicinity" },
|
||||
/* { "VCSH", "showers in the vicinity" },
|
||||
{ "VCTS", "thunderstorm in the vicinity" }, */
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
@@ -667,6 +671,7 @@ bool SGMetar::scanWeather()
|
||||
char *m = _m;
|
||||
string weather;
|
||||
const struct Token *a;
|
||||
|
||||
if ((a = scanToken(&m, special))) {
|
||||
if (!scanBoundary(&m))
|
||||
return false;
|
||||
@@ -676,32 +681,35 @@ bool SGMetar::scanWeather()
|
||||
}
|
||||
|
||||
string pre, post;
|
||||
int intensity = 0;
|
||||
struct Weather w;
|
||||
if (*m == '-')
|
||||
m++, pre = "light ", intensity = 1;
|
||||
m++, pre = "light ", w.intensity = LIGHT;
|
||||
else if (*m == '+')
|
||||
m++, pre = "heavy ", intensity = 3;
|
||||
m++, pre = "heavy ", w.intensity = HEAVY;
|
||||
else if (!strncmp(m, "VC", 2))
|
||||
m += 2, post = "in the vicinity ";
|
||||
m += 2, post = "in the vicinity ", w.vincinity=true;
|
||||
else
|
||||
pre = "moderate ", intensity = 2;
|
||||
pre = "moderate ", w.intensity = MODERATE;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (!(a = scanToken(&m, description)))
|
||||
break;
|
||||
w.descriptions.push_back(a->id);
|
||||
weather += string(a->text) + " ";
|
||||
}
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (!(a = scanToken(&m, phenomenon)))
|
||||
break;
|
||||
w.phenomena.push_back(a->id);
|
||||
weather += string(a->text) + " ";
|
||||
if (!strcmp(a->id, "RA"))
|
||||
_rain = intensity;
|
||||
_rain = w.intensity;
|
||||
else if (!strcmp(a->id, "HA"))
|
||||
_hail = intensity;
|
||||
_hail = w.intensity;
|
||||
else if (!strcmp(a->id, "SN"))
|
||||
_snow = intensity;
|
||||
_snow = w.intensity;
|
||||
}
|
||||
if (!weather.length())
|
||||
return false;
|
||||
@@ -711,6 +719,8 @@ bool SGMetar::scanWeather()
|
||||
weather = pre + weather + post;
|
||||
weather.erase(weather.length() - 1);
|
||||
_weather.push_back(weather);
|
||||
if( w.phenomena.size() > 0 )
|
||||
_weather2.push_back( w );
|
||||
_grpcount++;
|
||||
return true;
|
||||
}
|
||||
@@ -739,7 +749,7 @@ static const struct Token cloud_types[] = {
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
#include <iostream>
|
||||
// (FEW|SCT|BKN|OVC|SKC|CLR|CAVOK|VV)([0-9]{3}|///)?[:cloud_type:]?
|
||||
bool SGMetar::scanSkyCondition()
|
||||
{
|
||||
@@ -747,8 +757,17 @@ bool SGMetar::scanSkyCondition()
|
||||
int i;
|
||||
SGMetarCloud cl;
|
||||
|
||||
if (!strncmp(m, "//////", 6)) {
|
||||
m += 6;
|
||||
if (!scanBoundary(&m))
|
||||
return false;
|
||||
_m = m;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!strncmp(m, "CLR", i = 3) // clear
|
||||
|| !strncmp(m, "SKC", i = 3) // sky clear
|
||||
|| !strncmp(m, "NCD", i = 3) // nil cloud detected
|
||||
|| !strncmp(m, "NSC", i = 3) // no significant clouds
|
||||
|| !strncmp(m, "CAVOK", i = 5)) { // ceiling and visibility OK (implies 9999)
|
||||
m += i;
|
||||
@@ -756,7 +775,7 @@ bool SGMetar::scanSkyCondition()
|
||||
return false;
|
||||
|
||||
if (i == 3) {
|
||||
cl._coverage = 0;
|
||||
cl._coverage = SGMetarCloud::COVERAGE_CLEAR;
|
||||
_clouds.push_back(cl);
|
||||
} else {
|
||||
_cavok = true;
|
||||
@@ -768,13 +787,13 @@ bool SGMetar::scanSkyCondition()
|
||||
if (!strncmp(m, "VV", i = 2)) // vertical visibility
|
||||
;
|
||||
else if (!strncmp(m, "FEW", i = 3))
|
||||
cl._coverage = 1;
|
||||
cl._coverage = SGMetarCloud::COVERAGE_FEW;
|
||||
else if (!strncmp(m, "SCT", i = 3))
|
||||
cl._coverage = 2;
|
||||
cl._coverage = SGMetarCloud::COVERAGE_SCATTERED;
|
||||
else if (!strncmp(m, "BKN", i = 3))
|
||||
cl._coverage = 3;
|
||||
cl._coverage = SGMetarCloud::COVERAGE_BROKEN;
|
||||
else if (!strncmp(m, "OVC", i = 3))
|
||||
cl._coverage = 4;
|
||||
cl._coverage = SGMetarCloud::COVERAGE_OVERCAST;
|
||||
else
|
||||
return false;
|
||||
m += i;
|
||||
@@ -787,7 +806,7 @@ bool SGMetar::scanSkyCondition()
|
||||
} else if (!scanNumber(&m, &i, 3))
|
||||
i = -1;
|
||||
|
||||
if (cl._coverage == -1) {
|
||||
if (cl._coverage == SGMetarCloud::COVERAGE_NIL) {
|
||||
if (!scanBoundary(&m))
|
||||
return false;
|
||||
if (i == -1) // 'VV///'
|
||||
@@ -836,7 +855,7 @@ bool SGMetar::scanTemperature()
|
||||
return false;
|
||||
if (!scanBoundary(&m)) {
|
||||
if (!strncmp(m, "XX", 2)) // not spec compliant!
|
||||
m += 2, sign = 0;
|
||||
m += 2, sign = 0, dew = temp;
|
||||
else {
|
||||
sign = 1;
|
||||
if (*m == 'M')
|
||||
@@ -1174,7 +1193,7 @@ const struct Token *SGMetar::scanToken(char **str, const struct Token *list)
|
||||
{
|
||||
const struct Token *longest = 0;
|
||||
int maxlen = 0, len;
|
||||
char *s;
|
||||
const char *s;
|
||||
for (int i = 0; (s = list[i].id); i++) {
|
||||
len = strlen(s);
|
||||
if (!strncmp(s, *str, len) && len > maxlen) {
|
||||
@@ -1187,13 +1206,29 @@ const struct Token *SGMetar::scanToken(char **str, const struct Token *list)
|
||||
}
|
||||
|
||||
|
||||
void SGMetarCloud::set(double alt, int cov)
|
||||
void SGMetarCloud::set(double alt, Coverage cov)
|
||||
{
|
||||
_altitude = alt;
|
||||
if (cov != -1)
|
||||
_coverage = cov;
|
||||
}
|
||||
|
||||
SGMetarCloud::Coverage SGMetarCloud::getCoverage( const std::string & coverage )
|
||||
{
|
||||
if( coverage == "clear" ) return COVERAGE_CLEAR;
|
||||
if( coverage == "few" ) return COVERAGE_FEW;
|
||||
if( coverage == "scattered" ) return COVERAGE_SCATTERED;
|
||||
if( coverage == "broken" ) return COVERAGE_BROKEN;
|
||||
if( coverage == "overcast" ) return COVERAGE_OVERCAST;
|
||||
return COVERAGE_NIL;
|
||||
}
|
||||
|
||||
const char * SGMetarCloud::COVERAGE_NIL_STRING = "nil";
|
||||
const char * SGMetarCloud::COVERAGE_CLEAR_STRING = "clear";
|
||||
const char * SGMetarCloud::COVERAGE_FEW_STRING = "few";
|
||||
const char * SGMetarCloud::COVERAGE_SCATTERED_STRING = "scattered";
|
||||
const char * SGMetarCloud::COVERAGE_BROKEN_STRING = "broken";
|
||||
const char * SGMetarCloud::COVERAGE_OVERCAST_STRING = "overcast";
|
||||
|
||||
void SGMetarVisibility::set(double dist, int dir, int mod, int tend)
|
||||
{
|
||||
|
||||
@@ -29,16 +29,16 @@
|
||||
|
||||
#include <simgear/constants.h>
|
||||
|
||||
SG_USING_STD(vector);
|
||||
SG_USING_STD(map);
|
||||
SG_USING_STD(string);
|
||||
using std::vector;
|
||||
using std::map;
|
||||
using std::string;
|
||||
|
||||
const double SGMetarNaN = -1E20;
|
||||
#define NaN SGMetarNaN
|
||||
|
||||
struct Token {
|
||||
char *id;
|
||||
char *text;
|
||||
const char *id;
|
||||
const char *text;
|
||||
};
|
||||
|
||||
|
||||
@@ -130,25 +130,38 @@ protected:
|
||||
class SGMetarCloud {
|
||||
friend class SGMetar;
|
||||
public:
|
||||
SGMetarCloud() :
|
||||
_coverage(-1),
|
||||
_altitude(NaN),
|
||||
_type(0),
|
||||
_type_long(0) {}
|
||||
enum Coverage {
|
||||
COVERAGE_NIL = -1,
|
||||
COVERAGE_CLEAR = 0,
|
||||
COVERAGE_FEW = 1,
|
||||
COVERAGE_SCATTERED = 2,
|
||||
COVERAGE_BROKEN = 3,
|
||||
COVERAGE_OVERCAST = 4
|
||||
};
|
||||
|
||||
void set(double alt, int cov = -1);
|
||||
static const char * COVERAGE_NIL_STRING;
|
||||
static const char * COVERAGE_CLEAR_STRING;
|
||||
static const char * COVERAGE_FEW_STRING;
|
||||
static const char * COVERAGE_SCATTERED_STRING;
|
||||
static const char * COVERAGE_BROKEN_STRING;
|
||||
static const char * COVERAGE_OVERCAST_STRING;
|
||||
|
||||
inline int getCoverage() const { return _coverage; }
|
||||
inline double getAltitude_m() const { return _altitude; }
|
||||
inline double getAltitude_ft() const { return _altitude == NaN ? NaN : _altitude * SG_METER_TO_FEET; }
|
||||
inline char *getTypeString() const { return _type; }
|
||||
inline char *getTypeLongString() const { return _type_long; }
|
||||
SGMetarCloud() : _coverage(COVERAGE_NIL), _altitude(NaN), _type(0), _type_long(0) {}
|
||||
|
||||
void set(double alt, Coverage cov = COVERAGE_NIL );
|
||||
|
||||
inline Coverage getCoverage() const { return _coverage; }
|
||||
static Coverage getCoverage( const std::string & coverage );
|
||||
inline double getAltitude_m() const { return _altitude; }
|
||||
inline double getAltitude_ft() const { return _altitude == NaN ? NaN : _altitude * SG_METER_TO_FEET; }
|
||||
inline const char *getTypeString() const { return _type; }
|
||||
inline const char *getTypeLongString() const { return _type_long; }
|
||||
|
||||
protected:
|
||||
int _coverage; // quarters: 0 -> clear ... 4 -> overcast
|
||||
double _altitude; // 1000 m
|
||||
char *_type; // CU
|
||||
char *_type_long; // cumulus
|
||||
Coverage _coverage; // quarters: 0 -> clear ... 4 -> overcast
|
||||
double _altitude; // 1000 m
|
||||
const char *_type; // CU
|
||||
const char *_type_long; // cumulus
|
||||
};
|
||||
|
||||
|
||||
@@ -165,6 +178,21 @@ public:
|
||||
RTD
|
||||
};
|
||||
|
||||
enum Intensity {
|
||||
NIL = 0,
|
||||
LIGHT = 1,
|
||||
MODERATE = 2,
|
||||
HEAVY = 3
|
||||
};
|
||||
|
||||
struct Weather {
|
||||
Weather() { intensity = NIL; vincinity = false; }
|
||||
Intensity intensity;
|
||||
bool vincinity;
|
||||
vector<string> descriptions;
|
||||
vector<string> phenomena;
|
||||
};
|
||||
|
||||
inline const char *getData() const { return _data; }
|
||||
inline const char *getUnusedData() const { return _m; }
|
||||
inline const bool getProxy() const { return _x_proxy; }
|
||||
@@ -212,6 +240,7 @@ public:
|
||||
inline const vector<SGMetarCloud>& getClouds() const { return _clouds; }
|
||||
inline const map<string, SGMetarRunway>& getRunways() const { return _runways; }
|
||||
inline const vector<string>& getWeather() const { return _weather; }
|
||||
inline const vector<struct Weather> getWeather2() const { return _weather2; }
|
||||
|
||||
protected:
|
||||
string _url;
|
||||
@@ -238,6 +267,7 @@ protected:
|
||||
int _hail;
|
||||
int _snow;
|
||||
bool _cavok;
|
||||
vector<struct Weather> _weather2;
|
||||
|
||||
SGMetarVisibility _min_visibility;
|
||||
SGMetarVisibility _max_visibility;
|
||||
|
||||
195
simgear/environment/precipitation.cxx
Normal file
195
simgear/environment/precipitation.cxx
Normal file
@@ -0,0 +1,195 @@
|
||||
/**
|
||||
* @file precipitation.cxx
|
||||
* @author Nicolas VIVIEN
|
||||
* @date 2008-02-10
|
||||
*
|
||||
* @note Copyright (C) 2008 Nicolas VIVIEN
|
||||
*
|
||||
* @brief Precipitation effects to draw rain and snow.
|
||||
*
|
||||
* @par Licences
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "precipitation.hxx"
|
||||
#include "visual_enviro.hxx"
|
||||
|
||||
#include <simgear/constants.h>
|
||||
#include <osg/ClipNode>
|
||||
|
||||
/**
|
||||
* @brief SGPrecipitation constructor
|
||||
*
|
||||
* Build a new OSG object from osgParticle.
|
||||
*/
|
||||
SGPrecipitation::SGPrecipitation() :
|
||||
_freeze(false), _snow_intensity(0.0), _rain_intensity(0.0), _clip_distance(5.0)
|
||||
{
|
||||
_precipitationEffect = new osgParticle::PrecipitationEffect;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Build and add the object "precipitationEffect"
|
||||
*
|
||||
* This function permits you to create an object precipitationEffect and initialize it.
|
||||
* I define by default the color of water (for raining)
|
||||
*/
|
||||
osg::Group* SGPrecipitation::build(void)
|
||||
{
|
||||
osg::Group* group = new osg::Group;
|
||||
|
||||
_precipitationEffect->snow(0);
|
||||
_precipitationEffect->rain(0);
|
||||
|
||||
if (_clip_distance!=0.0)
|
||||
{
|
||||
osg::ref_ptr<osg::ClipNode> clipNode = new osg::ClipNode;
|
||||
clipNode->addClipPlane( new osg::ClipPlane( 0 ) );
|
||||
clipNode->getClipPlane(0)->setClipPlane( 0.0, 0.0, -1.0, -_clip_distance );
|
||||
clipNode->setReferenceFrame(osg::ClipNode::ABSOLUTE_RF);
|
||||
clipNode->addChild(_precipitationEffect.get());
|
||||
|
||||
group->addChild(clipNode.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
group->addChild(_precipitationEffect.get());
|
||||
}
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Define the snow intensity
|
||||
*
|
||||
* This function permits you to define and change the snow intensity
|
||||
* The param 'intensity' is normed (0 to 1).
|
||||
*/
|
||||
void SGPrecipitation::setSnowIntensity(float intensity)
|
||||
{
|
||||
if (this->_snow_intensity < intensity-0.001)
|
||||
this->_snow_intensity += 0.001;
|
||||
else if (this->_snow_intensity > intensity+0.001)
|
||||
this->_snow_intensity -= 0.001;
|
||||
else
|
||||
this->_snow_intensity = intensity;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Define the rain intensity
|
||||
*
|
||||
* This function permits you to define and change the rain intensity
|
||||
* The param 'intensity' is normed (0 to 1).
|
||||
*/
|
||||
void SGPrecipitation::setRainIntensity(float intensity)
|
||||
{
|
||||
if (this->_rain_intensity < intensity-0.001)
|
||||
this->_rain_intensity += 0.001;
|
||||
else if (this->_rain_intensity > intensity+0.001)
|
||||
this->_rain_intensity -= 0.001;
|
||||
else
|
||||
this->_rain_intensity = intensity;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Freeze the rain to snow
|
||||
*
|
||||
* @param freeze Boolean
|
||||
*
|
||||
* This function permits you to turn off the rain to snow.
|
||||
*/
|
||||
void SGPrecipitation::setFreezing(bool freeze)
|
||||
{
|
||||
this->_freeze = freeze;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Define the wind direction and speed
|
||||
*
|
||||
* This function permits you to define and change the wind direction
|
||||
*
|
||||
* After apply the MatrixTransform to the osg::Precipitation object,
|
||||
* x points full south... From wind heading and speed, we can calculate
|
||||
* the wind vector.
|
||||
*/
|
||||
void SGPrecipitation::setWindProperty(double heading, double speed)
|
||||
{
|
||||
double x, y, z;
|
||||
|
||||
heading = (heading + 180) * SGD_DEGREES_TO_RADIANS;
|
||||
speed = speed * SG_FEET_TO_METER;
|
||||
|
||||
x = -cos(heading) * speed;
|
||||
y = sin(heading) * speed;
|
||||
z = 0;
|
||||
|
||||
this->_wind_vec = osg::Vec3(x, y, z);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Update the precipitation effects
|
||||
*
|
||||
* This function permits you to update the precipitation effects.
|
||||
* Be careful, if snow and rain intensity are greater than '0', snow effect
|
||||
* will be first.
|
||||
*
|
||||
* The settings come from the osgParticule/PrecipitationEffect.cpp exemple.
|
||||
*/
|
||||
bool SGPrecipitation::update(void)
|
||||
{
|
||||
if (this->_freeze) {
|
||||
if (this->_rain_intensity > 0)
|
||||
this->_snow_intensity = this->_rain_intensity;
|
||||
}
|
||||
|
||||
bool enabled = sgEnviro.get_precipitation_enable_state();
|
||||
if (enabled && this->_snow_intensity > 0) {
|
||||
_precipitationEffect->setWind(_wind_vec);
|
||||
_precipitationEffect->setParticleSpeed( -0.75f - 0.25f*_snow_intensity);
|
||||
|
||||
_precipitationEffect->setParticleSize(0.02f + 0.03f*_snow_intensity);
|
||||
_precipitationEffect->setMaximumParticleDensity(_snow_intensity * 7.2f);
|
||||
_precipitationEffect->setCellSize(osg::Vec3(5.0f / (0.25f+_snow_intensity), 5.0f / (0.25f+_snow_intensity), 5.0f));
|
||||
|
||||
_precipitationEffect->setNearTransition(25.f);
|
||||
_precipitationEffect->setFarTransition(100.0f - 60.0f*sqrtf(_snow_intensity));
|
||||
|
||||
_precipitationEffect->setParticleColor(osg::Vec4(0.85, 0.85, 0.85, 1.0) - osg::Vec4(0.1, 0.1, 0.1, 1.0) * _snow_intensity);
|
||||
} else if (enabled && this->_rain_intensity > 0) {
|
||||
_precipitationEffect->setWind(_wind_vec);
|
||||
_precipitationEffect->setParticleSpeed( -2.0f + -5.0f*_rain_intensity);
|
||||
|
||||
_precipitationEffect->setParticleSize(0.01 + 0.02*_rain_intensity);
|
||||
_precipitationEffect->setMaximumParticleDensity(_rain_intensity * 7.5f);
|
||||
_precipitationEffect->setCellSize(osg::Vec3(5.0f / (0.25f+_rain_intensity), 5.0f / (0.25f+_rain_intensity), 5.0f));
|
||||
|
||||
_precipitationEffect->setNearTransition(25.f);
|
||||
_precipitationEffect->setFarTransition(100.0f - 60.0f*sqrtf(_rain_intensity));
|
||||
|
||||
_precipitationEffect->setParticleColor( osg::Vec4(0x7A, 0xCE, 0xFF, 0x80));
|
||||
} else {
|
||||
_precipitationEffect->snow(0);
|
||||
_precipitationEffect->rain(0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
61
simgear/environment/precipitation.hxx
Normal file
61
simgear/environment/precipitation.hxx
Normal file
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* @file precipitation.hxx
|
||||
* @author Nicolas VIVIEN
|
||||
* @date 2008-02-10
|
||||
*
|
||||
* @note Copyright (C) 2008 Nicolas VIVIEN
|
||||
*
|
||||
* @brief Precipitation effects to draw rain and snow.
|
||||
*
|
||||
* @par Licences
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _PRECIPITATION_HXX
|
||||
#define _PRECIPITATION_HXX
|
||||
|
||||
#include <osg/Group>
|
||||
#include <osg/Referenced>
|
||||
#include <osgParticle/PrecipitationEffect>
|
||||
|
||||
|
||||
class SGPrecipitation : public osg::Referenced
|
||||
{
|
||||
private:
|
||||
bool _freeze;
|
||||
|
||||
float _snow_intensity;
|
||||
float _rain_intensity;
|
||||
float _clip_distance;
|
||||
|
||||
int _wind_dir;
|
||||
osg::Vec3 _wind_vec;
|
||||
|
||||
osg::ref_ptr<osgParticle::PrecipitationEffect> _precipitationEffect;
|
||||
|
||||
public:
|
||||
SGPrecipitation();
|
||||
virtual ~SGPrecipitation() {}
|
||||
osg::Group* build(void);
|
||||
bool update(void);
|
||||
|
||||
void setWindProperty(double, double);
|
||||
void setFreezing(bool);
|
||||
void setRainIntensity(float);
|
||||
void setSnowIntensity(float);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -28,9 +28,7 @@
|
||||
#include <simgear/structure/SGSharedPtr.hxx>
|
||||
#include <simgear/math/sg_random.h>
|
||||
#include <simgear/math/sg_geodesy.hxx>
|
||||
#include <simgear/math/point3d.hxx>
|
||||
#include <simgear/math/polar3d.hxx>
|
||||
#include <simgear/sound/soundmgr_openal.hxx>
|
||||
#include <simgear/sound/sample_group.hxx>
|
||||
#include <simgear/scene/sky/cloudfield.hxx>
|
||||
#include <simgear/scene/sky/newcloud.hxx>
|
||||
#include <simgear/props/props.hxx>
|
||||
@@ -38,11 +36,11 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
SG_USING_STD(vector);
|
||||
using std::vector;
|
||||
|
||||
|
||||
typedef struct {
|
||||
Point3D pt;
|
||||
SGVec3d pt;
|
||||
int depth;
|
||||
int prev;
|
||||
} lt_tree_seg;
|
||||
@@ -52,23 +50,23 @@ static float rainpos[MAX_RAIN_SLICE];
|
||||
#define MAX_LT_TREE_SEG 400
|
||||
|
||||
#define DFL_MIN_LIGHT 0.35
|
||||
sgVec3 SGEnviro::min_light = {DFL_MIN_LIGHT, DFL_MIN_LIGHT, DFL_MIN_LIGHT};
|
||||
SGVec3f SGEnviro::min_light(DFL_MIN_LIGHT, DFL_MIN_LIGHT, DFL_MIN_LIGHT);
|
||||
#define DFL_STREAK_BRIGHT_NEARMOST_LAYER 0.9
|
||||
SGfloat SGEnviro::streak_bright_nearmost_layer = DFL_STREAK_BRIGHT_NEARMOST_LAYER;
|
||||
float SGEnviro::streak_bright_nearmost_layer = DFL_STREAK_BRIGHT_NEARMOST_LAYER;
|
||||
#define DFL_STREAK_BRIGHT_FARMOST_LAYER 0.5
|
||||
SGfloat SGEnviro::streak_bright_farmost_layer = DFL_STREAK_BRIGHT_FARMOST_LAYER;
|
||||
float SGEnviro::streak_bright_farmost_layer = DFL_STREAK_BRIGHT_FARMOST_LAYER;
|
||||
#define DFL_STREAK_PERIOD_MAX 2.5
|
||||
SGfloat SGEnviro::streak_period_max = DFL_STREAK_PERIOD_MAX;
|
||||
float SGEnviro::streak_period_max = DFL_STREAK_PERIOD_MAX;
|
||||
#define DFL_STREAK_PERIOD_CHANGE_PER_KT 0.005
|
||||
SGfloat SGEnviro::streak_period_change_per_kt = DFL_STREAK_PERIOD_CHANGE_PER_KT;
|
||||
float SGEnviro::streak_period_change_per_kt = DFL_STREAK_PERIOD_CHANGE_PER_KT;
|
||||
#define DFL_STREAK_PERIOD_MIN 1.0
|
||||
SGfloat SGEnviro::streak_period_min = DFL_STREAK_PERIOD_MIN;
|
||||
float SGEnviro::streak_period_min = DFL_STREAK_PERIOD_MIN;
|
||||
#define DFL_STREAK_LENGTH_MIN 0.03
|
||||
SGfloat SGEnviro::streak_length_min = DFL_STREAK_LENGTH_MIN;
|
||||
float SGEnviro::streak_length_min = DFL_STREAK_LENGTH_MIN;
|
||||
#define DFL_STREAK_LENGTH_CHANGE_PER_KT 0.0005
|
||||
SGfloat SGEnviro::streak_length_change_per_kt = DFL_STREAK_LENGTH_CHANGE_PER_KT;
|
||||
float SGEnviro::streak_length_change_per_kt = DFL_STREAK_LENGTH_CHANGE_PER_KT;
|
||||
#define DFL_STREAK_LENGTH_MAX 0.1
|
||||
SGfloat SGEnviro::streak_length_max = DFL_STREAK_LENGTH_MAX;
|
||||
float SGEnviro::streak_length_max = DFL_STREAK_LENGTH_MAX;
|
||||
#define DFL_STREAK_COUNT_MIN 40
|
||||
int SGEnviro::streak_count_min = DFL_STREAK_COUNT_MIN;
|
||||
#define DFL_STREAK_COUNT_MAX 190
|
||||
@@ -77,9 +75,9 @@ int SGEnviro::streak_count_min = DFL_STREAK_COUNT_MIN;
|
||||
#endif
|
||||
int SGEnviro::streak_count_max = DFL_STREAK_COUNT_MAX;
|
||||
#define DFL_CONE_BASE_RADIUS 15.0
|
||||
SGfloat SGEnviro::cone_base_radius = DFL_CONE_BASE_RADIUS;
|
||||
float SGEnviro::cone_base_radius = DFL_CONE_BASE_RADIUS;
|
||||
#define DFL_CONE_HEIGHT 30.0
|
||||
SGfloat SGEnviro::cone_height = DFL_CONE_HEIGHT;
|
||||
float SGEnviro::cone_height = DFL_CONE_HEIGHT;
|
||||
|
||||
|
||||
void SGEnviro::config(const SGPropertyNode* n)
|
||||
@@ -88,7 +86,7 @@ void SGEnviro::config(const SGPropertyNode* n)
|
||||
return;
|
||||
|
||||
const float ml = n->getFloatValue("min-light", DFL_MIN_LIGHT);
|
||||
sgSetVec3(min_light, ml, ml, ml);
|
||||
min_light = SGVec3f(ml, ml, ml);
|
||||
|
||||
streak_bright_nearmost_layer = n->getFloatValue(
|
||||
"streak-brightness-nearmost-layer",
|
||||
@@ -146,7 +144,7 @@ public:
|
||||
~SGLightning();
|
||||
void lt_Render(void);
|
||||
void lt_build(void);
|
||||
void lt_build_tree_branch(int tree_nr, Point3D &start, float energy, int nbseg, float segsize);
|
||||
void lt_build_tree_branch(int tree_nr, SGVec3d &start, float energy, int nbseg, float segsize);
|
||||
|
||||
// contains all the segments of the lightning
|
||||
lt_tree_seg lt_tree[MAX_LT_TREE_SEG];
|
||||
@@ -175,7 +173,7 @@ SGEnviro::SGEnviro() :
|
||||
lightning_enable_state(false),
|
||||
elapsed_time(0.0),
|
||||
dt(0.0),
|
||||
soundMgr(NULL),
|
||||
sampleGroup(NULL),
|
||||
snd_active(false),
|
||||
snd_dist(0.0),
|
||||
min_time_before_lt(0.0),
|
||||
@@ -189,6 +187,10 @@ SGEnviro::SGEnviro() :
|
||||
}
|
||||
|
||||
SGEnviro::~SGEnviro(void) {
|
||||
if (sampleGroup) delete sampleGroup;
|
||||
|
||||
// OSGFIXME
|
||||
return;
|
||||
list_of_lightning::iterator iLightning;
|
||||
for( iLightning = lightnings.begin() ; iLightning != lightnings.end() ; iLightning++ ) {
|
||||
delete (*iLightning);
|
||||
@@ -196,17 +198,17 @@ SGEnviro::~SGEnviro(void) {
|
||||
lightnings.clear();
|
||||
}
|
||||
|
||||
void SGEnviro::startOfFrame( sgVec3 p, sgVec3 up, double lon, double lat, double alt, double delta_time) {
|
||||
void SGEnviro::startOfFrame( SGVec3f p, SGVec3f up, double lon, double lat, double alt, double delta_time) {
|
||||
// OSGFIXME
|
||||
return;
|
||||
view_in_cloud = false;
|
||||
// ask the impostor cache to do some cleanup
|
||||
if(SGNewCloud::cldCache)
|
||||
SGNewCloud::cldCache->startNewFrame();
|
||||
last_cloud_turbulence = cloud_turbulence;
|
||||
cloud_turbulence = 0.0;
|
||||
elapsed_time += delta_time;
|
||||
min_time_before_lt -= delta_time;
|
||||
dt = delta_time;
|
||||
|
||||
#if 0
|
||||
sgMat4 T1, LON, LAT;
|
||||
sgVec3 axis;
|
||||
|
||||
@@ -228,6 +230,7 @@ void SGEnviro::startOfFrame( sgVec3 p, sgVec3 up, double lon, double lat, double
|
||||
sgSetCoord( &pos, TRANSFORM );
|
||||
|
||||
sgMakeCoordMat4( transform, &pos );
|
||||
#endif
|
||||
last_lon = lon;
|
||||
last_lat = lat;
|
||||
last_alt = alt;
|
||||
@@ -251,43 +254,10 @@ void SGEnviro::set_view_in_cloud(bool incloud) {
|
||||
view_in_cloud = incloud;
|
||||
}
|
||||
|
||||
int SGEnviro::get_CacheResolution(void) const {
|
||||
return SGCloudField::get_CacheResolution();
|
||||
}
|
||||
|
||||
int SGEnviro::get_clouds_CacheSize(void) const {
|
||||
return SGCloudField::get_CacheSize();
|
||||
}
|
||||
float SGEnviro::get_clouds_visibility(void) const {
|
||||
return SGCloudField::get_CloudVis();
|
||||
}
|
||||
float SGEnviro::get_clouds_density(void) const {
|
||||
return SGCloudField::get_density();
|
||||
}
|
||||
bool SGEnviro::get_clouds_enable_state(void) const {
|
||||
return SGCloudField::get_enable3dClouds();
|
||||
}
|
||||
|
||||
bool SGEnviro::get_turbulence_enable_state(void) const {
|
||||
return turbulence_enable_state;
|
||||
}
|
||||
|
||||
void SGEnviro::set_CacheResolution(int resolutionPixels) {
|
||||
SGCloudField::set_CacheResolution(resolutionPixels);
|
||||
}
|
||||
|
||||
void SGEnviro::set_clouds_CacheSize(int sizeKb) {
|
||||
SGCloudField::set_CacheSize(sizeKb);
|
||||
}
|
||||
void SGEnviro::set_clouds_visibility(float distance) {
|
||||
SGCloudField::set_CloudVis(distance);
|
||||
}
|
||||
void SGEnviro::set_clouds_density(float density) {
|
||||
SGCloudField::set_density(density);
|
||||
}
|
||||
void SGEnviro::set_clouds_enable_state(bool enable) {
|
||||
SGCloudField::set_enable3dClouds(enable);
|
||||
}
|
||||
void SGEnviro::set_turbulence_enable_state(bool enable) {
|
||||
turbulence_enable_state = enable;
|
||||
}
|
||||
@@ -318,13 +288,15 @@ void SGEnviro::set_lightning_enable_state(bool enable) {
|
||||
}
|
||||
}
|
||||
|
||||
void SGEnviro::setLight(sgVec4 adj_fog_color) {
|
||||
sgCopyVec4( fog_color, adj_fog_color );
|
||||
void SGEnviro::setLight(SGVec4f adj_fog_color) {
|
||||
// OSGFIXME
|
||||
return;
|
||||
fog_color = adj_fog_color;
|
||||
if( false ) {
|
||||
// ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse() );
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void SGEnviro::callback_cloud(float heading, float alt, float radius, int family, float dist, int cloudId) {
|
||||
// send data to wx radar
|
||||
// compute turbulence
|
||||
@@ -397,6 +369,7 @@ void SGEnviro::callback_cloud(float heading, float alt, float radius, int family
|
||||
LWC = 0.29*2.0;
|
||||
break;
|
||||
}
|
||||
|
||||
// add to the list for the wxRadar instrument
|
||||
if( LWC > 0.0 )
|
||||
radarEcho.push_back( SGWxRadarEcho ( heading, alt, radius, dist, LWC, false, cloudId ) );
|
||||
@@ -407,7 +380,7 @@ void SGEnviro::callback_cloud(float heading, float alt, float radius, int family
|
||||
if(lightning_enable_state && min_time_before_lt <= 0.0 && (family == SGNewCloud::CLFamilly_cb) &&
|
||||
dist < 15000.0 * 15000.0 && sg_random() > 0.9f) {
|
||||
double lat, lon;
|
||||
Point3D orig, dest;
|
||||
SGVec3d orig, dest;
|
||||
orig.setlat(last_lat * SG_DEGREES_TO_RADIANS );
|
||||
orig.setlon(last_lon * SG_DEGREES_TO_RADIANS );
|
||||
orig.setelev(0.0);
|
||||
@@ -434,129 +407,30 @@ void SGEnviro::callback_cloud(float heading, float alt, float radius, int family
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
list_of_SGWxRadarEcho *SGEnviro::get_radar_echo(void) {
|
||||
return &radarEcho;
|
||||
}
|
||||
|
||||
// precipitation rendering code
|
||||
void SGEnviro::DrawCone2(float baseRadius, float height, int slices, bool down, double rain_norm, double speed) {
|
||||
sgVec3 light;
|
||||
sgAddVec3( light, fog_color, min_light );
|
||||
float da = SG_PI * 2.0f / (float) slices;
|
||||
// low number = faster
|
||||
float speedf = streak_period_max - speed * streak_period_change_per_kt;
|
||||
if( speedf < streak_period_min )
|
||||
speedf = streak_period_min;
|
||||
float lenf = streak_length_min + speed * streak_length_change_per_kt;
|
||||
if( lenf > streak_length_max )
|
||||
lenf = streak_length_max;
|
||||
float t = fmod((float) elapsed_time, speedf) / speedf;
|
||||
// t = 0.1f;
|
||||
if( !down )
|
||||
t = 1.0f - t;
|
||||
float angle = 0.0f;
|
||||
//glColor4f(1.0f, 0.7f, 0.7f, 0.9f); // XXX unneeded? overriden below
|
||||
glBegin(GL_LINES);
|
||||
if (slices > MAX_RAIN_SLICE)
|
||||
slices = MAX_RAIN_SLICE; // should never happen
|
||||
for( int i = 0 ; i < slices ; i++ ) {
|
||||
float x = cos(angle) * baseRadius;
|
||||
float y = sin(angle) * baseRadius;
|
||||
angle += da;
|
||||
sgVec3 dir = {x, -height, y};
|
||||
|
||||
// rain drops at 2 different speed to simulate depth
|
||||
float t1 = (i & 1 ? t : t + t) + rainpos[i];
|
||||
if(t1 > 1.0f) t1 -= 1.0f;
|
||||
if(t1 > 1.0f) t1 -= 1.0f;
|
||||
|
||||
// distant raindrops are more transparent
|
||||
float c = t1 * (i & 1 ?
|
||||
streak_bright_farmost_layer
|
||||
: streak_bright_nearmost_layer);
|
||||
glColor4f(c * light[0], c * light[1], c * light[2], c);
|
||||
sgVec3 p1, p2;
|
||||
sgScaleVec3(p1, dir, t1);
|
||||
// distant raindrops are shorter
|
||||
float t2 = t1 + (i & 1 ? lenf : lenf+lenf);
|
||||
sgScaleVec3(p2, dir, t2);
|
||||
|
||||
glVertex3f(p1[0], p1[1] + height, p1[2]);
|
||||
glVertex3f(p2[0], p2[1] + height, p2[2]);
|
||||
}
|
||||
glEnd();
|
||||
// OSGFIXME
|
||||
return;
|
||||
}
|
||||
|
||||
void SGEnviro::drawRain(double pitch, double roll, double heading, double hspeed, double rain_norm) {
|
||||
|
||||
#if 0
|
||||
static int debug_period = 0;
|
||||
if (debug_period++ == 50) {
|
||||
debug_period = 0;
|
||||
cout << "drawRain("
|
||||
<< pitch << ", "
|
||||
<< roll << ", "
|
||||
<< heading << ", "
|
||||
<< hspeed << ", "
|
||||
<< rain_norm << ");"
|
||||
//" angle = " << angle
|
||||
//<< " raindrop(KTS) = " << raindrop_speed_kts
|
||||
<< endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
|
||||
glDisable( GL_FOG );
|
||||
glDisable(GL_LIGHTING);
|
||||
|
||||
int slice_count = static_cast<int>(
|
||||
(streak_count_min + rain_norm*(streak_count_max-streak_count_min))
|
||||
* precipitation_density / 100.0);
|
||||
|
||||
// www.wonderquest.com/falling-raindrops.htm says that
|
||||
// Raindrop terminal velocity is 5 to 20mph
|
||||
// Rather than model it accurately (temp, pressure, diameter), and make it
|
||||
// smaller than terminal when closer to the precipitation cloud base,
|
||||
// we interpolate in the 5-20mph range according to rain_norm.
|
||||
double raindrop_speed_kts
|
||||
= (5.0 + rain_norm*15.0) * SG_MPH_TO_MPS * SG_MPS_TO_KT;
|
||||
|
||||
float angle = atanf(hspeed / raindrop_speed_kts) * SG_RADIANS_TO_DEGREES;
|
||||
glPushMatrix();
|
||||
// the cone rotate with hspeed
|
||||
angle = -pitch - angle;
|
||||
glRotatef(roll, 0.0, 0.0, 1.0);
|
||||
glRotatef(heading, 0.0, 1.0, 0.0);
|
||||
glRotatef(angle, 1.0, 0.0, 0.0);
|
||||
|
||||
// up cone
|
||||
DrawCone2(cone_base_radius, cone_height,
|
||||
slice_count, true, rain_norm, hspeed);
|
||||
// down cone (usually not visible)
|
||||
if(angle > 0.0 || heading != 0.0)
|
||||
DrawCone2(cone_base_radius, -cone_height,
|
||||
slice_count, false, rain_norm, hspeed);
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
|
||||
glEnable( GL_FOG );
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
// OSGFIXME
|
||||
return;
|
||||
}
|
||||
|
||||
void SGEnviro::set_soundMgr(SGSoundMgr *mgr) {
|
||||
soundMgr = mgr;
|
||||
void SGEnviro::set_sampleGroup(SGSampleGroup *sgr) {
|
||||
sampleGroup = sgr;
|
||||
}
|
||||
|
||||
void SGEnviro::drawPrecipitation(double rain_norm, double snow_norm, double hail_norm, double pitch, double roll, double heading, double hspeed) {
|
||||
// OSGFIXME
|
||||
return;
|
||||
if( precipitation_enable_state && rain_norm > 0.0)
|
||||
if( precipitation_max_alt >= last_alt )
|
||||
drawRain(pitch, roll, heading, hspeed, rain_norm);
|
||||
@@ -578,164 +452,25 @@ SGLightning::~SGLightning() {
|
||||
}
|
||||
|
||||
// lightning rendering code
|
||||
void SGLightning::lt_build_tree_branch(int tree_nr, Point3D &start, float energy, int nbseg, float segsize) {
|
||||
|
||||
sgVec3 dir, newdir;
|
||||
int nseg = 0;
|
||||
Point3D pt = start;
|
||||
if( nbseg == 50 )
|
||||
sgSetVec3( dir, 0.0, -1.0, 0.0 );
|
||||
else {
|
||||
sgSetVec3( dir, sg_random() - 0.5f, sg_random() - 0.5f, sg_random() - 0.5f);
|
||||
sgNormaliseVec3(dir);
|
||||
}
|
||||
if( nb_tree >= MAX_LT_TREE_SEG )
|
||||
return;
|
||||
|
||||
lt_tree[nb_tree].depth = tree_nr;
|
||||
nseg = 0;
|
||||
lt_tree[nb_tree].pt = pt;
|
||||
lt_tree[nb_tree].prev = -1;
|
||||
nb_tree ++;
|
||||
|
||||
// TODO:check agl
|
||||
while(nseg < nbseg && pt.y() > 0.0) {
|
||||
int prev = nb_tree - 1;
|
||||
nseg++;
|
||||
// add a branch
|
||||
if( energy * sg_random() > 0.8f )
|
||||
lt_build_tree_branch(tree_nr + 1, pt, energy * 0.9f, nbseg == 50 ? 10 : static_cast<int>(nbseg * 0.4f), segsize * 0.7f);
|
||||
|
||||
if( nb_tree >= MAX_LT_TREE_SEG )
|
||||
return;
|
||||
sgSetVec3(newdir, (sg_random() - 0.5f), (sg_random() - 0.5f) - (nbseg == 50 ? 0.5f : 0.0), (sg_random() - 0.5f));
|
||||
sgNormaliseVec3(newdir);
|
||||
sgAddVec3( dir, newdir);
|
||||
sgNormaliseVec3(dir);
|
||||
sgVec3 scaleDir;
|
||||
sgScaleVec3( scaleDir, dir, segsize * energy * 0.5f );
|
||||
pt[PX] += scaleDir[0];
|
||||
pt[PY] += scaleDir[1];
|
||||
pt[PZ] += scaleDir[2];
|
||||
|
||||
lt_tree[nb_tree].depth = tree_nr;
|
||||
lt_tree[nb_tree].pt = pt;
|
||||
lt_tree[nb_tree].prev = prev;
|
||||
nb_tree ++;
|
||||
}
|
||||
void SGLightning::lt_build_tree_branch(int tree_nr, SGVec3d &start, float energy, int nbseg, float segsize) {
|
||||
// OSGFIXME
|
||||
return;
|
||||
}
|
||||
|
||||
void SGLightning::lt_build(void) {
|
||||
Point3D top;
|
||||
nb_tree = 0;
|
||||
top[PX] = 0 ;
|
||||
top[PY] = alt;
|
||||
top[PZ] = 0;
|
||||
lt_build_tree_branch(0, top, 1.0, 50, top[PY] / 8.0);
|
||||
if( ! sgEnviro.soundMgr )
|
||||
return;
|
||||
Point3D start( sgEnviro.last_lon*SG_DEGREES_TO_RADIANS, sgEnviro.last_lat*SG_DEGREES_TO_RADIANS, 0.0 );
|
||||
Point3D dest( lon*SG_DEGREES_TO_RADIANS, lat*SG_DEGREES_TO_RADIANS, 0.0 );
|
||||
double course = 0.0, dist = 0.0;
|
||||
calc_gc_course_dist( dest, start, &course, &dist );
|
||||
if( dist < 10000.0 && ! sgEnviro.snd_playing && (dist < sgEnviro.snd_dist || ! sgEnviro.snd_active) ) {
|
||||
sgEnviro.snd_timer = 0.0;
|
||||
sgEnviro.snd_wait = dist / 340;
|
||||
sgEnviro.snd_dist = dist;
|
||||
sgEnviro.snd_pos_lat = lat;
|
||||
sgEnviro.snd_pos_lon = lon;
|
||||
sgEnviro.snd_active = true;
|
||||
sgEnviro.snd_playing = false;
|
||||
}
|
||||
// OSGFIXME
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void SGLightning::lt_Render(void) {
|
||||
float flash = 0.5;
|
||||
if( fmod(sgEnviro.elapsed_time*100.0, 100.0) > 50.0 )
|
||||
flash = sg_random() * 0.75f + 0.25f;
|
||||
float h = lt_tree[0].pt[PY];
|
||||
sgVec4 col={0.62f, 0.83f, 1.0f, 1.0f};
|
||||
sgVec4 c;
|
||||
|
||||
#define DRAW_SEG() \
|
||||
{glColorMaterial(GL_FRONT, GL_EMISSION); \
|
||||
glDisable(GL_LINE_SMOOTH); glBegin(GL_LINES); \
|
||||
glColor4fv(c); \
|
||||
glVertex3f(lt_tree[n].pt[PX], lt_tree[n].pt[PZ], lt_tree[n].pt[PY]); \
|
||||
glVertex3f(lt_tree[lt_tree[n].prev].pt[PX], lt_tree[lt_tree[n].prev].pt[PZ], lt_tree[lt_tree[n].prev].pt[PY]); \
|
||||
glEnd(); glEnable(GL_LINE_SMOOTH);}
|
||||
|
||||
glDepthMask( GL_FALSE );
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc( GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
glDisable(GL_LIGHTING);
|
||||
glDisable( GL_FOG );
|
||||
glPushMatrix();
|
||||
sgMat4 modelview, tmp;
|
||||
ssgGetModelviewMatrix( modelview );
|
||||
sgCopyMat4( tmp, sgEnviro.transform );
|
||||
sgPostMultMat4( tmp, modelview );
|
||||
ssgLoadModelviewMatrix( tmp );
|
||||
|
||||
Point3D start( sgEnviro.last_lon*SG_DEGREES_TO_RADIANS, sgEnviro.last_lat*SG_DEGREES_TO_RADIANS, 0.0 );
|
||||
Point3D dest( lon*SG_DEGREES_TO_RADIANS, lat*SG_DEGREES_TO_RADIANS, 0.0 );
|
||||
double course = 0.0, dist = 0.0;
|
||||
calc_gc_course_dist( dest, start, &course, &dist );
|
||||
double ax = 0.0, ay = 0.0;
|
||||
ax = cos(course) * dist;
|
||||
ay = sin(course) * dist;
|
||||
|
||||
glTranslatef( ax, ay, -sgEnviro.last_alt );
|
||||
|
||||
sgEnviro.radarEcho.push_back( SGWxRadarEcho ( course, 0.0, 0.0, dist, age, true, 0 ) );
|
||||
|
||||
for( int n = 0 ; n < nb_tree ; n++ ) {
|
||||
if( lt_tree[n].prev < 0 )
|
||||
continue;
|
||||
|
||||
float t1 = sgLerp(0.5, 1.0, lt_tree[n].pt[PY] / h);
|
||||
t1 *= flash;
|
||||
if( lt_tree[n].depth >= 2 ) {
|
||||
glLineWidth(3);
|
||||
sgScaleVec4(c, col, t1 * 0.6f);
|
||||
DRAW_SEG();
|
||||
} else {
|
||||
if( lt_tree[n].depth == 0 ) {
|
||||
glLineWidth(12);
|
||||
sgScaleVec4(c, col, t1 * 0.5f);
|
||||
DRAW_SEG();
|
||||
|
||||
glLineWidth(6);
|
||||
sgScaleVec4(c, col, t1);
|
||||
DRAW_SEG();
|
||||
} else {
|
||||
glLineWidth(6);
|
||||
sgScaleVec4(c, col, t1 * 0.7f);
|
||||
DRAW_SEG();
|
||||
}
|
||||
|
||||
if( lt_tree[n].depth == 0 )
|
||||
glLineWidth(3);
|
||||
else
|
||||
glLineWidth(2);
|
||||
|
||||
sgSetVec4(c, t1, t1, t1, t1);
|
||||
DRAW_SEG();
|
||||
}
|
||||
|
||||
}
|
||||
glLineWidth(1);
|
||||
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
|
||||
glPopMatrix();
|
||||
glDepthMask( GL_TRUE );
|
||||
glEnable( GL_FOG );
|
||||
glEnable(GL_LIGHTING);
|
||||
// OSGFIXME
|
||||
return;
|
||||
}
|
||||
|
||||
void SGEnviro::addLightning(double lon, double lat, double alt) {
|
||||
// OSGFIXME
|
||||
return;
|
||||
if( lightnings.size() > 10)
|
||||
return;
|
||||
SGLightning *lt= new SGLightning(lon, lat, alt);
|
||||
@@ -743,52 +478,8 @@ void SGEnviro::addLightning(double lon, double lat, double alt) {
|
||||
}
|
||||
|
||||
void SGEnviro::drawLightning(void) {
|
||||
list_of_lightning::iterator iLightning;
|
||||
// play 'thunder' for lightning
|
||||
if( snd_active )
|
||||
if( !snd_playing ) {
|
||||
// wait until sound has reached us
|
||||
snd_timer += dt;
|
||||
if( snd_timer >= snd_wait ) {
|
||||
snd_playing = true;
|
||||
// compute relative position of lightning
|
||||
Point3D start( sgEnviro.last_lon*SG_DEGREES_TO_RADIANS, sgEnviro.last_lat*SG_DEGREES_TO_RADIANS, 0.0 );
|
||||
Point3D dest( snd_pos_lon*SG_DEGREES_TO_RADIANS, snd_pos_lat*SG_DEGREES_TO_RADIANS, 0.0 );
|
||||
double course = 0.0, dist = 0.0;
|
||||
calc_gc_course_dist( dest, start, &course, &dist );
|
||||
double ax = 0.0, ay = 0.0;
|
||||
ax = cos(course) * dist;
|
||||
ay = sin(course) * dist;
|
||||
SGSharedPtr<SGSoundSample> snd = soundMgr->find("thunder");
|
||||
if( snd ) {
|
||||
ALfloat pos[3]={ax, ay, -sgEnviro.last_alt };
|
||||
snd->set_source_pos(pos);
|
||||
snd->play_once();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if( !soundMgr->is_playing("thunder") ) {
|
||||
snd_active = false;
|
||||
snd_playing = false;
|
||||
}
|
||||
}
|
||||
|
||||
if( ! lightning_enable_state )
|
||||
return;
|
||||
|
||||
for( iLightning = lightnings.begin() ; iLightning != lightnings.end() ; iLightning++ ) {
|
||||
if( dt )
|
||||
if( sg_random() > 0.95f )
|
||||
(*iLightning)->lt_build();
|
||||
(*iLightning)->lt_Render();
|
||||
(*iLightning)->age -= dt;
|
||||
if( (*iLightning)->age < 0.0 ) {
|
||||
delete (*iLightning);
|
||||
lightnings.erase( iLightning );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// OSGFIXME
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -22,17 +22,14 @@
|
||||
#ifndef _VISUAL_ENVIRO_HXX
|
||||
#define _VISUAL_ENVIRO_HXX
|
||||
|
||||
#include <plib/sg.h>
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
SG_USING_STD(vector);
|
||||
SG_USING_STD(string);
|
||||
#include <simgear/math/SGMath.hxx>
|
||||
|
||||
class SGLightning;
|
||||
class SGSoundMgr;
|
||||
class SGSampleGroup;
|
||||
|
||||
/**
|
||||
* Simulate some echo on a weather radar.
|
||||
@@ -40,7 +37,8 @@ class SGSoundMgr;
|
||||
*/
|
||||
class SGWxRadarEcho {
|
||||
public:
|
||||
SGWxRadarEcho(float _heading, float _alt, float _radius, float _dist, double _LWC, bool _lightning, int _cloudId) :
|
||||
SGWxRadarEcho(float _heading, float _alt, float _radius, float _dist,
|
||||
double _LWC, bool _lightning, int _cloudId ) :
|
||||
heading( _heading ),
|
||||
alt ( _alt ),
|
||||
radius ( _radius ),
|
||||
@@ -56,12 +54,12 @@ public:
|
||||
/** reflectivity converted to liquid water content. */
|
||||
double LWC;
|
||||
/** if true then this data is for a lightning else it is for water echo. */
|
||||
bool lightning;
|
||||
bool lightning;
|
||||
/** Unique identifier of cloud */
|
||||
int cloudId;
|
||||
};
|
||||
|
||||
typedef vector<SGWxRadarEcho> list_of_SGWxRadarEcho;
|
||||
typedef std::vector<SGWxRadarEcho> list_of_SGWxRadarEcho;
|
||||
|
||||
/**
|
||||
* Visual environment helper class.
|
||||
@@ -80,10 +78,10 @@ private:
|
||||
double last_cloud_turbulence, cloud_turbulence;
|
||||
bool lightning_enable_state;
|
||||
double elapsed_time, dt;
|
||||
sgVec4 fog_color;
|
||||
sgMat4 transform;
|
||||
SGVec4f fog_color;
|
||||
SGMatrixf transform;
|
||||
double last_lon, last_lat, last_alt;
|
||||
SGSoundMgr *soundMgr;
|
||||
SGSampleGroup *sampleGroup;
|
||||
bool snd_active, snd_playing;
|
||||
double snd_timer, snd_wait, snd_pos_lat, snd_pos_lon, snd_dist;
|
||||
double min_time_before_lt;
|
||||
@@ -92,8 +90,8 @@ private:
|
||||
|
||||
/** a list of all the radar echo. */
|
||||
list_of_SGWxRadarEcho radarEcho;
|
||||
static sgVec3 min_light;
|
||||
static SGfloat streak_bright_nearmost_layer,
|
||||
static SGVec3f min_light;
|
||||
static float streak_bright_nearmost_layer,
|
||||
streak_bright_farmost_layer,
|
||||
streak_period_max,
|
||||
streak_period_change_per_kt,
|
||||
@@ -102,7 +100,7 @@ private:
|
||||
streak_length_change_per_kt,
|
||||
streak_length_max;
|
||||
static int streak_count_min, streak_count_max;
|
||||
static SGfloat cone_base_radius,
|
||||
static float cone_base_radius,
|
||||
cone_height;
|
||||
|
||||
public:
|
||||
@@ -120,10 +118,11 @@ public:
|
||||
/**
|
||||
* Forward a few states used for renderings.
|
||||
*/
|
||||
void startOfFrame( sgVec3 p, sgVec3 up, double lon, double lat, double alt, double delta_time);
|
||||
void startOfFrame( SGVec3f p, SGVec3f up, double lon, double lat, double alt, double delta_time);
|
||||
|
||||
void endOfFrame(void);
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* Whenever a cloud is drawn we check his 'impact' on the environment.
|
||||
* @param heading direction of cloud in radians
|
||||
@@ -133,7 +132,7 @@ public:
|
||||
* @param dist squared dist to cloud in meters
|
||||
*/
|
||||
void callback_cloud(float heading, float alt, float radius, int family, float dist, int cloudId);
|
||||
|
||||
#endif
|
||||
void drawRain(double pitch, double roll, double heading, double hspeed, double rain_norm);
|
||||
/**
|
||||
* Draw rain or snow precipitation around the viewer.
|
||||
@@ -156,7 +155,7 @@ public:
|
||||
* Forward the fog color used by the rain rendering.
|
||||
* @param adj_fog_color color of the fog
|
||||
*/
|
||||
void setLight(sgVec4 adj_fog_color);
|
||||
void setLight(SGVec4f adj_fog_color);
|
||||
|
||||
// this can be queried to add some turbulence for example
|
||||
bool is_view_in_cloud(void) const;
|
||||
@@ -241,14 +240,14 @@ public:
|
||||
* Forward the sound manager instance to be able to play samples.
|
||||
* @param mgr a running sound manager
|
||||
*/
|
||||
void set_soundMgr(SGSoundMgr *mgr);
|
||||
void set_sampleGroup(SGSampleGroup *sgr);
|
||||
|
||||
void setFOV( float w, float h );
|
||||
void getFOV( float &w, float &h );
|
||||
|
||||
list_of_SGWxRadarEcho *get_radar_echo(void);
|
||||
|
||||
sgMat4 *get_transform(void) { return &transform; }
|
||||
SGMatrixf *get_transform(void) { return &transform; }
|
||||
};
|
||||
|
||||
extern SGEnviro sgEnviro;
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
35
simgear/ephemeris/CMakeLists.txt
Normal file
35
simgear/ephemeris/CMakeLists.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
include (SimGearComponent)
|
||||
|
||||
set(HEADERS
|
||||
celestialBody.hxx
|
||||
ephemeris.hxx
|
||||
jupiter.hxx
|
||||
mars.hxx
|
||||
mercury.hxx
|
||||
moonpos.hxx
|
||||
neptune.hxx
|
||||
pluto.hxx
|
||||
saturn.hxx
|
||||
star.hxx
|
||||
stardata.hxx
|
||||
uranus.hxx
|
||||
venus.hxx
|
||||
)
|
||||
|
||||
set(SOURCES
|
||||
celestialBody.cxx
|
||||
ephemeris.cxx
|
||||
jupiter.cxx
|
||||
mars.cxx
|
||||
mercury.cxx
|
||||
moonpos.cxx
|
||||
neptune.cxx
|
||||
saturn.cxx
|
||||
star.cxx
|
||||
stardata.cxx
|
||||
uranus.cxx
|
||||
venus.cxx
|
||||
)
|
||||
|
||||
simgear_component(ephemeris ephemeris "${SOURCES}" "${HEADERS}")
|
||||
@@ -24,9 +24,6 @@
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
#ifdef SG_MATH_EXCEPTION_CLASH
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "celestialBody.hxx"
|
||||
|
||||
@@ -81,8 +81,8 @@ public:
|
||||
double getRightAscension();
|
||||
double getDeclination();
|
||||
double getMagnitude();
|
||||
double getLon();
|
||||
double getLat();
|
||||
double getLon() const;
|
||||
double getLat() const;
|
||||
void updatePosition(double mjd, Star *ourSun);
|
||||
};
|
||||
|
||||
@@ -90,12 +90,12 @@ inline double CelestialBody::getRightAscension() { return rightAscension; }
|
||||
inline double CelestialBody::getDeclination() { return declination; }
|
||||
inline double CelestialBody::getMagnitude() { return magnitude; }
|
||||
|
||||
inline double CelestialBody::getLon()
|
||||
inline double CelestialBody::getLon() const
|
||||
{
|
||||
return lonEcl;
|
||||
}
|
||||
|
||||
inline double CelestialBody::getLat()
|
||||
inline double CelestialBody::getLat() const
|
||||
{
|
||||
return latEcl;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
// Constructor
|
||||
SGEphemeris::SGEphemeris( const string &path ) {
|
||||
SGEphemeris::SGEphemeris( const std::string &path ) {
|
||||
our_sun = new Star;
|
||||
moon = new MoonPos;
|
||||
mercury = new Mercury;
|
||||
@@ -42,9 +42,8 @@ SGEphemeris::SGEphemeris( const string &path ) {
|
||||
uranus = new Uranus;
|
||||
neptune = new Neptune;
|
||||
nplanets = 7;
|
||||
for ( int i = 0; i < nplanets; ++i ) {
|
||||
sgdSetVec3( planets[i], 0.0, 0.0, 0.0 );
|
||||
}
|
||||
for ( int i = 0; i < nplanets; ++i )
|
||||
planets[i] = SGVec3d::zeros();
|
||||
stars = new SGStarData( SGPath(path) );
|
||||
}
|
||||
|
||||
|
||||
@@ -29,8 +29,7 @@
|
||||
#ifndef _EPHEMERIS_HXX
|
||||
#define _EPHEMERIS_HXX
|
||||
|
||||
|
||||
#include <plib/sg.h>
|
||||
#include <string>
|
||||
|
||||
#include <simgear/ephemeris/star.hxx>
|
||||
#include <simgear/ephemeris/moonpos.hxx>
|
||||
@@ -43,6 +42,9 @@
|
||||
#include <simgear/ephemeris/neptune.hxx>
|
||||
#include <simgear/ephemeris/stardata.hxx>
|
||||
|
||||
#include <simgear/math/SGMath.hxx>
|
||||
#include <simgear/misc/sg_path.hxx>
|
||||
|
||||
|
||||
/** Ephemeris class
|
||||
*
|
||||
@@ -83,7 +85,7 @@ class SGEphemeris {
|
||||
// planets[i][1] = Declination
|
||||
// planets[i][2] = Magnitude
|
||||
int nplanets;
|
||||
sgdVec3 planets[7];
|
||||
SGVec3d planets[7];
|
||||
|
||||
SGStarData *stars;
|
||||
|
||||
@@ -95,7 +97,7 @@ public:
|
||||
* calling the constructor you need to provide a path pointing to
|
||||
* your star database file.
|
||||
* @param path path to your star database */
|
||||
SGEphemeris( const string &path );
|
||||
SGEphemeris( const std::string &path );
|
||||
|
||||
/** Destructor */
|
||||
~SGEphemeris( void );
|
||||
@@ -155,7 +157,8 @@ public:
|
||||
* the second is the declination, and the third is the magnitude.
|
||||
* @return planets array
|
||||
*/
|
||||
inline sgdVec3 *getPlanets() { return planets; }
|
||||
inline SGVec3d *getPlanets() { return planets; }
|
||||
inline const SGVec3d *getPlanets() const { return planets; }
|
||||
|
||||
/** @return the numbers of defined stars. */
|
||||
inline int getNumStars() const { return stars->getNumStars(); }
|
||||
@@ -167,7 +170,8 @@ public:
|
||||
* third is the magnitude.
|
||||
* @returns star array
|
||||
*/
|
||||
inline sgdVec3 *getStars() { return stars->getStars(); }
|
||||
inline SGVec3d *getStars() { return stars->getStars(); }
|
||||
inline const SGVec3d *getStars() const { return stars->getStars(); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -22,10 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "jupiter.hxx"
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "mars.hxx"
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "mercury.hxx"
|
||||
|
||||
@@ -27,9 +27,6 @@
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
// #include <FDM/flight.hxx>
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "saturn.hxx"
|
||||
|
||||
@@ -22,10 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
@@ -43,47 +43,47 @@ public:
|
||||
Star ();
|
||||
~Star();
|
||||
void updatePosition(double mjd);
|
||||
double getM();
|
||||
double getw();
|
||||
double getxs();
|
||||
double getys();
|
||||
double getye();
|
||||
double getze();
|
||||
double getDistance();
|
||||
double getM() const;
|
||||
double getw() const;
|
||||
double getxs() const;
|
||||
double getys() const;
|
||||
double getye() const;
|
||||
double getze() const;
|
||||
double getDistance() const;
|
||||
};
|
||||
|
||||
|
||||
inline double Star::getM()
|
||||
inline double Star::getM() const
|
||||
{
|
||||
return M;
|
||||
}
|
||||
|
||||
inline double Star::getw()
|
||||
inline double Star::getw() const
|
||||
{
|
||||
return w;
|
||||
}
|
||||
|
||||
inline double Star::getxs()
|
||||
inline double Star::getxs() const
|
||||
{
|
||||
return xs;
|
||||
}
|
||||
|
||||
inline double Star::getys()
|
||||
inline double Star::getys() const
|
||||
{
|
||||
return ys;
|
||||
}
|
||||
|
||||
inline double Star::getye()
|
||||
inline double Star::getye() const
|
||||
{
|
||||
return ye;
|
||||
}
|
||||
|
||||
inline double Star::getze()
|
||||
inline double Star::getze() const
|
||||
{
|
||||
return ze;
|
||||
}
|
||||
|
||||
inline double Star::getDistance()
|
||||
inline double Star::getDistance() const
|
||||
{
|
||||
return distance;
|
||||
}
|
||||
|
||||
@@ -25,25 +25,21 @@
|
||||
#endif
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
#include <simgear/misc/sg_path.hxx>
|
||||
#include <simgear/misc/sgstream.hxx>
|
||||
|
||||
#include "stardata.hxx"
|
||||
|
||||
#if defined (_MSC_VER)
|
||||
SG_USING_STD(getline);
|
||||
using std::getline;
|
||||
#endif
|
||||
|
||||
// Constructor
|
||||
SGStarData::SGStarData() :
|
||||
nstars(0)
|
||||
{
|
||||
}
|
||||
using std::string;
|
||||
|
||||
SGStarData::SGStarData( SGPath path ) :
|
||||
nstars(0)
|
||||
// Constructor
|
||||
SGStarData::SGStarData( const SGPath& path )
|
||||
{
|
||||
data_path = SGPath( path );
|
||||
load();
|
||||
load(path);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,31 +48,28 @@ SGStarData::~SGStarData() {
|
||||
}
|
||||
|
||||
|
||||
bool SGStarData::load() {
|
||||
bool SGStarData::load( const SGPath& path ) {
|
||||
|
||||
// -dw- avoid local data > 32k error by dynamic allocation of the
|
||||
// array, problem for some compilers
|
||||
stars = new sgdVec3[SG_MAX_STARS];
|
||||
_stars.clear();
|
||||
|
||||
// build the full path name to the stars data base file
|
||||
data_path.append( "stars" );
|
||||
SG_LOG( SG_ASTRO, SG_INFO, " Loading stars from " << data_path.str() );
|
||||
// build the full path name to the stars data base file
|
||||
SGPath tmp = path;
|
||||
tmp.append( "stars" );
|
||||
SG_LOG( SG_ASTRO, SG_INFO, " Loading stars from " << tmp.str() );
|
||||
|
||||
sg_gzifstream in( data_path.str() );
|
||||
sg_gzifstream in( tmp.str() );
|
||||
if ( ! in.is_open() ) {
|
||||
SG_LOG( SG_ASTRO, SG_ALERT, "Cannot open star file: "
|
||||
<< data_path.str() );
|
||||
exit(-1);
|
||||
<< tmp.str() );
|
||||
return false;
|
||||
}
|
||||
|
||||
double ra, dec, mag;
|
||||
char c;
|
||||
string name;
|
||||
|
||||
nstars = 0;
|
||||
|
||||
// read in each line of the file
|
||||
while ( ! in.eof() && nstars < SG_MAX_STARS ) {
|
||||
while ( ! in.eof() ) {
|
||||
in >> skipcomment;
|
||||
|
||||
getline( in, name, ',' );
|
||||
@@ -116,13 +109,10 @@ bool SGStarData::load() {
|
||||
in >> mag;
|
||||
|
||||
// cout << " star data = " << ra << " " << dec << " " << mag << endl;
|
||||
|
||||
sgdSetVec3( stars[nstars], ra, dec, mag );
|
||||
|
||||
++nstars;
|
||||
_stars.push_back(SGVec3d(ra, dec, mag));
|
||||
}
|
||||
|
||||
SG_LOG( SG_ASTRO, SG_INFO, " Loaded " << nstars << " stars" );
|
||||
SG_LOG( SG_ASTRO, SG_INFO, " Loaded " << _stars.size() << " stars" );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -24,37 +24,28 @@
|
||||
#ifndef _SG_STARDATA_HXX
|
||||
#define _SG_STARDATA_HXX
|
||||
|
||||
#include <vector>
|
||||
#include <simgear/math/SGMath.hxx>
|
||||
|
||||
#include <plib/sg.h>
|
||||
|
||||
#include <simgear/misc/sg_path.hxx>
|
||||
|
||||
|
||||
#define SG_MAX_STARS 850
|
||||
|
||||
class SGPath;
|
||||
|
||||
class SGStarData {
|
||||
|
||||
int nstars;
|
||||
sgdVec3 *stars;
|
||||
|
||||
SGPath data_path;
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
SGStarData();
|
||||
SGStarData( SGPath path );
|
||||
SGStarData( const SGPath& path );
|
||||
|
||||
// Destructor
|
||||
~SGStarData();
|
||||
|
||||
// load the stars database
|
||||
bool load();
|
||||
bool load( const SGPath& path );
|
||||
|
||||
// stars
|
||||
inline int getNumStars() const { return nstars; }
|
||||
inline sgdVec3 *getStars() { return stars; }
|
||||
inline int getNumStars() const { return _stars.size(); }
|
||||
inline SGVec3d *getStars() { return &(_stars[0]); }
|
||||
|
||||
private:
|
||||
std::vector<SGVec3d> _stars;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "uranus.hxx"
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
* $Id$
|
||||
**************************************************************************/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# define exception c_exception
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#include "venus.hxx"
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
decode_binobj
|
||||
lowtest
|
||||
socktest
|
||||
tcp_client
|
||||
lowtest
|
||||
tcp_server
|
||||
tcp_client
|
||||
33
simgear/io/CMakeLists.txt
Normal file
33
simgear/io/CMakeLists.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
|
||||
include (SimGearComponent)
|
||||
|
||||
set(HEADERS
|
||||
iochannel.hxx
|
||||
lowlevel.hxx
|
||||
raw_socket.hxx
|
||||
sg_binobj.hxx
|
||||
sg_file.hxx
|
||||
sg_netBuffer.hxx
|
||||
sg_netChannel.hxx
|
||||
sg_netChat.hxx
|
||||
sg_serial.hxx
|
||||
sg_socket.hxx
|
||||
sg_socket_udp.hxx
|
||||
)
|
||||
|
||||
set(SOURCES
|
||||
iochannel.cxx
|
||||
lowlevel.cxx
|
||||
raw_socket.cxx
|
||||
sg_binobj.cxx
|
||||
sg_file.cxx
|
||||
sg_netBuffer.cxx
|
||||
sg_netChannel.cxx
|
||||
sg_netChat.cxx
|
||||
sg_serial.cxx
|
||||
sg_socket.cxx
|
||||
sg_socket_udp.cxx
|
||||
)
|
||||
|
||||
simgear_component(io io "${SOURCES}" "${HEADERS}")
|
||||
@@ -9,7 +9,11 @@ include_HEADERS = \
|
||||
sg_file.hxx \
|
||||
sg_serial.hxx \
|
||||
sg_socket.hxx \
|
||||
sg_socket_udp.hxx
|
||||
sg_socket_udp.hxx \
|
||||
raw_socket.hxx \
|
||||
sg_netBuffer.hxx \
|
||||
sg_netChannel.hxx \
|
||||
sg_netChat.hxx
|
||||
|
||||
libsgio_a_SOURCES = \
|
||||
iochannel.cxx \
|
||||
@@ -18,7 +22,11 @@ libsgio_a_SOURCES = \
|
||||
sg_file.cxx \
|
||||
sg_serial.cxx \
|
||||
sg_socket.cxx \
|
||||
sg_socket_udp.cxx
|
||||
sg_socket_udp.cxx \
|
||||
raw_socket.cxx \
|
||||
sg_netBuffer.cxx \
|
||||
sg_netChannel.cxx \
|
||||
sg_netChat.cxx
|
||||
|
||||
INCLUDES = -I$(top_srcdir)
|
||||
|
||||
@@ -27,40 +35,44 @@ noinst_PROGRAMS = decode_binobj socktest lowtest tcp_server tcp_client
|
||||
tcp_server_SOURCES = tcp_server.cxx
|
||||
|
||||
tcp_server_LDADD = \
|
||||
$(top_builddir)/simgear/io/libsgio.a \
|
||||
libsgio.a \
|
||||
$(top_builddir)/simgear/structure/libsgstructure.a \
|
||||
$(top_builddir)/simgear/debug/libsgdebug.a \
|
||||
$(top_builddir)/simgear/bucket/libsgbucket.a \
|
||||
$(top_builddir)/simgear/misc/libsgmisc.a \
|
||||
-lplibnet -lplibul -lz \
|
||||
-lz \
|
||||
$(network_LIBS) \
|
||||
$(base_LIBS)
|
||||
|
||||
tcp_client_SOURCES = tcp_client.cxx
|
||||
|
||||
tcp_client_LDADD = \
|
||||
$(top_builddir)/simgear/io/libsgio.a \
|
||||
libsgio.a \
|
||||
$(top_builddir)/simgear/structure/libsgstructure.a \
|
||||
$(top_builddir)/simgear/debug/libsgdebug.a \
|
||||
$(top_builddir)/simgear/bucket/libsgbucket.a \
|
||||
$(top_builddir)/simgear/misc/libsgmisc.a \
|
||||
-lplibnet -lplibul -lz \
|
||||
-lz \
|
||||
$(network_LIBS) \
|
||||
$(base_LIBS)
|
||||
|
||||
socktest_SOURCES = socktest.cxx
|
||||
|
||||
socktest_LDADD = \
|
||||
$(top_builddir)/simgear/io/libsgio.a \
|
||||
libsgio.a \
|
||||
$(top_builddir)/simgear/structure/libsgstructure.a \
|
||||
$(top_builddir)/simgear/debug/libsgdebug.a \
|
||||
$(top_builddir)/simgear/bucket/libsgbucket.a \
|
||||
$(top_builddir)/simgear/misc/libsgmisc.a \
|
||||
-lplibnet -lplibul -lz \
|
||||
-lz \
|
||||
$(network_LIBS) \
|
||||
$(base_LIBS)
|
||||
$(base_LIBS)
|
||||
|
||||
lowtest_SOURCES = lowtest.cxx
|
||||
|
||||
lowtest_LDADD = \
|
||||
$(top_builddir)/simgear/io/libsgio.a \
|
||||
libsgio.a \
|
||||
$(top_builddir)/simgear/structure/libsgstructure.a \
|
||||
$(top_builddir)/simgear/debug/libsgdebug.a \
|
||||
$(top_builddir)/simgear/bucket/libsgbucket.a \
|
||||
$(top_builddir)/simgear/misc/libsgmisc.a \
|
||||
@@ -69,7 +81,7 @@ lowtest_LDADD = \
|
||||
decode_binobj_SOURCES = decode_binobj.cxx
|
||||
|
||||
decode_binobj_LDADD = \
|
||||
$(top_builddir)/simgear/io/libsgio.a \
|
||||
libsgio.a \
|
||||
$(top_builddir)/simgear/debug/libsgdebug.a \
|
||||
$(top_builddir)/simgear/bucket/libsgbucket.a \
|
||||
$(top_builddir)/simgear/misc/libsgmisc.a \
|
||||
|
||||
@@ -5,12 +5,13 @@
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include STL_IOSTREAM
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
|
||||
#include "sg_binobj.hxx"
|
||||
|
||||
SG_USING_STD(cout);
|
||||
SG_USING_STD(endl);
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
|
||||
int main( int argc, char **argv ) {
|
||||
@@ -37,14 +38,14 @@ int main( int argc, char **argv ) {
|
||||
obj.get_gbs_radius());
|
||||
cout << endl;
|
||||
|
||||
point_list nodes = obj.get_wgs84_nodes();
|
||||
std::vector<SGVec3d> nodes = obj.get_wgs84_nodes();
|
||||
cout << "# vertex list" << endl;
|
||||
for ( i = 0; i < (int)nodes.size(); ++i ) {
|
||||
printf("v %.5f %.5f %.5f\n", nodes[i].x(), nodes[i].y(), nodes[i].z() );
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
point_list normals = obj.get_normals();
|
||||
std::vector<SGVec3f> normals = obj.get_normals();
|
||||
cout << "# vertex normal list" << endl;
|
||||
for ( i = 0; i < (int)normals.size(); ++i ) {
|
||||
printf("vn %.5f %.5f %.5f\n",
|
||||
@@ -52,7 +53,7 @@ int main( int argc, char **argv ) {
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
point_list texcoords = obj.get_texcoords();
|
||||
std::vector<SGVec2f> texcoords = obj.get_texcoords();
|
||||
cout << "# texture coordinate list" << endl;
|
||||
for ( i = 0; i < (int)texcoords.size(); ++i ) {
|
||||
printf("vt %.5f %.5f\n",
|
||||
@@ -63,7 +64,7 @@ int main( int argc, char **argv ) {
|
||||
cout << "# geometry groups" << endl;
|
||||
cout << endl;
|
||||
|
||||
string material;
|
||||
std::string material;
|
||||
int_list vertex_index;
|
||||
int_list normal_index;
|
||||
int_list tex_index;
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
|
||||
// #include "protocol.hxx"
|
||||
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
SG_USING_STD(vector);
|
||||
SG_USING_STD(string);
|
||||
using std::vector;
|
||||
using std::string;
|
||||
|
||||
|
||||
#define SG_IO_MAX_MSG_SIZE 16384
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
// $Id$
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <simgear_config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h> // for memcpy()
|
||||
|
||||
#include "lowlevel.hxx"
|
||||
@@ -55,21 +59,25 @@ void sgWriteChar ( gzFile fd, const char var )
|
||||
|
||||
void sgReadFloat ( gzFile fd, float *var )
|
||||
{
|
||||
if ( gzread ( fd, var, sizeof(float) ) != sizeof(float) ) {
|
||||
union { float v; uint32_t u; } buf;
|
||||
if ( gzread ( fd, &buf.u, sizeof(float) ) != sizeof(float) ) {
|
||||
read_error = true ;
|
||||
}
|
||||
if ( sgIsBigEndian() ) {
|
||||
sgEndianSwap( (uint32_t *)var);
|
||||
sgEndianSwap( &buf.u );
|
||||
}
|
||||
*var = buf.v;
|
||||
}
|
||||
|
||||
|
||||
void sgWriteFloat ( gzFile fd, const float var )
|
||||
{
|
||||
union { float v; uint32_t u; } buf;
|
||||
buf.v = var;
|
||||
if ( sgIsBigEndian() ) {
|
||||
sgEndianSwap( (uint32_t *)&var);
|
||||
sgEndianSwap( &buf.u );
|
||||
}
|
||||
if ( gzwrite ( fd, (void *)(&var), sizeof(float) ) != sizeof(float) ) {
|
||||
if ( gzwrite ( fd, (void *)(&buf.u), sizeof(float) ) != sizeof(float) ) {
|
||||
write_error = true ;
|
||||
}
|
||||
}
|
||||
@@ -77,21 +85,25 @@ void sgWriteFloat ( gzFile fd, const float var )
|
||||
|
||||
void sgReadDouble ( gzFile fd, double *var )
|
||||
{
|
||||
if ( gzread ( fd, var, sizeof(double) ) != sizeof(double) ) {
|
||||
union { double v; uint64_t u; } buf;
|
||||
if ( gzread ( fd, &buf.u, sizeof(double) ) != sizeof(double) ) {
|
||||
read_error = true ;
|
||||
}
|
||||
if ( sgIsBigEndian() ) {
|
||||
sgEndianSwap( (uint64_t *)var);
|
||||
sgEndianSwap( &buf.u );
|
||||
}
|
||||
*var = buf.v;
|
||||
}
|
||||
|
||||
|
||||
void sgWriteDouble ( gzFile fd, const double var )
|
||||
{
|
||||
union { double v; uint64_t u; } buf;
|
||||
buf.v = var;
|
||||
if ( sgIsBigEndian() ) {
|
||||
sgEndianSwap( (uint64_t *)&var);
|
||||
sgEndianSwap( &buf.u );
|
||||
}
|
||||
if ( gzwrite ( fd, (void *)(&var), sizeof(double) ) != sizeof(double) ) {
|
||||
if ( gzwrite ( fd, (void *)(&buf.u), sizeof(double) ) != sizeof(double) ) {
|
||||
write_error = true ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
#include <stdio.h>
|
||||
#include <zlib.h>
|
||||
|
||||
#include <plib/sg.h>
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
#include <simgear/misc/stdint.hxx>
|
||||
|
||||
#include <simgear/math/SGMath.hxx>
|
||||
|
||||
// Note that output is written in little endian form (and converted as
|
||||
// necessary for big endian machines)
|
||||
|
||||
@@ -75,39 +75,39 @@ void sgWriteBytes ( gzFile fd, const unsigned int n, const void *var ) ;
|
||||
void sgReadString ( gzFile fd, char **var ) ;
|
||||
void sgWriteString ( gzFile fd, const char *var ) ;
|
||||
|
||||
inline void sgReadVec2 ( gzFile fd, sgVec2 var ) {
|
||||
sgReadFloat ( fd, 2, var ) ;
|
||||
inline void sgReadVec2 ( gzFile fd, SGVec2f& var ) {
|
||||
sgReadFloat ( fd, 2, var.data() ) ;
|
||||
}
|
||||
inline void sgWriteVec2 ( gzFile fd, const sgVec2 var ) {
|
||||
sgWriteFloat ( fd, 2, var ) ;
|
||||
inline void sgWriteVec2 ( gzFile fd, const SGVec2f& var ) {
|
||||
sgWriteFloat ( fd, 2, var.data() ) ;
|
||||
}
|
||||
|
||||
inline void sgReadVec3 ( gzFile fd, sgVec3 var ) {
|
||||
sgReadFloat ( fd, 3, var ) ;
|
||||
inline void sgReadVec3 ( gzFile fd, SGVec3f& var ) {
|
||||
sgReadFloat ( fd, 3, var.data() ) ;
|
||||
}
|
||||
inline void sgWriteVec3 ( gzFile fd, const sgVec3 var ) {
|
||||
sgWriteFloat ( fd, 3, var ) ;
|
||||
inline void sgWriteVec3 ( gzFile fd, const SGVec3f& var ) {
|
||||
sgWriteFloat ( fd, 3, var.data() ) ;
|
||||
}
|
||||
|
||||
inline void sgReaddVec3 ( gzFile fd, sgdVec3 var ) {
|
||||
sgReadDouble ( fd, 3, var ) ;
|
||||
inline void sgReaddVec3 ( gzFile fd, SGVec3d& var ) {
|
||||
sgReadDouble ( fd, 3, var.data() ) ;
|
||||
}
|
||||
inline void sgWritedVec3 ( gzFile fd, const sgdVec3 var ) {
|
||||
sgWriteDouble ( fd, 3, var ) ;
|
||||
inline void sgWritedVec3 ( gzFile fd, const SGVec3d& var ) {
|
||||
sgWriteDouble ( fd, 3, var.data() ) ;
|
||||
}
|
||||
|
||||
inline void sgReadVec4 ( gzFile fd, sgVec4 var ) {
|
||||
sgReadFloat ( fd, 4, var ) ;
|
||||
inline void sgReadVec4 ( gzFile fd, SGVec4f& var ) {
|
||||
sgReadFloat ( fd, 4, var.data() ) ;
|
||||
}
|
||||
inline void sgWriteVec4 ( gzFile fd, const sgVec4 var ) {
|
||||
sgWriteFloat ( fd, 4, var ) ;
|
||||
inline void sgWriteVec4 ( gzFile fd, const SGVec4f& var ) {
|
||||
sgWriteFloat ( fd, 4, var.data() ) ;
|
||||
}
|
||||
|
||||
inline void sgReadMat4 ( gzFile fd, sgMat4 var ) {
|
||||
sgReadFloat ( fd, 16, (float *)var ) ;
|
||||
inline void sgReadMat4 ( gzFile fd, SGMatrixf& var ) {
|
||||
sgReadFloat ( fd, 16, (float *)var.data() ) ;
|
||||
}
|
||||
inline void sgWriteMat4 ( gzFile fd, const sgMat4 var ) {
|
||||
sgWriteFloat ( fd, 16, (float *)var ) ;
|
||||
inline void sgWriteMat4 ( gzFile fd, const SGMatrixf& var ) {
|
||||
sgWriteFloat ( fd, 16, (float *)var.data() ) ;
|
||||
}
|
||||
|
||||
void sgClearReadError();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include STL_IOSTREAM
|
||||
#include <iostream>
|
||||
#include "lowlevel.hxx"
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ static const int sgEndianTest = 1;
|
||||
#define sgIsLittleEndian (*((char *) &sgEndianTest ) != 0)
|
||||
#define sgIsBigEndian (*((char *) &sgEndianTest ) == 0)
|
||||
|
||||
SG_USING_STD(cout);
|
||||
SG_USING_STD(endl);
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
|
||||
int main() {
|
||||
|
||||
505
simgear/io/raw_socket.cxx
Normal file
505
simgear/io/raw_socket.cxx
Normal file
@@ -0,0 +1,505 @@
|
||||
/*
|
||||
simgear::Socket, adapted from PLIB Socket by James Turner
|
||||
Copyright (C) 2010 James Turner
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <simgear_config.h>
|
||||
#endif
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include "sg_socket.hxx"
|
||||
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
# define WINSOCK // use winsock convetions, otherwise standard POSIX
|
||||
#endif
|
||||
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <cstring>
|
||||
#include <cassert>
|
||||
#include <cstdio> // for snprintf
|
||||
|
||||
#if defined(WINSOCK)
|
||||
# include <winsock.h>
|
||||
# include <stdarg.h>
|
||||
#else
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <sys/time.h>
|
||||
# include <unistd.h>
|
||||
# include <netdb.h>
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && !defined(socklen_t)
|
||||
#define socklen_t int
|
||||
#endif
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
#include <simgear/structure/exception.hxx>
|
||||
|
||||
namespace simgear
|
||||
{
|
||||
|
||||
IPAddress::IPAddress ( const char* host, int port )
|
||||
{
|
||||
set ( host, port ) ;
|
||||
}
|
||||
|
||||
|
||||
void IPAddress::set ( const char* host, int port )
|
||||
{
|
||||
memset(this, 0, sizeof(IPAddress));
|
||||
|
||||
sin_family = AF_INET ;
|
||||
sin_port = htons (port);
|
||||
|
||||
/* Convert a string specifying a host name or one of a few symbolic
|
||||
** names to a numeric IP address. This usually calls gethostbyname()
|
||||
** to do the work; the names "" and "<broadcast>" are special.
|
||||
*/
|
||||
|
||||
if (!host || host[0] == '\0') {
|
||||
sin_addr = INADDR_ANY;
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(host, "<broadcast>") == 0) {
|
||||
sin_addr = INADDR_BROADCAST;
|
||||
return;
|
||||
}
|
||||
|
||||
sin_addr = inet_addr ( host ) ;
|
||||
if (sin_addr != INADDR_NONE) {
|
||||
return;
|
||||
}
|
||||
// finally, try gethostbyname
|
||||
struct hostent *hp = gethostbyname ( host ) ;
|
||||
if (!hp) {
|
||||
SG_LOG(SG_IO, SG_WARN, "gethostbyname failed for " << host);
|
||||
sin_addr = INADDR_ANY ;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy ( (char *) &sin_addr, hp->h_addr, hp->h_length ) ;
|
||||
}
|
||||
|
||||
|
||||
/* Create a string object representing an IP address.
|
||||
This is always a string of the form 'dd.dd.dd.dd' (with variable
|
||||
size numbers). */
|
||||
|
||||
const char* IPAddress::getHost () const
|
||||
{
|
||||
#if 0
|
||||
const char* buf = inet_ntoa ( sin_addr ) ;
|
||||
#else
|
||||
static char buf [32];
|
||||
long x = ntohl(sin_addr);
|
||||
sprintf(buf, "%d.%d.%d.%d",
|
||||
(int) (x>>24) & 0xff, (int) (x>>16) & 0xff,
|
||||
(int) (x>> 8) & 0xff, (int) (x>> 0) & 0xff );
|
||||
#endif
|
||||
return buf;
|
||||
}
|
||||
|
||||
unsigned int IPAddress::getIP () const
|
||||
{
|
||||
return sin_addr;
|
||||
}
|
||||
|
||||
unsigned int IPAddress::getPort() const
|
||||
{
|
||||
return ntohs(sin_port);
|
||||
}
|
||||
|
||||
unsigned int IPAddress::getFamily () const
|
||||
{
|
||||
return sin_family;
|
||||
}
|
||||
|
||||
const char* IPAddress::getLocalHost ()
|
||||
{
|
||||
//gethostbyname(gethostname())
|
||||
|
||||
char buf[256];
|
||||
memset(buf, 0, sizeof(buf));
|
||||
gethostname(buf, sizeof(buf)-1);
|
||||
const hostent *hp = gethostbyname(buf);
|
||||
|
||||
if (hp && *hp->h_addr_list)
|
||||
{
|
||||
in_addr addr = *((in_addr*)*hp->h_addr_list);
|
||||
const char* host = inet_ntoa(addr);
|
||||
|
||||
if ( host )
|
||||
return host ;
|
||||
}
|
||||
|
||||
return "127.0.0.1" ;
|
||||
}
|
||||
|
||||
|
||||
bool IPAddress::getBroadcast () const
|
||||
{
|
||||
return sin_addr == INADDR_BROADCAST;
|
||||
}
|
||||
|
||||
|
||||
Socket::Socket ()
|
||||
{
|
||||
handle = -1 ;
|
||||
}
|
||||
|
||||
|
||||
Socket::~Socket ()
|
||||
{
|
||||
close () ;
|
||||
}
|
||||
|
||||
|
||||
void Socket::setHandle (int _handle)
|
||||
{
|
||||
close () ;
|
||||
handle = _handle ;
|
||||
}
|
||||
|
||||
|
||||
bool Socket::open ( bool stream )
|
||||
{
|
||||
close () ;
|
||||
handle = ::socket ( AF_INET, (stream? SOCK_STREAM: SOCK_DGRAM), 0 ) ;
|
||||
|
||||
// Jan 26, 2010: Patch to avoid the problem of the socket resource not
|
||||
// yet being available if the program is restarted quickly after being
|
||||
// killed.
|
||||
//
|
||||
// Reference: http://www.unixguide.net/network/socketfaq/4.5.shtml
|
||||
//
|
||||
if ( stream ) {
|
||||
int opt_boolean = 1;
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
setsockopt( handle, SOL_SOCKET, SO_REUSEADDR, (char *)&opt_boolean,
|
||||
sizeof(opt_boolean) );
|
||||
#else
|
||||
setsockopt( handle, SOL_SOCKET, SO_REUSEADDR, &opt_boolean,
|
||||
sizeof(opt_boolean) );
|
||||
#endif
|
||||
}
|
||||
|
||||
return (handle != -1);
|
||||
}
|
||||
|
||||
|
||||
void Socket::setBlocking ( bool blocking )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
|
||||
#if defined(WINSOCK)
|
||||
u_long nblocking = blocking? 0: 1;
|
||||
::ioctlsocket(handle, FIONBIO, &nblocking);
|
||||
#else
|
||||
|
||||
int delay_flag = ::fcntl (handle, F_GETFL, 0);
|
||||
|
||||
if (blocking)
|
||||
delay_flag &= (~O_NDELAY);
|
||||
else
|
||||
delay_flag |= O_NDELAY;
|
||||
|
||||
::fcntl (handle, F_SETFL, delay_flag);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Socket::setBroadcast ( bool broadcast )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
int result;
|
||||
if ( broadcast ) {
|
||||
int one = 1;
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
result = ::setsockopt( handle, SOL_SOCKET, SO_BROADCAST, (char*)&one, sizeof(one) );
|
||||
#else
|
||||
result = ::setsockopt( handle, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one) );
|
||||
#endif
|
||||
} else {
|
||||
result = ::setsockopt( handle, SOL_SOCKET, SO_BROADCAST, NULL, 0 );
|
||||
}
|
||||
|
||||
if ( result < 0 ) {
|
||||
throw sg_exception("Socket::setBroadcast failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int Socket::bind ( const char* host, int port )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
IPAddress addr ( host, port ) ;
|
||||
return ::bind(handle,(const sockaddr*)&addr,sizeof(IPAddress));
|
||||
}
|
||||
|
||||
|
||||
int Socket::listen ( int backlog )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
return ::listen(handle,backlog);
|
||||
}
|
||||
|
||||
|
||||
int Socket::accept ( IPAddress* addr )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
|
||||
if ( addr == NULL )
|
||||
{
|
||||
return ::accept(handle,NULL,NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
socklen_t addr_len = (socklen_t) sizeof(IPAddress) ;
|
||||
return ::accept(handle,(sockaddr*)addr,&addr_len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int Socket::connect ( const char* host, int port )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
IPAddress addr ( host, port ) ;
|
||||
if ( addr.getBroadcast() ) {
|
||||
setBroadcast( true );
|
||||
}
|
||||
return ::connect(handle,(const sockaddr*)&addr,sizeof(IPAddress));
|
||||
}
|
||||
|
||||
|
||||
int Socket::send (const void * buffer, int size, int flags)
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
return ::send (handle, (const char*)buffer, size, flags);
|
||||
}
|
||||
|
||||
|
||||
int Socket::sendto ( const void * buffer, int size,
|
||||
int flags, const IPAddress* to )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
return ::sendto(handle,(const char*)buffer,size,flags,
|
||||
(const sockaddr*)to,sizeof(IPAddress));
|
||||
}
|
||||
|
||||
|
||||
int Socket::recv (void * buffer, int size, int flags)
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
return ::recv (handle, (char*)buffer, size, flags);
|
||||
}
|
||||
|
||||
|
||||
int Socket::recvfrom ( void * buffer, int size,
|
||||
int flags, IPAddress* from )
|
||||
{
|
||||
assert ( handle != -1 ) ;
|
||||
socklen_t fromlen = (socklen_t) sizeof(IPAddress) ;
|
||||
return ::recvfrom(handle,(char*)buffer,size,flags,(sockaddr*)from,&fromlen);
|
||||
}
|
||||
|
||||
|
||||
void Socket::close (void)
|
||||
{
|
||||
if ( handle != -1 )
|
||||
{
|
||||
#if defined(WINSOCK)
|
||||
::closesocket( handle );
|
||||
#else
|
||||
::close( handle );
|
||||
#endif
|
||||
handle = -1 ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Socket::isNonBlockingError ()
|
||||
{
|
||||
#if defined(WINSOCK)
|
||||
int wsa_errno = WSAGetLastError();
|
||||
if ( wsa_errno != 0 )
|
||||
{
|
||||
WSASetLastError(0);
|
||||
SG_LOG(SG_IO, SG_WARN, "isNonBlockingError: WSAGetLastError():" << wsa_errno);
|
||||
switch (wsa_errno) {
|
||||
case WSAEWOULDBLOCK: // always == NET_EAGAIN?
|
||||
case WSAEALREADY:
|
||||
case WSAEINPROGRESS:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
#else
|
||||
switch (errno) {
|
||||
case EWOULDBLOCK: // always == NET_EAGAIN?
|
||||
case EALREADY:
|
||||
case EINPROGRESS:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// modified version by os
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
int Socket::select ( Socket** reads, Socket** writes, int timeout )
|
||||
{
|
||||
fd_set r,w;
|
||||
int retval;
|
||||
|
||||
FD_ZERO (&r);
|
||||
FD_ZERO (&w);
|
||||
|
||||
int i, k ;
|
||||
int num = 0 ;
|
||||
|
||||
if ( reads )
|
||||
{
|
||||
for ( i=0; reads[i]; i++ )
|
||||
{
|
||||
int fd = reads[i]->getHandle();
|
||||
FD_SET (fd, &r);
|
||||
num++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( writes )
|
||||
{
|
||||
for ( i=0; writes[i]; i++ )
|
||||
{
|
||||
int fd = writes[i]->getHandle();
|
||||
FD_SET (fd, &w);
|
||||
num++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!num)
|
||||
return num ;
|
||||
|
||||
/* Set up the timeout */
|
||||
struct timeval tv ;
|
||||
tv.tv_sec = timeout/1000;
|
||||
tv.tv_usec = (timeout%1000)*1000;
|
||||
|
||||
// It bothers me that select()'s first argument does not appear to
|
||||
// work as advertised... [it hangs like this if called with
|
||||
// anything less than FD_SETSIZE, which seems wasteful?]
|
||||
|
||||
// Note: we ignore the 'exception' fd_set - I have never had a
|
||||
// need to use it. The name is somewhat misleading - the only
|
||||
// thing I have ever seen it used for is to detect urgent data -
|
||||
// which is an unportable feature anyway.
|
||||
|
||||
retval = ::select (FD_SETSIZE, &r, &w, 0, &tv);
|
||||
|
||||
//remove sockets that had no activity
|
||||
|
||||
num = 0 ;
|
||||
|
||||
if ( reads )
|
||||
{
|
||||
for ( k=i=0; reads[i]; i++ )
|
||||
{
|
||||
int fd = reads[i]->getHandle();
|
||||
if ( FD_ISSET (fd, &r) )
|
||||
{
|
||||
reads[k++] = reads[i];
|
||||
num++;
|
||||
}
|
||||
}
|
||||
reads[k] = NULL ;
|
||||
}
|
||||
|
||||
if ( writes )
|
||||
{
|
||||
for ( k=i=0; writes[i]; i++ )
|
||||
{
|
||||
int fd = writes[i]->getHandle();
|
||||
if ( FD_ISSET (fd, &w) )
|
||||
{
|
||||
writes[k++] = writes[i];
|
||||
num++;
|
||||
}
|
||||
}
|
||||
writes[k] = NULL ;
|
||||
}
|
||||
|
||||
if (retval == 0) // timeout
|
||||
return (-2);
|
||||
if (retval == -1)// error
|
||||
return (-1);
|
||||
|
||||
return num ;
|
||||
}
|
||||
|
||||
|
||||
/* Init/Exit functions */
|
||||
|
||||
static void netExit ( void )
|
||||
{
|
||||
#if defined(WINSOCK)
|
||||
/* Clean up windows networking */
|
||||
if ( WSACleanup() == SOCKET_ERROR ) {
|
||||
if ( WSAGetLastError() == WSAEINPROGRESS ) {
|
||||
WSACancelBlockingCall();
|
||||
WSACleanup();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int Socket::initSockets()
|
||||
{
|
||||
assert ( sizeof(sockaddr_in) == sizeof(IPAddress) ) ;
|
||||
|
||||
#if defined(WINSOCK)
|
||||
/* Start up the windows networking */
|
||||
WORD version_wanted = MAKEWORD(1,1);
|
||||
WSADATA wsaData;
|
||||
|
||||
if ( WSAStartup(version_wanted, &wsaData) != 0 ) {
|
||||
throw sg_exception("WinSock initialization failed");
|
||||
}
|
||||
#endif
|
||||
|
||||
atexit( netExit ) ;
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
} // of namespace simgear
|
||||
|
||||
110
simgear/io/raw_socket.hxx
Normal file
110
simgear/io/raw_socket.hxx
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
simgear::Socket, adapted from PLIB netSocket by James Turner
|
||||
Copyright (C) 2010 James Turner
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef SG_IO_SOCKET_HXX
|
||||
#define SG_IO_SOCKET_HXX
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#if defined(__APPLE__)
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
namespace simgear
|
||||
{
|
||||
|
||||
/*
|
||||
* Socket address, internet style.
|
||||
*/
|
||||
class IPAddress
|
||||
{
|
||||
/* DANGER!!! This MUST match 'struct sockaddr_in' exactly! */
|
||||
#ifdef __APPLE__
|
||||
__uint8_t sin_len;
|
||||
__uint8_t sin_family;
|
||||
in_port_t sin_port;
|
||||
in_addr_t sin_addr;
|
||||
char sin_zero[8];
|
||||
#else
|
||||
short sin_family ;
|
||||
unsigned short sin_port ;
|
||||
unsigned int sin_addr ;
|
||||
char sin_zero [ 8 ] ;
|
||||
#endif
|
||||
|
||||
public:
|
||||
IPAddress () {}
|
||||
IPAddress ( const char* host, int port ) ;
|
||||
|
||||
void set ( const char* host, int port ) ;
|
||||
const char* getHost () const ;
|
||||
unsigned int getPort() const ;
|
||||
unsigned int getIP () const ;
|
||||
unsigned int getFamily () const ;
|
||||
static const char* getLocalHost () ;
|
||||
|
||||
bool getBroadcast () const ;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Socket type
|
||||
*/
|
||||
class Socket
|
||||
{
|
||||
int handle ;
|
||||
|
||||
public:
|
||||
|
||||
Socket () ;
|
||||
virtual ~Socket () ;
|
||||
|
||||
static int initSockets();
|
||||
|
||||
int getHandle () const { return handle; }
|
||||
void setHandle (int handle) ;
|
||||
|
||||
bool open ( bool stream=true ) ;
|
||||
void close ( void ) ;
|
||||
int bind ( const char* host, int port ) ;
|
||||
int listen ( int backlog ) ;
|
||||
int accept ( IPAddress* addr ) ;
|
||||
int connect ( const char* host, int port ) ;
|
||||
int send ( const void * buffer, int size, int flags = 0 ) ;
|
||||
int sendto ( const void * buffer, int size, int flags, const IPAddress* to ) ;
|
||||
int recv ( void * buffer, int size, int flags = 0 ) ;
|
||||
int recvfrom ( void * buffer, int size, int flags, IPAddress* from ) ;
|
||||
|
||||
void setBlocking ( bool blocking ) ;
|
||||
void setBroadcast ( bool broadcast ) ;
|
||||
|
||||
static bool isNonBlockingError () ;
|
||||
|
||||
static int select ( Socket** reads, Socket** writes, int timeout ) ;
|
||||
} ;
|
||||
|
||||
//const char* netFormat ( const char* fmt, ... ) ;
|
||||
|
||||
} // of namespace simgear
|
||||
|
||||
#endif // SG_IO_SOCKET_HXX
|
||||
|
||||
@@ -31,20 +31,25 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <cstring>
|
||||
#include <cstdlib> // for system()
|
||||
|
||||
#include <vector>
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include <simgear/bucket/newbucket.hxx>
|
||||
#include <simgear/misc/sg_path.hxx>
|
||||
#include <simgear/math/SGGeometry.hxx>
|
||||
|
||||
#include "lowlevel.hxx"
|
||||
#include "sg_binobj.hxx"
|
||||
|
||||
|
||||
SG_USING_STD( string );
|
||||
SG_USING_STD( vector );
|
||||
|
||||
using std::string;
|
||||
using std::vector;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
enum sgObjectTypes {
|
||||
SG_BOUNDING_SPHERE = 0,
|
||||
@@ -113,51 +118,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// calculate the center of a list of points, by taking the halfway
|
||||
// point between the min and max points.
|
||||
Point3D sgCalcCenter( point_list& wgs84_nodes ) {
|
||||
Point3D p, min, max;
|
||||
|
||||
if ( wgs84_nodes.size() ) {
|
||||
min = max = wgs84_nodes[0];
|
||||
} else {
|
||||
min = max = Point3D( 0 );
|
||||
}
|
||||
|
||||
for ( int i = 0; i < (int)wgs84_nodes.size(); ++i ) {
|
||||
p = wgs84_nodes[i];
|
||||
|
||||
if ( p.x() < min.x() ) { min.setx( p.x() ); }
|
||||
if ( p.y() < min.y() ) { min.sety( p.y() ); }
|
||||
if ( p.z() < min.z() ) { min.setz( p.z() ); }
|
||||
|
||||
if ( p.x() > max.x() ) { max.setx( p.x() ); }
|
||||
if ( p.y() > max.y() ) { max.sety( p.y() ); }
|
||||
if ( p.z() > max.z() ) { max.setz( p.z() ); }
|
||||
}
|
||||
|
||||
return ( min + max ) / 2.0;
|
||||
}
|
||||
|
||||
// calculate the bounding sphere. Center is the center of the
|
||||
// tile and zero elevation
|
||||
double sgCalcBoundingRadius( Point3D center, point_list& wgs84_nodes ) {
|
||||
double dist_squared;
|
||||
double radius_squared = 0;
|
||||
|
||||
for ( int i = 0; i < (int)wgs84_nodes.size(); ++i ) {
|
||||
dist_squared = center.distance3Dsquared( wgs84_nodes[i] );
|
||||
if ( dist_squared > radius_squared ) {
|
||||
radius_squared = dist_squared;
|
||||
}
|
||||
}
|
||||
|
||||
return sqrt(radius_squared);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// read object properties
|
||||
static void read_object( gzFile fp,
|
||||
int obj_type,
|
||||
@@ -174,7 +134,7 @@ static void read_object( gzFile fp,
|
||||
int idx_size;
|
||||
bool do_vertices, do_normals, do_colors, do_texcoords;
|
||||
int j, k, idx;
|
||||
static sgSimpleBuffer buf( 32768 ); // 32 Kb
|
||||
sgSimpleBuffer buf( 32768 ); // 32 Kb
|
||||
char material[256];
|
||||
|
||||
// default values
|
||||
@@ -280,13 +240,13 @@ static void read_object( gzFile fp,
|
||||
|
||||
// read a binary file and populate the provided structures.
|
||||
bool SGBinObject::read_bin( const string& file ) {
|
||||
Point3D p;
|
||||
SGVec3d p;
|
||||
int i, j, k;
|
||||
unsigned int nbytes;
|
||||
static sgSimpleBuffer buf( 32768 ); // 32 Kb
|
||||
sgSimpleBuffer buf( 32768 ); // 32 Kb
|
||||
|
||||
// zero out structures
|
||||
gbs_center = Point3D( 0 );
|
||||
gbs_center = SGVec3d(0, 0, 0);
|
||||
gbs_radius = 0.0;
|
||||
|
||||
wgs84_nodes.clear();
|
||||
@@ -322,7 +282,7 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
string filegz = file + ".gz";
|
||||
if ( (fp = gzopen( filegz.c_str(), "rb" )) == NULL ) {
|
||||
SG_LOG( SG_EVENT, SG_ALERT,
|
||||
"ERROR: opening " << file << " or " << filegz << "for reading!");
|
||||
"ERROR: opening " << file << " or " << filegz << " for reading!");
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -364,18 +324,32 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
#endif
|
||||
|
||||
// read number of top level objects
|
||||
short nobjects;
|
||||
sgReadShort( fp, &nobjects );
|
||||
unsigned short nobjects;
|
||||
if ( version >= 7 ) {
|
||||
sgReadUShort( fp, &nobjects );
|
||||
} else {
|
||||
short tmp;
|
||||
sgReadShort( fp, &tmp );
|
||||
nobjects = tmp;
|
||||
}
|
||||
// cout << "Total objects to read = " << nobjects << endl;
|
||||
|
||||
// read in objects
|
||||
for ( i = 0; i < nobjects; ++i ) {
|
||||
// read object header
|
||||
char obj_type;
|
||||
short nproperties, nelements;
|
||||
unsigned short nproperties, nelements;
|
||||
sgReadChar( fp, &obj_type );
|
||||
sgReadShort( fp, &nproperties );
|
||||
sgReadShort( fp, &nelements );
|
||||
if ( version >= 7 ) {
|
||||
sgReadUShort( fp, &nproperties );
|
||||
sgReadUShort( fp, &nelements );
|
||||
} else {
|
||||
short tmp;
|
||||
sgReadShort( fp, &tmp );
|
||||
nproperties = tmp;
|
||||
sgReadShort( fp, &tmp );
|
||||
nelements = tmp;
|
||||
}
|
||||
|
||||
// cout << "object " << i << " = " << (int)obj_type << " props = "
|
||||
// << nproperties << " elements = " << nelements << endl;
|
||||
@@ -407,7 +381,7 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
sgEndianSwap( (uint64_t *)&(dptr[1]) );
|
||||
sgEndianSwap( (uint64_t *)&(dptr[2]) );
|
||||
}
|
||||
gbs_center = Point3D( dptr[0], dptr[1], dptr[2] );
|
||||
gbs_center = SGVec3d( dptr[0], dptr[1], dptr[2] );
|
||||
// cout << "Center = " << gbs_center << endl;
|
||||
ptr += sizeof(double) * 3;
|
||||
|
||||
@@ -447,7 +421,7 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
sgEndianSwap( (uint32_t *)&(fptr[1]) );
|
||||
sgEndianSwap( (uint32_t *)&(fptr[2]) );
|
||||
}
|
||||
wgs84_nodes.push_back( Point3D(fptr[0], fptr[1], fptr[2]) );
|
||||
wgs84_nodes.push_back( SGVec3d(fptr[0], fptr[1], fptr[2]) );
|
||||
fptr += 3;
|
||||
}
|
||||
}
|
||||
@@ -481,7 +455,8 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
sgEndianSwap( (uint32_t *)&(fptr[2]) );
|
||||
sgEndianSwap( (uint32_t *)&(fptr[3]) );
|
||||
}
|
||||
colors.push_back( Point3D( fptr[0], fptr[1], fptr[2] ) );
|
||||
SGVec4f color( fptr[0], fptr[1], fptr[2], fptr[3] );
|
||||
colors.push_back( color );
|
||||
fptr += 4;
|
||||
}
|
||||
}
|
||||
@@ -508,14 +483,11 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
int count = nbytes / 3;
|
||||
normals.reserve( count );
|
||||
for ( k = 0; k < count; ++k ) {
|
||||
sgdVec3 normal;
|
||||
sgdSetVec3( normal,
|
||||
(ptr[0]) / 127.5 - 1.0,
|
||||
(ptr[1]) / 127.5 - 1.0,
|
||||
(ptr[2]) / 127.5 - 1.0 );
|
||||
sgdNormalizeVec3( normal );
|
||||
SGVec3f normal((ptr[0]) / 127.5 - 1.0,
|
||||
(ptr[1]) / 127.5 - 1.0,
|
||||
(ptr[2]) / 127.5 - 1.0);
|
||||
|
||||
normals.push_back(Point3D(normal[0], normal[1], normal[2]));
|
||||
normals.push_back(normalize(normal));
|
||||
ptr += 3;
|
||||
}
|
||||
}
|
||||
@@ -547,7 +519,7 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
sgEndianSwap( (uint32_t *)&(fptr[0]) );
|
||||
sgEndianSwap( (uint32_t *)&(fptr[1]) );
|
||||
}
|
||||
texcoords.push_back( Point3D( fptr[0], fptr[1], 0 ) );
|
||||
texcoords.push_back( SGVec2f( fptr[0], fptr[1] ) );
|
||||
fptr += 2;
|
||||
}
|
||||
}
|
||||
@@ -612,10 +584,6 @@ bool SGBinObject::read_bin( const string& file ) {
|
||||
bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
const SGBucket& b )
|
||||
{
|
||||
Point3D p;
|
||||
sgVec2 t;
|
||||
sgVec3 pt;
|
||||
sgVec4 color;
|
||||
int i, j;
|
||||
unsigned char idx_mask;
|
||||
int idx_size;
|
||||
@@ -655,7 +623,7 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
string material;
|
||||
int start;
|
||||
int end;
|
||||
short nobjects = 0;
|
||||
unsigned short nobjects = 0;
|
||||
nobjects++; // for gbs
|
||||
nobjects++; // for vertices
|
||||
nobjects++; // for colors
|
||||
@@ -663,7 +631,7 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
nobjects++; // for texcoords
|
||||
|
||||
// points
|
||||
short npts = 0;
|
||||
unsigned short npts = 0;
|
||||
start = 0; end = 1;
|
||||
while ( start < (int)pt_materials.size() ) {
|
||||
material = pt_materials[start];
|
||||
@@ -677,7 +645,7 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
nobjects += npts;
|
||||
|
||||
// tris
|
||||
short ntris = 0;
|
||||
unsigned short ntris = 0;
|
||||
start = 0; end = 1;
|
||||
while ( start < (int)tri_materials.size() ) {
|
||||
material = tri_materials[start];
|
||||
@@ -691,7 +659,7 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
nobjects += ntris;
|
||||
|
||||
// strips
|
||||
short nstrips = 0;
|
||||
unsigned short nstrips = 0;
|
||||
start = 0; end = 1;
|
||||
while ( start < (int)strip_materials.size() ) {
|
||||
material = strip_materials[start];
|
||||
@@ -705,7 +673,7 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
nobjects += nstrips;
|
||||
|
||||
// fans
|
||||
short nfans = 0;
|
||||
unsigned short nfans = 0;
|
||||
start = 0; end = 1;
|
||||
while ( start < (int)fan_materials.size() ) {
|
||||
material = fan_materials[start];
|
||||
@@ -719,52 +687,43 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
nobjects += nfans;
|
||||
|
||||
cout << "total top level objects = " << nobjects << endl;
|
||||
sgWriteShort( fp, nobjects );
|
||||
sgWriteUShort( fp, nobjects );
|
||||
|
||||
// write bounding sphere
|
||||
sgWriteChar( fp, (char)SG_BOUNDING_SPHERE ); // type
|
||||
sgWriteShort( fp, 0 ); // nproperties
|
||||
sgWriteShort( fp, 1 ); // nelements
|
||||
sgWriteUShort( fp, 0 ); // nproperties
|
||||
sgWriteUShort( fp, 1 ); // nelements
|
||||
|
||||
sgWriteUInt( fp, sizeof(double) * 3 + sizeof(float) ); // nbytes
|
||||
sgdVec3 center;
|
||||
sgdSetVec3( center, gbs_center.x(), gbs_center.y(), gbs_center.z() );
|
||||
sgWritedVec3( fp, center );
|
||||
sgWritedVec3( fp, gbs_center );
|
||||
sgWriteFloat( fp, gbs_radius );
|
||||
|
||||
// dump vertex list
|
||||
sgWriteChar( fp, (char)SG_VERTEX_LIST ); // type
|
||||
sgWriteShort( fp, 0 ); // nproperties
|
||||
sgWriteShort( fp, 1 ); // nelements
|
||||
sgWriteUShort( fp, 0 ); // nproperties
|
||||
sgWriteUShort( fp, 1 ); // nelements
|
||||
sgWriteUInt( fp, wgs84_nodes.size() * sizeof(float) * 3 ); // nbytes
|
||||
for ( i = 0; i < (int)wgs84_nodes.size(); ++i ) {
|
||||
p = wgs84_nodes[i] - gbs_center;
|
||||
sgSetVec3( pt, p.x(), p.y(), p.z() );
|
||||
sgWriteVec3( fp, pt );
|
||||
sgWriteVec3( fp, toVec3f(wgs84_nodes[i] - gbs_center));
|
||||
}
|
||||
|
||||
// dump vertex color list
|
||||
sgWriteChar( fp, (char)SG_COLOR_LIST ); // type
|
||||
sgWriteShort( fp, 0 ); // nproperties
|
||||
sgWriteShort( fp, 1 ); // nelements
|
||||
sgWriteUShort( fp, 0 ); // nproperties
|
||||
sgWriteUShort( fp, 1 ); // nelements
|
||||
sgWriteUInt( fp, colors.size() * sizeof(float) * 4 ); // nbytes
|
||||
for ( i = 0; i < (int)colors.size(); ++i ) {
|
||||
p = colors[i];
|
||||
// Right now we have a place holder for color alpha but we
|
||||
// need to update the interface so the calling program can
|
||||
// provide the info.
|
||||
sgSetVec4( color, p.x(), p.y(), p.z(), 1.0 );
|
||||
sgWriteVec4( fp, color );
|
||||
sgWriteVec4( fp, colors[i]);
|
||||
}
|
||||
|
||||
// dump vertex normal list
|
||||
sgWriteChar( fp, (char)SG_NORMAL_LIST ); // type
|
||||
sgWriteShort( fp, 0 ); // nproperties
|
||||
sgWriteShort( fp, 1 ); // nelements
|
||||
sgWriteUShort( fp, 0 ); // nproperties
|
||||
sgWriteUShort( fp, 1 ); // nelements
|
||||
sgWriteUInt( fp, normals.size() * 3 ); // nbytes
|
||||
char normal[3];
|
||||
for ( i = 0; i < (int)normals.size(); ++i ) {
|
||||
p = normals[i];
|
||||
SGVec3f p = normals[i];
|
||||
normal[0] = (unsigned char)((p.x() + 1.0) * 127.5);
|
||||
normal[1] = (unsigned char)((p.y() + 1.0) * 127.5);
|
||||
normal[2] = (unsigned char)((p.z() + 1.0) * 127.5);
|
||||
@@ -773,13 +732,11 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
|
||||
// dump texture coordinates
|
||||
sgWriteChar( fp, (char)SG_TEXCOORD_LIST ); // type
|
||||
sgWriteShort( fp, 0 ); // nproperties
|
||||
sgWriteShort( fp, 1 ); // nelements
|
||||
sgWriteUShort( fp, 0 ); // nproperties
|
||||
sgWriteUShort( fp, 1 ); // nelements
|
||||
sgWriteUInt( fp, texcoords.size() * sizeof(float) * 2 ); // nbytes
|
||||
for ( i = 0; i < (int)texcoords.size(); ++i ) {
|
||||
p = texcoords[i];
|
||||
sgSetVec2( t, p.x(), p.y() );
|
||||
sgWriteVec2( fp, t );
|
||||
sgWriteVec2( fp, texcoords[i]);
|
||||
}
|
||||
|
||||
// dump point groups if they exist
|
||||
@@ -800,8 +757,8 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
|
||||
// write group headers
|
||||
sgWriteChar( fp, (char)SG_POINTS ); // type
|
||||
sgWriteShort( fp, 2 ); // nproperties
|
||||
sgWriteShort( fp, end - start ); // nelements
|
||||
sgWriteUShort( fp, 2 ); // nproperties
|
||||
sgWriteUShort( fp, end - start ); // nelements
|
||||
|
||||
sgWriteChar( fp, (char)SG_MATERIAL ); // property
|
||||
sgWriteUInt( fp, material.length() ); // nbytes
|
||||
@@ -820,19 +777,20 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
// write strips
|
||||
for ( i = start; i < end; ++i ) {
|
||||
// nbytes
|
||||
sgWriteUInt( fp, pts_v[i].size() * idx_size * sizeof(short) );
|
||||
sgWriteUInt( fp, pts_v[i].size() * idx_size
|
||||
* sizeof(unsigned short) );
|
||||
for ( j = 0; j < (int)pts_v[i].size(); ++j ) {
|
||||
if ( pts_v.size() ) {
|
||||
sgWriteShort( fp, (short)pts_v[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)pts_v[i][j] );
|
||||
}
|
||||
if ( pts_n.size() ) {
|
||||
sgWriteShort( fp, (short)pts_n[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)pts_n[i][j] );
|
||||
}
|
||||
if ( pts_c.size() ) {
|
||||
sgWriteShort( fp, (short)pts_c[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)pts_c[i][j] );
|
||||
}
|
||||
if ( pts_tc.size() ) {
|
||||
sgWriteShort( fp, (short)pts_tc[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)pts_tc[i][j] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -861,8 +819,8 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
|
||||
// write group headers
|
||||
sgWriteChar( fp, (char)SG_TRIANGLE_FACES ); // type
|
||||
sgWriteShort( fp, 2 ); // nproperties
|
||||
sgWriteShort( fp, 1 ); // nelements
|
||||
sgWriteUShort( fp, 2 ); // nproperties
|
||||
sgWriteUShort( fp, 1 ); // nelements
|
||||
|
||||
sgWriteChar( fp, (char)SG_MATERIAL ); // property
|
||||
sgWriteUInt( fp, material.length() ); // nbytes
|
||||
@@ -879,22 +837,23 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
sgWriteChar( fp, idx_mask );
|
||||
|
||||
// nbytes
|
||||
sgWriteUInt( fp, (end - start) * 3 * idx_size * sizeof(short) );
|
||||
sgWriteUInt( fp, (end - start) * 3 * idx_size
|
||||
* sizeof(unsigned short) );
|
||||
|
||||
// write group
|
||||
for ( i = start; i < end; ++i ) {
|
||||
for ( j = 0; j < 3; ++j ) {
|
||||
if ( tris_v.size() ) {
|
||||
sgWriteShort( fp, (short)tris_v[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)tris_v[i][j] );
|
||||
}
|
||||
if ( tris_n.size() ) {
|
||||
sgWriteShort( fp, (short)tris_n[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)tris_n[i][j] );
|
||||
}
|
||||
if ( tris_c.size() ) {
|
||||
sgWriteShort( fp, (short)tris_c[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)tris_c[i][j] );
|
||||
}
|
||||
if ( tris_tc.size() ) {
|
||||
sgWriteShort( fp, (short)tris_tc[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)tris_tc[i][j] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -922,8 +881,8 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
|
||||
// write group headers
|
||||
sgWriteChar( fp, (char)SG_TRIANGLE_STRIPS ); // type
|
||||
sgWriteShort( fp, 2 ); // nproperties
|
||||
sgWriteShort( fp, end - start ); // nelements
|
||||
sgWriteUShort( fp, 2 ); // nproperties
|
||||
sgWriteUShort( fp, end - start ); // nelements
|
||||
|
||||
sgWriteChar( fp, (char)SG_MATERIAL ); // property
|
||||
sgWriteUInt( fp, material.length() ); // nbytes
|
||||
@@ -942,19 +901,20 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
// write strips
|
||||
for ( i = start; i < end; ++i ) {
|
||||
// nbytes
|
||||
sgWriteUInt( fp, strips_v[i].size() * idx_size * sizeof(short));
|
||||
sgWriteUInt( fp, strips_v[i].size() * idx_size
|
||||
* sizeof(unsigned short));
|
||||
for ( j = 0; j < (int)strips_v[i].size(); ++j ) {
|
||||
if ( strips_v.size() ) {
|
||||
sgWriteShort( fp, (short)strips_v[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)strips_v[i][j] );
|
||||
}
|
||||
if ( strips_n.size() ) {
|
||||
sgWriteShort( fp, (short)strips_n[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)strips_n[i][j] );
|
||||
}
|
||||
if ( strips_c.size() ) {
|
||||
sgWriteShort( fp, (short)strips_c[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)strips_c[i][j] );
|
||||
}
|
||||
if ( strips_tc.size() ) {
|
||||
sgWriteShort( fp, (short)strips_tc[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)strips_tc[i][j] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -982,8 +942,8 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
|
||||
// write group headers
|
||||
sgWriteChar( fp, (char)SG_TRIANGLE_FANS ); // type
|
||||
sgWriteShort( fp, 2 ); // nproperties
|
||||
sgWriteShort( fp, end - start ); // nelements
|
||||
sgWriteUShort( fp, 2 ); // nproperties
|
||||
sgWriteUShort( fp, end - start ); // nelements
|
||||
|
||||
sgWriteChar( fp, (char)SG_MATERIAL ); // property
|
||||
sgWriteUInt( fp, material.length() ); // nbytes
|
||||
@@ -1002,19 +962,20 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
// write fans
|
||||
for ( i = start; i < end; ++i ) {
|
||||
// nbytes
|
||||
sgWriteUInt( fp, fans_v[i].size() * idx_size * sizeof(short) );
|
||||
sgWriteUInt( fp, fans_v[i].size() * idx_size
|
||||
* sizeof(unsigned short) );
|
||||
for ( j = 0; j < (int)fans_v[i].size(); ++j ) {
|
||||
if ( fans_v.size() ) {
|
||||
sgWriteShort( fp, (short)fans_v[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)fans_v[i][j] );
|
||||
}
|
||||
if ( fans_n.size() ) {
|
||||
sgWriteShort( fp, (short)fans_n[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)fans_n[i][j] );
|
||||
}
|
||||
if ( fans_c.size() ) {
|
||||
sgWriteShort( fp, (short)fans_c[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)fans_c[i][j] );
|
||||
}
|
||||
if ( fans_tc.size() ) {
|
||||
sgWriteShort( fp, (short)fans_tc[i][j] );
|
||||
sgWriteUShort( fp, (unsigned short)fans_tc[i][j] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1042,7 +1003,6 @@ bool SGBinObject::write_bin( const string& base, const string& name,
|
||||
bool SGBinObject::write_ascii( const string& base, const string& name,
|
||||
const SGBucket& b )
|
||||
{
|
||||
Point3D p;
|
||||
int i, j;
|
||||
|
||||
SGPath file = base + "/" + b.gen_base_path() + "/" + name;
|
||||
@@ -1084,7 +1044,7 @@ bool SGBinObject::write_ascii( const string& base, const string& name,
|
||||
// dump vertex list
|
||||
fprintf(fp, "# vertex list\n");
|
||||
for ( i = 0; i < (int)wgs84_nodes.size(); ++i ) {
|
||||
p = wgs84_nodes[i] - gbs_center;
|
||||
SGVec3d p = wgs84_nodes[i] - gbs_center;
|
||||
|
||||
fprintf(fp, "v %.5f %.5f %.5f\n", p.x(), p.y(), p.z() );
|
||||
}
|
||||
@@ -1092,7 +1052,7 @@ bool SGBinObject::write_ascii( const string& base, const string& name,
|
||||
|
||||
fprintf(fp, "# vertex normal list\n");
|
||||
for ( i = 0; i < (int)normals.size(); ++i ) {
|
||||
p = normals[i];
|
||||
SGVec3f p = normals[i];
|
||||
fprintf(fp, "vn %.5f %.5f %.5f\n", p.x(), p.y(), p.z() );
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
@@ -1100,7 +1060,7 @@ bool SGBinObject::write_ascii( const string& base, const string& name,
|
||||
// dump texture coordinates
|
||||
fprintf(fp, "# texture coordinate list\n");
|
||||
for ( i = 0; i < (int)texcoords.size(); ++i ) {
|
||||
p = texcoords[i];
|
||||
SGVec2f p = texcoords[i];
|
||||
fprintf(fp, "vt %.5f %.5f\n", p.x(), p.y() );
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
@@ -1123,19 +1083,16 @@ bool SGBinObject::write_ascii( const string& base, const string& name,
|
||||
}
|
||||
// cout << "group = " << start << " to " << end - 1 << endl;
|
||||
|
||||
// make a list of points for the group
|
||||
point_list group_nodes;
|
||||
group_nodes.clear();
|
||||
Point3D bs_center;
|
||||
double bs_radius = 0;
|
||||
for ( i = start; i < end; ++i ) {
|
||||
for ( j = 0; j < (int)tris_v[i].size(); ++j ) {
|
||||
group_nodes.push_back( wgs84_nodes[ tris_v[i][j] ] );
|
||||
bs_center = sgCalcCenter( group_nodes );
|
||||
bs_radius = sgCalcBoundingRadius( bs_center, group_nodes );
|
||||
}
|
||||
}
|
||||
|
||||
SGSphered d;
|
||||
for ( i = start; i < end; ++i ) {
|
||||
for ( j = 0; j < (int)tris_v[i].size(); ++j ) {
|
||||
d.expandBy(wgs84_nodes[ tris_v[i][j] ]);
|
||||
}
|
||||
}
|
||||
|
||||
SGVec3d bs_center = d.getCenter();
|
||||
double bs_radius = d.getRadius();
|
||||
|
||||
// write group headers
|
||||
fprintf(fp, "\n");
|
||||
fprintf(fp, "# usemtl %s\n", material.c_str());
|
||||
@@ -1174,18 +1131,16 @@ bool SGBinObject::write_ascii( const string& base, const string& name,
|
||||
}
|
||||
// cout << "group = " << start << " to " << end - 1 << endl;
|
||||
|
||||
// make a list of points for the group
|
||||
point_list group_nodes;
|
||||
group_nodes.clear();
|
||||
Point3D bs_center;
|
||||
double bs_radius = 0;
|
||||
for ( i = start; i < end; ++i ) {
|
||||
for ( j = 0; j < (int)strips_v[i].size(); ++j ) {
|
||||
group_nodes.push_back( wgs84_nodes[ strips_v[i][j] ] );
|
||||
bs_center = sgCalcCenter( group_nodes );
|
||||
bs_radius = sgCalcBoundingRadius( bs_center, group_nodes );
|
||||
}
|
||||
}
|
||||
|
||||
SGSphered d;
|
||||
for ( i = start; i < end; ++i ) {
|
||||
for ( j = 0; j < (int)tris_v[i].size(); ++j ) {
|
||||
d.expandBy(wgs84_nodes[ tris_v[i][j] ]);
|
||||
}
|
||||
}
|
||||
|
||||
SGVec3d bs_center = d.getCenter();
|
||||
double bs_radius = d.getRadius();
|
||||
|
||||
// write group headers
|
||||
fprintf(fp, "\n");
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
#define _SG_BINOBJ_HXX
|
||||
|
||||
|
||||
#include <plib/sg.h>
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
#include <simgear/constants.h>
|
||||
#include <simgear/math/sg_types.hxx>
|
||||
@@ -39,12 +37,12 @@
|
||||
#include <time.h>
|
||||
|
||||
#include <list>
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
|
||||
|
||||
|
||||
/** STL Structure used to store object information */
|
||||
typedef vector < int_list > group_list;
|
||||
typedef std::vector < int_list > group_list;
|
||||
typedef group_list::iterator group_list_iterator;
|
||||
typedef group_list::const_iterator const_group_list_iterator;
|
||||
|
||||
@@ -74,9 +72,9 @@ typedef group_list::const_iterator const_group_list_iterator;
|
||||
*
|
||||
* - prop_typecode: material_name | ???
|
||||
*
|
||||
* - nelements: SHORT (Gives us 65536 which ought to be enough, right?)
|
||||
* - nelements: USHORT (Gives us 65536 which ought to be enough, right?)
|
||||
*
|
||||
* - nproperties: SHORT
|
||||
* - nproperties: USHORT
|
||||
*
|
||||
* - *_typecode: CHAR
|
||||
*
|
||||
@@ -89,13 +87,13 @@ typedef group_list::const_iterator const_group_list_iterator;
|
||||
class SGBinObject {
|
||||
unsigned short version;
|
||||
|
||||
Point3D gbs_center;
|
||||
SGVec3d gbs_center;
|
||||
float gbs_radius;
|
||||
|
||||
point_list wgs84_nodes; // vertex list
|
||||
point_list colors; // color list
|
||||
point_list normals; // normal list
|
||||
point_list texcoords; // texture coordinate list
|
||||
std::vector<SGVec3d> wgs84_nodes; // vertex list
|
||||
std::vector<SGVec4f> colors; // color list
|
||||
std::vector<SGVec3f> normals; // normal list
|
||||
std::vector<SGVec2f> texcoords; // texture coordinate list
|
||||
|
||||
group_list pts_v; // points vertex index
|
||||
group_list pts_n; // points normal index
|
||||
@@ -125,24 +123,26 @@ public:
|
||||
|
||||
inline unsigned short get_version() const { return version; }
|
||||
|
||||
inline const Point3D& get_gbs_center() const { return gbs_center; }
|
||||
inline void set_gbs_center( const Point3D& p ) { gbs_center = p; }
|
||||
inline const SGVec3d& get_gbs_center() const { return gbs_center; }
|
||||
inline void set_gbs_center( const SGVec3d& p ) { gbs_center = p; }
|
||||
|
||||
inline float get_gbs_radius() const { return gbs_radius; }
|
||||
inline void set_gbs_radius( float r ) { gbs_radius = r; }
|
||||
|
||||
inline const point_list& get_wgs84_nodes() const { return wgs84_nodes; }
|
||||
inline void set_wgs84_nodes( const point_list& n ) { wgs84_nodes = n; }
|
||||
|
||||
inline const point_list& get_colors() const { return colors; }
|
||||
inline void set_colors( const point_list& c ) { colors = c; }
|
||||
|
||||
inline const point_list& get_normals() const { return normals; }
|
||||
inline void set_normals( const point_list& n ) { normals = n; }
|
||||
|
||||
inline const point_list& get_texcoords() const { return texcoords; }
|
||||
inline void set_texcoords( const point_list& t ) { texcoords = t; }
|
||||
inline const std::vector<SGVec3d>& get_wgs84_nodes() const
|
||||
{ return wgs84_nodes; }
|
||||
inline void set_wgs84_nodes( const std::vector<SGVec3d>& n )
|
||||
{ wgs84_nodes = n; }
|
||||
|
||||
inline const std::vector<SGVec4f>& get_colors() const { return colors; }
|
||||
inline void set_colors( const std::vector<SGVec4f>& c ) { colors = c; }
|
||||
|
||||
inline const std::vector<SGVec3f>& get_normals() const { return normals; }
|
||||
inline void set_normals( const std::vector<SGVec3f>& n ) { normals = n; }
|
||||
|
||||
inline const std::vector<SGVec2f>& get_texcoords() const { return texcoords; }
|
||||
inline void set_texcoords( const std::vector<SGVec2f>& t ) { texcoords = t; }
|
||||
|
||||
inline const group_list& get_pts_v() const { return pts_v; }
|
||||
inline void set_pts_v( const group_list& g ) { pts_v = g; }
|
||||
inline const group_list& get_pts_n() const { return pts_n; }
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
* @param file input file name
|
||||
* @return result of read
|
||||
*/
|
||||
bool read_bin( const string& file );
|
||||
bool read_bin( const std::string& file );
|
||||
|
||||
/**
|
||||
* Write out the structures to a binary file. We assume that the
|
||||
@@ -205,7 +205,7 @@ public:
|
||||
* @param b bucket for object location
|
||||
* @return result of write
|
||||
*/
|
||||
bool write_bin( const string& base, const string& name, const SGBucket& b );
|
||||
bool write_bin( const std::string& base, const std::string& name, const SGBucket& b );
|
||||
|
||||
/**
|
||||
* Write out the structures to an ASCII file. We assume that the
|
||||
@@ -216,30 +216,8 @@ public:
|
||||
* @param b bucket for object location
|
||||
* @return result of write
|
||||
*/
|
||||
bool write_ascii( const string& base, const string& name,
|
||||
bool write_ascii( const std::string& base, const std::string& name,
|
||||
const SGBucket& b );
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \relates SGBinObject
|
||||
* Calculate the center of a list of points, by taking the halfway
|
||||
* point between the min and max points.
|
||||
* @param wgs84_nodes list of points in wgs84 coordinates
|
||||
* @return center point
|
||||
*/
|
||||
Point3D sgCalcCenter( point_list& wgs84_nodes );
|
||||
|
||||
|
||||
/**
|
||||
* \relates SGBinObject
|
||||
* Calculate the bounding sphere of a set of nodes.
|
||||
* Center is the center of the tile and zero elevation.
|
||||
* @param center center of our bounding radius
|
||||
* @param wgs84_nodes list of points in wgs84 coordinates
|
||||
* @return radius
|
||||
*/
|
||||
double sgCalcBoundingRadius( Point3D center, point_list& wgs84_nodes );
|
||||
|
||||
|
||||
#endif // _SG_BINOBJ_HXX
|
||||
|
||||
@@ -23,24 +23,26 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
#ifdef _WIN32
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
#include <cstring>
|
||||
|
||||
#include <simgear/misc/stdint.hxx>
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
#include "sg_file.hxx"
|
||||
|
||||
SG_USING_STD(string);
|
||||
using std::string;
|
||||
|
||||
|
||||
SGFile::SGFile( const string &file) {
|
||||
SGFile::SGFile(const string &file, int repeat_)
|
||||
: file_name(file), fp(-1), eof_flag(true), repeat(repeat_), iteration(0)
|
||||
{
|
||||
set_type( sgFileType );
|
||||
file_name = file;
|
||||
eof_flag = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +55,7 @@ bool SGFile::open( const SGProtocolDir d ) {
|
||||
set_dir( d );
|
||||
|
||||
if ( get_dir() == SG_IO_OUT ) {
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
#ifdef _WIN32
|
||||
int mode = 00666;
|
||||
#else
|
||||
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
|
||||
@@ -82,7 +84,20 @@ int SGFile::read( char *buf, int length ) {
|
||||
// read a chunk
|
||||
ssize_t result = ::read( fp, buf, length );
|
||||
if ( length > 0 && result == 0 ) {
|
||||
eof_flag = true;
|
||||
if (repeat < 0 || iteration < repeat - 1) {
|
||||
iteration++;
|
||||
// loop reading the file, unless it is empty
|
||||
off_t fileLen = ::lseek(fp, 0, SEEK_CUR);
|
||||
if (fileLen == 0) {
|
||||
eof_flag = true;
|
||||
return 0;
|
||||
} else {
|
||||
::lseek(fp, 0, SEEK_SET);
|
||||
return ::read(fp, buf, length);
|
||||
}
|
||||
} else {
|
||||
eof_flag = true;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -96,7 +111,13 @@ int SGFile::readline( char *buf, int length ) {
|
||||
// read a chunk
|
||||
ssize_t result = ::read( fp, buf, length );
|
||||
if ( length > 0 && result == 0 ) {
|
||||
eof_flag = true;
|
||||
if ((repeat < 0 || iteration < repeat - 1) && pos != 0) {
|
||||
iteration++;
|
||||
pos = ::lseek(fp, 0, SEEK_SET);
|
||||
result = ::read(fp, buf, length);
|
||||
} else {
|
||||
eof_flag = true;
|
||||
}
|
||||
}
|
||||
|
||||
// find the end of line and reset position
|
||||
@@ -129,7 +150,7 @@ int SGFile::write( const char *buf, const int length ) {
|
||||
|
||||
// write null terminated string to a file
|
||||
int SGFile::writestring( const char *str ) {
|
||||
int length = strlen( str );
|
||||
int length = std::strlen( str );
|
||||
return write( str, length );
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
#include "iochannel.hxx"
|
||||
|
||||
SG_USING_STD(string);
|
||||
using std::string;
|
||||
|
||||
|
||||
/**
|
||||
@@ -55,6 +55,10 @@ class SGFile : public SGIOChannel {
|
||||
string file_name;
|
||||
int fp;
|
||||
bool eof_flag;
|
||||
// Number of repetitions to play. -1 means loop infinitely.
|
||||
const int repeat;
|
||||
int iteration; // number of current repetition,
|
||||
// starting at 0
|
||||
|
||||
public:
|
||||
|
||||
@@ -64,8 +68,9 @@ public:
|
||||
* name. This file is not opened immediately, but instead will be
|
||||
* opened when the open() method is called.
|
||||
* @param file name of file to open
|
||||
* @param repeat On eof restart at the beginning of the file
|
||||
*/
|
||||
SGFile( const string& file );
|
||||
SGFile( const string& file, int repeat_ = 1 );
|
||||
|
||||
/** Destructor */
|
||||
~SGFile();
|
||||
|
||||
159
simgear/io/sg_netBuffer.cxx
Normal file
159
simgear/io/sg_netBuffer.cxx
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
Copied from PLIB into SimGear
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
For further information visit http://plib.sourceforge.net
|
||||
|
||||
$Id: netBuffer.cxx 1568 2002-09-02 06:05:49Z sjbaker $
|
||||
*/
|
||||
|
||||
#include "sg_netBuffer.hxx"
|
||||
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
namespace simgear {
|
||||
|
||||
NetBuffer::NetBuffer( int _max_length )
|
||||
{
|
||||
length = 0 ;
|
||||
max_length = _max_length ;
|
||||
data = new char [ max_length+1 ] ; //for null terminator
|
||||
}
|
||||
|
||||
NetBuffer::~NetBuffer ()
|
||||
{
|
||||
delete[] data ;
|
||||
}
|
||||
|
||||
void NetBuffer::remove ()
|
||||
{
|
||||
length = 0 ;
|
||||
}
|
||||
|
||||
void NetBuffer::remove (int pos, int n)
|
||||
{
|
||||
assert (pos>=0 && pos<length && (pos+n)<=length) ;
|
||||
//if (pos>=0 && pos<length && (pos+n)<=length)
|
||||
{
|
||||
memmove(&data[pos],&data[pos+n],length-(pos+n)) ;
|
||||
length -= n ;
|
||||
}
|
||||
}
|
||||
|
||||
bool NetBuffer::append (const char* s, int n)
|
||||
{
|
||||
if ((length+n)<=max_length)
|
||||
{
|
||||
memcpy(&data[length],s,n) ;
|
||||
length += n ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
bool NetBuffer::append (int n)
|
||||
{
|
||||
if ((length+n)<=max_length)
|
||||
{
|
||||
length += n ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
NetBufferChannel::NetBufferChannel (int in_buffer_size, int out_buffer_size) :
|
||||
in_buffer (in_buffer_size),
|
||||
out_buffer (out_buffer_size),
|
||||
should_close (0)
|
||||
{ /* empty */
|
||||
}
|
||||
|
||||
void NetBufferChannel::handleClose ( void )
|
||||
{
|
||||
in_buffer.remove () ;
|
||||
out_buffer.remove () ;
|
||||
should_close = 0 ;
|
||||
NetChannel::handleClose () ;
|
||||
}
|
||||
|
||||
|
||||
bool NetBufferChannel::bufferSend (const char* msg, int msg_len)
|
||||
{
|
||||
if ( out_buffer.append(msg,msg_len) )
|
||||
return true ;
|
||||
|
||||
SG_LOG(SG_IO, SG_WARN, "NetBufferChannel: output buffer overflow!" ) ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
void NetBufferChannel::handleBufferRead (NetBuffer& buffer)
|
||||
{
|
||||
/* do something here */
|
||||
buffer.remove();
|
||||
}
|
||||
|
||||
void
|
||||
NetBufferChannel::handleRead (void)
|
||||
{
|
||||
int max_read = in_buffer.getMaxLength() - in_buffer.getLength() ;
|
||||
if (max_read)
|
||||
{
|
||||
char* data = in_buffer.getData() + in_buffer.getLength() ;
|
||||
int num_read = recv (data, max_read) ;
|
||||
if (num_read > 0)
|
||||
{
|
||||
in_buffer.append (num_read) ;
|
||||
//ulSetError ( UL_DEBUG, "netBufferChannel: %d read", num_read ) ;
|
||||
}
|
||||
}
|
||||
if (in_buffer.getLength())
|
||||
{
|
||||
handleBufferRead (in_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NetBufferChannel::handleWrite (void)
|
||||
{
|
||||
if (out_buffer.getLength())
|
||||
{
|
||||
if (isConnected())
|
||||
{
|
||||
int length = out_buffer.getLength() ;
|
||||
if (length>512)
|
||||
length=512;
|
||||
int num_sent = NetChannel::send (
|
||||
out_buffer.getData(), length);
|
||||
if (num_sent > 0)
|
||||
{
|
||||
out_buffer.remove (0, num_sent);
|
||||
//ulSetError ( UL_DEBUG, "netBufferChannel: %d sent", num_sent ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (should_close)
|
||||
{
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
} // of namespace simgear
|
||||
155
simgear/io/sg_netBuffer.hxx
Normal file
155
simgear/io/sg_netBuffer.hxx
Normal file
@@ -0,0 +1,155 @@
|
||||
/*
|
||||
Copied from PLIB into SimGear
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
For further information visit http://plib.sourceforge.net
|
||||
|
||||
$Id: netBuffer.h 1901 2004-03-21 18:19:11Z sjbaker $
|
||||
*/
|
||||
|
||||
/****
|
||||
* NAME
|
||||
* netBuffer - network buffer class
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Clients and servers built on top of netBufferChannel
|
||||
* automatically support pipelining.
|
||||
*
|
||||
* Pipelining refers to a protocol capability. Normally,
|
||||
* a conversation with a server has a back-and-forth
|
||||
* quality to it. The client sends a command, and
|
||||
* waits for the response. If a client needs to send
|
||||
* many commands over a high-latency connection,
|
||||
* waiting for each response can take a long time.
|
||||
*
|
||||
* For example, when sending a mail message to many recipients
|
||||
* with SMTP, the client will send a series of RCPT commands, one
|
||||
* for each recipient. For each of these commands, the server will
|
||||
* send back a reply indicating whether the mailbox specified is
|
||||
* valid. If you want to send a message to several hundred recipients,
|
||||
* this can be rather tedious if the round-trip time for each command
|
||||
* is long. You'd like to be able to send a bunch of RCPT commands
|
||||
* in one batch, and then count off the responses to them as they come.
|
||||
*
|
||||
* I have a favorite visual when explaining the advantages of
|
||||
* pipelining. Imagine each request to the server is a boxcar on a train.
|
||||
* The client is in Los Angeles, and the server is in New York.
|
||||
* Pipelining lets you hook all your cars in one long chain; send
|
||||
* them to New York, where they are filled and sent back to you.
|
||||
* Without pipelining you have to send one car at a time.
|
||||
*
|
||||
* Not all protocols allow pipelining. Not all servers support it;
|
||||
* Sendmail, for example, does not support pipelining because it tends
|
||||
* to fork unpredictably, leaving buffered data in a questionable state.
|
||||
* A recent extension to the SMTP protocol allows a server to specify
|
||||
* whether it supports pipelining. HTTP/1.1 explicitly requires that
|
||||
* a server support pipelining.
|
||||
*
|
||||
* NOTES
|
||||
* When a user passes in a buffer object, it belongs to
|
||||
* the user. When the library gives a buffer to the user,
|
||||
* the user should copy it.
|
||||
*
|
||||
* AUTHORS
|
||||
* Sam Rushing <rushing@nightmare.com> - original version for Medusa
|
||||
* Dave McClurg <dpm@efn.org> - modified for use in PLIB
|
||||
*
|
||||
* CREATION DATE
|
||||
* Dec-2000
|
||||
*
|
||||
****/
|
||||
|
||||
#ifndef SG_NET_BUFFER_H
|
||||
#define SG_NET_BUFFER_H
|
||||
|
||||
#include <simgear/io/sg_netChannel.hxx>
|
||||
|
||||
namespace simgear
|
||||
{
|
||||
|
||||
// ===========================================================================
|
||||
// NetBuffer
|
||||
// ===========================================================================
|
||||
|
||||
class NetBuffer
|
||||
{
|
||||
protected:
|
||||
int length ;
|
||||
int max_length ;
|
||||
char* data ;
|
||||
|
||||
public:
|
||||
NetBuffer( int _max_length );
|
||||
~NetBuffer ();
|
||||
int getLength() const { return length ; }
|
||||
int getMaxLength() const { return max_length ; }
|
||||
|
||||
/*
|
||||
** getData() returns a pointer to the data
|
||||
** Note: a zero (0) byte is appended for convenience
|
||||
** but the data may have internal zero (0) bytes already
|
||||
*/
|
||||
char* getData() { data [length] = 0 ; return data ; }
|
||||
const char* getData() const { ((char*)data) [length] = 0 ; return data ; }
|
||||
|
||||
void remove ();
|
||||
void remove (int pos, int n);
|
||||
bool append (const char* s, int n);
|
||||
bool append (int n);
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
// NetBufferChannel
|
||||
// ===========================================================================
|
||||
|
||||
class NetBufferChannel : public NetChannel
|
||||
{
|
||||
NetBuffer in_buffer;
|
||||
NetBuffer out_buffer;
|
||||
int should_close ;
|
||||
|
||||
virtual bool readable (void)
|
||||
{
|
||||
return (NetChannel::readable() &&
|
||||
(in_buffer.getLength() < in_buffer.getMaxLength()));
|
||||
}
|
||||
|
||||
virtual void handleRead (void) ;
|
||||
|
||||
virtual bool writable (void)
|
||||
{
|
||||
return (out_buffer.getLength() || should_close);
|
||||
}
|
||||
|
||||
virtual void handleWrite (void) ;
|
||||
|
||||
public:
|
||||
|
||||
NetBufferChannel (int in_buffer_size = 4096, int out_buffer_size = 16384);
|
||||
virtual void handleClose ( void );
|
||||
|
||||
void closeWhenDone (void) { should_close = 1 ; }
|
||||
|
||||
virtual bool bufferSend (const char* msg, int msg_len);
|
||||
virtual void handleBufferRead (NetBuffer& buffer);
|
||||
};
|
||||
|
||||
} // namespace simgear
|
||||
|
||||
#endif // SG_NET_BUFFER_H
|
||||
307
simgear/io/sg_netChannel.cxx
Normal file
307
simgear/io/sg_netChannel.cxx
Normal file
@@ -0,0 +1,307 @@
|
||||
/*
|
||||
Copied from PLIB into SimGear
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
For further information visit http://plib.sourceforge.net
|
||||
|
||||
$Id: netChannel.cxx 1906 2004-03-22 19:44:50Z sjbaker $
|
||||
*/
|
||||
|
||||
// TODO:
|
||||
// have all socket-related functions assert that the socket has not
|
||||
// been closed. [a read event may close it, and a write event may try
|
||||
// to write or something...]
|
||||
// Maybe assert valid handle, too?
|
||||
|
||||
#include "sg_netChannel.hxx"
|
||||
|
||||
#include <memory>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
namespace simgear {
|
||||
|
||||
static NetChannel* channels = 0 ;
|
||||
|
||||
NetChannel::NetChannel ()
|
||||
{
|
||||
closed = true ;
|
||||
connected = false ;
|
||||
accepting = false ;
|
||||
write_blocked = false ;
|
||||
should_delete = false ;
|
||||
|
||||
next_channel = channels ;
|
||||
channels = this ;
|
||||
}
|
||||
|
||||
NetChannel::~NetChannel ()
|
||||
{
|
||||
close();
|
||||
|
||||
NetChannel* prev = NULL ;
|
||||
|
||||
for ( NetChannel* ch = channels; ch != NULL;
|
||||
ch = ch -> next_channel )
|
||||
{
|
||||
if (ch == this)
|
||||
{
|
||||
ch = ch -> next_channel ;
|
||||
if ( prev != NULL )
|
||||
prev -> next_channel = ch ;
|
||||
else
|
||||
channels = ch ;
|
||||
next_channel = 0 ;
|
||||
break;
|
||||
}
|
||||
prev = ch ;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NetChannel::setHandle (int handle, bool is_connected)
|
||||
{
|
||||
close () ;
|
||||
Socket::setHandle ( handle ) ;
|
||||
connected = is_connected ;
|
||||
//if ( connected ) this->handleConnect();
|
||||
closed = false ;
|
||||
}
|
||||
|
||||
bool
|
||||
NetChannel::open (void)
|
||||
{
|
||||
close();
|
||||
if (Socket::open(true)) {
|
||||
closed = false ;
|
||||
setBlocking ( false ) ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
int
|
||||
NetChannel::listen ( int backlog )
|
||||
{
|
||||
accepting = true ;
|
||||
return Socket::listen ( backlog ) ;
|
||||
}
|
||||
|
||||
int
|
||||
NetChannel::connect ( const char* host, int port )
|
||||
{
|
||||
int result = Socket::connect ( host, port ) ;
|
||||
if (result == 0) {
|
||||
connected = true ;
|
||||
//this->handleConnect();
|
||||
return 0;
|
||||
} else if (isNonBlockingError ()) {
|
||||
return 0;
|
||||
} else {
|
||||
// some other error condition
|
||||
this->handleError (result);
|
||||
close();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
NetChannel::send (const void * buffer, int size, int flags)
|
||||
{
|
||||
int result = Socket::send (buffer, size, flags);
|
||||
|
||||
if (result == (int)size) {
|
||||
// everything was sent
|
||||
write_blocked = false ;
|
||||
return result;
|
||||
} else if (result >= 0) {
|
||||
// not all of it was sent, but no error
|
||||
write_blocked = true ;
|
||||
return result;
|
||||
} else if (isNonBlockingError ()) {
|
||||
write_blocked = true ;
|
||||
return 0;
|
||||
} else {
|
||||
this->handleError (result);
|
||||
close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
NetChannel::recv (void * buffer, int size, int flags)
|
||||
{
|
||||
int result = Socket::recv (buffer, size, flags);
|
||||
|
||||
if (result > 0) {
|
||||
return result;
|
||||
} else if (result == 0) {
|
||||
close();
|
||||
return 0;
|
||||
} else if (isNonBlockingError ()) {
|
||||
return 0;
|
||||
} else {
|
||||
this->handleError (result);
|
||||
close();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NetChannel::close (void)
|
||||
{
|
||||
if ( !closed )
|
||||
{
|
||||
this->handleClose();
|
||||
|
||||
closed = true ;
|
||||
connected = false ;
|
||||
accepting = false ;
|
||||
write_blocked = false ;
|
||||
}
|
||||
|
||||
Socket::close () ;
|
||||
}
|
||||
|
||||
void
|
||||
NetChannel::handleReadEvent (void)
|
||||
{
|
||||
if (accepting) {
|
||||
if (!connected) {
|
||||
connected = true ;
|
||||
//this->handleConnect();
|
||||
}
|
||||
this->handleAccept();
|
||||
} else if (!connected) {
|
||||
connected = true ;
|
||||
//this->handleConnect();
|
||||
this->handleRead();
|
||||
} else {
|
||||
this->handleRead();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NetChannel::handleWriteEvent (void)
|
||||
{
|
||||
if (!connected) {
|
||||
connected = true ;
|
||||
//this->handleConnect();
|
||||
}
|
||||
write_blocked = false ;
|
||||
this->handleWrite();
|
||||
}
|
||||
|
||||
bool
|
||||
NetChannel::poll (unsigned int timeout)
|
||||
{
|
||||
if (!channels)
|
||||
return false ;
|
||||
|
||||
enum { MAX_SOCKETS = 256 } ;
|
||||
Socket* reads [ MAX_SOCKETS+1 ] ;
|
||||
Socket* writes [ MAX_SOCKETS+1 ] ;
|
||||
Socket* deletes [ MAX_SOCKETS+1 ] ;
|
||||
int nreads = 0 ;
|
||||
int nwrites = 0 ;
|
||||
int ndeletes = 0 ;
|
||||
int nopen = 0 ;
|
||||
NetChannel* ch;
|
||||
for ( ch = channels; ch != NULL; ch = ch -> next_channel )
|
||||
{
|
||||
if ( ch -> should_delete )
|
||||
{
|
||||
assert(ndeletes<MAX_SOCKETS);
|
||||
deletes[ndeletes++] = ch ;
|
||||
}
|
||||
else if ( ! ch -> closed )
|
||||
{
|
||||
nopen++ ;
|
||||
if (ch -> readable()) {
|
||||
assert(nreads<MAX_SOCKETS);
|
||||
reads[nreads++] = ch ;
|
||||
}
|
||||
if (ch -> writable()) {
|
||||
assert(nwrites<MAX_SOCKETS);
|
||||
writes[nwrites++] = ch ;
|
||||
}
|
||||
}
|
||||
}
|
||||
reads[nreads] = NULL ;
|
||||
writes[nwrites] = NULL ;
|
||||
deletes[ndeletes] = NULL ;
|
||||
|
||||
int i ;
|
||||
for ( i=0; deletes[i]; i++ )
|
||||
{
|
||||
ch = (NetChannel*)deletes[i];
|
||||
delete ch ;
|
||||
}
|
||||
|
||||
if (!nopen)
|
||||
return false ;
|
||||
if (!nreads && !nwrites)
|
||||
return true ; //hmmm- should we shutdown?
|
||||
|
||||
Socket::select (reads, writes, timeout) ;
|
||||
|
||||
for ( i=0; reads[i]; i++ )
|
||||
{
|
||||
ch = (NetChannel*)reads[i];
|
||||
if ( ! ch -> closed )
|
||||
ch -> handleReadEvent();
|
||||
}
|
||||
|
||||
for ( i=0; writes[i]; i++ )
|
||||
{
|
||||
ch = (NetChannel*)writes[i];
|
||||
if ( ! ch -> closed )
|
||||
ch -> handleWriteEvent();
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
void
|
||||
NetChannel::loop (unsigned int timeout)
|
||||
{
|
||||
while ( poll (timeout) ) ;
|
||||
}
|
||||
|
||||
|
||||
void NetChannel::handleRead (void) {
|
||||
SG_LOG(SG_IO, SG_WARN, "Network:" << getHandle() << ": unhandled read");
|
||||
}
|
||||
|
||||
void NetChannel::handleWrite (void) {
|
||||
SG_LOG(SG_IO, SG_WARN, "Network:" << getHandle() << ": unhandled write");
|
||||
}
|
||||
|
||||
void NetChannel::handleAccept (void) {
|
||||
SG_LOG(SG_IO, SG_WARN, "Network:" << getHandle() << ": unhandled accept");
|
||||
}
|
||||
|
||||
void NetChannel::handleError (int error) {
|
||||
SG_LOG(SG_IO, SG_WARN,"Network:" << getHandle() << ": errno: " << strerror(errno) <<"(" << errno << ")");
|
||||
}
|
||||
|
||||
} // of namespace simgear
|
||||
115
simgear/io/sg_netChannel.hxx
Normal file
115
simgear/io/sg_netChannel.hxx
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
NetChannel - copied from PLIB
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
For further information visit http://plib.sourceforge.net
|
||||
|
||||
$Id: netChannel.h 1899 2004-03-21 17:41:07Z sjbaker $
|
||||
*/
|
||||
|
||||
/****
|
||||
* NAME
|
||||
* netChannel - network channel class
|
||||
*
|
||||
* DESCRIPTION
|
||||
* netChannel is adds event-handling to the low-level
|
||||
* netSocket class. Otherwise, it can be treated as
|
||||
* a normal non-blocking socket object.
|
||||
*
|
||||
* The direct interface between the netPoll() loop and
|
||||
* the channel object are the handleReadEvent and
|
||||
* handleWriteEvent methods. These are called
|
||||
* whenever a channel object 'fires' that event.
|
||||
*
|
||||
* The firing of these low-level events can tell us whether
|
||||
* certain higher-level events have taken place, depending on
|
||||
* the timing and state of the connection.
|
||||
*
|
||||
* AUTHORS
|
||||
* Sam Rushing <rushing@nightmare.com> - original version for Medusa
|
||||
* Dave McClurg <dpm@efn.org> - modified for use in PLIB
|
||||
*
|
||||
* CREATION DATE
|
||||
* Dec-2000
|
||||
*
|
||||
****/
|
||||
|
||||
#ifndef SG_NET_CHANNEL_H
|
||||
#define SG_NET_CHANNEL_H
|
||||
|
||||
#include <simgear/io/raw_socket.hxx>
|
||||
|
||||
namespace simgear
|
||||
{
|
||||
|
||||
class NetChannel : public Socket
|
||||
{
|
||||
bool closed, connected, accepting, write_blocked, should_delete ;
|
||||
NetChannel* next_channel ;
|
||||
|
||||
friend bool netPoll (unsigned int timeout);
|
||||
|
||||
public:
|
||||
|
||||
NetChannel () ;
|
||||
virtual ~NetChannel () ;
|
||||
|
||||
void setHandle (int s, bool is_connected = true);
|
||||
bool isConnected () const { return connected; }
|
||||
bool isClosed () const { return closed; }
|
||||
void shouldDelete () { should_delete = true ; }
|
||||
|
||||
// --------------------------------------------------
|
||||
// socket methods
|
||||
// --------------------------------------------------
|
||||
|
||||
bool open ( void ) ;
|
||||
void close ( void ) ;
|
||||
int listen ( int backlog ) ;
|
||||
int connect ( const char* host, int port ) ;
|
||||
int send ( const void * buf, int size, int flags = 0 ) ;
|
||||
int recv ( void * buf, int size, int flags = 0 ) ;
|
||||
|
||||
// poll() eligibility predicates
|
||||
virtual bool readable (void) { return (connected || accepting); }
|
||||
virtual bool writable (void) { return (!connected || write_blocked); }
|
||||
|
||||
// --------------------------------------------------
|
||||
// event handlers
|
||||
// --------------------------------------------------
|
||||
|
||||
void handleReadEvent (void);
|
||||
void handleWriteEvent (void);
|
||||
|
||||
// These are meant to be overridden.
|
||||
virtual void handleClose (void) {
|
||||
}
|
||||
|
||||
virtual void handleRead (void);
|
||||
virtual void handleWrite (void);
|
||||
virtual void handleAccept (void);
|
||||
virtual void handleError (int error);
|
||||
|
||||
static bool poll (unsigned int timeout = 0 ) ;
|
||||
static void loop (unsigned int timeout = 0 ) ;
|
||||
};
|
||||
|
||||
} // of namespace simgear
|
||||
|
||||
#endif // SG_NET_CHANNEL_H
|
||||
138
simgear/io/sg_netChat.cxx
Normal file
138
simgear/io/sg_netChat.cxx
Normal file
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
Copied from PLIB into SimGear
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
For further information visit http://plib.sourceforge.net
|
||||
|
||||
$Id: NetChat.cxx 2117 2007-09-13 23:21:09Z fayjf $
|
||||
*/
|
||||
|
||||
#include <simgear/io/sg_netChat.hxx>
|
||||
|
||||
#include <cstring> // for strdup
|
||||
|
||||
namespace simgear {
|
||||
|
||||
void
|
||||
NetChat::setTerminator (const char* t)
|
||||
{
|
||||
if (terminator) delete[] terminator;
|
||||
terminator = strdup(t);
|
||||
}
|
||||
|
||||
const char*
|
||||
NetChat::getTerminator (void)
|
||||
{
|
||||
return terminator;
|
||||
}
|
||||
|
||||
// return the size of the largest prefix of needle at the end
|
||||
// of haystack
|
||||
|
||||
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||
|
||||
static int
|
||||
find_prefix_at_end (const NetBuffer& haystack, const char* needle)
|
||||
{
|
||||
const char* hd = haystack.getData();
|
||||
int hl = haystack.getLength();
|
||||
int nl = strlen(needle);
|
||||
|
||||
for (int i = MAX (nl-hl, 0); i < nl; i++) {
|
||||
//if (haystack.compare (needle, hl-(nl-i), nl-i) == 0) {
|
||||
if (memcmp(needle, &hd[hl-(nl-i)], nl-i) == 0) {
|
||||
return (nl-i);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
find_terminator (const NetBuffer& haystack, const char* needle)
|
||||
{
|
||||
if (needle && *needle)
|
||||
{
|
||||
const char* data = haystack.getData();
|
||||
const char* ptr = strstr(data,needle);
|
||||
if (ptr != NULL)
|
||||
return(ptr-data);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool NetChat::push (const char* s)
|
||||
{
|
||||
return bufferSend ( s, strlen(s) ) ;
|
||||
}
|
||||
|
||||
void
|
||||
NetChat::handleBufferRead (NetBuffer& in_buffer)
|
||||
{
|
||||
// Continue to search for terminator in in_buffer,
|
||||
// while calling collect_incoming_data. The while loop is
|
||||
// necessary because we might read several data+terminator combos
|
||||
// with a single recv().
|
||||
|
||||
while (in_buffer.getLength()) {
|
||||
|
||||
// special case where we're not using a terminator
|
||||
if (terminator == 0 || *terminator == 0) {
|
||||
collectIncomingData (in_buffer.getData(),in_buffer.getLength());
|
||||
in_buffer.remove ();
|
||||
return;
|
||||
}
|
||||
|
||||
int terminator_len = strlen(terminator);
|
||||
|
||||
int index = find_terminator ( in_buffer, terminator ) ;
|
||||
|
||||
// 3 cases:
|
||||
// 1) end of buffer matches terminator exactly:
|
||||
// collect data, transition
|
||||
// 2) end of buffer matches some prefix:
|
||||
// collect data to the prefix
|
||||
// 3) end of buffer does not match any prefix:
|
||||
// collect data
|
||||
|
||||
if (index != -1) {
|
||||
// we found the terminator
|
||||
collectIncomingData ( in_buffer.getData(), index ) ;
|
||||
in_buffer.remove (0, index + terminator_len);
|
||||
foundTerminator();
|
||||
} else {
|
||||
// check for a prefix of the terminator
|
||||
int num = find_prefix_at_end (in_buffer, terminator);
|
||||
if (num) {
|
||||
int bl = in_buffer.getLength();
|
||||
// we found a prefix, collect up to the prefix
|
||||
collectIncomingData ( in_buffer.getData(), bl - num ) ;
|
||||
in_buffer.remove (0, bl - num);
|
||||
break;
|
||||
} else {
|
||||
// no prefix, collect it all
|
||||
collectIncomingData (in_buffer.getData(), in_buffer.getLength());
|
||||
in_buffer.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // of namespace simgear
|
||||
|
||||
|
||||
90
simgear/io/sg_netChat.hxx
Normal file
90
simgear/io/sg_netChat.hxx
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
Copied from PLIB into SimGear
|
||||
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 1998,2002 Steve Baker
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
For further information visit http://plib.sourceforge.net
|
||||
|
||||
$Id: netChat.h 1568 2002-09-02 06:05:49Z sjbaker $
|
||||
*/
|
||||
|
||||
/****
|
||||
* NAME
|
||||
* netChat - network chat class
|
||||
*
|
||||
* DESCRIPTION
|
||||
* This class adds support for 'chat' style protocols -
|
||||
* where one side sends a 'command', and the other sends
|
||||
* a response (examples would be the common internet
|
||||
* protocols - smtp, nntp, ftp, etc..).
|
||||
*
|
||||
* The handle_buffer_read() method looks at the input
|
||||
* stream for the current 'terminator' (usually '\r\n'
|
||||
* for single-line responses, '\r\n.\r\n' for multi-line
|
||||
* output), calling found_terminator() on its receipt.
|
||||
*
|
||||
* EXAMPLE
|
||||
* Say you build an nntp client using this class.
|
||||
* At the start of the connection, you'll have
|
||||
* terminator set to '\r\n', in order to process
|
||||
* the single-line greeting. Just before issuing a
|
||||
* 'LIST' command you'll set it to '\r\n.\r\n'.
|
||||
* The output of the LIST command will be accumulated
|
||||
* (using your own 'collect_incoming_data' method)
|
||||
* up to the terminator, and then control will be
|
||||
* returned to you - by calling your found_terminator()
|
||||
*
|
||||
* AUTHORS
|
||||
* Sam Rushing <rushing@nightmare.com> - original version for Medusa
|
||||
* Dave McClurg <dpm@efn.org> - modified for use in PLIB
|
||||
*
|
||||
* CREATION DATE
|
||||
* Dec-2000
|
||||
*
|
||||
****/
|
||||
|
||||
#ifndef SG_NET_CHAT_H
|
||||
#define SG_NET_CHAT_H
|
||||
|
||||
#include <simgear/io/sg_netBuffer.hxx>
|
||||
|
||||
namespace simgear
|
||||
{
|
||||
|
||||
class NetChat : public NetBufferChannel
|
||||
{
|
||||
char* terminator;
|
||||
|
||||
virtual void handleBufferRead (NetBuffer& buffer) ;
|
||||
|
||||
public:
|
||||
|
||||
NetChat () : terminator (0) {}
|
||||
|
||||
void setTerminator (const char* t);
|
||||
const char* getTerminator (void);
|
||||
|
||||
bool push (const char* s);
|
||||
|
||||
virtual void collectIncomingData (const char* s, int n) {}
|
||||
virtual void foundTerminator (void) {}
|
||||
};
|
||||
|
||||
} // of namespace simgear
|
||||
|
||||
#endif // SG_NET_CHAT_H
|
||||
@@ -20,17 +20,19 @@
|
||||
//
|
||||
// $Id$
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
#include <simgear/serial/serial.hxx>
|
||||
|
||||
#include "sg_serial.hxx"
|
||||
|
||||
SG_USING_STD(string);
|
||||
using std::string;
|
||||
|
||||
|
||||
SGSerial::SGSerial( const string& device_name, const string& baud_rate ) :
|
||||
@@ -57,7 +59,7 @@ bool SGSerial::open( const SGProtocolDir d ) {
|
||||
|
||||
// cout << "fd = " << port.fd << endl;
|
||||
|
||||
if ( ! port.set_baud( atoi( baud.c_str() ) ) ) {
|
||||
if ( ! port.set_baud( std::atoi( baud.c_str() ) ) ) {
|
||||
SG_LOG( SG_IO, SG_ALERT, "Error setting baud: " << baud );
|
||||
return false;
|
||||
}
|
||||
@@ -80,7 +82,7 @@ int SGSerial::read( char *buf, int length ) {
|
||||
result = port.read_port( buf_ptr, length - save_len );
|
||||
|
||||
if ( result + save_len == length ) {
|
||||
strncpy( buf, save_buf, length );
|
||||
std::strncpy( buf, save_buf, length );
|
||||
save_len = 0;
|
||||
|
||||
return length;
|
||||
@@ -114,7 +116,7 @@ int SGSerial::readline( char *buf, int length ) {
|
||||
// we found an end of line
|
||||
|
||||
// copy to external buffer
|
||||
strncpy( buf, save_buf, result );
|
||||
std::strncpy( buf, save_buf, result );
|
||||
buf[result] = '\0';
|
||||
SG_LOG( SG_IO, SG_INFO, "fg_serial line = " << buf );
|
||||
|
||||
@@ -142,7 +144,7 @@ int SGSerial::write( const char *buf, const int length ) {
|
||||
|
||||
// write null terminated string to port
|
||||
int SGSerial::writestring( const char *str ) {
|
||||
int length = strlen( str );
|
||||
int length = std::strlen( str );
|
||||
return write( str, length );
|
||||
}
|
||||
|
||||
|
||||
@@ -36,17 +36,11 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
// #ifdef SG_HAVE_STD_INCLUDES
|
||||
// # include <ctime>
|
||||
// #else
|
||||
// # include <time.h>
|
||||
// #endif
|
||||
|
||||
#include <simgear/serial/serial.hxx>
|
||||
|
||||
#include "iochannel.hxx"
|
||||
|
||||
SG_USING_STD(string);
|
||||
using std::string;
|
||||
|
||||
/**
|
||||
* A serial I/O class based on SGIOChannel.
|
||||
|
||||
@@ -27,11 +27,9 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#if defined( sgi )
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#include STL_IOSTREAM
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cstdlib> // for atoi
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
@@ -52,8 +50,8 @@ SGSocket::SGSocket( const string& host, const string& port_,
|
||||
{
|
||||
if (!init)
|
||||
{
|
||||
netInit(NULL, NULL); // plib-1.4.2 compatible
|
||||
init = true;
|
||||
simgear::Socket::initSockets();
|
||||
init = true;
|
||||
}
|
||||
|
||||
if ( style == "tcp" )
|
||||
@@ -298,7 +296,7 @@ SGSocket::readline( char *buf, int length )
|
||||
int i;
|
||||
for ( i = 0; i < save_len && save_buf[i] != '\n'; ++i )
|
||||
;
|
||||
if ( save_buf[i] == '\n' ) {
|
||||
if (( i < save_len ) && ( save_buf[i] == '\n' )) {
|
||||
result = i + 1;
|
||||
} else {
|
||||
// no end of line yet
|
||||
@@ -307,9 +305,16 @@ SGSocket::readline( char *buf, int length )
|
||||
|
||||
// we found an end of line
|
||||
|
||||
// check buffer size
|
||||
int copy_length = result;
|
||||
if (copy_length >= length) {
|
||||
SG_LOG( SG_IO, SG_ALERT,
|
||||
"Alert: readline() has line exceeding the buffer size." );
|
||||
copy_length = length-1;
|
||||
}
|
||||
// copy to external buffer
|
||||
strncpy( buf, save_buf, result );
|
||||
buf[result] = '\0';
|
||||
strncpy( buf, save_buf, copy_length );
|
||||
buf[copy_length] = '\0';
|
||||
|
||||
// shift save buffer
|
||||
//memmove( save_buf+, save_buf+, ? );
|
||||
@@ -326,7 +331,7 @@ SGSocket::readline( char *buf, int length )
|
||||
int
|
||||
SGSocket::write( const char *buf, const int length )
|
||||
{
|
||||
netSocket* s = client == 0 ? &sock : client;
|
||||
simgear::Socket* s = client == 0 ? &sock : client;
|
||||
if (s->getHandle() == -1)
|
||||
{
|
||||
return 0;
|
||||
@@ -384,24 +389,24 @@ SGSocket::nonblock()
|
||||
int
|
||||
SGSocket::poll()
|
||||
{
|
||||
netSocket* readers[2];
|
||||
simgear::Socket* readers[2];
|
||||
|
||||
readers[0] = client != 0 ? client : &sock;
|
||||
readers[1] = 0;
|
||||
|
||||
netSocket* writers[1];
|
||||
simgear::Socket* writers[1];
|
||||
writers[0] = 0;
|
||||
|
||||
int result = netSocket::select( readers, writers, timeout );
|
||||
int result = simgear::Socket::select( readers, writers, timeout );
|
||||
|
||||
if (result > 0 && is_server && client == 0)
|
||||
{
|
||||
// Accept a new client connection
|
||||
netAddress addr;
|
||||
simgear::IPAddress addr;
|
||||
int new_fd = sock.accept( &addr );
|
||||
SG_LOG( SG_IO, SG_INFO, "Accepted connection from "
|
||||
<< addr.getHost() << ":" << addr.getPort() );
|
||||
client = new netSocket();
|
||||
client = new simgear::Socket();
|
||||
client->setHandle( new_fd );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -27,21 +27,13 @@
|
||||
#ifndef _SG_SOCKET_HXX
|
||||
#define _SG_SOCKET_HXX
|
||||
|
||||
|
||||
#ifndef __cplusplus
|
||||
# error This library requires C++
|
||||
#endif
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
|
||||
#include <simgear/math/sg_types.hxx>
|
||||
#include <simgear/io/iochannel.hxx>
|
||||
|
||||
#include <plib/netSocket.h>
|
||||
|
||||
SG_USING_STD(string);
|
||||
#include <simgear/io/raw_socket.hxx>
|
||||
|
||||
#define SG_MAX_SOCKET_QUEUE 32
|
||||
|
||||
@@ -52,14 +44,14 @@ SG_USING_STD(string);
|
||||
class SGSocket : public SGIOChannel {
|
||||
public:
|
||||
private:
|
||||
string hostname;
|
||||
string port_str;
|
||||
std::string hostname;
|
||||
std::string port_str;
|
||||
|
||||
char save_buf[ 2 * SG_IO_MAX_MSG_SIZE ];
|
||||
int save_len;
|
||||
|
||||
netSocket sock;
|
||||
netSocket* client;
|
||||
simgear::Socket sock;
|
||||
simgear::Socket* client;
|
||||
unsigned short port;
|
||||
bool is_tcp;
|
||||
bool is_server;
|
||||
@@ -126,7 +118,7 @@ public:
|
||||
* @param port port number if we care to choose one.
|
||||
* @param style specify "udp" or "tcp"
|
||||
*/
|
||||
SGSocket( const string& host, const string& port, const string& style );
|
||||
SGSocket( const std::string& host, const std::string& port, const std::string& style );
|
||||
|
||||
/** Destructor */
|
||||
~SGSocket();
|
||||
@@ -161,10 +153,10 @@ public:
|
||||
inline void set_timeout(int i) { timeout = i; }
|
||||
|
||||
/** @return the remote host name */
|
||||
inline string get_hostname() const { return hostname; }
|
||||
inline std::string get_hostname() const { return hostname; }
|
||||
|
||||
/** @return the port number (in string form) */
|
||||
inline string get_port_str() const { return port_str; }
|
||||
inline std::string get_port_str() const { return port_str; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -26,14 +26,12 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#if defined( sgi )
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
#include "sg_socket_udp.hxx"
|
||||
|
||||
#include <cstring>
|
||||
#include <cstdlib> // for atoi
|
||||
|
||||
SGSocketUDP::SGSocketUDP( const string& host, const string& port ) :
|
||||
hostname(host),
|
||||
|
||||
@@ -28,20 +28,13 @@
|
||||
#define _SG_SOCKET_UDP_HXX
|
||||
|
||||
|
||||
#ifndef __cplusplus
|
||||
# error This library requires C++
|
||||
#endif
|
||||
|
||||
#include <plib/netSocket.h>
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#include STL_STRING
|
||||
#include <string>
|
||||
|
||||
#include <simgear/math/sg_types.hxx>
|
||||
#include <simgear/io/iochannel.hxx>
|
||||
|
||||
SG_USING_STD(string);
|
||||
#include <simgear/io/raw_socket.hxx>
|
||||
|
||||
/**
|
||||
* A UDP socket I/O class based on SGIOChannel and plib/net.
|
||||
@@ -50,10 +43,10 @@ class SGSocketUDP : public SGIOChannel {
|
||||
|
||||
private:
|
||||
|
||||
netSocket sock;
|
||||
simgear::Socket sock;
|
||||
|
||||
string hostname;
|
||||
string port_str;
|
||||
std::string hostname;
|
||||
std::string port_str;
|
||||
|
||||
char save_buf[ 2 * SG_IO_MAX_MSG_SIZE ];
|
||||
int save_len;
|
||||
@@ -128,10 +121,10 @@ public:
|
||||
bool setBlocking( bool value );
|
||||
|
||||
/** @return the remote host name */
|
||||
inline string get_hostname() const { return hostname; }
|
||||
inline std::string get_hostname() const { return hostname; }
|
||||
|
||||
/** @return the port number (in string form) */
|
||||
inline string get_port_str() const { return port_str; }
|
||||
inline std::string get_port_str() const { return port_str; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -4,8 +4,13 @@
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#define sleep(x) Sleep(x*1000)
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#include STL_IOSTREAM
|
||||
#endif
|
||||
#include <iostream>
|
||||
|
||||
#include "sg_socket.hxx"
|
||||
#include "lowlevel.hxx"
|
||||
@@ -14,8 +19,8 @@ static const int sgEndianTest = 1;
|
||||
#define sgIsLittleEndian (*((char *) &sgEndianTest ) != 0)
|
||||
#define sgIsBigEndian (*((char *) &sgEndianTest ) == 0)
|
||||
|
||||
SG_USING_STD(cout);
|
||||
SG_USING_STD(endl);
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
|
||||
int main() {
|
||||
@@ -44,10 +49,6 @@ int main() {
|
||||
if ( s.readline( buf, 256 ) > 0 ) {
|
||||
cout << "result = " << buf;
|
||||
}
|
||||
#ifdef __MINGW32__
|
||||
Sleep(100);
|
||||
#else
|
||||
sleep(1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user