The patch for fixing aliasing issues is not required or applicable anymore, due to GLM having fixed the issues. The float distance counting algorithm entered an infinite loop in some cases. The glm-0.9.6.1-ulp.patch addresses this.f41
parent
6357357895
commit
941ede50fd
@ -1,66 +0,0 @@
|
||||
diff -ru glm/glm/gtc/packing.inl glm-aliasfix/glm/gtc/packing.inl
|
||||
--- glm/glm/gtc/packing.inl 2014-02-08 21:28:22.000000000 +0200
|
||||
+++ glm-aliasfix/glm/gtc/packing.inl 2014-06-11 12:29:07.345452993 +0300
|
||||
@@ -35,6 +35,26 @@
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
+ GLM_FUNC_QUALIFIER float float_from_bits_of_uint(uint const u)
|
||||
+ {
|
||||
+ union {
|
||||
+ float as_float;
|
||||
+ uint as_uint;
|
||||
+ } result;
|
||||
+ result.as_uint = u;
|
||||
+ return result.as_float;
|
||||
+ }
|
||||
+
|
||||
+ GLM_FUNC_QUALIFIER glm::uint uint_from_bits_of_float(float const f)
|
||||
+ {
|
||||
+ union {
|
||||
+ float as_float;
|
||||
+ uint as_uint;
|
||||
+ } result;
|
||||
+ result.as_float = f;
|
||||
+ return result.as_uint;
|
||||
+ }
|
||||
+
|
||||
GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 const & f)
|
||||
{
|
||||
// 10 bits => EE EEEFFFFF
|
||||
@@ -145,7 +165,7 @@
|
||||
else if(glm::isinf(x))
|
||||
return 0x1f << 6;
|
||||
|
||||
- return float2packed11(reinterpret_cast<uint&>(x));
|
||||
+ return float2packed11(uint_from_bits_of_float(x));
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x)
|
||||
@@ -158,7 +178,7 @@
|
||||
return ~0;//Inf
|
||||
|
||||
uint result = packed11ToFloat(x);
|
||||
- return reinterpret_cast<float&>(result);
|
||||
+ return float_from_bits_of_uint(result);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x)
|
||||
@@ -170,7 +190,7 @@
|
||||
else if(glm::isinf(x))
|
||||
return 0x1f << 5;
|
||||
|
||||
- return float2packed10(reinterpret_cast<uint&>(x));
|
||||
+ return float2packed10(uint_from_bits_of_float(x));
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x)
|
||||
@@ -183,7 +203,7 @@
|
||||
return ~0;//Inf
|
||||
|
||||
uint result = packed10ToFloat(x);
|
||||
- return reinterpret_cast<float&>(result);
|
||||
+ return float_from_bits_of_uint(result);
|
||||
}
|
||||
|
||||
// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z)
|
@ -0,0 +1,21 @@
|
||||
diff -ru glm/glm/gtc/ulp.inl glm-ulp/glm/gtc/ulp.inl
|
||||
--- glm/glm/gtc/ulp.inl 2014-12-09 21:13:54.000000000 +0200
|
||||
+++ glm-ulp/glm/gtc/ulp.inl 2015-01-06 16:29:47.497932633 +0200
|
||||
@@ -316,7 +316,7 @@
|
||||
if(x < y)
|
||||
{
|
||||
T temp = x;
|
||||
- while(temp != y)// && ulp < std::numeric_limits<std::size_t>::max())
|
||||
+ while(temp < y)// && ulp < std::numeric_limits<std::size_t>::max())
|
||||
{
|
||||
++ulp;
|
||||
temp = next_float(temp);
|
||||
@@ -325,7 +325,7 @@
|
||||
else if(y < x)
|
||||
{
|
||||
T temp = y;
|
||||
- while(temp != x)// && ulp < std::numeric_limits<std::size_t>::max())
|
||||
+ while(temp < x)// && ulp < std::numeric_limits<std::size_t>::max())
|
||||
{
|
||||
++ulp;
|
||||
temp = next_float(temp);
|
Loading…
Reference in new issue