[552] | 1 | // Copyright (C) 2016-2016 ChaosForge Ltd
|
---|
| 2 | // http://chaosforge.org/
|
---|
| 3 | //
|
---|
| 4 | // This file is part of Nova libraries.
|
---|
| 5 | // For conditions of distribution and use, see copying.txt file in root folder.
|
---|
| 6 |
|
---|
| 7 | #include "nv/engine/decal_group.hh"
|
---|
| 8 |
|
---|
| 9 | using namespace nv;
|
---|
| 10 |
|
---|
| 11 |
|
---|
| 12 | decal_group_manager::decal_group_manager( context* a_context )
|
---|
| 13 | : m_context( a_context )
|
---|
| 14 | {
|
---|
| 15 |
|
---|
| 16 | }
|
---|
| 17 |
|
---|
| 18 | decal_group decal_group_manager::create_group( uint32 max_particles )
|
---|
| 19 | {
|
---|
| 20 | decal_group result = m_groups.create();
|
---|
| 21 | decal_group_info* info = m_groups.get( result );
|
---|
| 22 | info->local = false;
|
---|
| 23 | info->count = 0;
|
---|
| 24 | info->quota = max_particles;
|
---|
| 25 | // info->vtx_buffer = m_context->create_buffer( VERTEX_BUFFER, STREAM_DRAW, info->quota * sizeof( particle_quad )/*, info->quads_[0].data*/ );
|
---|
| 26 | // vertex_array_desc desc;
|
---|
| 27 | // desc.add_vertex_buffers< de >( info->vtx_buffer, true );
|
---|
| 28 | // info->vtx_array = m_context->create_vertex_array( desc );
|
---|
| 29 | // info->quads = new particle_quad[info->quota];
|
---|
| 30 | info->ref_counter = 0;
|
---|
| 31 | return result;
|
---|
| 32 | }
|
---|
| 33 |
|
---|
| 34 | void decal_group_manager::release( decal_group group )
|
---|
| 35 | {
|
---|
| 36 | if ( decal_group_info* info = m_groups.get( group ) )
|
---|
| 37 | {
|
---|
| 38 | release( info );
|
---|
| 39 | m_groups.destroy( group );
|
---|
| 40 | }
|
---|
| 41 | }
|
---|
| 42 |
|
---|
| 43 | void decal_group_manager::release( decal_group_info* info )
|
---|
| 44 | {
|
---|
| 45 | if ( info )
|
---|
| 46 | {
|
---|
| 47 | delete[] info->quads;
|
---|
| 48 | m_context->release( info->vtx_array );
|
---|
| 49 | }
|
---|
| 50 | }
|
---|
| 51 |
|
---|
| 52 |
|
---|
| 53 | void decal_group_manager::clear()
|
---|
| 54 | {
|
---|
| 55 | for ( auto& g : m_groups )
|
---|
| 56 | release( &g );
|
---|
| 57 | }
|
---|
| 58 |
|
---|
| 59 | bool decal_group_manager::ref( decal_group group )
|
---|
| 60 | {
|
---|
| 61 | decal_group_info* info = m_groups.get( group );
|
---|
| 62 | if ( !info ) return false;
|
---|
| 63 | info->ref_counter++;
|
---|
| 64 | return true;
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | bool decal_group_manager::unref( decal_group group )
|
---|
| 68 | {
|
---|
| 69 | decal_group_info* info = m_groups.get( group );
|
---|
| 70 | if ( !info ) return false;
|
---|
| 71 | info->ref_counter--;
|
---|
| 72 | return true;
|
---|
| 73 | }
|
---|
| 74 |
|
---|