mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 04:01:31 +00:00
Fixed subnormal float viewpos values breaking rendering
This commit is contained in:
parent
519dd16c9a
commit
d697eafbe1
2 changed files with 42 additions and 0 deletions
|
@ -1019,6 +1019,45 @@ struct TVector4
|
|||
}
|
||||
};
|
||||
|
||||
inline void ZeroSubnormalsF(double& num)
|
||||
{
|
||||
if (fabs(num) < FLT_MIN) num = 0;
|
||||
}
|
||||
|
||||
inline void ZeroSubnormals(double& num)
|
||||
{
|
||||
if (fabs(num) < DBL_MIN) num = 0;
|
||||
}
|
||||
|
||||
inline void ZeroSubnormals(float& num)
|
||||
{
|
||||
if (fabsf(num) < FLT_MIN) num = 0;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void ZeroSubnormals(TVector2<T>& vec)
|
||||
{
|
||||
ZeroSubnormals(vec.X);
|
||||
ZeroSubnormals(vec.Y);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void ZeroSubnormals(TVector3<T>& vec)
|
||||
{
|
||||
ZeroSubnormals(vec.X);
|
||||
ZeroSubnormals(vec.Y);
|
||||
ZeroSubnormals(vec.Z);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void ZeroSubnormals(TVector4<T>& vec)
|
||||
{
|
||||
ZeroSubnormals(vec.X);
|
||||
ZeroSubnormals(vec.Y);
|
||||
ZeroSubnormals(vec.Z);
|
||||
ZeroSubnormals(vec.W);
|
||||
}
|
||||
|
||||
template<class vec_t>
|
||||
struct TMatrix3x3
|
||||
{
|
||||
|
|
|
@ -774,6 +774,9 @@ public:
|
|||
|
||||
void Set(DVector3 &off, int f = -1)
|
||||
{
|
||||
ZeroSubnormalsF(off.X);
|
||||
ZeroSubnormalsF(off.Y);
|
||||
ZeroSubnormalsF(off.Z);
|
||||
Offset = off;
|
||||
|
||||
if (f > -1)
|
||||
|
|
Loading…
Reference in a new issue