From: Mikko Rasa Date: Tue, 28 Sep 2021 22:42:30 +0000 (+0300) Subject: Add a TypeTraits struct to convert C++ types into DataType enum values X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=4e20afbda6adb0008e286bf7fb947438aeb7a97e;p=libs%2Fgl.git Add a TypeTraits struct to convert C++ types into DataType enum values --- diff --git a/source/core/datatype.h b/source/core/datatype.h index a0b80e35..a9115613 100644 --- a/source/core/datatype.h +++ b/source/core/datatype.h @@ -1,6 +1,8 @@ #ifndef MSP_GL_DATATYPE_H_ #define MSP_GL_DATATYPE_H_ +#include +#include #include "gl.h" namespace Msp { @@ -108,6 +110,29 @@ inline DataType get_element_type(DataType t) return static_cast((t&~0xC0FF) | (get_type_size(t)/elems)); } +template struct TypeTraits; +template<> struct TypeTraits { static const DataType type = BOOL; }; +template<> struct TypeTraits { static const DataType type = BYTE; }; +template<> struct TypeTraits { static const DataType type = UNSIGNED_BYTE; }; +template<> struct TypeTraits { static const DataType type = SHORT; }; +template<> struct TypeTraits { static const DataType type = UNSIGNED_SHORT; }; +template<> struct TypeTraits { static const DataType type = INT; }; +template<> struct TypeTraits { static const DataType type = UNSIGNED_INT; }; +template<> struct TypeTraits { static const DataType type = FLOAT; }; +template<> struct TypeTraits { static const DataType type = DOUBLE; }; + +template +struct TypeTraits> +{ + static const DataType type = static_cast((TypeTraits::type&0xF00) | ((TypeTraits::type&0xFF)*N) | ((N-1)<<12)); +}; + +template +struct TypeTraits> +{ + static const DataType type = static_cast((TypeTraits::type&0xF00) | ((TypeTraits::type&0xFF)*N*M) | ((N-1)<<12) | ((M-1)<<14)); +}; + GLenum get_gl_type(DataType); DataType from_gl_type(GLenum); @@ -116,4 +141,6 @@ void require_type(DataType); } // namespace GL } // namespace Msp +#include "datatype_backend.h" + #endif