Index: /trunk/nv/gl/gl_context.hh
===================================================================
--- /trunk/nv/gl/gl_context.hh	(revision 501)
+++ /trunk/nv/gl/gl_context.hh	(revision 502)
@@ -76,4 +76,6 @@
 		// temporary
 		virtual void draw( primitive prim, const render_state& rs, program p, vertex_array va, size_t count, size_t first = 0 );
+		virtual void draw_instanced( primitive prim, const render_state& rs, program p, size_t instances, vertex_array va, size_t count, size_t first = 0 );
+
 		virtual const ivec4& get_viewport();
 		virtual void set_viewport( const ivec4& viewport );
Index: /trunk/nv/interface/context.hh
===================================================================
--- /trunk/nv/interface/context.hh	(revision 501)
+++ /trunk/nv/interface/context.hh	(revision 502)
@@ -209,4 +209,5 @@
 		// temporary
 		virtual void draw( primitive prim, const render_state& rs, program p, vertex_array va, size_t count, size_t first = 0 ) = 0;
+		virtual void draw_instanced( primitive prim, const render_state& rs, program p, size_t instances, vertex_array va, size_t count, size_t first = 0 ) = 0;
 
 		void draw( primitive prim, const render_state& rs, const scene_state& s, program p, vertex_array va, size_t count, size_t first = 0 )
Index: /trunk/src/gl/gl_context.cc
===================================================================
--- /trunk/src/gl/gl_context.cc	(revision 501)
+++ /trunk/src/gl/gl_context.cc	(revision 502)
@@ -1057,2 +1057,23 @@
 	}
 }
+
+void nv::gl_context::draw_instanced( primitive prim, const render_state& rs, program p, size_t instances, vertex_array va, size_t count, size_t first /*= 0 */ )
+{
+	apply_render_state( rs );
+	const vertex_array_info* info = m_vertex_arrays.get( va );
+	if ( count > 0 && info )
+	{
+		bind( p );
+		bind( va );
+		if ( info->index.is_valid() )
+		{
+			glDrawElementsInstanced( primitive_to_enum( prim ), static_cast<GLsizei>( count ), datatype_to_gl_enum( info->index_type ), reinterpret_cast<const void*>( get_datatype_info( info->index_type ).size * first ), instances );
+		}
+		else
+		{
+			glDrawArraysInstanced( primitive_to_enum( prim ), static_cast<GLint>( first ), static_cast<GLsizei>( count ), instances );
+		}
+		unbind( va );
+		//unbind( p );
+	}
+}
