+namespace {
+
+struct MappedType
+{
+ Msp::GL::DataType type;
+ GLenum gl_type;
+};
+
+// Make sure this is sorted!
+const MappedType type_map[] =
+{
+ { Msp::GL::UNSIGNED_BYTE, GL_UNSIGNED_BYTE },
+ { Msp::GL::UNSIGNED_SHORT, GL_UNSIGNED_SHORT },
+ { Msp::GL::UNSIGNED_INT, GL_UNSIGNED_INT },
+ { Msp::GL::BYTE, GL_BYTE },
+ { Msp::GL::SHORT, GL_SHORT },
+ { Msp::GL::INT, GL_INT },
+ { Msp::GL::HALF_FLOAT, GL_HALF_FLOAT },
+ { Msp::GL::FLOAT, GL_FLOAT },
+ { Msp::GL::DOUBLE, GL_DOUBLE },
+ { Msp::GL::BOOL, GL_BOOL },
+ { Msp::GL::INT_VEC2, GL_INT_VEC2 },
+ { Msp::GL::FLOAT_VEC2, GL_FLOAT_VEC2 },
+ { Msp::GL::BOOL_VEC2, GL_BOOL_VEC2 },
+ { Msp::GL::INT_VEC3, GL_INT_VEC3 },
+ { Msp::GL::FLOAT_VEC3, GL_FLOAT_VEC3 },
+ { Msp::GL::BOOL_VEC3, GL_BOOL_VEC3 },
+ { Msp::GL::INT_VEC4, GL_INT_VEC4 },
+ { Msp::GL::FLOAT_VEC4, GL_FLOAT_VEC4 },
+ { Msp::GL::BOOL_VEC4, GL_BOOL_VEC4 },
+ { Msp::GL::FLOAT_MAT2, GL_FLOAT_MAT2 },
+ { Msp::GL::DOUBLE_MAT2, GL_DOUBLE_MAT2 },
+ { Msp::GL::FLOAT_MAT3, GL_FLOAT_MAT3 },
+ { Msp::GL::DOUBLE_MAT3, GL_DOUBLE_MAT3 },
+ { Msp::GL::FLOAT_MAT4, GL_FLOAT_MAT4 },
+ { Msp::GL::DOUBLE_MAT4, GL_DOUBLE_MAT4 },
+ { Msp::GL::FLOAT_MAT2x3, GL_FLOAT_MAT2x3 },
+ { Msp::GL::DOUBLE_MAT2x3, GL_DOUBLE_MAT2x3 },
+ { Msp::GL::FLOAT_MAT3x2, GL_FLOAT_MAT3x2 },
+ { Msp::GL::DOUBLE_MAT3x2, GL_DOUBLE_MAT3x2 },
+ { Msp::GL::FLOAT_MAT2x4, GL_FLOAT_MAT2x4 },
+ { Msp::GL::DOUBLE_MAT2x4, GL_DOUBLE_MAT2x4 },
+ { Msp::GL::FLOAT_MAT4x2, GL_FLOAT_MAT4x2 },
+ { Msp::GL::DOUBLE_MAT4x2, GL_DOUBLE_MAT4x2 },
+ { Msp::GL::FLOAT_MAT3x4, GL_FLOAT_MAT3x4 },
+ { Msp::GL::DOUBLE_MAT3x4, GL_DOUBLE_MAT3x4 },
+ { Msp::GL::FLOAT_MAT4x3, GL_FLOAT_MAT4x3 },
+ { Msp::GL::DOUBLE_MAT4x3, GL_DOUBLE_MAT4x3 },
+ { Msp::GL::IMAGE_1D, GL_IMAGE_1D },
+ { Msp::GL::IMAGE_2D, GL_IMAGE_2D },
+ { Msp::GL::IMAGE_3D, GL_IMAGE_3D },
+ { Msp::GL::IMAGE_CUBE, GL_IMAGE_CUBE },
+ { Msp::GL::IMAGE_1D_ARRAY, GL_IMAGE_1D_ARRAY },
+ { Msp::GL::IMAGE_2D_ARRAY, GL_IMAGE_2D_ARRAY },
+ { Msp::GL::IMAGE_CUBE_ARRAY, GL_IMAGE_CUBE_MAP_ARRAY },
+ { Msp::GL::SAMPLER_1D, GL_SAMPLER_1D },
+ { Msp::GL::SAMPLER_2D, GL_SAMPLER_2D },
+ { Msp::GL::SAMPLER_3D, GL_SAMPLER_3D },
+ { Msp::GL::SAMPLER_CUBE, GL_SAMPLER_CUBE },
+ { Msp::GL::SAMPLER_1D_ARRAY, GL_SAMPLER_1D_ARRAY },
+ { Msp::GL::SAMPLER_2D_ARRAY, GL_SAMPLER_2D_ARRAY },
+ { Msp::GL::SAMPLER_CUBE_ARRAY, GL_SAMPLER_CUBE_MAP_ARRAY },
+ { Msp::GL::SAMPLER_1D_SHADOW, GL_SAMPLER_1D_SHADOW },
+ { Msp::GL::SAMPLER_2D_SHADOW, GL_SAMPLER_2D_SHADOW },
+ { Msp::GL::SAMPLER_CUBE_SHADOW, GL_SAMPLER_CUBE_SHADOW },
+ { Msp::GL::SAMPLER_1D_ARRAY_SHADOW, GL_SAMPLER_1D_ARRAY_SHADOW },
+ { Msp::GL::SAMPLER_2D_ARRAY_SHADOW, GL_SAMPLER_2D_ARRAY_SHADOW },
+ { Msp::GL::SAMPLER_CUBE_ARRAY_SHADOW, GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW }
+};
+const unsigned type_map_size = sizeof(type_map)/sizeof(MappedType);
+
+bool type_compare(const MappedType &mt, Msp::GL::DataType t)
+{ return mt.type<t; }
+
+}
+