Index: /trunk/nv/gl/gl_context.hh
===================================================================
--- /trunk/nv/gl/gl_context.hh	(revision 522)
+++ /trunk/nv/gl/gl_context.hh	(revision 523)
@@ -60,4 +60,6 @@
 		virtual void attach( framebuffer f, texture depth, int layer = -1 );
 		virtual void attach( framebuffer f, ivec2 size );
+		virtual void attach_depth( framebuffer source, framebuffer target );
+
 		virtual bool check( framebuffer_slot ft );
 		virtual void bind( framebuffer f, framebuffer_slot ft = FRAMEBUFFER );
Index: /trunk/nv/interface/context.hh
===================================================================
--- /trunk/nv/interface/context.hh	(revision 522)
+++ /trunk/nv/interface/context.hh	(revision 523)
@@ -199,4 +199,5 @@
 		virtual void attach( framebuffer f, texture depth, int layer = -1 ) = 0;
 		virtual void attach( framebuffer f, ivec2 size ) = 0;
+		virtual void attach_depth( framebuffer source, framebuffer target ) = 0;
 
 		virtual bool check( framebuffer_slot ft ) = 0;
Index: /trunk/src/engine/model_manager.cc
===================================================================
--- /trunk/src/engine/model_manager.cc	(revision 522)
+++ /trunk/src/engine/model_manager.cc	(revision 523)
@@ -57,5 +57,10 @@
 
 	if ( table.is_string( "material" ) )
-		cmaterial = m_rm->get< material >( table.get_string128( "material" ) );
+	{
+		nv::string128 mat_id( table.get_string128( "material" ) );
+		cmaterial = m_rm->get< material >( mat_id );
+		if ( !cmaterial )
+			NV_LOG_ERROR( "Can't load material : ", mat_id );
+	}
 
 	if ( table.is_string( "tag" ) )
Index: /trunk/src/gl/gl_context.cc
===================================================================
--- /trunk/src/gl/gl_context.cc	(revision 522)
+++ /trunk/src/gl/gl_context.cc	(revision 523)
@@ -212,4 +212,22 @@
 
 }
+
+void nv::gl_context::attach_depth( framebuffer source, framebuffer target )
+{
+	gl_framebuffer_info* sinfo = m_framebuffers.get( source );
+	gl_framebuffer_info* tinfo = m_framebuffers.get( target );
+
+	if ( sinfo && tinfo )
+	{
+		glBindFramebuffer( GL_FRAMEBUFFER, tinfo->glid );
+		// TODO: do we need to bind the renderbuffer at all?
+		glBindRenderbuffer( GL_RENDERBUFFER, sinfo->depth_rb_glid );
+		glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, sinfo->depth_rb_glid );
+		glBindRenderbuffer( GL_RENDERBUFFER, 0 );
+		glBindRenderbuffer( GL_FRAMEBUFFER, 0 );
+	}
+
+}
+
 
 void nv::gl_context::blit( framebuffer f, buffer_mask mask, ivec2 src1, ivec2 src2, ivec2 dst1, ivec2 dst2 )
