- Timestamp:
- 02/06/17 21:13:58 (8 years ago)
- Location:
- trunk/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/engine/particle_engine.cc
r534 r543 350 350 } 351 351 352 void nv::particle_engine::release( particle_system_info* info ) 353 { 354 if ( info ) 355 { 356 m_pgm->unref( info->group ); 357 delete[] info->particles; 358 } 359 } 360 352 361 void nv::particle_engine::clear() 353 362 { 354 while ( m_systems.size() > 0 ) 355 release( m_systems.get_handle( 0 ) ); 363 for ( auto& s : m_systems ) 364 release( &s ); 365 m_systems.clear(); 356 366 if ( m_pgm ) 357 367 m_pgm->reset(); … … 363 373 void nv::particle_engine::release( particle_system system ) 364 374 { 365 particle_system_info* info = m_systems.get( system ); 366 if ( info ) 367 { 368 m_pgm->unref( info->group ); 369 delete[] info->particles; 375 if ( particle_system_info* info = m_systems.get( system ) ) 376 { 377 release( info ); 370 378 m_systems.destroy( system ); 371 379 } -
trunk/src/engine/particle_group.cc
r520 r543 33 33 void particle_group_manager::release( particle_group group ) 34 34 { 35 particle_group_info* info = m_groups.get( group ); 36 if ( info ) 37 { 38 delete[] info->quads; 39 m_context->release( info->vtx_array ); 35 if ( particle_group_info* info = m_groups.get( group ) ) 36 { 37 release( info ); 40 38 m_groups.destroy( group ); 41 39 } … … 194 192 } 195 193 194 void nv::particle_group_manager::release( particle_group_info* info ) 195 { 196 if ( info ) 197 { 198 delete[] info->quads; 199 m_context->release( info->vtx_array ); 200 } 201 } 202 196 203 particle_group_manager::~particle_group_manager() 197 204 { … … 201 208 void particle_group_manager::clear() 202 209 { 203 while ( m_groups.size() > 0 ) 204 release( m_groups.get_handle( 0 ) ); 210 for ( auto& g : m_groups ) 211 release( &g ); 212 m_groups.clear(); 205 213 } 206 214 -
trunk/src/fmod/fmod_audio.cc
r406 r543 107 107 { 108 108 sound_info* info = m_sounds.get( a_sound ); 109 release( info ); 110 m_sounds.destroy( a_sound ); 111 } 112 113 void nv::fmod::audio::release( sound_info* info ) 114 { 109 115 if ( info ) 110 {111 116 FMOD_Sound_Release( static_cast<FMOD_SOUND*>( info->fmod_sound ) ); 112 m_sounds.destroy( a_sound );113 }114 117 } 115 118 … … 146 149 fmod::audio::~audio() 147 150 { 148 while ( m_sounds.size() > 0 ) 149 release( m_sounds.get_handle(0) ); 151 for ( auto& s : m_sounds ) 152 release( &s ); 153 m_sounds.clear(); 150 154 FMOD_System_Release( static_cast<FMOD_SYSTEM*>( m_system ) ); 151 155 } -
trunk/src/gl/gl_context.cc
r535 r543 97 97 void nv::gl_context::release( vertex_array va ) 98 98 { 99 gl_vertex_array_info* info = m_vertex_arrays.get( va ); 99 if ( gl_vertex_array_info* info = m_vertex_arrays.get( va ) ) 100 { 101 release( info ); 102 m_vertex_arrays.destroy( va ); 103 } 104 } 105 106 void nv::gl_context::release( gl_vertex_array_info* info ) 107 { 100 108 if ( info ) 101 109 { 102 110 for ( uint32 i = 0; i < info->count; ++i ) 103 111 { 104 if ( info->attr[i].owner ) 112 if ( info->attr[i].owner ) 105 113 release( info->attr[i].vbuffer ); 106 114 } 107 if ( info->index.is_valid() && info->index_owner ) release( info->index );115 if ( info->index.is_valid() && info->index_owner ) release( info->index ); 108 116 glDeleteVertexArrays( 1, &info->glid ); 109 m_vertex_arrays.destroy( va );110 117 } 111 118 } … … 113 120 void nv::gl_context::release( framebuffer f ) 114 121 { 115 gl_framebuffer_info* info = m_framebuffers.get( f ); 122 if ( gl_framebuffer_info* info = m_framebuffers.get( f ) ) 123 { 124 release( info ); 125 m_framebuffers.destroy( f ); 126 } 127 } 128 129 void nv::gl_context::release( gl_framebuffer_info* info ) 130 { 116 131 if ( info ) 117 132 { … … 122 137 glDeleteRenderbuffers( 1, &info->depth_rb_glid ); 123 138 glDeleteFramebuffers( 1, &info->glid ); 124 m_framebuffers.destroy( f );125 139 } 126 140 } … … 881 895 nv::gl_context::~gl_context() 882 896 { 883 while ( m_framebuffers.size() > 0)884 release( m_framebuffers.get_handle(0));885 while ( m_vertex_arrays.size() > 0)886 release( m_vertex_arrays.get_handle(0));897 for ( auto& info : m_framebuffers ) 898 release( &info ); 899 for ( auto& info : m_vertex_arrays ) 900 release( &info ); 887 901 } 888 902 -
trunk/src/gl/gl_device.cc
r535 r543 69 69 gl_device::~gl_device() 70 70 { 71 while ( m_textures.size() > 0)72 release( m_textures.get_handle(0));73 while ( m_buffers.size() > 0)74 release( m_buffers.get_handle(0));75 while ( m_programs.size() > 0)76 release( m_programs.get_handle(0));77 while ( m_shaders.size() > 0)78 release( m_shaders.get_handle( 0 ));71 for ( auto& t : m_textures ) 72 release( &t ); 73 for ( auto& b : m_buffers ) 74 release( &b ); 75 for ( auto& p : m_programs ) 76 release( &p ); 77 for ( auto& s : m_shaders ) 78 release( &s ); 79 79 } 80 80 … … 131 131 void nv::gl_device::release( texture t ) 132 132 { 133 gl_texture_info* info = m_textures.get( t ); 134 if ( info ) 135 { 136 if ( info->glid != 0 ) 137 { 138 glDeleteTextures( 1, &(info->glid) ); 139 } 133 if ( auto info = m_textures.get( t ) ) 134 { 135 release( info ); 140 136 m_textures.destroy( t ); 141 137 } 142 138 } 143 139 140 void nv::gl_device::release( gl_shader_info* s ) 141 { 142 if ( s && s->ref == 0 && s->glid != 0 ) 143 glDeleteShader( s->glid ); 144 } 145 146 void nv::gl_device::release( gl_program_info* p ) 147 { 148 if ( p && p->glid != 0 ) 149 { 150 for ( auto& i : *p->m_uniform_map ) 151 delete i.second; 152 153 gl_shader_info* vi = m_shaders.get( p->vertex ); 154 gl_shader_info* fi = m_shaders.get( p->fragment ); 155 if ( vi ) 156 { 157 glDetachShader( p->glid, vi->glid ); 158 vi->ref--; 159 release( vi ); 160 } 161 if ( fi ) 162 { 163 glDetachShader( p->glid, fi->glid ); 164 fi->ref--; 165 release( fi ); 166 } 167 glDeleteProgram( p->glid ); 168 169 delete p->m_attribute_map; 170 delete p->m_engine_uniforms; 171 delete p->m_uniform_map; 172 } 173 174 } 175 176 void nv::gl_device::release( gl_texture_info* t ) 177 { 178 if ( t && t->glid != 0 ) 179 glDeleteTextures( 1, &( t->glid ) ); 180 } 181 182 void nv::gl_device::release( gl_buffer_info* b ) 183 { 184 if ( b && b->glid != 0 ) 185 glDeleteBuffers( 1, &( b->glid ) ); 186 } 187 144 188 void nv::gl_device::release( buffer b ) 145 189 { 146 gl_buffer_info* info = m_buffers.get( b ); 147 if ( info ) 148 { 149 if ( info->glid != 0 ) 150 { 151 glDeleteBuffers( 1, &(info->glid) ); 152 } 190 if ( auto info = m_buffers.get( b ) ) 191 { 192 release( info ); 153 193 m_buffers.destroy( b ); 154 194 } … … 204 244 void nv::gl_device::release( program p ) 205 245 { 206 gl_program_info* info = m_programs.get( p ); 207 if ( info ) 208 { 209 for ( auto& i : *info->m_uniform_map ) 210 delete i.second; 211 212 detach( p, info->vertex ); 213 detach( p, info->fragment ); 214 glDeleteProgram( info->glid ); 215 216 delete info->m_attribute_map; 217 delete info->m_engine_uniforms; 218 delete info->m_uniform_map; 219 246 if ( auto info = m_programs.get( p ) ) 247 { 248 release( info ); 220 249 m_programs.destroy( p ); 221 250 } … … 224 253 void nv::gl_device::release( shader s ) 225 254 { 226 gl_shader_info* info = m_shaders.get( s ); 227 if ( info && info->ref == 0 ) 228 { 229 glDeleteShader( info->glid ); 255 if ( auto info = m_shaders.get( s ) ) 256 { 257 release( info ); 230 258 m_shaders.destroy( s ); 231 259 } -
trunk/src/sdl/sdl_audio.cc
r454 r543 111 111 nv::sdl::audio::~audio() 112 112 { 113 while ( m_sounds.size() > 0)114 release( m_sounds.get_handle(0));113 for ( auto& s : m_sounds ) 114 release( &s ); 115 115 Mix_CloseAudio(); 116 116 // TODO: should we do it here? … … 121 121 { 122 122 sound_info* info = m_sounds.get( a_sound ); 123 release( info ); 124 m_sounds.destroy( a_sound ); 125 } 126 127 void nv::sdl::audio::release( sound_info* info ) 128 { 123 129 if ( info ) 124 {125 130 Mix_FreeChunk( static_cast<Mix_Chunk*>( info->sdl_sound ) ); 126 m_sounds.destroy( a_sound );127 }128 131 } 129 132
Note: See TracChangeset
for help on using the changeset viewer.