Index: /trunk/nv/gfx/keyframed_mesh.hh
===================================================================
--- /trunk/nv/gfx/keyframed_mesh.hh	(revision 429)
+++ /trunk/nv/gfx/keyframed_mesh.hh	(revision 430)
@@ -19,5 +19,5 @@
 	{
 	public:
-		keyframed_mesh( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map );
+		keyframed_mesh( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map );
 		virtual vertex_array get_vertex_array() const { return m_va; }
 		virtual size_t get_index_count() const { return m_index_count; }
@@ -50,5 +50,4 @@
 		context*     m_context;
 
-		const mesh_data*        m_mesh_data;
 		const mesh_nodes_data*  m_tag_map;
 
@@ -73,5 +72,5 @@
 	{
 	public:
-		keyframed_mesh_gpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map );
+		keyframed_mesh_gpu( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map );
 		void update_animation( animation_entry* anim, uint32 a_anim_time );
 		virtual void update( program a_program );
@@ -88,8 +87,9 @@
 	{
 	public:
-		keyframed_mesh_cpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map );
+		keyframed_mesh_cpu( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map );
 		void update_animation( animation_entry* anim, uint32 a_anim_time );
 		~keyframed_mesh_cpu();
 	private:
+		const uint8* m_model_data;
 		uint8*  m_data;
 	};
Index: /trunk/nv/gfx/mesh_creator.hh
===================================================================
--- /trunk/nv/gfx/mesh_creator.hh	(revision 429)
+++ /trunk/nv/gfx/mesh_creator.hh	(revision 430)
@@ -18,5 +18,5 @@
 	{
 	public:
-		mesh_data_creator( mesh_data* data ) : m_data( data ) {}
+		mesh_data_creator( data_channel_set* data ) : m_data( data ) {}
 		// assumes that position and normal is vec3, tangent is vec4
 		void transform( float scale, const mat3& r33 );
@@ -24,11 +24,11 @@
 		void generate_tangents();
 		void flip_normals();
-		bool is_same_format( mesh_data* other );
-		void merge( mesh_data* other );
+		bool is_same_format( data_channel_set* other );
+		void merge( data_channel_set* other );
 	private:
 		raw_data_channel merge_channels( const raw_data_channel& a, const raw_data_channel& b );
 		raw_data_channel append_channels( const raw_data_channel& a, const raw_data_channel& b, uint32 frame_count = 1 );
 
-		mesh_data* m_data;
+		data_channel_set* m_data;
 	};
 
