1. type_vec4.hpp
__declspec(align(16)) produces a compiler error on VS2012:
func_common.inl(634): error C2719: 'a': formal parameter with
__declspec(align('16')) won't be aligned
core_func_common.cpp(310) : see reference to function template
instantiation 'glm::detail::tvec4<T,P> glm::mix<float,highp>(const
glm::detail::tvec4<T,P> &,const glm::detail::tvec4<T,P>
&,glm::detail::tvec4<bool,highp>)' being compiled
with
[
T=float,
P=highp
]
and a warning on CygWin using gcc 4.7.2:
type_vec4.hpp:40:31: warning: 'align' attribute directive ignored
[-Wattributes]
2. gtx_bit.cpp
glm::uint32 x_max = 1 << 13;
glm::uint32 y_max = 1 << 12;
result out of memory on my machine.
These have stricter pre-conditions than standard mix() and slerp()
- 1) Input quaternions must be unit length.
- 2) The interpolation factor (a) must be in the range [0, 1]
None of these restrictions should be too bad. The reason for these is that it uses fastAcos()
and fastSin(), both of which have a limited allowable range.
In my contrived tests, I observed about a 10x improvement over the standard versions. This is
mostly because of the faster acos/sin operations. The fastSin(__m128) implementation also helps
here because it can do four fastSin() operations simultaneously using SSE (mix() and slerp()
each need three).
A few things here can probably be improved by people a lot smarter then
me, but for the most part things are generally faster.
A few notes:
- A fquatSIMD can be converted to a fmat4x4SIMD using mat4SIMD_cast().
- A tquat<float> can be converted to a fquatSIMD using quatSIMD_cast().
- Some functions are virtually the same as their scalar counterparts
because I've just not been able to get them faster.
- Only the basic functions are implemented. Future plans include fast,
approximate normalize, length and mix/slerp functions.