18void Vec3::CheckW()
const
20#ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
28#ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
29 #if defined(JPH_USE_SSE)
30 return _mm_shuffle_ps(inValue, inValue, _MM_SHUFFLE(2, 2, 1, 0));
31 #elif defined(JPH_USE_NEON)
32 return JPH_NEON_SHUFFLE_F32x4(inValue, inValue, 0, 1, 2, 2);
35 value.mData[0] = inValue.mData[0];
36 value.mData[1] = inValue.mData[1];
37 value.mData[2] = inValue.mData[2];
38 value.mData[3] = inValue.mData[2];
47 mValue(sFixW(inRHS.mValue))
53#if defined(JPH_USE_SSE)
54 Type x = _mm_load_ss(&inV.
x);
55 Type y = _mm_load_ss(&inV.
y);
56 Type z = _mm_load_ss(&inV.
z);
57 Type xy = _mm_unpacklo_ps(x, y);
58 mValue = _mm_shuffle_ps(xy, z, _MM_SHUFFLE(0, 0, 1, 0));
59#elif defined(JPH_USE_NEON)
60 float32x2_t xy = vld1_f32(&inV.
x);
61 float32x2_t zz = vdup_n_f32(inV.
z);
62 mValue = vcombine_f32(xy, zz);
73#if defined(JPH_USE_SSE)
74 mValue = _mm_set_ps(inZ, inZ, inY, inX);
75#elif defined(JPH_USE_NEON)
76 uint32x2_t xy = vcreate_u32(
static_cast<uint64>(BitCast<uint32>(inX)) | (
static_cast<uint64>(BitCast<uint32>(inY)) << 32));
77 uint32x2_t zz = vreinterpret_u32_f32(vdup_n_f32(inZ));
78 mValue = vreinterpretq_f32_u32(vcombine_u32(xy, zz));
87template<u
int32 SwizzleX, u
int32 SwizzleY, u
int32 SwizzleZ>
90 static_assert(SwizzleX <= 3,
"SwizzleX template parameter out of range");
91 static_assert(SwizzleY <= 3,
"SwizzleY template parameter out of range");
92 static_assert(SwizzleZ <= 3,
"SwizzleZ template parameter out of range");
94#if defined(JPH_USE_SSE)
95 return _mm_shuffle_ps(
mValue,
mValue, _MM_SHUFFLE(SwizzleZ, SwizzleZ, SwizzleY, SwizzleX));
96#elif defined(JPH_USE_NEON)
97 return JPH_NEON_SHUFFLE_F32x4(
mValue,
mValue, SwizzleX, SwizzleY, SwizzleZ, SwizzleZ);
105#if defined(JPH_USE_SSE)
106 return _mm_setzero_ps();
107#elif defined(JPH_USE_NEON)
108 return vdupq_n_f32(0);
110 return Vec3(0, 0, 0);
116#if defined(JPH_USE_SSE)
117 return _mm_set1_ps(inV);
118#elif defined(JPH_USE_NEON)
119 return vdupq_n_f32(inV);
121 return Vec3(inV, inV, inV);
127 return sReplicate(numeric_limits<float>::quiet_NaN());
132#if defined(JPH_USE_SSE)
133 Type v = _mm_loadu_ps(&inV.
x);
134#elif defined(JPH_USE_NEON)
135 Type v = vld1q_f32(&inV.
x);
137 Type v = { inV.
x, inV.
y, inV.
z };
144#if defined(JPH_USE_SSE)
146#elif defined(JPH_USE_NEON)
157#if defined(JPH_USE_SSE)
159#elif defined(JPH_USE_NEON)
170 return sMax(
sMin(inV, inMax), inMin);
175#if defined(JPH_USE_SSE)
176 return _mm_castps_si128(_mm_cmpeq_ps(inV1.
mValue, inV2.
mValue));
177#elif defined(JPH_USE_NEON)
182 inV1.
mF32[1] == inV2.
mF32[1]? 0xffffffffu : 0,
190#if defined(JPH_USE_SSE)
191 return _mm_castps_si128(_mm_cmplt_ps(inV1.
mValue, inV2.
mValue));
192#elif defined(JPH_USE_NEON)
197 inV1.
mF32[1] < inV2.
mF32[1]? 0xffffffffu : 0,
205#if defined(JPH_USE_SSE)
206 return _mm_castps_si128(_mm_cmple_ps(inV1.
mValue, inV2.
mValue));
207#elif defined(JPH_USE_NEON)
212 inV1.
mF32[1] <= inV2.
mF32[1]? 0xffffffffu : 0,
220#if defined(JPH_USE_SSE)
221 return _mm_castps_si128(_mm_cmpgt_ps(inV1.
mValue, inV2.
mValue));
222#elif defined(JPH_USE_NEON)
227 inV1.
mF32[1] > inV2.
mF32[1]? 0xffffffffu : 0,
235#if defined(JPH_USE_SSE)
236 return _mm_castps_si128(_mm_cmpge_ps(inV1.
mValue, inV2.
mValue));
237#elif defined(JPH_USE_NEON)
242 inV1.
mF32[1] >= inV2.
mF32[1]? 0xffffffffu : 0,
250#if defined(JPH_USE_SSE)
256#elif defined(JPH_USE_NEON)
267#if defined(JPH_USE_SSE4_1) && !defined(JPH_PLATFORM_WASM)
270#elif defined(JPH_USE_SSE)
271 __m128 is_set = _mm_castsi128_ps(_mm_srai_epi32(inControl.
mValue, 31));
272 Type v = _mm_or_ps(_mm_and_ps(is_set, inSet.
mValue), _mm_andnot_ps(is_set, inNotSet.
mValue));
274#elif defined(JPH_USE_NEON)
275 Type v = vbslq_f32(vreinterpretq_u32_s32(vshrq_n_s32(vreinterpretq_s32_u32(inControl.
mValue), 31)), inSet.
mValue, inNotSet.
mValue);
279 for (
int i = 0; i < 3; i++)
280 result.
mF32[i] = (inControl.
mU32[i] & 0x80000000u) ? inSet.
mF32[i] : inNotSet.
mF32[i];
281#ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
290#if defined(JPH_USE_SSE)
292#elif defined(JPH_USE_NEON)
293 return vreinterpretq_f32_u32(vorrq_u32(vreinterpretq_u32_f32(inV1.
mValue), vreinterpretq_u32_f32(inV2.
mValue)));
301#if defined(JPH_USE_SSE)
303#elif defined(JPH_USE_NEON)
304 return vreinterpretq_f32_u32(veorq_u32(vreinterpretq_u32_f32(inV1.
mValue), vreinterpretq_u32_f32(inV2.
mValue)));
312#if defined(JPH_USE_SSE)
314#elif defined(JPH_USE_NEON)
315 return vreinterpretq_f32_u32(vandq_u32(vreinterpretq_u32_f32(inV1.
mValue), vreinterpretq_u32_f32(inV2.
mValue)));
328template <
class Random>
331 std::uniform_real_distribution<float> zero_to_one(0.0f, 1.0f);
332 float theta = JPH_PI * zero_to_one(inRandom);
333 float phi = 2.0f * JPH_PI * zero_to_one(inRandom);
344 return (inV2 - *
this).LengthSq() <= inMaxDistSq;
354#if defined(JPH_USE_SSE)
356#elif defined(JPH_USE_NEON)
365#if defined(JPH_USE_SSE)
366 return _mm_mul_ps(
mValue, _mm_set1_ps(inV2));
367#elif defined(JPH_USE_NEON)
368 return vmulq_n_f32(
mValue, inV2);
376#if defined(JPH_USE_SSE)
377 return _mm_mul_ps(_mm_set1_ps(inV1), inV2.
mValue);
378#elif defined(JPH_USE_NEON)
379 return vmulq_n_f32(inV2.
mValue, inV1);
387#if defined(JPH_USE_SSE)
388 return _mm_div_ps(
mValue, _mm_set1_ps(inV2));
389#elif defined(JPH_USE_NEON)
390 return vdivq_f32(
mValue, vdupq_n_f32(inV2));
398#if defined(JPH_USE_SSE)
400#elif defined(JPH_USE_NEON)
403 for (
int i = 0; i < 3; ++i)
405 #ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
414#if defined(JPH_USE_SSE)
416#elif defined(JPH_USE_NEON)
419 for (
int i = 0; i < 3; ++i)
421 #ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
430#if defined(JPH_USE_SSE)
432#elif defined(JPH_USE_NEON)
435 for (
int i = 0; i < 3; ++i)
437 #ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
446#if defined(JPH_USE_SSE)
448#elif defined(JPH_USE_NEON)
457#if defined(JPH_USE_SSE)
459#elif defined(JPH_USE_NEON)
462 for (
int i = 0; i < 3; ++i)
464 #ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
473#if defined(JPH_USE_SSE)
474 return _mm_sub_ps(_mm_setzero_ps(),
mValue);
475#elif defined(JPH_USE_NEON)
476 #ifdef JPH_CROSS_PLATFORM_DETERMINISTIC
477 return vsubq_f32(vdupq_n_f32(0),
mValue);
482 #ifdef JPH_CROSS_PLATFORM_DETERMINISTIC
492#if defined(JPH_USE_SSE)
494#elif defined(JPH_USE_NEON)
503#if defined(JPH_USE_SSE)
505#elif defined(JPH_USE_NEON)
508 for (
int i = 0; i < 3; ++i)
510 #ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
520#if defined(JPH_USE_SSE)
522#elif defined(JPH_USE_NEON)
531#if defined(JPH_USE_SSE)
532 return _mm_shuffle_ps(
mValue,
mValue, _MM_SHUFFLE(0, 0, 0, 0));
533#elif defined(JPH_USE_NEON)
534 return vdupq_laneq_f32(
mValue, 0);
542#if defined(JPH_USE_SSE)
543 return _mm_shuffle_ps(
mValue,
mValue, _MM_SHUFFLE(1, 1, 1, 1));
544#elif defined(JPH_USE_NEON)
545 return vdupq_laneq_f32(
mValue, 1);
553#if defined(JPH_USE_SSE)
554 return _mm_shuffle_ps(
mValue,
mValue, _MM_SHUFFLE(2, 2, 2, 2));
555#elif defined(JPH_USE_NEON)
556 return vdupq_laneq_f32(
mValue, 2);
574#if defined(JPH_USE_AVX512)
576#elif defined(JPH_USE_SSE)
577 return _mm_max_ps(_mm_sub_ps(_mm_setzero_ps(),
mValue),
mValue);
578#elif defined(JPH_USE_NEON)
592#if defined(JPH_USE_SSE)
593 Type t1 = _mm_shuffle_ps(inV2.
mValue, inV2.
mValue, _MM_SHUFFLE(0, 0, 2, 1));
594 t1 = _mm_mul_ps(t1,
mValue);
596 t2 = _mm_mul_ps(t2, inV2.
mValue);
597 Type t3 = _mm_sub_ps(t1, t2);
598 return _mm_shuffle_ps(t3, t3, _MM_SHUFFLE(0, 0, 2, 1));
599#elif defined(JPH_USE_NEON)
601 t1 = vmulq_f32(t1,
mValue);
603 t2 = vmulq_f32(t2, inV2.
mValue);
604 Type t3 = vsubq_f32(t1, t2);
605 return JPH_NEON_SHUFFLE_F32x4(t3, t3, 1, 2, 0, 0);
615#if defined(JPH_USE_SSE4_1)
617#elif defined(JPH_USE_NEON)
619 mul = vsetq_lane_f32(0, mul, 3);
620 return vdupq_n_f32(vaddvq_f32(mul));
623 for (
int i = 0; i < 3; i++)
631#if defined(JPH_USE_SSE4_1)
633#elif defined(JPH_USE_NEON)
635 mul = vsetq_lane_f32(0, mul, 3);
636 return vdupq_n_f32(vaddvq_f32(mul));
639 for (
int i = 0; i < 3; i++)
647#if defined(JPH_USE_SSE4_1)
648 return _mm_cvtss_f32(_mm_dp_ps(
mValue, inV2.
mValue, 0x7f));
649#elif defined(JPH_USE_NEON)
651 mul = vsetq_lane_f32(0, mul, 3);
652 return vaddvq_f32(mul);
655 for (
int i = 0; i < 3; i++)
663#if defined(JPH_USE_SSE4_1)
665#elif defined(JPH_USE_NEON)
667 mul = vsetq_lane_f32(0, mul, 3);
668 return vaddvq_f32(mul);
671 for (
int i = 0; i < 3; i++)
679#if defined(JPH_USE_SSE4_1)
680 return _mm_cvtss_f32(_mm_sqrt_ss(_mm_dp_ps(
mValue,
mValue, 0x7f)));
681#elif defined(JPH_USE_NEON)
683 mul = vsetq_lane_f32(0, mul, 3);
684 float32x2_t sum = vdup_n_f32(vaddvq_f32(mul));
685 return vget_lane_f32(vsqrt_f32(sum), 0);
693#if defined(JPH_USE_SSE)
694 return _mm_sqrt_ps(
mValue);
695#elif defined(JPH_USE_NEON)
696 return vsqrtq_f32(
mValue);
704#if defined(JPH_USE_SSE4_1)
706#elif defined(JPH_USE_NEON)
708 mul = vsetq_lane_f32(0, mul, 3);
709 float32x4_t sum = vdupq_n_f32(vaddvq_f32(mul));
710 return vdivq_f32(
mValue, vsqrtq_f32(sum));
718#if defined(JPH_USE_SSE4_1) && !defined(JPH_PLATFORM_WASM)
723 Type is_zero = _mm_cmple_ps(len_sq, _mm_set1_ps(FLT_MIN));
724#ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
725 if (_mm_movemask_ps(is_zero) == 0xf)
728 return _mm_div_ps(
mValue, _mm_sqrt_ps(len_sq));
730 return _mm_blendv_ps(_mm_div_ps(
mValue, _mm_sqrt_ps(len_sq)), inZeroValue.
mValue, is_zero);
732#elif defined(JPH_USE_NEON)
734 mul = vsetq_lane_f32(0, mul, 3);
735 float32x4_t len_sq = vdupq_n_f32(vaddvq_f32(mul));
736 uint32x4_t is_zero = vcleq_f32(len_sq, vdupq_n_f32(FLT_MIN));
737 return vbslq_f32(is_zero, inZeroValue.
mValue, vdivq_f32(
mValue, vsqrtq_f32(len_sq)));
740 if (len_sq <= FLT_MIN)
743 return *
this / sqrt(len_sq);
749 return abs(
LengthSq() - 1.0f) <= inTolerance;
754#if defined(JPH_USE_AVX512)
755 return (_mm_fpclass_ps_mask(
mValue, 0b10000001) & 0x7) != 0;
756#elif defined(JPH_USE_SSE)
757 return (_mm_movemask_ps(_mm_cmpunord_ps(
mValue,
mValue)) & 0x7) != 0;
758#elif defined(JPH_USE_NEON)
759 uint32x4_t mask = JPH_NEON_UINT32x4(1, 1, 1, 0);
761 return vaddvq_u32(vandq_u32(is_equal, mask)) != 3;
763 return isnan(
mF32[0]) || isnan(
mF32[1]) || isnan(
mF32[2]);
769#if defined(JPH_USE_SSE)
770 _mm_store_ss(&outV->
x,
mValue);
771 Vec3 t = Swizzle<SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_UNUSED>();
772 _mm_store_ss(&outV->
y, t.
mValue);
774 _mm_store_ss(&outV->
z, t.
mValue);
775#elif defined(JPH_USE_NEON)
776 float32x2_t xy = vget_low_f32(
mValue);
777 vst1_f32(&outV->
x, xy);
778 vst1q_lane_f32(&outV->
z,
mValue, 2);
788#if defined(JPH_USE_SSE)
789 return _mm_cvttps_epi32(
mValue);
790#elif defined(JPH_USE_NEON)
791 return vcvtq_u32_f32(
mValue);
799#if defined(JPH_USE_SSE)
801#elif defined(JPH_USE_NEON)
802 return vreinterpretq_u32_f32(
mValue);
804 return *
reinterpret_cast<const UVec4 *
>(
this);
810 Vec3 v =
sMin(
mValue, Swizzle<SWIZZLE_Y, SWIZZLE_UNUSED, SWIZZLE_Z>());
817 Vec3 v =
sMax(
mValue, Swizzle<SWIZZLE_Y, SWIZZLE_UNUSED, SWIZZLE_Z>());
838#if defined(JPH_USE_AVX512)
839 return _mm_fixupimm_ps(
mValue,
mValue, _mm_set1_epi32(0xA9A90A00), 0);
840#elif defined(JPH_USE_SSE)
841 Type minus_one = _mm_set1_ps(-1.0f);
842 Type one = _mm_set1_ps(1.0f);
843 return _mm_or_ps(_mm_and_ps(
mValue, minus_one), one);
844#elif defined(JPH_USE_NEON)
845 Type minus_one = vdupq_n_f32(-1.0f);
846 Type one = vdupq_n_f32(1.0f);
847 return vreinterpretq_f32_u32(vorrq_u32(vandq_u32(vreinterpretq_u32_f32(
mValue), vreinterpretq_u32_f32(minus_one)), vreinterpretq_u32_f32(one)));
849 return Vec3(std::signbit(
mF32[0])? -1.0f : 1.0f,
850 std::signbit(
mF32[1])? -1.0f : 1.0f,
851 std::signbit(
mF32[2])? -1.0f : 1.0f);
#define JPH_SUPPRESS_WARNINGS_STD_BEGIN
Definition Core.h:419
#define JPH_SUPPRESS_WARNINGS_STD_END
Definition Core.h:431
std::uint64_t uint64
Definition Core.h:485
#define JPH_NAMESPACE_END
Definition Core.h:414
std::uint32_t uint32
Definition Core.h:484
#define JPH_NAMESPACE_BEGIN
Definition Core.h:408
#define JPH_MAKE_HASHABLE(type,...)
Definition HashCombine.h:223
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
@ SWIZZLE_Z
Use the Z component.
Definition Swizzle.h:14
@ SWIZZLE_UNUSED
We always use the Z component when we don't specifically want to initialize a value,...
Definition Swizzle.h:16
@ SWIZZLE_Y
Use the Y component.
Definition Swizzle.h:13
Vec3 operator*(float inV1, Vec3Arg inV2)
Definition Vec3.inl:374
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
float y
Definition Float3.h:39
float z
Definition Float3.h:40
float x
Definition Float3.h:38
static JPH_INLINE UVec4 sAnd(UVec4Arg inV1, UVec4Arg inV2)
Logical and (component wise)
Definition UVec4.inl:202
static JPH_INLINE UVec4 sOr(UVec4Arg inV1, UVec4Arg inV2)
Logical or (component wise)
Definition UVec4.inl:174
JPH_INLINE bool TestAllXYZTrue() const
Test if X, Y and Z components are true (true is when highest bit of component is set)
Definition UVec4.inl:413
Type mValue
Definition UVec4.h:211
static JPH_INLINE UVec4 sXor(UVec4Arg inV1, UVec4Arg inV2)
Logical xor (component wise)
Definition UVec4.inl:188
JPH_INLINE Vec4 ReinterpretAsFloat() const
Reinterpret UVec4 as a Vec4 (doesn't change the bits)
Definition UVec4.inl:340
uint32 mU32[4]
Definition UVec4.h:212
JPH_INLINE bool IsClose(Vec3Arg inV2, float inMaxDistSq=1.0e-12f) const
Test if two vectors are close.
Definition Vec3.inl:342
static JPH_INLINE Vec3 sMax(Vec3Arg inV1, Vec3Arg inV2)
Return the maximum of each of the components.
Definition Vec3.inl:155
JPH_INLINE float Dot(Vec3Arg inV2) const
Dot product.
Definition Vec3.inl:645
JPH_INLINE Vec3 Normalized() const
Normalize vector.
Definition Vec3.inl:702
static JPH_INLINE Type sFixW(Type inValue)
Internal helper function that ensures that the Z component is replicated to the W component to preven...
Vec4::Type Type
Definition Vec3.h:27
JPH_INLINE bool operator==(Vec3Arg inV2) const
Comparison.
Definition Vec3.inl:337
JPH_INLINE Vec4 SplatX() const
Replicate the X component to all components.
Definition Vec3.inl:529
static JPH_INLINE Vec3 sMin(Vec3Arg inV1, Vec3Arg inV2)
Return the minimum value of each of the components.
Definition Vec3.inl:142
JPH_INLINE Vec3 Cross(Vec3Arg inV2) const
Cross product.
Definition Vec3.inl:590
JPH_INLINE Vec3 GetNormalizedPerpendicular() const
Get normalized vector that is perpendicular to this vector.
Definition Vec3.inl:822
static Vec3 sRandom(Random &inRandom)
Get random unit vector.
Definition Vec3.inl:329
JPH_INLINE float GetX() const
Get individual components.
Definition Vec3.h:124
JPH_INLINE bool IsNormalized(float inTolerance=1.0e-6f) const
Test if vector is normalized.
Definition Vec3.inl:747
static JPH_INLINE Vec3 sXor(Vec3Arg inV1, Vec3Arg inV2)
Logical xor (component wise)
Definition Vec3.inl:299
JPH_INLINE float Length() const
Length of vector.
Definition Vec3.inl:677
static JPH_INLINE UVec4 sGreaterOrEqual(Vec3Arg inV1, Vec3Arg inV2)
Greater than or equal (component wise)
Definition Vec3.inl:233
JPH_INLINE float ReduceMin() const
Get the minimum of X, Y and Z.
Definition Vec3.inl:808
JPH_INLINE Vec3 & operator-=(Vec3Arg inV2)
Subtract two float vectors (component wise)
Definition Vec3.inl:501
JPH_INLINE float ReduceMax() const
Get the maximum of X, Y and Z.
Definition Vec3.inl:815
static JPH_INLINE UVec4 sLessOrEqual(Vec3Arg inV1, Vec3Arg inV2)
Less than or equal (component wise)
Definition Vec3.inl:203
JPH_INLINE Vec3 operator/(float inV2) const
Divide vector by float.
Definition Vec3.inl:385
friend JPH_INLINE Vec3 operator*(float inV1, Vec3Arg inV2)
Multiply vector with float.
Definition Vec3.inl:374
JPH_INLINE int GetLowestComponentIndex() const
Get index of component with lowest value.
Definition Vec3.inl:562
JPH_INLINE Vec3 & operator/=(float inV2)
Divide vector by float.
Definition Vec3.inl:428
JPH_INLINE Vec4 DotV4(Vec3Arg inV2) const
Dot product, returns the dot product in X, Y, Z and W components.
Definition Vec3.inl:629
JPH_INLINE Vec3 Abs() const
Return the absolute value of each of the components.
Definition Vec3.inl:572
JPH_INLINE Vec3 Reciprocal() const
Reciprocal vector (1 / value) for each of the components.
Definition Vec3.inl:585
JPH_INLINE Vec3 NormalizedOr(Vec3Arg inZeroValue) const
Normalize vector or return inZeroValue if the length of the vector is zero.
Definition Vec3.inl:716
JPH_INLINE Vec3 operator+(Vec3Arg inV2) const
Add two float vectors (component wise)
Definition Vec3.inl:444
JPH_INLINE Vec4 SplatZ() const
Replicate the Z component to all components.
Definition Vec3.inl:551
static JPH_INLINE Vec3 sOr(Vec3Arg inV1, Vec3Arg inV2)
Logical or (component wise)
Definition Vec3.inl:288
static JPH_INLINE UVec4 sGreater(Vec3Arg inV1, Vec3Arg inV2)
Greater than (component wise)
Definition Vec3.inl:218
static JPH_INLINE Vec3 sAnd(Vec3Arg inV1, Vec3Arg inV2)
Logical and (component wise)
Definition Vec3.inl:310
JPH_INLINE void CheckW() const
Internal helper function that checks that W is equal to Z, so e.g. dividing by it should not generate...
static JPH_INLINE Vec3 sUnitSpherical(float inTheta, float inPhi)
Definition Vec3.inl:321
JPH_INLINE UVec4 ToInt() const
Convert each component from a float to an int.
Definition Vec3.inl:786
Type mValue
Definition Vec3.h:286
JPH_INLINE float GetY() const
Definition Vec3.h:125
JPH_INLINE Vec4 SplatY() const
Replicate the Y component to all components.
Definition Vec3.inl:540
JPH_INLINE Vec3 operator-() const
Negate.
Definition Vec3.inl:471
JPH_INLINE void StoreFloat3(Float3 *outV) const
Store 3 floats to memory.
Definition Vec3.inl:767
JPH_INLINE float LengthSq() const
Squared length of vector.
Definition Vec3.inl:661
float mF32[4]
Definition Vec3.h:287
static JPH_INLINE UVec4 sEquals(Vec3Arg inV1, Vec3Arg inV2)
Equals (component wise)
Definition Vec3.inl:173
JPH_INLINE bool IsNearZero(float inMaxDistSq=1.0e-12f) const
Test if vector is near zero.
Definition Vec3.inl:347
static JPH_INLINE Vec3 sZero()
Vector with all zeros.
Definition Vec3.inl:103
static JPH_INLINE UVec4 sLess(Vec3Arg inV1, Vec3Arg inV2)
Less than (component wise)
Definition Vec3.inl:188
static JPH_INLINE Vec3 sReplicate(float inV)
Replicate inV across all components.
Definition Vec3.inl:114
static JPH_INLINE Vec3 sClamp(Vec3Arg inV, Vec3Arg inMin, Vec3Arg inMax)
Clamp a vector between min and max (component wise)
Definition Vec3.inl:168
JPH_INLINE Vec3 & operator*=(float inV2)
Multiply vector with float.
Definition Vec3.inl:396
JPH_INLINE Vec3 & operator+=(Vec3Arg inV2)
Add two float vectors (component wise)
Definition Vec3.inl:455
static JPH_INLINE Vec3 sSelect(Vec3Arg inNotSet, Vec3Arg inSet, UVec4Arg inControl)
Component wise select, returns inNotSet when highest bit of inControl = 0 and inSet when highest bit ...
Definition Vec3.inl:265
JPH_INLINE bool IsNaN() const
Test if vector contains NaN elements.
Definition Vec3.inl:752
JPH_INLINE Vec3 Sqrt() const
Component wise square root.
Definition Vec3.inl:691
JPH_INLINE UVec4 ReinterpretAsInt() const
Reinterpret Vec3 as a UVec4 (doesn't change the bits)
Definition Vec3.inl:797
JPH_INLINE Vec3 DotV(Vec3Arg inV2) const
Dot product, returns the dot product in X, Y and Z components.
Definition Vec3.inl:613
static JPH_INLINE Vec3 sLoadFloat3Unsafe(const Float3 &inV)
Load 3 floats from memory (reads 32 bits extra which it doesn't use)
Definition Vec3.inl:130
JPH_INLINE float GetZ() const
Definition Vec3.h:126
JPH_INLINE Vec3 GetSign() const
Get vector that contains the sign of each element (returns 1.0f if positive, -1.0f if negative)
Definition Vec3.inl:836
static JPH_INLINE Vec3 sNaN()
Vector with all NaN's.
Definition Vec3.inl:125
Vec3()=default
Constructor.
JPH_INLINE int GetHighestComponentIndex() const
Get index of component with highest value.
Definition Vec3.inl:567
static JPH_INLINE Vec3 sFusedMultiplyAdd(Vec3Arg inMul1, Vec3Arg inMul2, Vec3Arg inAdd)
Calculates inMul1 * inMul2 + inAdd.
Definition Vec3.inl:248
JPH_INLINE Vec3 Swizzle() const
Swizzle the elements in inV.
JPH_INLINE float GetX() const
Get individual components.
Definition Vec4.h:113
JPH_INLINE float GetY() const
Definition Vec4.h:114
static JPH_INLINE Vec4 sReplicate(float inV)
Replicate inV across all components.
Definition Vec4.inl:74
void SinCos(Vec4 &outSin, Vec4 &outCos) const
Calculate the sine and cosine for each element of this vector (input in radians)
Definition Vec4.inl:778