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 |
|
---|