This new version of GLM is bringing a lot of improvements and maybe too many considering the development time it has required:
API exposing SIMD implementation but also some new, safe and feature complet swizzling functions and a new setup API.
All this is described in the largely updated <linkhref="http://glm.g-truc.net/glm-0.9.1.pdf">GLM manual</link>.
</paragraph>
<paragraph>
With the new setup system, GLM detects automatically the compiler settings to adapt its implementation to the flag set at build time.
It will automatically enable C++0x features, SSE optimizations and the display configuration informations at build-time.
The automatic setup can be overdrive by the GLM user.
</paragraph>
<paragraph>
The SIMD API maintly focus on vec4 and mat4 implementations that are embodied by the types <codeword>simdVec4</codeword> and <codeword>simdMat4</codeword>.
The implemention cover most of the common functions, the geometry functions and the matrix functions as described in the GLSL specifications.
Because it is hight inefficient to access individual components of a SIMD register, the <codeword>simdVec4</codeword> doesn't allow it.
To reflect this constraint, the <codeword>simdVec4</codeword> has to be converted to <codeword>vec4</codeword> first which would be effectively handle
by the compiler thank to the function <codeword>simdCast</codeword>.
Furthermore, GLM provides some specials functions like simdDot4 that returns a <codeword>simdVec4</codeword> instead of a float
with the duplicated dot product value in each components
and ensure that no unnecessary component manipulations are performed (typically <codeword>__m128</codeword> to <codeword>float</codeword>
and <codeword>float</codeword> to <codeword>__m128</codeword>).
This implementation can probably be improve in many ways so don't hesitate to send me some feedbacks.
</paragraph>
<paragraph>
GLM 0.9.1 is not 100% backward compatible with GLM 0.9.0 but mostly advanced usages should be concerned by this compatibility issues.