Codebase list glm / debian/0.9.8.4-1
Import Debian changes 0.9.8.4-1 glm (0.9.8.4-1) unstable; urgency=medium * New upstream release. * Make libglm-doc Multi-Arch: foreign. * Drop patches/fix-packing-test, a proper fix has been applied upstream. * Bump Standards-Version. Guus Sliepen 6 years ago
36 changed file(s) with 472 addition(s) and 343 deletion(s). Raw diff Collapse all Expand all
0 clone_folder: c:\dev\glm-cmake
1
2 os:
3 - Visual Studio 2013
4
5 platform:
6 - x86
7 - x86_64
8
9 build_script:
10 - md build_pure_11
11 - cd build_pure_11
12 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON ..
13 - cmake --build . --config Debug
14 - cmake --build . --config Release
15 - cd ..
16 - md build_simd_11
17 - cd build_simd_11
18 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON ..
19 - cmake --build . --config Debug
20 - cmake --build . --config Release
21 - cd ..
22 - md build_pure_98
23 - cd build_pure_98
24 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
25 - cmake --build . --config Debug
26 - cmake --build . --config Release
27 - cd ..
28 - md build_simd_98
29 - cd build_simd_98
30 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON ..
31 - cmake --build . --config Debug
32 - cmake --build . --config Release
33 - cd ..
0 language: cpp
1
2 os:
3 - linux
4 - osx
5
6 matrix:
7 include:
8 - compiler: gcc
9 addons:
10 apt:
11 sources:
12 - ubuntu-toolchain-r-test
13 packages:
14 - g++-4.9
15 env: COMPILER=g++-4.9
16 - compiler: clang
17 addons:
18 apt:
19 sources:
20 - ubuntu-toolchain-r-test
21 - llvm-toolchain-precise-3.8
22 packages:
23 - clang-3.8
24 env: COMPILER=clang++-3.8
25
26 compiler:
27 - clang
28
29 before_script:
30
31 script:
32 - mkdir ./build_pure_11
33 - cd ./build_pure_11
34 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
35 - cmake --build .
36 - ctest
37 - cd ..
38 - mkdir ./build_pure_98
39 - cd ./build_pure_98
40 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
41 - cmake --build .
42 - ctest
43 - cd ..
44 - mkdir ./build_pure_11_debug
45 - cd ./build_pure_11_debug
46 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
47 - cmake --build .
48 - ctest
49 - cd ..
50 - mkdir ./build_pure_98_debug
51 - cd ./build_pure_98_debug
52 - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
53 - cmake --build .
54 - ctest
55 - cd ..
56 - mkdir ./build_simd_11
57 - cd ./build_simd_11
58 - if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
59 - cmake --build .
60 - ctest
61 - cd ..
62 - mkdir ./build_simd_98
63 - cd ./build_simd_98
64 - if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
65 - cmake --build .
66 - ctest
67 - cd ..
68 - mkdir ./build_simd_11_debug
69 - cd ./build_simd_11_debug
70 - if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
71 - cmake --build .
72 - ctest
73 - cd ..
74 - mkdir ./build_simd_98_debug
75 - cd ./build_simd_98_debug
76 - if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
77 - cmake --build .
78 - ctest
79 - cd ..
80
81
82
83
106106 if(CMAKE_COMPILER_IS_GNUCXX)
107107 add_definitions(-mfpmath=387)
108108 endif()
109 message(STATUS "GLM: No SIMD instruction set")
109110 elseif(GLM_TEST_ENABLE_SIMD_AVX2)
110 if(CMAKE_COMPILER_IS_GNUCXX)
111 if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
111112 add_definitions(-mavx2)
112113 elseif(GLM_USE_INTEL)
113114 add_definitions(/QxAVX2)
114115 elseif(MSVC)
115116 add_definitions(/arch:AVX2)
116117 endif()
118 message(STATUS "GLM: AVX2 instruction set")
117119 elseif(GLM_TEST_ENABLE_SIMD_AVX)
118 if(CMAKE_COMPILER_IS_GNUCXX)
120 if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
119121 add_definitions(-mavx)
120122 elseif(GLM_USE_INTEL)
121123 add_definitions(/QxAVX)
122124 elseif(MSVC)
123125 add_definitions(/arch:AVX)
124126 endif()
127 message(STATUS "GLM: AVX instruction set")
125128 elseif(GLM_TEST_ENABLE_SIMD_SSE3)
126 if(CMAKE_COMPILER_IS_GNUCXX)
129 if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
127130 add_definitions(-msse3)
128131 elseif(GLM_USE_INTEL)
129132 add_definitions(/QxSSE3)
130133 elseif(MSVC AND NOT CMAKE_CL_64)
131 add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3
132 endif()
134 add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3
135 endif()
136 message(STATUS "GLM: SSE3 instruction set")
133137 elseif(GLM_TEST_ENABLE_SIMD_SSE2)
134 if(CMAKE_COMPILER_IS_GNUCXX)
138 if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
135139 add_definitions(-msse2)
136140 elseif(GLM_USE_INTEL)
137141 add_definitions(/QxSSE2)
138142 elseif(MSVC AND NOT CMAKE_CL_64)
139143 add_definitions(/arch:SSE2)
140144 endif()
145 message(STATUS "GLM: SSE2 instruction set")
141146 endif()
142147
143148 if(CMAKE_COMPILER_IS_GNUCXX)
0 glm (0.9.8.4-1) unstable; urgency=medium
1
2 * New upstream release.
3 * Make libglm-doc Multi-Arch: foreign.
4 * Drop patches/fix-packing-test, a proper fix has been applied upstream.
5 * Bump Standards-Version.
6
7 -- Guus Sliepen <guus@debian.org> Sat, 24 Jun 2017 17:27:12 +0200
8
09 glm (0.9.8.3-3) unstable; urgency=medium
110
211 * Fix FTBFS on i386. Closes: 860701
55 Priority: extra
66 Build-Depends: debhelper (>= 10),
77 cmake
8 Standards-Version: 3.9.8
8 Standards-Version: 4.0.0
99 Vcs-Browser: https://anonscm.debian.org/cgit/debian-science/packages/glm.git
1010 Vcs-Git: https://anonscm.debian.org/git/debian-science/packages/glm.git
1111 Homepage: http://glm.g-truc.net/
3535
3636 Package: libglm-doc
3737 Architecture: all
38 Multi-Arch: foreign
3839 Section: doc
3940 Depends: ${misc:Depends}
4041 Recommends: libjs-jquery
55 CMakeLists.txt | 5 +++++
66 1 file changed, 5 insertions(+)
77
8 diff --git a/CMakeLists.txt b/CMakeLists.txt
9 index 253eee5..2c68e8a 100644
108 --- a/CMakeLists.txt
119 +++ b/CMakeLists.txt
12 @@ -163,11 +163,16 @@ add_subdirectory(test)
10 @@ -168,11 +168,16 @@
1311 set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
1412 install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1513
0 Description: Fix failure of gtc_packing test on i386
1 Author: Guus Sliepen <guus@debian.org>
2 Last-Update: 2017-04-19
3
4 --- glm-0.9.8.3.orig/test/gtc/gtc_packing.cpp
5 +++ glm-0.9.8.3/test/gtc/gtc_packing.cpp
6 @@ -100,8 +100,8 @@ int test_Half4x16()
7 glm::u16vec4 p2 = glm::packHalf(v0);
8 glm::vec4 v2 = glm::unpackHalf(p2);
9
10 - Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
11 - Error += glm::all(glm::equal(v0, v2)) ? 0 : 1;
12 + Error += !!memcmp(&v0, &v1, sizeof v0);
13 + Error += !!memcmp(&v0, &v2, sizeof v0);
14 }
15
16 return Error;
17 @@ -125,7 +125,7 @@ int test_I3x10_1x2()
18 glm::ivec4 v0 = glm::unpackI3x10_1x2(p0);
19 glm::uint32 p1 = glm::packI3x10_1x2(v0);
20 glm::ivec4 v1 = glm::unpackI3x10_1x2(p1);
21 - Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
22 + Error += !!memcmp(&v0, &v1, sizeof v0);
23 }
24
25 return Error;
26 @@ -149,7 +149,7 @@ int test_U3x10_1x2()
27 glm::uvec4 v0 = glm::unpackU3x10_1x2(p0);
28 glm::uint32 p1 = glm::packU3x10_1x2(v0);
29 glm::uvec4 v1 = glm::unpackU3x10_1x2(p1);
30 - Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
31 + Error += !!memcmp(&v0, &v1, sizeof v0);
32 }
33
34 return Error;
35 @@ -173,7 +173,7 @@ int test_Snorm3x10_1x2()
36 glm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);
37 glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
38 glm::vec4 v1 = glm::unpackSnorm3x10_1x2(p1);
39 - Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
40 + Error += !!memcmp(&v0, &v1, sizeof v0);
41 }
42
43 return Error;
44 @@ -197,7 +197,7 @@ int test_Unorm3x10_1x2()
45 glm::vec4 v0 = glm::unpackUnorm3x10_1x2(p0);
46 glm::uint32 p1 = glm::packUnorm3x10_1x2(v0);
47 glm::vec4 v1 = glm::unpackUnorm3x10_1x2(p1);
48 - Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
49 + Error += !!memcmp(&v0, &v1, sizeof v0);
50 }
51
52 return Error;
53 @@ -221,6 +221,7 @@ int test_F2x11_1x10()
54 glm::vec3 v0 = glm::unpackF2x11_1x10(p0);
55 glm::uint32 p1 = glm::packF2x11_1x10(v0);
56 glm::vec3 v1 = glm::unpackF2x11_1x10(p1);
57 + Error += !!memcmp(&v0, &v1, sizeof v0);
58 Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
59 }
60
00 Fix-CMake-package-version-file.patch
11 fix-infiloop
2 fix-packing-test
0 function toggleVisibility(linkObj)
1 {
2 var base = $(linkObj).attr('id');
3 var summary = $('#'+base+'-summary');
4 var content = $('#'+base+'-content');
5 var trigger = $('#'+base+'-trigger');
6 var src=$(trigger).attr('src');
7 if (content.is(':visible')===true) {
8 content.hide();
9 summary.show();
10 $(linkObj).addClass('closed').removeClass('opened');
11 $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
12 } else {
13 content.show();
14 summary.hide();
15 $(linkObj).removeClass('closed').addClass('opened');
16 $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
17 }
18 return false;
19 }
20
21 function updateStripes()
22 {
23 $('table.directory tr').
24 removeClass('even').filter(':visible:even').addClass('even');
25 }
26
27 function toggleLevel(level)
28 {
29 $('table.directory tr').each(function() {
30 var l = this.id.split('_').length-1;
31 var i = $('#img'+this.id.substring(3));
32 var a = $('#arr'+this.id.substring(3));
33 if (l<level+1) {
34 i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
35 a.html('&#9660;');
36 $(this).show();
37 } else if (l==level+1) {
38 i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
39 a.html('&#9658;');
40 $(this).show();
41 } else {
42 $(this).hide();
43 }
44 });
45 updateStripes();
46 }
47
48 function toggleFolder(id)
49 {
50 // the clicked row
51 var currentRow = $('#row_'+id);
52
53 // all rows after the clicked row
54 var rows = currentRow.nextAll("tr");
55
56 var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
57
58 // only match elements AFTER this one (can't hide elements before)
59 var childRows = rows.filter(function() { return this.id.match(re); });
60
61 // first row is visible we are HIDING
62 if (childRows.filter(':first').is(':visible')===true) {
63 // replace down arrow by right arrow for current row
64 var currentRowSpans = currentRow.find("span");
65 currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
66 currentRowSpans.filter(".arrow").html('&#9658;');
67 rows.filter("[id^=row_"+id+"]").hide(); // hide all children
68 } else { // we are SHOWING
69 // replace right arrow by down arrow for current row
70 var currentRowSpans = currentRow.find("span");
71 currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
72 currentRowSpans.filter(".arrow").html('&#9660;');
73 // replace down arrows by right arrows for child rows
74 var childRowsSpans = childRows.find("span");
75 childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
76 childRowsSpans.filter(".arrow").html('&#9658;');
77 childRows.show(); //show all children
78 }
79 updateStripes();
80 }
81
82
83 function toggleInherit(id)
84 {
85 var rows = $('tr.inherit.'+id);
86 var img = $('tr.inherit_header.'+id+' img');
87 var src = $(img).attr('src');
88 if (rows.filter(':first').is(':visible')===true) {
89 rows.css('display','none');
90 $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
91 } else {
92 rows.css('display','table-row'); // using show() causes jump in firefox
93 $(img).attr('src',src.substring(0,src.length-10)+'open.png');
94 }
95 }
96
97
98 $(document).ready(function() {
99 $('.code,.codeRef').each(function() {
100 $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
101 $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
102 });
103 });
0 function toggleVisibility(linkObj)
1 {
2 var base = $(linkObj).attr('id');
3 var summary = $('#'+base+'-summary');
4 var content = $('#'+base+'-content');
5 var trigger = $('#'+base+'-trigger');
6 var src=$(trigger).attr('src');
7 if (content.is(':visible')===true) {
8 content.hide();
9 summary.show();
10 $(linkObj).addClass('closed').removeClass('opened');
11 $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
12 } else {
13 content.show();
14 summary.hide();
15 $(linkObj).removeClass('closed').addClass('opened');
16 $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
17 }
18 return false;
19 }
20
21 function updateStripes()
22 {
23 $('table.directory tr').
24 removeClass('even').filter(':visible:even').addClass('even');
25 }
26
27 function toggleLevel(level)
28 {
29 $('table.directory tr').each(function() {
30 var l = this.id.split('_').length-1;
31 var i = $('#img'+this.id.substring(3));
32 var a = $('#arr'+this.id.substring(3));
33 if (l<level+1) {
34 i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
35 a.html('&#9660;');
36 $(this).show();
37 } else if (l==level+1) {
38 i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
39 a.html('&#9658;');
40 $(this).show();
41 } else {
42 $(this).hide();
43 }
44 });
45 updateStripes();
46 }
47
48 function toggleFolder(id)
49 {
50 // the clicked row
51 var currentRow = $('#row_'+id);
52
53 // all rows after the clicked row
54 var rows = currentRow.nextAll("tr");
55
56 var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
57
58 // only match elements AFTER this one (can't hide elements before)
59 var childRows = rows.filter(function() { return this.id.match(re); });
60
61 // first row is visible we are HIDING
62 if (childRows.filter(':first').is(':visible')===true) {
63 // replace down arrow by right arrow for current row
64 var currentRowSpans = currentRow.find("span");
65 currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
66 currentRowSpans.filter(".arrow").html('&#9658;');
67 rows.filter("[id^=row_"+id+"]").hide(); // hide all children
68 } else { // we are SHOWING
69 // replace right arrow by down arrow for current row
70 var currentRowSpans = currentRow.find("span");
71 currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
72 currentRowSpans.filter(".arrow").html('&#9660;');
73 // replace down arrows by right arrows for child rows
74 var childRowsSpans = childRows.find("span");
75 childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
76 childRowsSpans.filter(".arrow").html('&#9658;');
77 childRows.show(); //show all children
78 }
79 updateStripes();
80 }
81
82
83 function toggleInherit(id)
84 {
85 var rows = $('tr.inherit.'+id);
86 var img = $('tr.inherit_header.'+id+' img');
87 var src = $(img).attr('src');
88 if (rows.filter(':first').is(':visible')===true) {
89 rows.css('display','none');
90 $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
91 } else {
92 rows.css('display','table-row'); // using show() causes jump in firefox
93 $(img).attr('src',src.substring(0,src.length-10)+'open.png');
94 }
95 }
96
97
98 $(document).ready(function() {
99 $('.code,.codeRef').each(function() {
100 $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
101 $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
102 });
103 });
100100 GLM_FUNC_QUALIFIER static genFIType call(genFIType x)
101101 {
102102 GLM_STATIC_ASSERT(
103 !std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer || GLM_UNRESTRICTED_GENTYPE,
103 (!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer) || GLM_UNRESTRICTED_GENTYPE,
104104 "'abs' only accept floating-point and integer scalar or vector inputs");
105105 return x;
106106 }
3535 #define GLM_VERSION_MAJOR 0
3636 #define GLM_VERSION_MINOR 9
3737 #define GLM_VERSION_PATCH 8
38 #define GLM_VERSION_REVISION 3
38 #define GLM_VERSION_REVISION 4
3939
4040 #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_VERSION_DISPLAYED)
4141 # define GLM_MESSAGE_VERSION_DISPLAYED
42 # pragma message ("GLM: version 0.9.8.3")
42 # pragma message ("GLM: version 0.9.8.4")
4343 #endif//GLM_MESSAGES
4444
4545 // Report compiler detection
298298 #if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)
299299 # define GLM_HAS_CXX11_STL 0
300300 #elif GLM_COMPILER & GLM_COMPILER_CLANG
301 # if defined(_LIBCPP_VERSION) && GLM_LANG & GLM_LANG_CXX11_FLAG
301 # if (defined(_LIBCPP_VERSION) && GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)
302302 # define GLM_HAS_CXX11_STL 1
303303 # else
304304 # define GLM_HAS_CXX11_STL 0
448448 ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \
449449 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \
450450 ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA70))))
451 #endif
452
453 #define GLM_HAS_ONLY_XYZW ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER < GLM_COMPILER_GCC46))
454 #if GLM_HAS_ONLY_XYZW
455 # pragma message("GLM: GCC older than 4.6 has a bug presenting the use of rgba and stpq components")
451456 #endif
452457
453458 //
732737 # define GLM_DEFAULT_CTOR
733738 #endif
734739
735 #if GLM_HAS_CONSTEXPR
740 #if GLM_HAS_CONSTEXPR || GLM_HAS_CONSTEXPR_PARTIAL
736741 # define GLM_CONSTEXPR constexpr
737 # define GLM_CONSTEXPR_CTOR constexpr
738 # define GLM_RELAXED_CONSTEXPR constexpr
739 #elif GLM_HAS_CONSTEXPR_PARTIAL
740 # define GLM_CONSTEXPR constexpr
741 # define GLM_CONSTEXPR_CTOR
742 # define GLM_RELAXED_CONSTEXPR const
742 # if GLM_COMPILER & GLM_COMPILER_VC // Visual C++ has a bug #594 https://github.com/g-truc/glm/issues/594
743 # define GLM_CONSTEXPR_CTOR
744 # else
745 # define GLM_CONSTEXPR_CTOR constexpr
746 # endif
743747 #else
744748 # define GLM_CONSTEXPR
745749 # define GLM_CONSTEXPR_CTOR
750 #endif
751
752 #if GLM_HAS_CONSTEXPR
753 # define GLM_RELAXED_CONSTEXPR constexpr
754 #else
746755 # define GLM_RELAXED_CONSTEXPR const
747756 #endif
748757
2626
2727 // -- Data --
2828
29 # if GLM_HAS_ALIGNED_TYPE
29 # if GLM_HAS_ONLY_XYZW
30 T x;
31
32 # elif GLM_HAS_ALIGNED_TYPE
3033 # if GLM_COMPILER & GLM_COMPILER_GCC
3134 # pragma GCC diagnostic push
3235 # pragma GCC diagnostic ignored "-Wpedantic"
8184
8285 // -- Implicit basic constructors --
8386
84 GLM_FUNC_DECL GLM_CONSTEXPR tvec1() GLM_DEFAULT_CTOR;
85 GLM_FUNC_DECL GLM_CONSTEXPR tvec1(tvec1<T, P> const & v) GLM_DEFAULT;
87 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec1() GLM_DEFAULT_CTOR;
88 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec1(tvec1<T, P> const & v) GLM_DEFAULT;
8689 template <precision Q>
87 GLM_FUNC_DECL GLM_CONSTEXPR tvec1(tvec1<T, Q> const & v);
90 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec1(tvec1<T, Q> const & v);
8891
8992 // -- Explicit basic constructors --
9093
9194 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec1(ctor);
92 GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec1(T scalar);
95 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec1(T scalar);
9396
9497 // -- Conversion vector constructors --
9598
9699 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
97100 template <typename U, precision Q>
98 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec2<U, Q> const & v);
101 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec2<U, Q> const & v);
99102 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
100103 template <typename U, precision Q>
101 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec3<U, Q> const & v);
104 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec3<U, Q> const & v);
102105 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
103106 template <typename U, precision Q>
104 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec4<U, Q> const & v);
107 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec4<U, Q> const & v);
105108
106109 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
107110 template <typename U, precision Q>
108 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec1<U, Q> const & v);
111 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec1<U, Q> const & v);
109112
110113 // -- Swizzle constructors --
111114 /*
66
77 # if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
88 template <typename T, precision P>
9 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1()
9 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1()
1010 # ifndef GLM_FORCE_NO_CTOR_INIT
1111 : x(0)
1212 # endif
1515
1616 # if !GLM_HAS_DEFAULTED_FUNCTIONS
1717 template <typename T, precision P>
18 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec1<T, P> const & v)
18 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec1<T, P> const & v)
1919 : x(v.x)
2020 {}
2121 # endif//!GLM_HAS_DEFAULTED_FUNCTIONS
2222
2323 template <typename T, precision P>
2424 template <precision Q>
25 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec1<T, Q> const & v)
25 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec1<T, Q> const & v)
2626 : x(v.x)
2727 {}
2828
3333 {}
3434
3535 template <typename T, precision P>
36 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(T scalar)
36 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(T scalar)
3737 : x(scalar)
3838 {}
3939
4141
4242 template <typename T, precision P>
4343 template <typename U, precision Q>
44 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec1<U, Q> const & v)
44 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec1<U, Q> const & v)
4545 : x(static_cast<T>(v.x))
4646 {}
4747
4848 template <typename T, precision P>
4949 template <typename U, precision Q>
50 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec2<U, Q> const & v)
50 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec2<U, Q> const & v)
5151 : x(static_cast<T>(v.x))
5252 {}
5353
5454 template <typename T, precision P>
5555 template <typename U, precision Q>
56 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec3<U, Q> const & v)
56 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec3<U, Q> const & v)
5757 : x(static_cast<T>(v.x))
5858 {}
5959
6060 template <typename T, precision P>
6161 template <typename U, precision Q>
62 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec4<U, Q> const & v)
62 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec4<U, Q> const & v)
6363 : x(static_cast<T>(v.x))
6464 {}
6565
2525
2626 // -- Data --
2727
28 # if GLM_HAS_ALIGNED_TYPE
28 # if GLM_HAS_ONLY_XYZW
29 T x, y;
30
31 # elif GLM_HAS_ALIGNED_TYPE
2932 # if GLM_COMPILER & GLM_COMPILER_GCC
3033 # pragma GCC diagnostic push
3134 # pragma GCC diagnostic ignored "-Wpedantic"
8285
8386 // -- Implicit basic constructors --
8487
85 GLM_FUNC_DECL GLM_CONSTEXPR tvec2() GLM_DEFAULT_CTOR;
86 GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec2<T, P> const& v) GLM_DEFAULT;
88 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2() GLM_DEFAULT_CTOR;
89 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(tvec2<T, P> const& v) GLM_DEFAULT;
8790 template <precision Q>
88 GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec2<T, Q> const& v);
91 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(tvec2<T, Q> const& v);
8992
9093 // -- Explicit basic constructors --
9194
9295 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec2(ctor);
93 GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec2(T scalar);
94 GLM_FUNC_DECL GLM_CONSTEXPR tvec2(T s1, T s2);
96 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec2(T scalar);
97 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(T s1, T s2);
9598
9699 // -- Conversion constructors --
97100
98101 /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
99102 template <typename A, typename B>
100 GLM_FUNC_DECL GLM_CONSTEXPR tvec2(A x, B y);
103 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(A x, B y);
101104 template <typename A, typename B>
102 GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2);
105 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2);
103106
104107 // -- Conversion vector constructors --
105108
106109 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
107110 template <typename U, precision Q>
108 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec3<U, Q> const & v);
111 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec2(tvec3<U, Q> const & v);
109112 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
110113 template <typename U, precision Q>
111 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec4<U, Q> const & v);
114 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec2(tvec4<U, Q> const & v);
112115
113116 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
114117 template <typename U, precision Q>
115 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec2<U, Q> const & v);
118 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec2(tvec2<U, Q> const & v);
116119
117120 // -- Swizzle constructors --
118121 # if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
1919
2020 # if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
2121 template <typename T, precision P>
22 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2()
22 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2()
2323 # ifndef GLM_FORCE_NO_CTOR_INIT
2424 : x(0), y(0)
2525 # endif
2828
2929 # if !GLM_HAS_DEFAULTED_FUNCTIONS
3030 template <typename T, precision P>
31 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec2<T, P> const & v)
31 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec2<T, P> const & v)
3232 : x(v.x), y(v.y)
3333 {}
3434 # endif//!GLM_HAS_DEFAULTED_FUNCTIONS
3535
3636 template <typename T, precision P>
3737 template <precision Q>
38 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec2<T, Q> const & v)
38 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec2<T, Q> const & v)
3939 : x(v.x), y(v.y)
4040 {}
4141
4646 {}
4747
4848 template <typename T, precision P>
49 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(T scalar)
49 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(T scalar)
5050 : x(scalar), y(scalar)
5151 {}
5252
5353 template <typename T, precision P>
54 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(T s1, T s2)
54 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(T s1, T s2)
5555 : x(s1), y(s2)
5656 {}
5757
5959
6060 template <typename T, precision P>
6161 template <typename A, typename B>
62 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(A a, B b)
62 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(A a, B b)
6363 : x(static_cast<T>(a))
6464 , y(static_cast<T>(b))
6565 {}
6666
6767 template <typename T, precision P>
6868 template <typename A, typename B>
69 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec1<A, P> const & a, tvec1<B, P> const & b)
69 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec1<A, P> const & a, tvec1<B, P> const & b)
7070 : x(static_cast<T>(a.x))
7171 , y(static_cast<T>(b.x))
7272 {}
7575
7676 template <typename T, precision P>
7777 template <typename U, precision Q>
78 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec2<U, Q> const & v)
78 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec2<U, Q> const & v)
7979 : x(static_cast<T>(v.x))
8080 , y(static_cast<T>(v.y))
8181 {}
8282
8383 template <typename T, precision P>
8484 template <typename U, precision Q>
85 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec3<U, Q> const & v)
85 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec3<U, Q> const & v)
8686 : x(static_cast<T>(v.x))
8787 , y(static_cast<T>(v.y))
8888 {}
8989
9090 template <typename T, precision P>
9191 template <typename U, precision Q>
92 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec4<U, Q> const & v)
92 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec4<U, Q> const & v)
9393 : x(static_cast<T>(v.x))
9494 , y(static_cast<T>(v.y))
9595 {}
2525
2626 // -- Data --
2727
28 # if GLM_HAS_ALIGNED_TYPE
28 # if GLM_HAS_ONLY_XYZW
29 T x, y, z;
30
31 # elif GLM_HAS_ALIGNED_TYPE
2932 # if GLM_COMPILER & GLM_COMPILER_GCC
3033 # pragma GCC diagnostic push
3134 # pragma GCC diagnostic ignored "-Wpedantic"
8285
8386 // -- Implicit basic constructors --
8487
85 GLM_FUNC_DECL GLM_CONSTEXPR tvec3() GLM_DEFAULT_CTOR;
86 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec3<T, P> const & v) GLM_DEFAULT;
88 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3() GLM_DEFAULT_CTOR;
89 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec3<T, P> const & v) GLM_DEFAULT;
8790 template <precision Q>
88 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec3<T, Q> const & v);
91 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec3<T, Q> const & v);
8992
9093 // -- Explicit basic constructors --
9194
9295 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec3(ctor);
93 GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec3(T scalar);
94 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(T a, T b, T c);
96 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec3(T scalar);
97 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(T a, T b, T c);
9598
9699 // -- Conversion scalar constructors --
97100
98 /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
101 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
99102 template <typename A, typename B, typename C>
100 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(A a, B b, C c);
103 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(A a, B b, C c);
101104 template <typename A, typename B, typename C>
102 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c);
105 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c);
103106
104107 // -- Conversion vector constructors --
105108
106109 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
107110 template <typename A, typename B, precision Q>
108 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec2<A, Q> const & a, B b);
111 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec2<A, Q> const & a, B b);
109112 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
110113 template <typename A, typename B, precision Q>
111 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b);
114 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b);
112115 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
113116 template <typename A, typename B, precision Q>
114 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(A a, tvec2<B, Q> const & b);
117 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(A a, tvec2<B, Q> const & b);
115118 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
116119 template <typename A, typename B, precision Q>
117 GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b);
120 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b);
118121 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
119122 template <typename U, precision Q>
120 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec3(tvec4<U, Q> const & v);
123 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec3(tvec4<U, Q> const & v);
121124
122125 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
123126 template <typename U, precision Q>
124 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec3(tvec3<U, Q> const & v);
127 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec3(tvec3<U, Q> const & v);
125128
126129 // -- Swizzle constructors --
127130 # if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
3232
3333 # if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
3434 template <typename T, precision P>
35 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3()
35 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3()
3636 # ifndef GLM_FORCE_NO_CTOR_INIT
3737 : x(0), y(0), z(0)
3838 # endif
4141
4242 # if !GLM_HAS_DEFAULTED_FUNCTIONS
4343 template <typename T, precision P>
44 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec3<T, P> const & v)
44 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec3<T, P> const & v)
4545 : x(v.x), y(v.y), z(v.z)
4646 {}
4747 # endif//!GLM_HAS_DEFAULTED_FUNCTIONS
4848
4949 template <typename T, precision P>
5050 template <precision Q>
51 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec3<T, Q> const & v)
51 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec3<T, Q> const & v)
5252 : x(v.x), y(v.y), z(v.z)
5353 {}
5454
5959 {}
6060
6161 template <typename T, precision P>
62 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(T scalar)
62 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(T scalar)
6363 : x(scalar), y(scalar), z(scalar)
6464 {}
6565
6666 template <typename T, precision P>
67 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(T a, T b, T c)
67 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(T a, T b, T c)
6868 : x(a), y(b), z(c)
6969 {}
7070
7272
7373 template <typename T, precision P>
7474 template <typename A, typename B, typename C>
75 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(A a, B b, C c) :
75 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(A a, B b, C c) :
7676 x(static_cast<T>(a)),
7777 y(static_cast<T>(b)),
7878 z(static_cast<T>(c))
8080
8181 template <typename T, precision P>
8282 template <typename A, typename B, typename C>
83 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c) :
83 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c) :
8484 x(static_cast<T>(a)),
8585 y(static_cast<T>(b)),
8686 z(static_cast<T>(c))
9090
9191 template <typename T, precision P>
9292 template <typename A, typename B, precision Q>
93 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, B b) :
93 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, B b) :
9494 x(static_cast<T>(a.x)),
9595 y(static_cast<T>(a.y)),
9696 z(static_cast<T>(b))
9898
9999 template <typename T, precision P>
100100 template <typename A, typename B, precision Q>
101 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b) :
101 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b) :
102102 x(static_cast<T>(a.x)),
103103 y(static_cast<T>(a.y)),
104104 z(static_cast<T>(b.x))
106106
107107 template <typename T, precision P>
108108 template <typename A, typename B, precision Q>
109 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(A a, tvec2<B, Q> const & b) :
109 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(A a, tvec2<B, Q> const & b) :
110110 x(static_cast<T>(a)),
111111 y(static_cast<T>(b.x)),
112112 z(static_cast<T>(b.y))
114114
115115 template <typename T, precision P>
116116 template <typename A, typename B, precision Q>
117 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b) :
117 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b) :
118118 x(static_cast<T>(a.x)),
119119 y(static_cast<T>(b.x)),
120120 z(static_cast<T>(b.y))
122122
123123 template <typename T, precision P>
124124 template <typename U, precision Q>
125 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec3<U, Q> const & v) :
125 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec3<U, Q> const & v) :
126126 x(static_cast<T>(v.x)),
127127 y(static_cast<T>(v.y)),
128128 z(static_cast<T>(v.z))
130130
131131 template <typename T, precision P>
132132 template <typename U, precision Q>
133 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec4<U, Q> const & v) :
133 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec4<U, Q> const & v) :
134134 x(static_cast<T>(v.x)),
135135 y(static_cast<T>(v.y)),
136136 z(static_cast<T>(v.z))
2525
2626 // -- Data --
2727
28 # if GLM_HAS_ALIGNED_TYPE
28 # if GLM_HAS_ONLY_XYZW
29 T x, y, z, w;
30
31 # elif GLM_HAS_ALIGNED_TYPE
2932 # if GLM_COMPILER & GLM_COMPILER_GCC
3033 # pragma GCC diagnostic push
3134 # pragma GCC diagnostic ignored "-Wpedantic"
3538 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
3639 # pragma clang diagnostic ignored "-Wnested-anon-types"
3740 # endif
38
41
3942 union
4043 {
4144 struct { T x, y, z, w;};
108111
109112 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
110113 template <typename A, typename B, typename C, precision Q>
111 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, B b, C c);
112 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
113 template <typename A, typename B, typename C, precision Q>
114 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c);
115 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
116 template <typename A, typename B, typename C, precision Q>
117 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, tvec2<B, Q> const & b, C c);
118 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
119 template <typename A, typename B, typename C, precision Q>
120 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c);
121 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
122 template <typename A, typename B, typename C, precision Q>
123 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, B b, tvec2<C, Q> const & c);
124 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
125 template <typename A, typename B, typename C, precision Q>
126 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c);
114 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec2<A, Q> const & a, B b, C c);
115 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
116 template <typename A, typename B, typename C, precision Q>
117 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c);
118 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
119 template <typename A, typename B, typename C, precision Q>
120 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, tvec2<B, Q> const & b, C c);
121 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
122 template <typename A, typename B, typename C, precision Q>
123 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c);
124 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
125 template <typename A, typename B, typename C, precision Q>
126 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, B b, tvec2<C, Q> const & c);
127 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
128 template <typename A, typename B, typename C, precision Q>
129 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c);
127130 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
128131 template <typename A, typename B, precision Q>
129 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec3<A, Q> const & a, B b);
132 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec3<A, Q> const & a, B b);
130133 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
131134 template <typename A, typename B, precision Q>
132 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b);
135 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b);
133136 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
134137 template <typename A, typename B, precision Q>
135 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, tvec3<B, Q> const & b);
138 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, tvec3<B, Q> const & b);
136139 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
137140 template <typename A, typename B, precision Q>
138 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b);
141 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b);
139142 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
140143 template <typename A, typename B, precision Q>
141 GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b);
144 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b);
142145
143146 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
144147 template <typename U, precision Q>
145 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec4(tvec4<U, Q> const& v);
148 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec4(tvec4<U, Q> const& v);
146149
147150 // -- Swizzle constructors --
148151 # if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
215215
216216 template <typename T, precision P>
217217 template <typename A, typename B, typename C, precision Q>
218 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, B b, C c) :
218 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, B b, C c) :
219219 x(static_cast<T>(a.x)),
220220 y(static_cast<T>(a.y)),
221221 z(static_cast<T>(b)),
224224
225225 template <typename T, precision P>
226226 template <typename A, typename B, typename C, precision Q>
227 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c) :
227 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c) :
228228 x(static_cast<T>(a.x)),
229229 y(static_cast<T>(a.y)),
230230 z(static_cast<T>(b.x)),
233233
234234 template <typename T, precision P>
235235 template <typename A, typename B, typename C, precision Q>
236 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(A s1, tvec2<B, Q> const & v, C s2) :
236 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(A s1, tvec2<B, Q> const & v, C s2) :
237237 x(static_cast<T>(s1)),
238238 y(static_cast<T>(v.x)),
239239 z(static_cast<T>(v.y)),
242242
243243 template <typename T, precision P>
244244 template <typename A, typename B, typename C, precision Q>
245 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c) :
245 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c) :
246246 x(static_cast<T>(a.x)),
247247 y(static_cast<T>(b.x)),
248248 z(static_cast<T>(b.y)),
251251
252252 template <typename T, precision P>
253253 template <typename A, typename B, typename C, precision Q>
254 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(A s1, B s2, tvec2<C, Q> const & v) :
254 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(A s1, B s2, tvec2<C, Q> const & v) :
255255 x(static_cast<T>(s1)),
256256 y(static_cast<T>(s2)),
257257 z(static_cast<T>(v.x)),
260260
261261 template <typename T, precision P>
262262 template <typename A, typename B, typename C, precision Q>
263 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c) :
263 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c) :
264264 x(static_cast<T>(a.x)),
265265 y(static_cast<T>(b.x)),
266266 z(static_cast<T>(c.x)),
269269
270270 template <typename T, precision P>
271271 template <typename A, typename B, precision Q>
272 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, B b) :
272 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, B b) :
273273 x(static_cast<T>(a.x)),
274274 y(static_cast<T>(a.y)),
275275 z(static_cast<T>(a.z)),
278278
279279 template <typename T, precision P>
280280 template <typename A, typename B, precision Q>
281 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b) :
281 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b) :
282282 x(static_cast<T>(a.x)),
283283 y(static_cast<T>(a.y)),
284284 z(static_cast<T>(a.z)),
287287
288288 template <typename T, precision P>
289289 template <typename A, typename B, precision Q>
290 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(A a, tvec3<B, Q> const & b) :
290 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(A a, tvec3<B, Q> const & b) :
291291 x(static_cast<T>(a)),
292292 y(static_cast<T>(b.x)),
293293 z(static_cast<T>(b.y)),
296296
297297 template <typename T, precision P>
298298 template <typename A, typename B, precision Q>
299 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b) :
299 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b) :
300300 x(static_cast<T>(a.x)),
301301 y(static_cast<T>(b.x)),
302302 z(static_cast<T>(b.y)),
305305
306306 template <typename T, precision P>
307307 template <typename A, typename B, precision Q>
308 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b) :
308 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b) :
309309 x(static_cast<T>(a.x)),
310310 y(static_cast<T>(a.y)),
311311 z(static_cast<T>(b.x)),
314314
315315 template <typename T, precision P>
316316 template <typename U, precision Q>
317 GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec4<U, Q> const & v) :
317 GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec4<U, Q> const & v) :
318318 x(static_cast<T>(v.x)),
319319 y(static_cast<T>(v.y)),
320320 z(static_cast<T>(v.z)),
2222 {
2323 GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const& ColorRGB, T GammaCorrection)
2424 {
25 return tvec4<T, P>(compute_rgbToSrgb<T, P, tvec3>::call(tvec3<T, P>(ColorRGB), GammaCorrection), ColorRGB.a);
25 return tvec4<T, P>(compute_rgbToSrgb<T, P, tvec3>::call(tvec3<T, P>(ColorRGB), GammaCorrection), ColorRGB.w);
2626 }
2727 };
2828
4343 {
4444 GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const& ColorSRGB, T Gamma)
4545 {
46 return tvec4<T, P>(compute_srgbToRgb<T, P, tvec3>::call(tvec3<T, P>(ColorSRGB), Gamma), ColorSRGB.a);
46 return tvec4<T, P>(compute_srgbToRgb<T, P, tvec3>::call(tvec3<T, P>(ColorSRGB), Gamma), ColorSRGB.w);
4747 }
4848 };
4949 }//namespace detail
104104 {
105105 tvec3<T, defaultp> rgbw = tvec3<T, defaultp>(T(0.2126), T(0.7152), T(0.0722));
106106
107 T col0 = (T(1) - s) * rgbw.r;
108 T col1 = (T(1) - s) * rgbw.g;
109 T col2 = (T(1) - s) * rgbw.b;
107 tvec3<T, defaultp> const col((T(1) - s) * rgbw);
110108
111109 tmat4x4<T, defaultp> result(T(1));
112 result[0][0] = col0 + s;
113 result[0][1] = col0;
114 result[0][2] = col0;
115 result[1][0] = col1;
116 result[1][1] = col1 + s;
117 result[1][2] = col1;
118 result[2][0] = col2;
119 result[2][1] = col2;
120 result[2][2] = col2 + s;
110 result[0][0] = col.x + s;
111 result[0][1] = col.x;
112 result[0][2] = col.x;
113 result[1][0] = col.y;
114 result[1][1] = col.y + s;
115 result[1][2] = col.y;
116 result[2][0] = col.z;
117 result[2][1] = col.z;
118 result[2][2] = col.z + s;
121119 return result;
122120 }
123121
1313 typename genType::value_type d = glm::dot(dir, planeNormal);
1414 typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
1515
16 if(d < Epsilon)
16 if(d < -Epsilon)
1717 {
1818 intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d;
1919 return true;
124124 {
125125 for(length_t i = 0; i < 3; i++)
126126 {
127 Scale.x *= static_cast<T>(-1);
127 Scale[i] *= static_cast<T>(-1);
128128 Row[i] *= static_cast<T>(-1);
129129 }
130130 }
421421 #elif GLM_ARCH & GLM_ARCH_AVX_BIT
422422 # include <immintrin.h>
423423 #elif GLM_ARCH & GLM_ARCH_SSE42_BIT
424 # if GLM_COMPILER & GLM_COMPILER_CLANG
425 # include <popcntintrin.h>
426 # endif
424427 # include <nmmintrin.h>
425428 #elif GLM_ARCH & GLM_ARCH_SSE41_BIT
426429 # include <smmintrin.h>
4949 ## [Lastest release](https://github.com/g-truc/glm/releases/latest)
5050
5151 ## Release notes
52
53 #### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) - 2017-01-22
54 ##### Fixes:
55 - Fixed GTC_packing test failing on GCC x86 due to denorms #212 #577
56 - Fixed POPCNT optimization build in Clang #512
57 - Fixed intersectRayPlane returns true in parallel case #578
58 - Fixed GCC 6.2 compiler warnings #580
59 - Fixed GTX_matrix_decompose decompose #582 #448
60 - Fixed GCC 4.5 and older build #566
61 - Fixed Visual C++ internal error when declaring a global vec type with siwzzle expression enabled #594
62 - Fixed GLM_FORCE_CXX11 with Clang and libstlc++ which wasn't using C++11 STL features. #604
5263
5364 #### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) - 2016-11-12
5465 ##### Improvements:
9797 glm::uint ulp(0);
9898 float diff(0.0f);
9999
100 for(float f = 0.001f; f < 10.f; f *= 1.001f)
100 for(float f = 0.001f; f < 10.f; f *= 1.01f)
101101 {
102102 glm::lowp_fvec1 u(f);
103103 glm::lowp_fvec1 lowp_v = glm::inversesqrt(u);
105105
106106 ulp = glm::max(glm::float_distance(lowp_v.x, defaultp_v), ulp);
107107 diff = glm::abs(lowp_v.x - defaultp_v);
108 Error += diff > 0.1f ? 1 : 0;
108109 }
109110
110111 return Error;
00 #define GLM_FORCE_MESSAGES
11 #define GLM_FORCE_SWIZZLE
22 #include <glm/glm.hpp>
3
4 #if !GLM_HAS_ONLY_XYZW
35
46 int test_ivec2_swizzle()
57 {
5961
6062 return Error;
6163 }
64 #endif//!GLM_HAS_ONLY_XYZW
6265
6366 int main()
6467 {
6568 int Error = 0;
6669
67 Error += test_ivec2_swizzle();
68 Error += test_ivec3_swizzle();
69 Error += test_ivec4_swizzle();
70 # if !GLM_HAS_ONLY_XYZW
71 Error += test_ivec2_swizzle();
72 Error += test_ivec3_swizzle();
73 Error += test_ivec4_swizzle();
7074
71 Error += test_vec4_swizzle();
75 Error += test_vec4_swizzle();
76 # endif//!GLM_HAS_ONLY_XYZW
7277
7378 return Error;
7479 }
225225
226226 int test_cpp_version()
227227 {
228 std::printf("__cplusplus: %lld\n", __cplusplus);
228 std::printf("__cplusplus: %d\n", static_cast<int>(__cplusplus));
229229
230230 return 0;
231231 }
9393 size_t align64_unaligned = alignof(glm::detail::storage<int, 64, false>::type);
9494 Error += align64_unaligned == 1 ? 0 : 1;
9595
96 # else
96 # elif GLM_COMPILER & GLM_COMPILER_GCC
9797
9898 size_t align1_unaligned = __alignof__(glm::detail::storage<int, 1, false>::type);
9999 Error += align1_unaligned == 1 ? 0 : 1;
11 #include <glm/vector_relational.hpp>
22 #include <glm/gtc/vec1.hpp>
33 #include <vector>
4
5 static glm::vec1 v1;
6 static glm::vec1 v2(1);
47
58 int test_vec1_operators()
69 {
44 #if GLM_HAS_TRIVIAL_QUERIES
55 # include <type_traits>
66 #endif
7
8 static glm::vec2 v1;
9 static glm::vec2 v2(1);
10 static glm::vec2 v3(1, 1);
711
812 int test_vec2_operators()
913 {
55 #include <glm/vec4.hpp>
66 #include <cstdio>
77 #include <vector>
8
9 static glm::vec3 v1;
10 static glm::vec3 v2(1);
11 static glm::vec3 v3(1, 1, 1);
812
913 int test_vec3_ctor()
1014 {
333337 return Error;
334338 }
335339
340 #if !GLM_HAS_ONLY_XYZW
336341 int test_vec3_swizzle_operators()
337342 {
338343 int Error = 0;
439444
440445 return Error;
441446 }
447 #endif//!GLM_HAS_ONLY_XYZW
442448
443449 int test_operator_increment()
444450 {
479485 Error += test_vec3_size();
480486 Error += test_vec3_swizzle3_2();
481487 Error += test_vec3_swizzle3_3();
482 Error += test_vec3_swizzle_partial();
483 Error += test_vec3_swizzle_operators();
484 Error += test_vec3_swizzle_functions();
485488 Error += test_operator_increment();
486489
487 return Error;
488 }
490 # if !GLM_HAS_ONLY_XYZW
491 Error += test_vec3_swizzle_partial();
492 Error += test_vec3_swizzle_operators();
493 Error += test_vec3_swizzle_functions();
494 # endif//!GLM_HAS_ONLY_XYZW
495
496 return Error;
497 }
66 #include <cstdio>
77 #include <ctime>
88 #include <vector>
9
10 static glm::vec4 v1;
11 static glm::vec4 v2(1);
12 static glm::vec4 v3(1, 1, 1, 1);
913
1014 template <int Value>
1115 struct mask
11 #include <gli/gli.hpp>
22 #include <gli/gtx/loader.hpp>
33
4 std::size_t const Size = 64;
5
46 int test_simplex()
57 {
6 std::size_t const Size = 256;
7
88 {
99 std::vector<glm::byte> ImageData(Size * Size * 3);
1010
6161
6262 int test_perlin()
6363 {
64 std::size_t const Size = 256;
65
6664 {
6765 std::vector<glm::byte> ImageData(Size * Size * 3);
6866
119117
120118 int test_perlin_pedioric()
121119 {
122 std::size_t const Size = 256;
123
124120 {
125121 std::vector<glm::byte> ImageData(Size * Size * 3);
126122
172172 glm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);
173173 glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
174174 glm::vec4 v1 = glm::unpackSnorm3x10_1x2(p1);
175 Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
175
176 Error += glm::all(glm::epsilonEqual(v0, v1, 0.01f)) ? 0 : 1;
176177 }
177178
178179 return Error;
196197 glm::vec4 v0 = glm::unpackUnorm3x10_1x2(p0);
197198 glm::uint32 p1 = glm::packUnorm3x10_1x2(v0);
198199 glm::vec4 v1 = glm::unpackUnorm3x10_1x2(p1);
199 Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
200
201 Error += glm::all(glm::epsilonEqual(v0, v1, 0.001f)) ? 0 : 1;
200202 }
201203
202204 return Error;
672674 Error += test_F3x9_E1x5();
673675 Error += test_Snorm3x10_1x2();
674676 Error += test_Unorm3x10_1x2();
677
675678 Error += test_I3x10_1x2();
676679 Error += test_U3x10_1x2();
677680 Error += test_Half1x16();
33 # include <array>
44 #endif
55
6 std::size_t const TestSamples = 10000;
7
68 int test_linearRand()
79 {
810 int Error = 0;
1416 glm::u8vec2 AMin(std::numeric_limits<glm::u8>::max());
1517 glm::u8vec2 AMax(std::numeric_limits<glm::u8>::min());
1618 {
17 for(std::size_t i = 0; i < 100000; ++i)
19 for(std::size_t i = 0; i < TestSamples; ++i)
1820 {
1921 glm::u8vec2 A = glm::linearRand(glm::u8vec2(Min), glm::u8vec2(Max));
2022 AMin = glm::min(AMin, A);
3537 glm::u16vec2 BMin(std::numeric_limits<glm::u16>::max());
3638 glm::u16vec2 BMax(std::numeric_limits<glm::u16>::min());
3739 {
38 for(std::size_t i = 0; i < 100000; ++i)
40 for(std::size_t i = 0; i < TestSamples; ++i)
3941 {
4042 glm::u16vec2 B = glm::linearRand(glm::u16vec2(Min), glm::u16vec2(Max));
4143 BMin = glm::min(BMin, B);
5658 glm::u32vec2 CMin(std::numeric_limits<glm::u32>::max());
5759 glm::u32vec2 CMax(std::numeric_limits<glm::u32>::min());
5860 {
59 for(std::size_t i = 0; i < 100000; ++i)
61 for(std::size_t i = 0; i < TestSamples; ++i)
6062 {
6163 glm::u32vec2 C = glm::linearRand(glm::u32vec2(Min), glm::u32vec2(Max));
6264 CMin = glm::min(CMin, C);
7779 glm::u64vec2 DMin(std::numeric_limits<glm::u64>::max());
7880 glm::u64vec2 DMax(std::numeric_limits<glm::u64>::min());
7981 {
80 for(std::size_t i = 0; i < 100000; ++i)
82 for(std::size_t i = 0; i < TestSamples; ++i)
8183 {
8284 glm::u64vec2 D = glm::linearRand(glm::u64vec2(Min), glm::u64vec2(Max));
8385 DMin = glm::min(DMin, D);
100102 glm::i8vec2 AMin(std::numeric_limits<glm::i8>::max());
101103 glm::i8vec2 AMax(std::numeric_limits<glm::i8>::min());
102104 {
103 for(std::size_t i = 0; i < 100000; ++i)
105 for(std::size_t i = 0; i < TestSamples; ++i)
104106 {
105107 glm::i8vec2 A = glm::linearRand(glm::i8vec2(Min), glm::i8vec2(Max));
106108 AMin = glm::min(AMin, A);
121123 glm::i16vec2 BMin(std::numeric_limits<glm::i16>::max());
122124 glm::i16vec2 BMax(std::numeric_limits<glm::i16>::min());
123125 {
124 for(std::size_t i = 0; i < 100000; ++i)
126 for(std::size_t i = 0; i < TestSamples; ++i)
125127 {
126128 glm::i16vec2 B = glm::linearRand(glm::i16vec2(Min), glm::i16vec2(Max));
127129 BMin = glm::min(BMin, B);
142144 glm::i32vec2 CMin(std::numeric_limits<glm::i32>::max());
143145 glm::i32vec2 CMax(std::numeric_limits<glm::i32>::min());
144146 {
145 for(std::size_t i = 0; i < 100000; ++i)
147 for(std::size_t i = 0; i < TestSamples; ++i)
146148 {
147149 glm::i32vec2 C = glm::linearRand(glm::i32vec2(Min), glm::i32vec2(Max));
148150 CMin = glm::min(CMin, C);
163165 glm::i64vec2 DMin(std::numeric_limits<glm::i64>::max());
164166 glm::i64vec2 DMax(std::numeric_limits<glm::i64>::min());
165167 {
166 for(std::size_t i = 0; i < 100000; ++i)
168 for(std::size_t i = 0; i < TestSamples; ++i)
167169 {
168170 glm::i64vec2 D = glm::linearRand(glm::i64vec2(Min), glm::i64vec2(Max));
169171 DMin = glm::min(DMin, D);
182184 }
183185 }
184186
185 for(std::size_t i = 0; i < 100000; ++i)
187 for(std::size_t i = 0; i < TestSamples; ++i)
186188 {
187189 glm::f32vec2 const A(glm::linearRand(glm::f32vec2(static_cast<float>(Min)), glm::f32vec2(static_cast<float>(Max))));
188190 if(!glm::all(glm::lessThanEqual(A, glm::f32vec2(static_cast<float>(Max)))))
201203 {
202204 float ResultFloat = 0.0f;
203205 double ResultDouble = 0.0f;
204 for(std::size_t i = 0; i < 100000; ++i)
206 for(std::size_t i = 0; i < TestSamples; ++i)
205207 {
206208 ResultFloat += glm::linearRand(-1.0f, 1.0f);
207209 ResultDouble += glm::linearRand(-1.0, 1.0);
220222 int Error = 0;
221223
222224 {
223 std::size_t Max = 100000;
225 std::size_t Max = TestSamples;
224226 float ResultFloat = 0.0f;
225227 double ResultDouble = 0.0f;
226228 double Radius = 2.0f;
244246 int Error = 0;
245247
246248 {
247 std::size_t Max = 100000;
249 std::size_t Max = TestSamples;
248250 float ResultFloatA = 0.0f;
249251 float ResultFloatB = 0.0f;
250252 float ResultFloatC = 0.0f;
282284 float ResultFloat = 0.0f;
283285 double ResultDouble = 0.0f;
284286
285 for(std::size_t i = 0; i < 100000; ++i)
287 for(std::size_t i = 0; i < TestSamples; ++i)
286288 {
287289 ResultFloat += glm::length(glm::diskRand(2.0f));
288290 ResultDouble += glm::length(glm::diskRand(2.0));
289291 }
290292
291 Error += ResultFloat < 200000.f ? 0 : 1;
292 Error += ResultDouble < 200000.0 ? 0 : 1;
293 Error += ResultFloat < float(TestSamples) * 2.f ? 0 : 1;
294 Error += ResultDouble < double(TestSamples) * 2.0 ? 0 : 1;
293295 assert(!Error);
294296 }
295297
304306 float ResultFloat = 0.0f;
305307 double ResultDouble = 0.0f;
306308
307 for(std::size_t i = 0; i < 100000; ++i)
309 for(std::size_t i = 0; i < TestSamples; ++i)
308310 {
309311 ResultFloat += glm::length(glm::ballRand(2.0f));
310312 ResultDouble += glm::length(glm::ballRand(2.0));
311313 }
312314
313 Error += ResultFloat < 200000.f ? 0 : 1;
314 Error += ResultDouble < 200000.0 ? 0 : 1;
315 Error += ResultFloat < float(TestSamples) * 2.f ? 0 : 1;
316 Error += ResultDouble < double(TestSamples) * 2.0 ? 0 : 1;
315317 assert(!Error);
316318 }
317319