Index: trunk/src/engine/decal_group.cc
===================================================================
--- trunk/src/engine/decal_group.cc	(revision 552)
+++ trunk/src/engine/decal_group.cc	(revision 552)
@@ -0,0 +1,74 @@
+// Copyright (C) 2016-2016 ChaosForge Ltd
+// http://chaosforge.org/
+//
+// This file is part of Nova libraries. 
+// For conditions of distribution and use, see copying.txt file in root folder.
+
+#include "nv/engine/decal_group.hh"
+
+using namespace nv;
+
+
+decal_group_manager::decal_group_manager( context* a_context )
+	: m_context( a_context )
+{
+
+}
+
+decal_group decal_group_manager::create_group( uint32 max_particles )
+{
+	decal_group result = m_groups.create();
+	decal_group_info* info = m_groups.get( result );
+	info->local = false;
+	info->count = 0;
+	info->quota = max_particles;
+//	info->vtx_buffer = m_context->create_buffer( VERTEX_BUFFER, STREAM_DRAW, info->quota * sizeof( particle_quad )/*, info->quads_[0].data*/ );
+// 	vertex_array_desc desc;
+// 	desc.add_vertex_buffers< de >( info->vtx_buffer, true );
+// 	info->vtx_array = m_context->create_vertex_array( desc );
+// 	info->quads = new particle_quad[info->quota];
+	info->ref_counter = 0;
+	return result;
+}
+
+void decal_group_manager::release( decal_group group )
+{
+	if ( decal_group_info* info = m_groups.get( group ) )
+	{
+		release( info );
+		m_groups.destroy( group );
+	}
+}
+
+void decal_group_manager::release( decal_group_info* info )
+{
+	if ( info )
+	{
+		delete[] info->quads;
+		m_context->release( info->vtx_array );
+	}
+}
+
+
+void decal_group_manager::clear()
+{
+	for ( auto& g : m_groups )
+		release( &g );
+}
+
+bool decal_group_manager::ref( decal_group group )
+{
+	decal_group_info* info = m_groups.get( group );
+	if ( !info ) return false;
+	info->ref_counter++;
+	return true;
+}
+
+bool decal_group_manager::unref( decal_group group )
+{
+	decal_group_info* info = m_groups.get( group );
+	if ( !info ) return false;
+	info->ref_counter--;
+	return true;
+}
+
