|
|
@@ -28,6 +28,14 @@ |
|
|
|
namespace lol |
|
|
|
{ |
|
|
|
|
|
|
|
/* Some compilers do not support const members in anonymous unions. So |
|
|
|
* far, GCC (>= 4.6), CLang (3.0) and Visual Studio (>= 2010) appear to |
|
|
|
* work properly. */ |
|
|
|
#undef LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
#if defined __GNUC__ && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)) |
|
|
|
# define LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS 1 |
|
|
|
#endif |
|
|
|
|
|
|
|
#define DECLARE_VECTOR_TYPEDEFS(tname, suffix) \ |
|
|
|
template <typename T> struct tname; \ |
|
|
|
typedef tname<half> f16##suffix; \ |
|
|
@@ -128,6 +136,9 @@ template <typename T> struct BVec2 |
|
|
|
struct { T r, g; }; |
|
|
|
struct { T s, t; }; |
|
|
|
|
|
|
|
#if LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
# define const /* disabled */ |
|
|
|
#endif |
|
|
|
XVec2<T,0x00> const xx, rr, ss; |
|
|
|
XVec2<T,0x01> const xy, rg, st; /* lvalue */ |
|
|
|
XVec2<T,0x10> const yx, gr, ts; /* lvalue */ |
|
|
@@ -158,6 +169,9 @@ template <typename T> struct BVec2 |
|
|
|
XVec4<T,0x1101> const yyxy, ggrg, ttst; |
|
|
|
XVec4<T,0x1110> const yyyx, gggr, ttts; |
|
|
|
XVec4<T,0x1111> const yyyy, gggg, tttt; |
|
|
|
#if LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
# undef const |
|
|
|
#endif |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
@@ -287,6 +301,9 @@ template <typename T> struct BVec3 |
|
|
|
struct { T r, g, b; }; |
|
|
|
struct { T s, t, p; }; |
|
|
|
|
|
|
|
#if LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
# define const /* disabled */ |
|
|
|
#endif |
|
|
|
XVec2<T,0x00> const xx, rr, ss; |
|
|
|
XVec2<T,0x01> const xy, rg, st; /* lvalue */ |
|
|
|
XVec2<T,0x02> const xz, rb, sp; /* lvalue */ |
|
|
@@ -406,6 +423,9 @@ template <typename T> struct BVec3 |
|
|
|
XVec4<T,0x2220> const zzzx, bbbr, ppps; |
|
|
|
XVec4<T,0x2221> const zzzy, bbbg, pppt; |
|
|
|
XVec4<T,0x2222> const zzzz, bbbb, pppp; |
|
|
|
#if LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
# undef const |
|
|
|
#endif |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
@@ -468,6 +488,9 @@ template <typename T> struct BVec4 |
|
|
|
struct { T r, g, b, a; }; |
|
|
|
struct { T s, t, p, q; }; |
|
|
|
|
|
|
|
#if LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
# define const /* disabled */ |
|
|
|
#endif |
|
|
|
XVec2<T,0x00> const xx, rr, ss; |
|
|
|
XVec2<T,0x01> const xy, rg, st; /* lvalue */ |
|
|
|
XVec2<T,0x02> const xz, rb, sp; /* lvalue */ |
|
|
@@ -806,6 +829,9 @@ template <typename T> struct BVec4 |
|
|
|
XVec4<T,0x3331> const wwwy, aaag, qqqt; |
|
|
|
XVec4<T,0x3332> const wwwz, aaab, qqqp; |
|
|
|
XVec4<T,0x3333> const wwww, aaaa, qqqq; |
|
|
|
#if LOL_NO_CONST_MEMBERS_IN_ANONYMOUS_UNIONS |
|
|
|
# undef const |
|
|
|
#endif |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|