1 #define GLM_FORCE_MESSAGES
2 #include <glm/glm.hpp>
3
4 #if GLM_HAS_ALIGNED_TYPE
5 #include <glm/gtc/type_aligned.hpp>
6
7 GLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_lowp>::value, "aligned_lowp is not aligned");
8 GLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_mediump>::value, "aligned_mediump is not aligned");
9 GLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_highp>::value, "aligned_highp is not aligned");
10 GLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_highp>::value, "packed_highp is aligned");
11 GLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_mediump>::value, "packed_mediump is aligned");
12 GLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_lowp>::value, "packed_lowp is aligned");
13
14 struct my_vec4_packed
15 {
16 glm::uint32 a;
17 glm::vec4 b;
18 };
19 GLM_STATIC_ASSERT(sizeof(my_vec4_packed) == sizeof(glm::uint32) + sizeof(glm::vec4), "glm::vec4 packed is not correct");
20
21 struct my_vec4_aligned
22 {
23 glm::uint32 a;
24 glm::aligned_vec4 b;
25 };
26 GLM_STATIC_ASSERT(sizeof(my_vec4_aligned) == sizeof(glm::aligned_vec4) * 2, "glm::vec4 aligned is not correct");
27
28 struct my_dvec4_packed
29 {
30 glm::uint64 a;
31 glm::dvec4 b;
32 };
33 GLM_STATIC_ASSERT(sizeof(my_dvec4_packed) == sizeof(glm::uint64) + sizeof(glm::dvec4), "glm::dvec4 packed is not correct");
34
35 struct my_dvec4_aligned
36 {
37 glm::uint64 a;
38 glm::aligned_dvec4 b;
39 };
40 //GLM_STATIC_ASSERT(sizeof(my_dvec4_aligned) == sizeof(glm::aligned_dvec4) * 2, "glm::dvec4 aligned is not correct");
41
42 struct my_ivec4_packed
43 {
44 glm::uint32 a;
45 glm::ivec4 b;
46 };
47 GLM_STATIC_ASSERT(sizeof(my_ivec4_packed) == sizeof(glm::uint32) + sizeof(glm::ivec4), "glm::ivec4 packed is not correct");
48
49 struct my_ivec4_aligned
50 {
51 glm::uint32 a;
52 glm::aligned_ivec4 b;
53 };
54 GLM_STATIC_ASSERT(sizeof(my_ivec4_aligned) == sizeof(glm::aligned_ivec4) * 2, "glm::ivec4 aligned is not correct");
55
56 struct my_u8vec4_packed
57 {
58 glm::uint32 a;
59 glm::u8vec4 b;
60 };
61 GLM_STATIC_ASSERT(sizeof(my_u8vec4_packed) == sizeof(glm::uint32) + sizeof(glm::u8vec4), "glm::u8vec4 packed is not correct");
62
test_copy()63 int test_copy()
64 {
65 int Error = 0;
66
67 {
68 glm::aligned_ivec4 const a(1, 2, 3, 4);
69 glm::ivec4 const u(a);
70
71 Error += a.x == u.x ? 0 : 1;
72 Error += a.y == u.y ? 0 : 1;
73 Error += a.z == u.z ? 0 : 1;
74 Error += a.w == u.w ? 0 : 1;
75 }
76
77 {
78 my_ivec4_aligned a;
79 a.b = glm::ivec4(1, 2, 3, 4);
80
81 my_ivec4_packed u;
82 u.b = a.b;
83
84 Error += a.b.x == u.b.x ? 0 : 1;
85 Error += a.b.y == u.b.y ? 0 : 1;
86 Error += a.b.z == u.b.z ? 0 : 1;
87 Error += a.b.w == u.b.w ? 0 : 1;
88 }
89
90 return Error;
91 }
92
main()93 int main()
94 {
95 int Error = 0;
96
97 my_vec4_aligned GNA;
98 my_dvec4_aligned GNI;
99
100 std::size_t A0 = sizeof(my_dvec4_aligned);
101 std::size_t B0 = sizeof(my_dvec4_packed);
102 std::size_t C0 = sizeof(glm::aligned_dvec4);
103
104 std::size_t A1 = sizeof(my_vec4_aligned);
105 std::size_t B1 = sizeof(my_vec4_packed);
106 std::size_t C1 = sizeof(glm::aligned_vec4);
107
108 return Error;
109 }
110
111 #else
112
main()113 int main()
114 {
115 return 0;
116 }
117
118 #endif//GLM_HAS_ALIGNED_TYPE
119