Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 20 | pmbaty | 1 | #include "vector.h" |
| 2 | #include "harness/trace.h" |
||
| 3 | #include <math.h> |
||
| 4 | |||
| 5 | |||
| 6 | #define BR_MAC2(A, B, C, D) ((A) * (B) + (C) * (D)) |
||
| 7 | #define BR_MAC4(A, B, C, D, E, F, G, H) ((A) * (B) + (C) * (D) + (E) * (F) + (G) * (H)) |
||
| 8 | |||
| 9 | // IDA: void __cdecl BrVector2Copy(br_vector2 *v1, br_vector2 *v2) |
||
| 10 | void BrVector2Copy(br_vector2* v1, br_vector2* v2) { |
||
| 11 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 12 | |||
| 13 | v1->v[0] = v2->v[0]; |
||
| 14 | v1->v[1] = v2->v[1]; |
||
| 15 | } |
||
| 16 | |||
| 17 | // IDA: void __cdecl BrVector2Set(br_vector2 *v1, br_scalar s1, br_scalar s2) |
||
| 18 | void BrVector2Set(br_vector2* v1, br_scalar s1, br_scalar s2) { |
||
| 19 | LOG_TRACE("(%p, %f, %f)", v1, s1, s2); |
||
| 20 | |||
| 21 | v1->v[0] = s1; |
||
| 22 | v1->v[1] = s2; |
||
| 23 | } |
||
| 24 | |||
| 25 | // IDA: void __cdecl BrVector2SetInt(br_vector2 *v1, int i1, int i2) |
||
| 26 | void BrVector2SetInt(br_vector2* v1, int i1, int i2) { |
||
| 27 | LOG_TRACE("(%p, %d, %d)", v1, i1, i2); |
||
| 28 | |||
| 29 | v1->v[0] = BR_SCALAR(i1); |
||
| 30 | v1->v[1] = BR_SCALAR(i2); |
||
| 31 | } |
||
| 32 | |||
| 33 | // IDA: void __cdecl BrVector2SetFloat(br_vector2 *v1, float f1, float f2) |
||
| 34 | void BrVector2SetFloat(br_vector2* v1, float f1, float f2) { |
||
| 35 | LOG_TRACE("(%p, %f, %f)", v1, f1, f2); |
||
| 36 | |||
| 37 | v1->v[0] = f1; |
||
| 38 | v1->v[1] = f2; |
||
| 39 | } |
||
| 40 | |||
| 41 | // IDA: void __cdecl BrVector2Negate(br_vector2 *v1, br_vector2 *v2) |
||
| 42 | void BrVector2Negate(br_vector2* v1, br_vector2* v2) { |
||
| 43 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 44 | |||
| 45 | v1->v[0] = -v2->v[0]; |
||
| 46 | v1->v[1] = -v2->v[1]; |
||
| 47 | } |
||
| 48 | |||
| 49 | // IDA: void __cdecl BrVector2Add(br_vector2 *v1, br_vector2 *v2, br_vector2 *v3) |
||
| 50 | void BrVector2Add(br_vector2* v1, br_vector2* v2, br_vector2* v3) { |
||
| 51 | LOG_TRACE("(%p, %p, %p)", v1, v2, v3); |
||
| 52 | |||
| 53 | v1->v[0] = v2->v[0] + v3->v[0]; |
||
| 54 | v1->v[1] = v2->v[1] + v3->v[1]; |
||
| 55 | } |
||
| 56 | |||
| 57 | // IDA: void __cdecl BrVector2Accumulate(br_vector2 *v1, br_vector2 *v2) |
||
| 58 | void BrVector2Accumulate(br_vector2* v1, br_vector2* v2) { |
||
| 59 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 60 | |||
| 61 | v1->v[0] += v2->v[0]; |
||
| 62 | v1->v[1] += v2->v[1]; |
||
| 63 | } |
||
| 64 | |||
| 65 | // IDA: void __cdecl BrVector2Sub(br_vector2 *v1, br_vector2 *v2, br_vector2 *v3) |
||
| 66 | void BrVector2Sub(br_vector2* v1, br_vector2* v2, br_vector2* v3) { |
||
| 67 | LOG_TRACE("(%p, %p, %p)", v1, v2, v3); |
||
| 68 | |||
| 69 | v1->v[0] = v2->v[0] - v3->v[0]; |
||
| 70 | v1->v[1] = v2->v[1] - v3->v[1]; |
||
| 71 | } |
||
| 72 | |||
| 73 | // IDA: void __cdecl BrVector2Scale(br_vector2 *v1, br_vector2 *v2, br_scalar s) |
||
| 74 | void BrVector2Scale(br_vector2* v1, br_vector2* v2, br_scalar s) { |
||
| 75 | LOG_TRACE("(%p, %p, %f)", v1, v2, s); |
||
| 76 | |||
| 77 | v1->v[0] = v2->v[0] * s; |
||
| 78 | v1->v[1] = v2->v[1] * s; |
||
| 79 | } |
||
| 80 | |||
| 81 | // IDA: void __cdecl BrVector2InvScale(br_vector2 *v1, br_vector2 *v2, br_scalar s) |
||
| 82 | void BrVector2InvScale(br_vector2* v1, br_vector2* v2, br_scalar s) { |
||
| 83 | LOG_TRACE("(%p, %p, %f)", v1, v2, s); |
||
| 84 | |||
| 85 | v1->v[0] = v2->v[0] / s; |
||
| 86 | v1->v[1] = v2->v[1] / s; |
||
| 87 | } |
||
| 88 | |||
| 89 | // IDA: br_scalar __cdecl BrVector2Dot(br_vector2 *v1, br_vector2 *v2) |
||
| 90 | br_scalar BrVector2Dot(br_vector2* v1, br_vector2* v2) { |
||
| 91 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 92 | |||
| 93 | return BR_MAC2(v1->v[0], v2->v[0], v1->v[1], v2->v[1]); |
||
| 94 | } |
||
| 95 | |||
| 96 | // IDA: br_scalar __cdecl BrVector2Length(br_vector2 *v1) |
||
| 97 | br_scalar BrVector2Length(br_vector2* v1) { |
||
| 98 | LOG_TRACE("(%p)", v1); |
||
| 99 | |||
| 100 | return sqrtf(BR_MAC2(v1->v[0], v1->v[0], v1->v[1], v1->v[1])); |
||
| 101 | } |
||
| 102 | |||
| 103 | // IDA: br_scalar __cdecl BrVector2LengthSquared(br_vector2 *v1) |
||
| 104 | br_scalar BrVector2LengthSquared(br_vector2* v1) { |
||
| 105 | LOG_TRACE("(%p)", v1); |
||
| 106 | |||
| 107 | return BR_MAC2(v1->v[0], v1->v[0], v1->v[1], v1->v[1]); |
||
| 108 | } |
||
| 109 | |||
| 110 | // IDA: void __cdecl BrVector3Copy(br_vector3 *v1, br_vector3 *v2) |
||
| 111 | void BrVector3Copy(br_vector3* v1, br_vector3* v2) { |
||
| 112 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 113 | |||
| 114 | v1->v[0] = v2->v[0]; |
||
| 115 | v1->v[1] = v2->v[1]; |
||
| 116 | v1->v[2] = v2->v[2]; |
||
| 117 | } |
||
| 118 | |||
| 119 | // IDA: void __cdecl BrVector3Set(br_vector3 *v1, br_scalar s1, br_scalar s2, br_scalar s3) |
||
| 120 | void BrVector3Set(br_vector3* v1, br_scalar s1, br_scalar s2, br_scalar s3) { |
||
| 121 | LOG_TRACE("(%p, %f, %f, %f)", v1, s1, s2, s3); |
||
| 122 | |||
| 123 | v1->v[0] = s1; |
||
| 124 | v1->v[1] = s2; |
||
| 125 | v1->v[2] = s3; |
||
| 126 | } |
||
| 127 | |||
| 128 | // IDA: void __cdecl BrVector3SetInt(br_vector3 *v1, int i1, int i2, int i3) |
||
| 129 | void BrVector3SetInt(br_vector3* v1, int i1, int i2, int i3) { |
||
| 130 | LOG_TRACE("(%p, %d, %d, %d)", v1, i1, i2, i3); |
||
| 131 | |||
| 132 | v1->v[0] = BR_SCALAR(i1); |
||
| 133 | v1->v[1] = BR_SCALAR(i2); |
||
| 134 | v1->v[2] = BR_SCALAR(i3); |
||
| 135 | } |
||
| 136 | |||
| 137 | // IDA: void __cdecl BrVector3SetFloat(br_vector3 *v1, float f1, float f2, float f3) |
||
| 138 | void BrVector3SetFloat(br_vector3* v1, float f1, float f2, float f3) { |
||
| 139 | LOG_TRACE8("(%p, %f, %f, %f)", v1, f1, f2, f3); |
||
| 140 | |||
| 141 | v1->v[0] = BR_SCALAR(f1); |
||
| 142 | v1->v[1] = BR_SCALAR(f2); |
||
| 143 | v1->v[2] = BR_SCALAR(f3); |
||
| 144 | } |
||
| 145 | |||
| 146 | // IDA: void __cdecl BrVector3Negate(br_vector3 *v1, br_vector3 *v2) |
||
| 147 | void BrVector3Negate(br_vector3* v1, br_vector3* v2) { |
||
| 148 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 149 | |||
| 150 | v1->v[0] = -v2->v[0]; |
||
| 151 | v1->v[1] = -v2->v[1]; |
||
| 152 | v1->v[2] = -v2->v[2]; |
||
| 153 | } |
||
| 154 | |||
| 155 | // IDA: void __cdecl BrVector3Add(br_vector3 *v1, br_vector3 *v2, br_vector3 *v3) |
||
| 156 | void BrVector3Add(br_vector3* v1, br_vector3* v2, br_vector3* v3) { |
||
| 157 | LOG_TRACE("(%p, %p, %p)", v1, v2, v3); |
||
| 158 | |||
| 159 | v1->v[0] = v2->v[0] + v3->v[0]; |
||
| 160 | v1->v[1] = v2->v[1] + v3->v[1]; |
||
| 161 | v1->v[2] = v2->v[2] + v3->v[2]; |
||
| 162 | } |
||
| 163 | |||
| 164 | // IDA: void __cdecl BrVector3Accumulate(br_vector3 *v1, br_vector3 *v2) |
||
| 165 | void BrVector3Accumulate(br_vector3* v1, br_vector3* v2) { |
||
| 166 | LOG_TRACE10("(%p, %p)", v1, v2); |
||
| 167 | |||
| 168 | v1->v[0] += v2->v[0]; |
||
| 169 | v1->v[1] += v2->v[1]; |
||
| 170 | v1->v[2] += v2->v[2]; |
||
| 171 | } |
||
| 172 | |||
| 173 | // IDA: void __cdecl BrVector3Sub(br_vector3 *v1, br_vector3 *v2, br_vector3 *v3) |
||
| 174 | void BrVector3Sub(br_vector3* v1, br_vector3* v2, br_vector3* v3) { |
||
| 175 | LOG_TRACE("(%p, %p, %p)", v1, v2, v3); |
||
| 176 | |||
| 177 | v1->v[0] = v2->v[0] - v3->v[0]; |
||
| 178 | v1->v[1] = v2->v[1] - v3->v[1]; |
||
| 179 | v1->v[2] = v2->v[2] - v3->v[2]; |
||
| 180 | } |
||
| 181 | |||
| 182 | // IDA: void __cdecl BrVector3Scale(br_vector3 *v1, br_vector3 *v2, br_scalar s) |
||
| 183 | void BrVector3Scale(br_vector3* v1, br_vector3* v2, br_scalar s) { |
||
| 184 | LOG_TRACE("(%p, %p, %f)", v1, v2, s); |
||
| 185 | |||
| 186 | v1->v[0] = v2->v[0] * s; |
||
| 187 | v1->v[1] = v2->v[1] * s; |
||
| 188 | v1->v[2] = v2->v[2] * s; |
||
| 189 | } |
||
| 190 | |||
| 191 | // IDA: void __cdecl BrVector3InvScale(br_vector3 *v1, br_vector3 *v2, br_scalar s) |
||
| 192 | void BrVector3InvScale(br_vector3* v1, br_vector3* v2, br_scalar s) { |
||
| 193 | LOG_TRACE("(%p, %p, %f)", v1, v2, s); |
||
| 194 | |||
| 195 | v1->v[0] = v2->v[0] / s; |
||
| 196 | v1->v[1] = v2->v[1] / s; |
||
| 197 | v1->v[2] = v2->v[2] / s; |
||
| 198 | } |
||
| 199 | |||
| 200 | // IDA: br_scalar __cdecl BrVector3Dot(br_vector3 *v1, br_vector3 *v2) |
||
| 201 | br_scalar BrVector3Dot(br_vector3* v1, br_vector3* v2) { |
||
| 202 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 203 | |||
| 204 | return BR_MAC3(v1->v[0], v2->v[0], v1->v[1], v2->v[1], v1->v[2], v2->v[2]); |
||
| 205 | } |
||
| 206 | |||
| 207 | // IDA: void __cdecl BrVector3Cross(br_vector3 *v1, br_vector3 *v2, br_vector3 *v3) |
||
| 208 | void BrVector3Cross(br_vector3* v1, br_vector3* v2, br_vector3* v3) { |
||
| 209 | LOG_TRACE("(%p, %p, %p)", v1, v2, v3); |
||
| 210 | |||
| 211 | v1->v[0] = v2->v[1] * v3->v[2] - v2->v[2] * v3->v[1]; |
||
| 212 | v1->v[1] = v2->v[2] * v3->v[0] - v2->v[0] * v3->v[2]; |
||
| 213 | v1->v[2] = v2->v[0] * v3->v[1] - v2->v[1] * v3->v[0]; |
||
| 214 | } |
||
| 215 | |||
| 216 | // IDA: br_scalar __cdecl BrVector3Length(br_vector3 *v1) |
||
| 217 | br_scalar BrVector3Length(br_vector3* v1) { |
||
| 218 | LOG_TRACE("(%p)", v1); |
||
| 219 | |||
| 220 | return sqrtf(BR_MAC3(v1->v[0], v1->v[0], v1->v[1], v1->v[1], v1->v[2], v1->v[2])); |
||
| 221 | } |
||
| 222 | |||
| 223 | // IDA: br_scalar __cdecl BrVector3LengthSquared(br_vector3 *v1) |
||
| 224 | br_scalar BrVector3LengthSquared(br_vector3* v1) { |
||
| 225 | LOG_TRACE("(%p)", v1); |
||
| 226 | |||
| 227 | return BR_MAC3(v1->v[0], v1->v[0], v1->v[1], v1->v[1], v1->v[2], v1->v[2]); |
||
| 228 | } |
||
| 229 | |||
| 230 | // IDA: void __cdecl BrVector3Normalise(br_vector3 *v1, br_vector3 *v2) |
||
| 231 | void BrVector3Normalise(br_vector3* v1, br_vector3* v2) { |
||
| 232 | br_scalar scale; |
||
| 233 | LOG_TRACE10("(%p, %p)", v1, v2); |
||
| 234 | |||
| 235 | scale = BR_LENGTH3(v2->v[0], v2->v[1], v2->v[2]); |
||
| 236 | |||
| 237 | if (scale > BR_SCALAR_EPSILON * 2) { |
||
| 238 | v1->v[0] = v2->v[0] / scale; |
||
| 239 | v1->v[1] = v2->v[1] / scale; |
||
| 240 | v1->v[2] = v2->v[2] / scale; |
||
| 241 | |||
| 242 | } else { |
||
| 243 | v1->v[0] = BR_SCALAR(1.0); |
||
| 244 | v1->v[1] = BR_SCALAR(0.0); |
||
| 245 | v1->v[2] = BR_SCALAR(0.0); |
||
| 246 | } |
||
| 247 | } |
||
| 248 | |||
| 249 | // IDA: void __cdecl BrVector3NormaliseLP(br_vector3 *v1, br_vector3 *v2) |
||
| 250 | void BrVector3NormaliseLP(br_vector3* v1, br_vector3* v2) { |
||
| 251 | br_scalar scale; |
||
| 252 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 253 | |||
| 254 | scale = 1.f / sqrtf(BR_MAC3(v2->v[0], v2->v[0], v2->v[1], v2->v[1], v2->v[2], v2->v[2])); |
||
| 255 | if (scale != 0.f) { |
||
| 256 | v1->v[0] = v2->v[0] * scale; |
||
| 257 | v1->v[1] = v2->v[1] * scale; |
||
| 258 | v1->v[2] = v2->v[2] * scale; |
||
| 259 | } |
||
| 260 | } |
||
| 261 | |||
| 262 | // IDA: br_scalar __cdecl BrVector4Dot(br_vector4 *v1, br_vector4 *v2) |
||
| 263 | br_scalar BrVector4Dot(br_vector4* v1, br_vector4* v2) { |
||
| 264 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 265 | |||
| 266 | return BR_MAC4(v1->v[0], v2->v[0], v1->v[1], v2->v[1], v1->v[2], v2->v[2], v1->v[3], v2->v[3]); |
||
| 267 | } |
||
| 268 | |||
| 269 | // IDA: void __cdecl BrVector4Copy(br_vector4 *v1, br_vector4 *v2) |
||
| 270 | void BrVector4Copy(br_vector4* v1, br_vector4* v2) { |
||
| 271 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 272 | |||
| 273 | v1->v[0] = v2->v[0]; |
||
| 274 | v1->v[1] = v2->v[1]; |
||
| 275 | v1->v[2] = v2->v[2]; |
||
| 276 | v1->v[3] = v2->v[3]; |
||
| 277 | } |
||
| 278 | |||
| 279 | // IDA: br_scalar __usercall BrFVector2Dot@<ST0>(br_fvector2 *v1@<EAX>, br_vector2 *v2@<EDX>) |
||
| 280 | br_scalar BrFVector2Dot(br_fvector2* v1, br_vector2* v2) { |
||
| 281 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 282 | |||
| 283 | return BR_MAC2(v1->v[0], v2->v[0], v1->v[1], v2->v[1]); |
||
| 284 | } |
||
| 285 | |||
| 286 | // IDA: void __usercall BrFVector3Copy(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>) |
||
| 287 | void BrFVector3Copy(br_fvector3* v1, br_vector3* v2) { |
||
| 288 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 289 | |||
| 290 | v1->v[0] = v2->v[0]; |
||
| 291 | v1->v[1] = v2->v[1]; |
||
| 292 | v1->v[2] = v2->v[2]; |
||
| 293 | } |
||
| 294 | |||
| 295 | // IDA: void __usercall BrVector3ScaleF(br_vector3 *v1@<EAX>, br_fvector3 *v2@<EDX>, br_scalar s) |
||
| 296 | void BrVector3ScaleF(br_vector3* v1, br_fvector3* v2, br_scalar s) { |
||
| 297 | LOG_TRACE("(%p, %p, %f)", v1, v2, s); |
||
| 298 | |||
| 299 | v1->v[0] = v2->v[0] * s; |
||
| 300 | v1->v[1] = v2->v[1] * s; |
||
| 301 | v1->v[2] = v2->v[2] * s; |
||
| 302 | } |
||
| 303 | |||
| 304 | // IDA: br_scalar __usercall BrFVector3Dot@<ST0>(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>) |
||
| 305 | br_scalar BrFVector3Dot(br_fvector3* v1, br_vector3* v2) { |
||
| 306 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 307 | |||
| 308 | return BR_MAC3(v1->v[0], v2->v[0], v1->v[1], v2->v[1], v1->v[2], v2->v[2]); |
||
| 309 | } |
||
| 310 | |||
| 311 | // IDA: void __usercall BrFVector3Normalise(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>) |
||
| 312 | void BrFVector3Normalise(br_fvector3* v1, br_vector3* v2) { |
||
| 313 | br_scalar scale; |
||
| 314 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 315 | |||
| 316 | scale = sqrtf(BR_MAC3(v2->v[0], v2->v[0], v2->v[1], v2->v[1], v2->v[2], v2->v[2])); |
||
| 317 | if (scale != 0.f) { |
||
| 318 | scale = 1.f / scale; |
||
| 319 | v1->v[0] = v2->v[0] * scale; |
||
| 320 | v1->v[1] = v2->v[1] * scale; |
||
| 321 | v1->v[2] = v2->v[2] * scale; |
||
| 322 | } else { |
||
| 323 | v1->v[0] = 1.f; |
||
| 324 | v1->v[1] = 0.f; |
||
| 325 | v1->v[2] = 0.f; |
||
| 326 | } |
||
| 327 | } |
||
| 328 | |||
| 329 | // IDA: void __usercall BrFVector3NormaliseLP(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>) |
||
| 330 | void BrFVector3NormaliseLP(br_fvector3* v1, br_vector3* v2) { |
||
| 331 | br_scalar scale; |
||
| 332 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 333 | |||
| 334 | scale = 1.f / sqrtf(BR_MAC3(v2->v[0], v2->v[0], v2->v[1], v2->v[1], v2->v[2], v2->v[2])); |
||
| 335 | v1->v[0] = v2->v[0] * scale; |
||
| 336 | v1->v[1] = v2->v[1] * scale; |
||
| 337 | v1->v[2] = v2->v[2] * scale; |
||
| 338 | } |
||
| 339 | |||
| 340 | // IDA: void __cdecl BrVector2Normalise(br_vector2 *v1, br_vector2 *v2) |
||
| 341 | void BrVector2Normalise(br_vector2* v1, br_vector2* v2) { |
||
| 342 | br_scalar scale; |
||
| 343 | LOG_TRACE("(%p, %p)", v1, v2); |
||
| 344 | |||
| 345 | scale = sqrtf(BR_MAC2(v2->v[0], v2->v[0], v2->v[1], v2->v[1])); |
||
| 346 | if (scale > 2.3841858e-7f) { |
||
| 347 | scale = 1.f / scale; |
||
| 348 | v1->v[0] = v2->v[0] * scale; |
||
| 349 | v1->v[1] = v2->v[1] * scale; |
||
| 350 | |||
| 351 | } else { |
||
| 352 | v1->v[0] = 1.f; |
||
| 353 | v1->v[1] = 0.f; |
||
| 354 | } |
||
| 355 | } |