Index: trunk/src/gfx/keyframed_mesh.cc
===================================================================
--- trunk/src/gfx/keyframed_mesh.cc	(revision 296)
+++ trunk/src/gfx/keyframed_mesh.cc	(revision 299)
@@ -15,5 +15,5 @@
 using namespace nv;
 
-nv::keyframed_mesh::keyframed_mesh( device* a_device, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh::keyframed_mesh( const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
 	: animated_mesh()
 	, m_mesh_data( a_data )
@@ -24,6 +24,4 @@
 	, m_active( false )
 {
-	m_va = a_device->create_vertex_array();
-
 	m_index_count  = m_mesh_data->get_index_channel()->count;
 	m_vertex_count = m_mesh_data->get_channel<vertex_t>()->count;
@@ -123,6 +121,6 @@
 }
 
-nv::keyframed_mesh_gpu::keyframed_mesh_gpu( device* a_device, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
-	: keyframed_mesh( a_device, a_data, a_tag_map )
+nv::keyframed_mesh_gpu::keyframed_mesh_gpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+	: keyframed_mesh( a_data, a_tag_map )
 	, m_loc_next_position( -1 )
 	, m_loc_next_normal( -1 )
@@ -131,5 +129,5 @@
 	, m_gpu_next_frame( 0xFFFFFFFF )
 {
-	m_va = a_device->create_vertex_array( a_data, STATIC_DRAW );
+	m_va = a_context->get_device()->create_vertex_array( a_data, STATIC_DRAW );
 }
 
@@ -177,14 +175,16 @@
 }
 
-nv::keyframed_mesh_cpu::keyframed_mesh_cpu( device* a_device, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
-	: keyframed_mesh( a_device, a_data, a_tag_map )
-{
-	m_vb = a_device->create_vertex_buffer( nv::STATIC_DRAW, m_vertex_count * m_vsize, (void*)m_vchannel->data );
+nv::keyframed_mesh_cpu::keyframed_mesh_cpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+	: keyframed_mesh( a_data, a_tag_map )
+	, m_context( a_context )
+{
+	m_va = m_context->get_device()->create_vertex_array();
+	m_vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_vertex_count * m_vsize, (void*)m_vchannel->data );
 	m_va->add_vertex_buffers( m_vb, m_vchannel );
 
-	nv::vertex_buffer* vb = a_device->create_vertex_buffer( nv::STATIC_DRAW, m_vertex_count * sizeof( nv::vec2 ), (void*)m_mesh_data->get_channel<vertex_t>()->data );
+	nv::vertex_buffer* vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_vertex_count * sizeof( nv::vec2 ), (void*)m_mesh_data->get_channel<vertex_t>()->data );
 	m_va->add_vertex_buffers( vb, m_mesh_data->get_channel<vertex_t>() );
 
-	nv::index_buffer* ib = a_device->create_index_buffer( nv::STATIC_DRAW, m_mesh_data->get_index_channel()->size(), (void*)m_mesh_data->get_index_channel()->data );
+	nv::index_buffer* ib = m_context->get_device()->create_index_buffer( nv::STATIC_DRAW, m_mesh_data->get_index_channel()->size(), (void*)m_mesh_data->get_index_channel()->data );
 	m_va->set_index_buffer( ib, m_mesh_data->get_index_channel()->desc.slots[0].etype, true );
 
@@ -224,7 +224,5 @@
 	}
 
-	m_vb->bind();
-	m_vb->update( m_data, 0, m_vertex_count * m_vsize );
-	m_vb->unbind();
+	m_context->update( m_vb, m_data, 0, m_vertex_count * m_vsize );
 }
 
Index: trunk/src/gfx/skeletal_mesh.cc
===================================================================
--- trunk/src/gfx/skeletal_mesh.cc	(revision 296)
+++ trunk/src/gfx/skeletal_mesh.cc	(revision 299)
@@ -11,6 +11,7 @@
 
 
-nv::skeletal_mesh_cpu::skeletal_mesh_cpu( device* a_device, const mesh_data* a_mesh_data, const mesh_nodes_data* bones )
+nv::skeletal_mesh_cpu::skeletal_mesh_cpu( context* a_context, const mesh_data* a_mesh_data, const mesh_nodes_data* bones )
 	: skeletal_mesh()
+	, m_context( a_context )
 	, m_data( a_mesh_data )
 {
@@ -26,5 +27,5 @@
 	m_vtx_data  = a_mesh_data->get_channel_data<md5_vtx_pntiw>();
 	m_indices   = a_mesh_data->get_count();
-	m_va        = a_device->create_vertex_array( a_mesh_data, nv::STREAM_DRAW );
+	m_va        = a_context->get_device()->create_vertex_array( a_mesh_data, nv::STREAM_DRAW );
 }
 
@@ -63,7 +64,5 @@
 
 		vertex_buffer* vb = m_va->find_buffer( nv::slot::POSITION );
-		vb->bind();
-		vb->update( m_pntdata.data(), 0, m_pntdata.raw_size() );
-		vb->unbind();
+		m_context->update( vb, m_pntdata.data(), 0, m_pntdata.raw_size() );
 	}
 }
@@ -200,8 +199,8 @@
 }
 
-nv::skeletal_mesh_gpu::skeletal_mesh_gpu( device* a_device, const mesh_data* a_mesh, const mesh_nodes_data* a_bone_data )
+nv::skeletal_mesh_gpu::skeletal_mesh_gpu( context* a_context, const mesh_data* a_mesh, const mesh_nodes_data* a_bone_data )
 	: skeletal_mesh(), m_bone_data( a_bone_data ), m_transform( nullptr )
 {
-	m_va          = a_device->create_vertex_array( a_mesh, nv::STATIC_DRAW );
+	m_va          = a_context->get_device()->create_vertex_array( a_mesh, nv::STATIC_DRAW );
 	m_index_count = a_mesh->get_count();
 	if ( m_bone_data )
