Index: trunk/src/gfx/debug_draw.cc
===================================================================
--- trunk/src/gfx/debug_draw.cc	(revision 467)
+++ trunk/src/gfx/debug_draw.cc	(revision 469)
@@ -8,4 +8,5 @@
 
 #include "nv/interface/device.hh"
+#include "nv/core/logging.hh"
 
 static const char *nv_debug_draw_vertex_shader = R"(
@@ -34,10 +35,21 @@
 {
 	m_program = m_context->get_device()->create_program( nv_debug_draw_vertex_shader, nv_debug_draw_fragment_shader );
+	m_buffer_size = 0;
 }
 
 void nv::debug_data::update()
 {
-	m_context->release( m_va );
-	m_va = m_context->create_vertex_array( m_data, nv::STATIC_DRAW );
+	if ( !m_va.is_valid() || m_data.size() > m_buffer_size )
+	{
+		if ( m_va.is_valid() ) m_context->release( m_va );
+		m_buffer_size = nv::max( m_data.size(), 4096U, m_buffer_size );
+		m_va = m_context->create_vertex_array();
+		m_vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, nv::STREAM_DRAW, m_buffer_size * sizeof( debug_vtx ), m_data.data() );
+		m_context->add_vertex_buffers< debug_vtx >( m_va, m_vb, true );
+	}
+	else
+	{
+		m_context->update( m_vb, m_data.data(), 0, m_data.size()* sizeof( debug_vtx ) );
+	}
 }
 
Index: trunk/src/gl/gl_context.cc
===================================================================
--- trunk/src/gl/gl_context.cc	(revision 467)
+++ trunk/src/gl/gl_context.cc	(revision 469)
@@ -48,5 +48,6 @@
 		for ( uint32 i = 0; i < info->count; ++i )
 		{
-			if ( info->attr[i].owner ) m_device->release( info->attr[i].vbuffer );
+			if ( info->attr[i].owner ) 
+				m_device->release( info->attr[i].vbuffer );
 		}
 		if ( info->index.is_valid() && info->index_owner) m_device->release( info->index );
Index: trunk/src/gui/gui_gfx_renderer.cc
===================================================================
--- trunk/src/gui/gui_gfx_renderer.cc	(revision 467)
+++ trunk/src/gui/gui_gfx_renderer.cc	(revision 469)
@@ -160,5 +160,5 @@
 	sr->varray = m_window->get_context()->create_vertex_array();
 	buffer vb = sr->buffer.get_buffer();
-	m_window->get_context()->add_vertex_buffers< vertex >( sr->varray, vb );
+	m_window->get_context()->add_vertex_buffers< vertex >( sr->varray, vb, false );
 
 	nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::CLAMP_TO_EDGE );
