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
compNormalizeicompScaledoGTX_component_wise, - Dodanie
packF3x9_E1x5iunpackF3x9_E1x5doGTC_packingdla RGB9E5, - Dodanie
un/packHalfdoGTC_packing, - Dodanie
un/packUnormiun/packSnormdoGTC_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
iroundiurounddoGTC_integer, szybkie zaokrąglanie na dodatnich wartościach, - Dodanie surowego SIMD* API,
- Dodanie 'wyrównanych’** kwalifikatorów,
- Dodanie
GTC_type_alignedz wyrównanymi typamivec, - Dodanie rozszerzeń funkcji
GTC_functions, - Dodanie Kwaternion-owych wersji
isnaniisinf, - Dodanie
lowestBitValuedoGTX_bit, - Dodanie
GLM_FORCE_UNRESTRICTED_GENTYPEpozwalają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_wrapdla lepszej współpracy z SIMD, - Dodanie
constexprdla typówvec,mat,quatidual_quat, - Dodanie wykrywania zbioru instrukcji NEON,
- Dodanie wykrywania CPU Mips,
- Dodanie wykrywania CPU PowerPC,
- Wykorzystanie wbudowanej w CUDA funkcji jako implementację
absz kompilatorem CUDA. - Zastąpienie
GLM_COMPILER_LLVMiGLM_COMPILER_APPLE_CLANGuniwersalnymGLM_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
intersectRayTriangleby uniknąć nieplanowanego, tylnego cullingu, - Naprawienie ostrzeżeń przy
long longw C++98 na GCC i Clang, - Naprawienie ścisłych ostrzeżeń aliasingu,
- Naprawienie brakującego przeciążenia
vec1dla funkcjilength2idistance2, - Naprawienie testu GLM, parametry kompilatora
/fp:fasti/Zasą niekompatybilne, - Naprawienie funkcji rzutowania kwaternionu na
mat3–mat3_castzGTC_quaternion, - Naprawienie
GLM_GTX_iodla 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.























