GLM (openGL Mathematics) jest biblioteką matematyczną przeznaczoną do współpracy z OpenGL wykorzystywaną przez praktycznie każdy projekt oparty na tej drugiej. Ułatwia operacje na macierzach, wektorach, wykonywanie dowolnych transformacji i bardziej zaawansowane operacje na zwykłych liczbach, których na darmo szukać w bibliotece standardowej C++. Od poprzedniej wersji dodano do projektu kolejne 398 commitów.
Nowe funkcje:
- Więcej prawo- i lewo-ręcznych rzutów (aka projekcji) i kontrola klipów,
- Dodanie funkcji
compNormalize
icompScale
doGTX_component_wise
, - Dodanie
packF3x9_E1x5
iunpackF3x9_E1x5
doGTC_packing
dla RGB9E5, - Dodanie
un
/packHalf
doGTC_packing
, - Dodanie
un
/packUnorm
iun
/packSnorm
doGTC_packing
, - Dodanie 16 bitowego pakowania i rozpakowania do
GTC_packing
, - Dodanie 8 bitowego pakowania i rozpakowania do
GTC_packing
, - Dodanie brakujących operatorów
bvec*
:&&
i||
, - Dodanie
iround
iuround
doGTC_integer
, szybkie zaokrąglanie na dodatnich wartościach, - Dodanie surowego SIMD* API,
- Dodanie 'wyrównanych’** kwalifikatorów,
- Dodanie
GTC_type_aligned
z wyrównanymi typamivec
, - Dodanie rozszerzeń funkcji
GTC_functions
, - Dodanie Kwaternion-owych wersji
isnan
iisinf
, - Dodanie
lowestBitValue
doGTX_bit
, - Dodanie
GLM_FORCE_UNRESTRICTED_GENTYPE
pozwalającego na nie-podstawowygenType
.
Poprawki:
- Poprawienie SIMD oraz działania na kompilatorach GCC i Clang,
- Poprawienie dokumentacji
GTC_random linearRand
, - Poprawienie dokumentacji
GTC_reciprocal
, - Poprawienie pokrycia
GLM_FORCE_EXPLICIT_CTOR
, - Poprawienie wsparcia wykrywania OpenMP dla Clang, GCC, ICC i VC,
- Poprawienie
GTX_wrap
dla lepszej współpracy z SIMD, - Dodanie
constexpr
dla typówvec
,mat
,quat
idual_quat
, - Dodanie wykrywania zbioru instrukcji NEON,
- Dodanie wykrywania CPU Mips,
- Dodanie wykrywania CPU PowerPC,
- Wykorzystanie wbudowanej w CUDA funkcji jako implementację
abs
z kompilatorem CUDA. - Zastąpienie
GLM_COMPILER_LLVM
iGLM_COMPILER_APPLE_CLANG
uniwersalnymGLM_COMPILER_CLANG
. - Brak ostrzeżeń kompilatora przy użyciu
long long
, - Dodanie większej ilości informacji podczas budowania programu.
Łatki błędów:
- Naprawienie literówki w
GTX_extended_min_max
, - Naprawienie
intersectRayTriangle
by uniknąć nieplanowanego, tylnego cullingu, - Naprawienie ostrzeżeń przy
long long
w C++98 na GCC i Clang, - Naprawienie ścisłych ostrzeżeń aliasingu,
- Naprawienie brakującego przeciążenia
vec1
dla funkcjilength2
idistance2
, - Naprawienie testu GLM, parametry kompilatora
/fp:fast
i/Za
są niekompatybilne, - Naprawienie funkcji rzutowania kwaternionu na
mat3
–mat3_cast
zGTC_quaternion
, - Naprawienie
GLM_GTX_io
dla CUDA.
Przestarzałe funkcje:
- Usunięcie definicji
GLM_FORCE_SIZE_FUNC,
- Oznaczenie jako przestarzałych:
GLM_GTX_simd_vec4
,GLM_GTX_simd_mat4
,GLM_GTX_simd_quat
,GLM_SWIZZLE
(zastąpione przezGLM_FORCE_SWIZZLE
),GLM_MESSAGES
(zastąpione przezGLM_FORCE_MESSAGES
).
Przykładowy kod wykorzystujący GLM możecie zobaczyć tutaj.
*SIMD – Single Instruction Multiple Data, instrukcje (m.in. procesora) pozwalające na szybkie przeprowadzenie analogicznych operacji na dużych zbiorach danych. Procesory x86 udostępniają zwykle AVX, AVX2, SSE, SSE2, SSE3 itd., architektura ARM obsługuje zestaw instrukcji o bardzo wymownej nazwie – SIMD.
**Wyrównanie – ułożenie danych w pamięci tak, by procesor mógł szybciej uzyskać do nich dostęp lub zaoszczędzić kilka bajtów kiedy jest to potrzebne. Przykładowo na części architektur adresacja stronami jest szybsza niż w wypadku bajtów.