Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //#include <glm/detail/type_scalar.h>
- //#include <glm/detail/type_vec1.h>
- #include <glm/detail/qualifier.h>
- #define GLM_VEC_DATA(L, T) T data[L]; T e[L];
- #define GLM_MAT_DATA(C, R, T) T data[C * R]; T e[R][C];
- #define GLM_DEFINE_TVEC1(T)\
- typedef union\
- {\
- GLM_VEC_DATA(1, T);\
- T x;\
- T s;\
- T r;\
- } glm_vec(1, T);
- #define GLM_DEFINE_TVEC2(T)\
- typedef union\
- {\
- GLM_VEC_DATA(2, T);\
- struct { T x, y; };\
- struct { T s, t; };\
- struct { T r, g; };\
- } glm_vec(2, T);
- #define GLM_DEFINE_TVEC3(T)\
- typedef union\
- {\
- GLM_VEC_DATA(3, T);\
- struct { T x, y, z; };\
- struct { T s, t, p; };\
- struct { T r, g, b; };\
- } glm_vec(3, T);
- #define GLM_DEFINE_TVEC4(T)\
- typedef union\
- {\
- GLM_VEC_DATA(4, T);\
- struct { T x, y, z, w; };\
- struct { T s, t, p, q; };\
- struct { T r, g, b, a; };\
- } glm_vec(4, T);
- GLM_DEFINE_TVEC1(float)
- GLM_DEFINE_TVEC1(double)
- GLM_DEFINE_TVEC1(int)
- GLM_DEFINE_TVEC1(uint)
- GLM_DEFINE_TVEC1(bool)
- GLM_DEFINE_TVEC2(float)
- GLM_DEFINE_TVEC2(double)
- GLM_DEFINE_TVEC2(int)
- GLM_DEFINE_TVEC2(uint)
- GLM_DEFINE_TVEC2(bool)
- GLM_DEFINE_TVEC3(float)
- GLM_DEFINE_TVEC3(double)
- GLM_DEFINE_TVEC3(int)
- GLM_DEFINE_TVEC3(uint)
- GLM_DEFINE_TVEC3(bool)
- GLM_DEFINE_TVEC4(float)
- GLM_DEFINE_TVEC4(double)
- GLM_DEFINE_TVEC4(int)
- GLM_DEFINE_TVEC4(uint)
- GLM_DEFINE_TVEC4(bool)
- #define glm_vec1 glm_float1
- #define glm_vec2 glm_float2
- #define glm_vec3 glm_float3
- #define glm_vec4 glm_float4
- #define glm_dvec1 glm_double1
- #define glm_dvec2 glm_double2
- #define glm_dvec3 glm_double3
- #define glm_dvec4 glm_double4
- #define glm_ivec1 glm_int1
- #define glm_ivec2 glm_int2
- #define glm_ivec3 glm_int3
- #define glm_ivec4 glm_int4
- #define glm_uvec1 glm_uint1
- #define glm_uvec2 glm_uint2
- #define glm_uvec3 glm_uint3
- #define glm_uvec4 glm_uint4
- #define glm_bvec1 glm_bool1
- #define glm_bvec2 glm_bool2
- #define glm_bvec3 glm_bool3
- #define glm_bvec4 glm_bool4
- #pragma GCC push_options
- #pragma GCC optimize ("unroll-loops")
- #define GLM_CONVERT_VEC(L, T, IN)\
- ({\
- __typeof__((IN)) in = (IN);\
- glm_vec(L, T) out;\
- for(size_t i = 0; i < L; ++i) out.data[i] = (T)in.data[i];\
- out;\
- })
- #define GLM_CONVERT_TVEC1(T, IN) GLM_CONVERT_VEC(1, T, IN)
- #define GLM_CONVERT_TVEC2(T, IN) GLM_CONVERT_VEC(2, T, IN)
- #define GLM_CONVERT_TVEC3(T, IN) GLM_CONVERT_VEC(3, T, IN)
- #define GLM_CONVERT_TVEC4(T, IN) GLM_CONVERT_VEC(4, T, IN)
- int main(int argc, char** argv)
- {
- {
- /* Vector casting */
- glm_ivec4 v1 = {52, 0, 22, -24};
- glm_bvec2 v2 = GLM_CONVERT_TVEC2(bool, v1);
- printf("bvec2(%d, %d)\n", v2.x, v2.y);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement