Index: trunk/nv/io_event.hh
===================================================================
--- trunk/nv/io_event.hh	(revision 67)
+++ trunk/nv/io_event.hh	(revision 68)
@@ -103,5 +103,5 @@
 	NV_REGISTER_NAME( system_event );
 
-	struct input_event
+	struct io_event
 	{
 		io_event_code type;
@@ -114,5 +114,5 @@
 		};
 	};
-	NV_REGISTER_NAME( input_event );
+	NV_REGISTER_NAME( io_event );
 
 	const char* get_key_name( key_code key );
Index: trunk/nv/types.hh
===================================================================
--- trunk/nv/types.hh	(revision 67)
+++ trunk/nv/types.hh	(revision 68)
@@ -37,6 +37,14 @@
 		INT_VECTOR_2,
 		INT_VECTOR_3,
-		INT_VECTOR_4
-	};
+		INT_VECTOR_4,
+		// unsupported gl conversion, remove?
+		BYTE_VECTOR_2, 
+		BYTE_VECTOR_3,
+		BYTE_VECTOR_4,
+	};
+
+	typedef glm::detail::tvec2<uint8> i8vec2;
+	typedef glm::detail::tvec3<uint8> i8vec3;
+	typedef glm::detail::tvec4<uint8> i8vec4;
 
 	typedef glm::vec2 vec2;
@@ -70,4 +78,8 @@
 	template <> struct enum_to_type< INT_VECTOR_4 > { typedef ivec4 type; };
 
+	template <> struct enum_to_type< BYTE_VECTOR_2 > { typedef i8vec2 type; };
+	template <> struct enum_to_type< BYTE_VECTOR_3 > { typedef i8vec3 type; };
+	template <> struct enum_to_type< BYTE_VECTOR_4 > { typedef i8vec4 type; };
+
 	template <> struct enum_to_type< FLOAT_MATRIX_2 > { typedef mat2 type; };
 	template <> struct enum_to_type< FLOAT_MATRIX_3 > { typedef mat3 type; };
@@ -92,4 +104,8 @@
 	template <> struct type_to_enum< ivec4 > { static const etype type = INT_VECTOR_4; };
 
+	template <> struct type_to_enum< i8vec2 > { static const etype type = BYTE_VECTOR_2; };
+	template <> struct type_to_enum< i8vec3 > { static const etype type = BYTE_VECTOR_3; };
+	template <> struct type_to_enum< i8vec4 > { static const etype type = BYTE_VECTOR_4; };
+
 	template <> struct type_to_enum< mat2 > { static const etype type = FLOAT_MATRIX_2; };
 	template <> struct type_to_enum< mat3 > { static const etype type = FLOAT_MATRIX_3; };
@@ -125,4 +141,8 @@
 	template <> inline const char* get_type_name< ivec3 > () { return "ivec3"; }
 	template <> inline const char* get_type_name< ivec4 > () { return "ivec4"; }
+
+	template <> inline const char* get_type_name< i8vec2 > () { return "i8vec2"; }
+	template <> inline const char* get_type_name< i8vec3 > () { return "i8vec3"; }
+	template <> inline const char* get_type_name< i8vec4 > () { return "i8vec4"; }
 
 	template <> inline const char* get_type_name< mat2 > () { return "mat2"; }
Index: trunk/src/gl/gl_enum.cc
===================================================================
--- trunk/src/gl/gl_enum.cc	(revision 67)
+++ trunk/src/gl/gl_enum.cc	(revision 68)
@@ -205,4 +205,8 @@
 	case INT_VECTOR_3   : return GL_INT_VEC3;
 	case INT_VECTOR_4   : return GL_INT_VEC4;
+	// remove, error or ?
+	case BYTE_VECTOR_2  : return GL_INT_VEC2;
+	case BYTE_VECTOR_3  : return GL_INT_VEC3;
+	case BYTE_VECTOR_4  : return GL_INT_VEC4;
 	default : return 0; // TODO: throw!
 	}
