diff options
Diffstat (limited to 'linden/indra/llmath')
-rw-r--r-- | linden/indra/llmath/llmath.h | 10 | ||||
-rw-r--r-- | linden/indra/llmath/llrect.h | 4 | ||||
-rwxr-xr-x | linden/indra/llmath/llsdutil_math.h | 70 | ||||
-rw-r--r-- | linden/indra/llmath/llvolume.cpp | 8 | ||||
-rw-r--r-- | linden/indra/llmath/llvolume.h | 10 | ||||
-rw-r--r-- | linden/indra/llmath/v3math.h | 4 |
6 files changed, 92 insertions, 14 deletions
diff --git a/linden/indra/llmath/llmath.h b/linden/indra/llmath/llmath.h index 9f8e539..0de568c 100644 --- a/linden/indra/llmath/llmath.h +++ b/linden/indra/llmath/llmath.h | |||
@@ -35,6 +35,7 @@ | |||
35 | 35 | ||
36 | #include <cmath> | 36 | #include <cmath> |
37 | #include <cstdlib> | 37 | #include <cstdlib> |
38 | #include <complex> | ||
38 | #include "lldefs.h" | 39 | #include "lldefs.h" |
39 | #include "llstl.h" // *TODO: Remove when LLString is gone | 40 | #include "llstl.h" // *TODO: Remove when LLString is gone |
40 | #include "llstring.h" // *TODO: Remove when LLString is gone | 41 | #include "llstring.h" // *TODO: Remove when LLString is gone |
@@ -60,7 +61,9 @@ | |||
60 | #endif | 61 | #endif |
61 | 62 | ||
62 | // Single Precision Floating Point Routines | 63 | // Single Precision Floating Point Routines |
63 | #if _MSC_VER < 1400 | 64 | #ifndef fsqrtf |
65 | #define fsqrtf(x) ((F32)sqrt((F64)(x))) | ||
66 | #endif | ||
64 | #ifndef sqrtf | 67 | #ifndef sqrtf |
65 | #define sqrtf(x) ((F32)sqrt((F64)(x))) | 68 | #define sqrtf(x) ((F32)sqrt((F64)(x))) |
66 | #endif | 69 | #endif |
@@ -81,11 +84,6 @@ | |||
81 | #ifndef powf | 84 | #ifndef powf |
82 | #define powf(x,y) ((F32)pow((F64)(x),(F64)(y))) | 85 | #define powf(x,y) ((F32)pow((F64)(x),(F64)(y))) |
83 | #endif | 86 | #endif |
84 | #endif | ||
85 | |||
86 | #ifndef fsqrtf | ||
87 | #define fsqrtf(x) sqrtf(x) | ||
88 | #endif | ||
89 | 87 | ||
90 | const F32 GRAVITY = -9.8f; | 88 | const F32 GRAVITY = -9.8f; |
91 | 89 | ||
diff --git a/linden/indra/llmath/llrect.h b/linden/indra/llmath/llrect.h index 9eb58db..33070c4 100644 --- a/linden/indra/llmath/llrect.h +++ b/linden/indra/llmath/llrect.h | |||
@@ -229,14 +229,14 @@ public: | |||
229 | return mLeft <= mRight && mBottom <= mTop; | 229 | return mLeft <= mRight && mBottom <= mTop; |
230 | } | 230 | } |
231 | 231 | ||
232 | bool isNull() const | 232 | bool isEmpty() const |
233 | { | 233 | { |
234 | return mLeft == mRight || mBottom == mTop; | 234 | return mLeft == mRight || mBottom == mTop; |
235 | } | 235 | } |
236 | 236 | ||
237 | bool notNull() const | 237 | bool notNull() const |
238 | { | 238 | { |
239 | return !isNull(); | 239 | return !isEmpty(); |
240 | } | 240 | } |
241 | 241 | ||
242 | LLRectBase& unionWith(const LLRectBase &other) | 242 | LLRectBase& unionWith(const LLRectBase &other) |
diff --git a/linden/indra/llmath/llsdutil_math.h b/linden/indra/llmath/llsdutil_math.h new file mode 100755 index 0000000..5b64942 --- /dev/null +++ b/linden/indra/llmath/llsdutil_math.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /** | ||
2 | * @file llsdutil_math.h | ||
3 | * @author Brad | ||
4 | * @date 2009-05-19 | ||
5 | * @brief Utility classes, functions, etc, for using structured data with math classes. | ||
6 | * | ||
7 | * $LicenseInfo:firstyear=2009&license=viewergpl$ | ||
8 | * | ||
9 | * Copyright (c) 2009-2010, Linden Research, Inc. | ||
10 | * | ||
11 | * Second Life Viewer Source Code | ||
12 | * The source code in this file ("Source Code") is provided by Linden Lab | ||
13 | * to you under the terms of the GNU General Public License, version 2.0 | ||
14 | * ("GPL"), unless you have obtained a separate licensing agreement | ||
15 | * ("Other License"), formally executed by you and Linden Lab. Terms of | ||
16 | * the GPL can be found in doc/GPL-license.txt in this distribution, or | ||
17 | * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 | ||
18 | * | ||
19 | * There are special exceptions to the terms and conditions of the GPL as | ||
20 | * it is applied to this Source Code. View the full text of the exception | ||
21 | * in the file doc/FLOSS-exception.txt in this software distribution, or | ||
22 | * online at | ||
23 | * http://secondlifegrid.net/programs/open_source/licensing/flossexception | ||
24 | * | ||
25 | * By copying, modifying or distributing this software, you acknowledge | ||
26 | * that you have read and understood your obligations described above, | ||
27 | * and agree to abide by those obligations. | ||
28 | * | ||
29 | * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO | ||
30 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
31 | * COMPLETENESS OR PERFORMANCE. | ||
32 | * $/LicenseInfo$ | ||
33 | */ | ||
34 | |||
35 | #ifndef LL_LLSDUTIL_MATH_H | ||
36 | #define LL_LLSDUTIL_MATH_H | ||
37 | |||
38 | class LL_COMMON_API LLSD; | ||
39 | |||
40 | // vector3 | ||
41 | class LLVector3; | ||
42 | LLSD ll_sd_from_vector3(const LLVector3& vec); | ||
43 | LLVector3 ll_vector3_from_sd(const LLSD& sd, S32 start_index = 0); | ||
44 | |||
45 | // vector4 | ||
46 | class LLVector4; | ||
47 | LLSD ll_sd_from_vector4(const LLVector4& vec); | ||
48 | LLVector4 ll_vector4_from_sd(const LLSD& sd, S32 start_index = 0); | ||
49 | |||
50 | // vector3d (double) | ||
51 | class LLVector3d; | ||
52 | LLSD ll_sd_from_vector3d(const LLVector3d& vec); | ||
53 | LLVector3d ll_vector3d_from_sd(const LLSD& sd, S32 start_index = 0); | ||
54 | |||
55 | // vector2 | ||
56 | class LLVector2; | ||
57 | LLSD ll_sd_from_vector2(const LLVector2& vec); | ||
58 | LLVector2 ll_vector2_from_sd(const LLSD& sd); | ||
59 | |||
60 | // Quaternion | ||
61 | class LLQuaternion; | ||
62 | LLSD ll_sd_from_quaternion(const LLQuaternion& quat); | ||
63 | LLQuaternion ll_quaternion_from_sd(const LLSD& sd); | ||
64 | |||
65 | // color4 | ||
66 | class LLColor4; | ||
67 | LLSD ll_sd_from_color4(const LLColor4& c); | ||
68 | LLColor4 ll_color4_from_sd(const LLSD& sd); | ||
69 | |||
70 | #endif // LL_LLSDUTIL_MATH_H | ||
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp index b9b9e0b..c4c3f07 100644 --- a/linden/indra/llmath/llvolume.cpp +++ b/linden/indra/llmath/llvolume.cpp | |||
@@ -3376,7 +3376,8 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices, | |||
3376 | std::vector<S32> &segments, | 3376 | std::vector<S32> &segments, |
3377 | const LLVector3& obj_cam_vec, | 3377 | const LLVector3& obj_cam_vec, |
3378 | const LLMatrix4& mat, | 3378 | const LLMatrix4& mat, |
3379 | const LLMatrix3& norm_mat) | 3379 | const LLMatrix3& norm_mat, |
3380 | S32 face_mask) | ||
3380 | { | 3381 | { |
3381 | LLMemType m1(LLMemType::MTYPE_VOLUME); | 3382 | LLMemType m1(LLMemType::MTYPE_VOLUME); |
3382 | 3383 | ||
@@ -3384,12 +3385,17 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices, | |||
3384 | normals.clear(); | 3385 | normals.clear(); |
3385 | segments.clear(); | 3386 | segments.clear(); |
3386 | 3387 | ||
3388 | S32 cur_index = 0; | ||
3387 | //for each face | 3389 | //for each face |
3388 | for (face_list_t::iterator iter = mVolumeFaces.begin(); | 3390 | for (face_list_t::iterator iter = mVolumeFaces.begin(); |
3389 | iter != mVolumeFaces.end(); ++iter) | 3391 | iter != mVolumeFaces.end(); ++iter) |
3390 | { | 3392 | { |
3391 | const LLVolumeFace& face = *iter; | 3393 | const LLVolumeFace& face = *iter; |
3392 | 3394 | ||
3395 | if (!(face_mask & (0x1 << cur_index++))) | ||
3396 | { | ||
3397 | continue; | ||
3398 | } | ||
3393 | if (face.mTypeMask & (LLVolumeFace::CAP_MASK)) { | 3399 | if (face.mTypeMask & (LLVolumeFace::CAP_MASK)) { |
3394 | 3400 | ||
3395 | } | 3401 | } |
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h index 2b1c60d..0b9002f 100644 --- a/linden/indra/llmath/llvolume.h +++ b/linden/indra/llmath/llvolume.h | |||
@@ -905,9 +905,13 @@ public: | |||
905 | // returns number of triangle indeces required for path/profile mesh | 905 | // returns number of triangle indeces required for path/profile mesh |
906 | S32 getNumTriangleIndices() const; | 906 | S32 getNumTriangleIndices() const; |
907 | 907 | ||
908 | void generateSilhouetteVertices(std::vector<LLVector3> &vertices, std::vector<LLVector3> &normals, std::vector<S32> &segments, const LLVector3& view_vec, | 908 | void generateSilhouetteVertices(std::vector<LLVector3> &vertices, |
909 | const LLMatrix4& mat, | 909 | std::vector<LLVector3> &normals, |
910 | const LLMatrix3& norm_mat); | 910 | std::vector<S32> &segments, |
911 | const LLVector3& view_vec, | ||
912 | const LLMatrix4& mat, | ||
913 | const LLMatrix3& norm_mat, | ||
914 | S32 face_index); | ||
911 | 915 | ||
912 | //get the face index of the face that intersects with the given line segment at the point | 916 | //get the face index of the face that intersects with the given line segment at the point |
913 | //closest to start. Moves end to the point of intersection. Returns -1 if no intersection. | 917 | //closest to start. Moves end to the point of intersection. Returns -1 if no intersection. |
diff --git a/linden/indra/llmath/v3math.h b/linden/indra/llmath/v3math.h index 7f96800..8c65d93 100644 --- a/linden/indra/llmath/v3math.h +++ b/linden/indra/llmath/v3math.h | |||
@@ -411,8 +411,8 @@ inline bool operator<(const LLVector3 &a, const LLVector3 &b) | |||
411 | return (a.mV[0] < b.mV[0] | 411 | return (a.mV[0] < b.mV[0] |
412 | || (a.mV[0] == b.mV[0] | 412 | || (a.mV[0] == b.mV[0] |
413 | && (a.mV[1] < b.mV[1] | 413 | && (a.mV[1] < b.mV[1] |
414 | || (a.mV[1] == b.mV[1]) | 414 | || ((a.mV[1] == b.mV[1]) |
415 | && a.mV[2] < b.mV[2]))); | 415 | && a.mV[2] < b.mV[2])))); |
416 | } | 416 | } |
417 | 417 | ||
418 | inline const LLVector3& operator+=(LLVector3 &a, const LLVector3 &b) | 418 | inline const LLVector3& operator+=(LLVector3 &a, const LLVector3 &b) |