Index: /trunk/nv/gfx/skeletal_mesh.hh
===================================================================
--- /trunk/nv/gfx/skeletal_mesh.hh	(revision 429)
+++ /trunk/nv/gfx/skeletal_mesh.hh	(revision 430)
@@ -58,5 +58,5 @@
 	{
 	public:
-		skeletal_mesh_cpu( context* a_context, const mesh_data* a_mesh_data, const mesh_nodes_data* bones );
+		skeletal_mesh_cpu( context* a_context, const data_channel_set* a_mesh_data, const mesh_nodes_data* bones );
 		virtual size_t get_index_count() const { return m_indices; }
 		virtual void update_animation( animation_entry* a_anim, uint32 a_anim_time );
@@ -108,5 +108,5 @@
 	{
 	public:
-		skeletal_mesh_gpu( context* a_context, const mesh_data* a_mesh, const mesh_nodes_data* a_bone_data );
+		skeletal_mesh_gpu( context* a_context, const data_channel_set* a_mesh, const mesh_nodes_data* a_bone_data );
 		virtual size_t get_index_count() const { return m_index_count; }
 		virtual void update( program a_program );
Index: /trunk/nv/interface/context.hh
===================================================================
--- /trunk/nv/interface/context.hh	(revision 429)
+++ /trunk/nv/interface/context.hh	(revision 430)
@@ -297,5 +297,5 @@
 
 		// TODO: HINTS ARE DIFFERENT!
-		vertex_array create_vertex_array( const mesh_data* data, buffer_hint hint )
+		vertex_array create_vertex_array( const data_channel_set* data, buffer_hint hint )
 		{
 			vertex_array  va = create_vertex_array();
Index: /trunk/nv/interface/mesh_data.hh
===================================================================
--- /trunk/nv/interface/mesh_data.hh	(revision 429)
+++ /trunk/nv/interface/mesh_data.hh	(revision 430)
@@ -20,5 +20,5 @@
 	struct index_u32 { uint32 index; };
 
-	using mesh_data = data_channel_set;
+	//using mesh_data = data_channel_set;
 
 	// TODO : attribute/property implementation and read/write on every nmd::command
@@ -106,5 +106,5 @@
 		friend class mesh_creator;
 	public:
-		explicit mesh_data_pack( uint32 a_count, mesh_data* a_meshes, mesh_nodes_data* a_nodes = nullptr )
+		explicit mesh_data_pack( uint32 a_count, data_channel_set* a_meshes, mesh_nodes_data* a_nodes = nullptr )
 		{
 			m_count  = a_count;
@@ -112,5 +112,5 @@
 			m_nodes  = a_nodes;
 		}
-		const mesh_data* get_mesh( uint32 index ) const
+		const data_channel_set* get_mesh( uint32 index ) const
 		{
 			if ( index >= m_count ) return nullptr;
@@ -126,7 +126,7 @@
 		}
 	private:
-		uint32           m_count;
-		mesh_data*       m_meshes;
-		mesh_nodes_data* m_nodes;
+		uint32            m_count;
+		data_channel_set* m_meshes;
+		mesh_nodes_data*  m_nodes;
 	};
 }
Index: /trunk/src/gfx/keyframed_mesh.cc
===================================================================
--- /trunk/src/gfx/keyframed_mesh.cc	(revision 429)
+++ /trunk/src/gfx/keyframed_mesh.cc	(revision 430)
@@ -13,8 +13,7 @@
 using namespace nv;
 
-nv::keyframed_mesh::keyframed_mesh( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh::keyframed_mesh( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
 	: animated_mesh()
 	, m_context( a_context )
-	, m_mesh_data( a_data )
 	, m_tag_map( a_tag_map )
 	, m_last_frame( 0 )
@@ -23,10 +22,10 @@
 	, m_active( false )
 {
-	m_index_count   = m_mesh_data->get_channel_size( slot::INDEX );
-	m_vertex_count  = m_mesh_data->get_channel_size<vertex_t>();
-	uint32 pos_size = m_mesh_data->get_channel_size<vertex_pnt>();
+	m_index_count   = a_data->get_channel_size( slot::INDEX );
+	m_vertex_count  = a_data->get_channel_size<vertex_t>();
+	uint32 pos_size = a_data->get_channel_size<vertex_pnt>();
 	if ( pos_size == 0 )
 	{
-		pos_size      = m_mesh_data->get_channel_size<vertex_pn>();
+		pos_size      = a_data->get_channel_size<vertex_pn>();
 		m_has_tangent = false;
 		m_vsize       = sizeof( vertex_pn );
@@ -127,5 +126,5 @@
 }
 
-nv::keyframed_mesh_gpu::keyframed_mesh_gpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh_gpu::keyframed_mesh_gpu( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
 	: keyframed_mesh( a_context, a_data, a_tag_map )
 	, m_loc_next_position( -1 )
@@ -186,5 +185,5 @@
 }
 
-nv::keyframed_mesh_cpu::keyframed_mesh_cpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh_cpu::keyframed_mesh_cpu( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
 	: keyframed_mesh( a_context, a_data, a_tag_map )
 {
@@ -194,12 +193,14 @@
 	m_context->add_vertex_buffers( m_va, m_pbuffer, vchannel->descriptor() );
 
-	buffer  vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), m_mesh_data->get_channel_data<vertex_t>() );
-	m_context->add_vertex_buffers( m_va, vb, m_mesh_data->get_channel<vertex_t>()->descriptor() );
-
-	const raw_data_channel* index_channel = m_mesh_data->get_channel( slot::INDEX );
+	buffer  vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), a_data->get_channel_data<vertex_t>() );
+	m_context->add_vertex_buffers( m_va, vb, a_data->get_channel<vertex_t>()->descriptor() );
+
+	const raw_data_channel* index_channel = a_data->get_channel( slot::INDEX );
 	buffer  ib = m_context->get_device()->create_buffer( INDEX_BUFFER, STATIC_DRAW, index_channel->raw_size(), index_channel->raw_data() );
 	m_context->set_index_buffer( m_va, ib, index_channel->descriptor()[0].etype, true );
 
 	m_data = new uint8[ m_vertex_count * m_vsize ];
+
+	m_model_data = vchannel->raw_data();
 }
 
@@ -210,5 +211,5 @@
 	if ( m_has_tangent )
 	{
-		const vertex_pnt* data = m_mesh_data->get_channel_data<vertex_pnt>();
+		const vertex_pnt* data = reinterpret_cast< const vertex_pnt* >( m_model_data );
 		const vertex_pnt* prev = data + m_vertex_count * m_last_frame;
 		const vertex_pnt* next = data + m_vertex_count * m_next_frame;
@@ -223,5 +224,5 @@
 	else
 	{
-		const vertex_pn* data = m_mesh_data->get_channel_data<vertex_pn>();
+		const vertex_pn* data = reinterpret_cast< const vertex_pn* >( m_model_data );
 		const vertex_pn* prev = data + m_vertex_count * m_last_frame;
 		const vertex_pn* next = data + m_vertex_count * m_next_frame;
Index: /trunk/src/gfx/mesh_creator.cc
===================================================================
--- /trunk/src/gfx/mesh_creator.cc	(revision 429)
+++ /trunk/src/gfx/mesh_creator.cc	(revision 430)
@@ -385,5 +385,5 @@
 
 
-bool nv::mesh_data_creator::is_same_format( mesh_data* other )
+bool nv::mesh_data_creator::is_same_format( data_channel_set* other )
 {
 	if ( m_data->size() != other->size() ) return false;
@@ -396,5 +396,5 @@
 }
 
-void nv::mesh_data_creator::merge( mesh_data* other )
+void nv::mesh_data_creator::merge( data_channel_set* other )
 {
 	if ( !is_same_format( other ) ) return;
Index: /trunk/src/gfx/skeletal_mesh.cc
===================================================================
--- /trunk/src/gfx/skeletal_mesh.cc	(revision 429)
+++ /trunk/src/gfx/skeletal_mesh.cc	(revision 430)
@@ -11,5 +11,5 @@
 #include "nv/stl/unordered_map.hh"
 
-nv::skeletal_mesh_cpu::skeletal_mesh_cpu( context* a_context, const mesh_data* a_mesh_data, const mesh_nodes_data* bones )
+nv::skeletal_mesh_cpu::skeletal_mesh_cpu( context* a_context, const data_channel_set* a_mesh_data, const mesh_nodes_data* bones )
 	: skeletal_mesh( a_context )
 {
@@ -234,5 +234,5 @@
 }
 
-nv::skeletal_mesh_gpu::skeletal_mesh_gpu( context* a_context, const mesh_data* a_mesh, const mesh_nodes_data* a_bone_data )
+nv::skeletal_mesh_gpu::skeletal_mesh_gpu( context* a_context, const data_channel_set* a_mesh, const mesh_nodes_data* a_bone_data )
 	: skeletal_mesh( a_context ), m_bone_data( a_bone_data ), m_transform( nullptr )
 {
