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 ) );
+	}
 }
 
