X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fdatatype.h;h=d2739c49b6f7471ad3fed90c5e12de0ec27f4911;hp=a0b80e35772cc303ef88f9f2d586199cc739f799;hb=HEAD;hpb=1a3eb3759708f41f0d57a271f2953e4de0506858 diff --git a/source/core/datatype.h b/source/core/datatype.h index a0b80e35..29789907 100644 --- a/source/core/datatype.h +++ b/source/core/datatype.h @@ -1,15 +1,18 @@ #ifndef MSP_GL_DATATYPE_H_ #define MSP_GL_DATATYPE_H_ -#include "gl.h" +#include +#include namespace Msp { namespace GL { /** -Identifies a data type. The values are bitfields laid as follows: +Identifies a data type. -__ds addd ccrr _bfg ssss ssss +The values are bitfields laid as follows: + +__hm addd ccrr _bfg ssss ssss ││ │ │ │ │ │││ └╴Size (bytes) ││ │ │ │ │ ││└──────────╴Signed flag ││ │ │ │ │ │└───────────╴Floating-point flag @@ -22,7 +25,7 @@ __ds addd ccrr _bfg ssss ssss └──────────────────────────╴Shadow sampler flag This information is presented for internal documentation purposes only; it is -inadvisable for programs to rely on it. +inadvisable for applications to rely on it. */ enum DataType { @@ -44,6 +47,9 @@ enum DataType INT_VEC2 = 0x1108, INT_VEC3 = 0x210C, INT_VEC4 = 0x3110, + UINT_VEC2 = 0x1008, + UINT_VEC3 = 0x200C, + UINT_VEC4 = 0x3010, BOOL_VEC2 = 0x1402, BOOL_VEC3 = 0x2403, BOOL_VEC4 = 0x3404, @@ -90,11 +96,12 @@ enum DataType SAMPLER_CUBE_ARRAY_SHADOW = 0x3C0304 }; -inline unsigned get_type_size(DataType t) { return t&0xFF; } +inline std::size_t get_type_size(DataType t) { return t&0xFF; } inline bool is_float(DataType t) { return t&0x200; } inline bool is_matrix(DataType t) { return t&0xC000; } inline bool is_vector(DataType t) { return !is_matrix(t) && (t&0x3000); } inline bool is_image(DataType t) { return t&0x70000; } +inline bool is_sampled_image(DataType t) { return t&0x100000; } inline DataType get_matrix_column_type(DataType t) { @@ -108,12 +115,34 @@ 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)); +}; void require_type(DataType); } // namespace GL } // namespace Msp +#include "datatype_backend.h" + #endif