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