- Added format auto-detection to most loaders - Simplified BaseImporter::CanRead() with some utility methods - improved fast_atof -> no overruns anymore. Fuck you, irrlicht. - added assimp_cmd tool to allow command line model processing. Mainly adebugging tool for internal purposes, but others might find it useful, too. - vc8/vc9: revision number is now written to DLL version header - mkutil: some batch scripts to simplify tagging & building of release versions - some API cleanup - fixing some doxygen markup (+now explicit use of @file <filename>) - Icon for assimp_view and assimp_cmd 3DS - Normal vectors are not anymore inverted in some cases - Improved pivot handling - Improved handling of x-flipped meshes Collada - fixed a minor bug (visual_scene element) LWS - WIP implementation. No animations yet, some bugs and crashes. - Animation system remains disabled, WIP code - many test files for LWS, but most of them test the anim support, which is, read above, currently disabled. STL - fixing a log warning which appears for every model - added binary&ascii test spider, exported from truespace MD3 - Cleaning up output tags for automatically joined player models. IRR - Fixing coordinate system issues. - Instance handling improved. - Some of the reported crashes not yet fixed. PretransformVertices - Numerous performance improvements. - Added config option to preserve the hierarchy during the step. RemoveRedundantMaterials - Added config option to specify a list of materials which are kept in every case. UNREAL - Added support for the old unreal data format (*.a,*.d,*.uc) - tested only with exports from Milkshape - more Unreal stuff to come soon git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@356 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
|
|
/** @file qnan.h
|
|
* @brief Some utilities for our dealings with qnans.
|
|
*
|
|
* @note Some loaders use qnans heavily to mark invalid values (and they're
|
|
* even returned by Gen(Smooth)Normals if normals are undefined for a
|
|
* primitive). Their whole usage is wrapped here, so you can easily
|
|
* fix issues with platforms with a different qnan implementation.
|
|
*/
|
|
|
|
#if (!defined AI_QNAN_H_INCLUDED)
|
|
#define AI_QNAN_H_INCLUDED
|
|
|
|
// ---------------------------------------------------------------------------
|
|
/** @brief Data structure for the bit pattern of a 32 Bit
|
|
* IEEE 754 floating-point number.
|
|
*/
|
|
union _IEEESingle
|
|
{
|
|
float Float;
|
|
struct
|
|
{
|
|
uint32_t Frac : 23;
|
|
uint32_t Exp : 8;
|
|
uint32_t Sign : 1;
|
|
} IEEE;
|
|
} ;
|
|
|
|
// ---------------------------------------------------------------------------
|
|
/** @brief check whether a float is qNaN.
|
|
* @param in Input value
|
|
*/
|
|
AI_FORCE_INLINE bool is_qnan(float in)
|
|
{
|
|
return (in != in);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
/** @brief check whether a float is NOT qNaN.
|
|
* @param in Input value
|
|
*/
|
|
AI_FORCE_INLINE bool is_not_qnan(float in)
|
|
{
|
|
return (in == in);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
/** @brief check whether a float is either NaN or (+/-) INF.
|
|
*
|
|
* Denorms return false, they're treated like normal values.
|
|
* @param in Input value
|
|
*/
|
|
AI_FORCE_INLINE bool is_special_float(float in)
|
|
{
|
|
return (((_IEEESingle*)&in)->IEEE.Exp == (1u << 8)-1);
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
/** @brief Get a qnan
|
|
*/
|
|
AI_FORCE_INLINE float get_qnan()
|
|
{
|
|
return std::numeric_limits<float>::quiet_NaN();
|
|
}
|
|
|
|
#endif // !! AI_QNAN_H_INCLUDED
|