X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fdatatype.h;h=1620dc58933d7fe1b5f9ae130ab7bff7fa104c11;hb=24b24e2203c776aacd9744bb947f5cf47b03d328;hp=a0b80e35772cc303ef88f9f2d586199cc739f799;hpb=1a3eb3759708f41f0d57a271f2953e4de0506858;p=libs%2Fgl.git diff --git a/source/core/datatype.h b/source/core/datatype.h index a0b80e35..1620dc58 100644 --- a/source/core/datatype.h +++ b/source/core/datatype.h @@ -1,7 +1,8 @@ #ifndef MSP_GL_DATATYPE_H_ #define MSP_GL_DATATYPE_H_ -#include "gl.h" +#include +#include namespace Msp { namespace GL { @@ -108,8 +109,31 @@ inline DataType get_element_type(DataType t) return static_cast((t&~0xC0FF) | (get_type_size(t)/elems)); } -GLenum get_gl_type(DataType); -DataType from_gl_type(GLenum); +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)); +}; + +unsigned get_gl_type(DataType); +DataType from_gl_type(unsigned); void require_type(DataType);