فهرست منبع

Moved floatFlip from bgfx to bx.

Branimir Karadžić 8 سال پیش
والد
کامیت
ce5808f572
2فایلهای تغییر یافته به همراه15 افزوده شده و 0 حذف شده
  1. 11 0
      include/bx/inline/math.inl
  2. 4 0
      include/bx/math.h

+ 11 - 0
include/bx/inline/math.inl

@@ -45,6 +45,17 @@ namespace bx
 		return u.f;
 		return u.f;
 	}
 	}
 
 
+	inline uint32_t floatFlip(uint32_t _value)
+	{
+		// Reference:
+		// http://archive.fo/2012.12.08-212402/http://stereopsis.com/radix.html
+		const uint32_t tmp0   = uint32_sra(_value, 31);
+		const uint32_t tmp1   = uint32_neg(tmp0);
+		const uint32_t mask   = uint32_or(tmp1, 0x80000000);
+		const uint32_t result = uint32_xor(_value, mask);
+		return result;
+	}
+
 	inline bool isNan(float _f)
 	inline bool isNan(float _f)
 	{
 	{
 		const uint32_t tmp = floatToBits(_f) & INT32_MAX;
 		const uint32_t tmp = floatToBits(_f) & INT32_MAX;

+ 4 - 0
include/bx/math.h

@@ -9,6 +9,7 @@
 #define BX_FPU_MATH_H_HEADER_GUARD
 #define BX_FPU_MATH_H_HEADER_GUARD
 
 
 #include "bx.h"
 #include "bx.h"
+#include "uint32_t.h"
 
 
 namespace bx
 namespace bx
 {
 {
@@ -61,6 +62,9 @@ namespace bx
 	///
 	///
 	double bitsToDouble(uint64_t _a);
 	double bitsToDouble(uint64_t _a);
 
 
+	///
+	uint32_t floatFlip(uint32_t _value);
+
 	///
 	///
 	bool isNan(float _f);
 	bool isNan(float _f);