39 template <VEX_Type VTYPE, VEX_Precision PREC>
43 #define VEX_TYPERESOLVE_CASE(VexType, CPPType) \
45 struct VEX_VexTypeResolver<VEX##CPPType<VEX_32> > \
47 static constexpr VEX_Type type = VEX_TYPE_##VexType; \
50 struct VEX_VexTypeResolver<VEX##CPPType<VEX_64> > \
52 static constexpr VEX_Type type = VEX_TYPE_##VexType; \
54 template <VEX_Precision PREC> \
55 struct VEX_TypeResolver<VEX_TYPE_##VexType, PREC> \
57 typedef VEX##CPPType<PREC> T; \
75 template <VEX_Precision PREC>
85 template <VEX_Precision PREC>
95 template <VEX_Precision PREC>
101 #undef VEX_TYPERESOLVE_CASE
161 {
return myRead == rhs.myRead &&
162 myWrite == rhs.myWrite; }
164 {
return !(*
this == rhs); }
168 if (myRead && myWrite)
return "modify";
169 if (myRead)
return "read";
170 if (myWrite)
return "write";
179 static const VEX_RWType VEX_RW_NONE(
false,
false);
180 static const VEX_RWType VEX_RW_READ(
true,
false);
181 static const VEX_RWType VEX_RW_WRITE(
false,
true);
182 static const VEX_RWType VEX_RW_MODIFY(
true,
true);
212 default:
return false;
221 template <VEX_Precision PREC>
static inline constexpr
size_t
253 template <
typename T>
static inline constexpr
int VEXtupleSize()
255 template <>
inline constexpr
int VEXtupleSize<VEXint<VEX_32>>() {
return 1; }
256 template <>
inline constexpr
int VEXtupleSize<VEXint<VEX_64>>() {
return 1; }
257 template <>
inline constexpr
int VEXtupleSize<VEXfloat<VEX_32>>() {
return 1; }
258 template <>
inline constexpr
int VEXtupleSize<VEXfloat<VEX_64>>() {
return 1; }
259 template <>
inline constexpr
int VEXtupleSize<VEXvec2<VEX_32>>() {
return 2; }
260 template <>
inline constexpr
int VEXtupleSize<VEXvec2<VEX_64>>() {
return 2; }
261 template <>
inline constexpr
int VEXtupleSize<VEXvec3<VEX_32>>() {
return 3; }
262 template <>
inline constexpr
int VEXtupleSize<VEXvec3<VEX_64>>() {
return 3; }
263 template <>
inline constexpr
int VEXtupleSize<VEXvec4<VEX_32>>() {
return 4; }
264 template <>
inline constexpr
int VEXtupleSize<VEXvec4<VEX_64>>() {
return 4; }
265 template <>
inline constexpr
int VEXtupleSize<VEXmat2<VEX_32>>() {
return 4; }
266 template <>
inline constexpr
int VEXtupleSize<VEXmat2<VEX_64>>() {
return 4; }
267 template <>
inline constexpr
int VEXtupleSize<VEXmat3<VEX_32>>() {
return 9; }
268 template <>
inline constexpr
int VEXtupleSize<VEXmat3<VEX_64>>() {
return 9; }
269 template <>
inline constexpr
int VEXtupleSize<VEXmat4<VEX_32>>() {
return 16; }
270 template <>
inline constexpr
int VEXtupleSize<VEXmat4<VEX_64>>() {
return 16; }
VEX_Type
VEX variable types.
GLuint GLsizei const GLchar * label
VEX_API const char * VEXgetBaseType(VEX_BaseType type)
VEX_API const char * VEXgetUIHint(VEX_UIHint type)
VEX_API FS_DiskCache & VEXcompileCache()
#define VEX_TYPERESOLVE_CASE(VexType, CPPType)
VEX_API bool VEXisString(VEX_Type type)
VEX_API const char * VEXobjectFileVersion()
VEX_API const char * VEXgetStorage(VEX_Storage type)
typename VEX_PrecisionResolver< P >::vec3_type VEXvec3
SYS_FORCE_INLINE constexpr bool VEXisPrecisioned(VEX_Type type)
typename VEX_PrecisionResolver< P >::float_type VEXfloat
VEX_API const char * VEXgetShortStorage(VEX_Storage type)
VEX_API bool VEXisFloat(VEX_Type type)
typename VEX_PrecisionResolver< P >::mat4_type VEXmat4
MX_GENSHADER_API const TypeDesc * VECTOR2
typename VEX_PrecisionResolver< P >::mat2_type VEXmat2
VEX_API const char * VEXgetType(VEX_Type type)
typename VEX_PrecisionResolver< P >::vec2_type VEXvec2
VEX_API int VEXtupleSize(VEX_Type type)
MX_GENSHADER_API const TypeDesc * VECTOR4
typename VEX_PrecisionResolver< P >::vec4_type VEXvec4
#define SYS_UNIMPLEMENTED_TEMPLATE(T)
bool operator!=(const VEX_RWType &rhs) const
typename VEX_PrecisionResolver< P >::int_type VEXint
VEX_API bool VEXisInt(VEX_Type type)
GLubyte GLubyte GLubyte GLubyte w
MX_GENSHADER_API const TypeDesc * INTEGER
VEX_RWType(bool read, bool write)
void setRead(bool r=true)
typename VEX_PrecisionResolver< P >::mat3_type VEXmat3
bool operator==(const VEX_RWType &rhs) const
void setWrite(bool w=true)
VEX_API char VEXgetMangleType(VEX_Type type)
const char * asString() const