Ignore:
Timestamp:
02/06/17 21:13:58 (8 years ago)
Author:
epyon
Message:
  • fixes in handle store
  • removal of get_handle
  • indices instead of handles
  • efficient handle store clears
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gl/gl_context.cc

    r535 r543  
    9797void nv::gl_context::release( vertex_array va )
    9898{
    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
     106void nv::gl_context::release( gl_vertex_array_info* info )
     107{
    100108        if ( info )
    101109        {
    102110                for ( uint32 i = 0; i < info->count; ++i )
    103111                {
    104                         if ( info->attr[i].owner ) 
     112                        if ( info->attr[i].owner )
    105113                                release( info->attr[i].vbuffer );
    106114                }
    107                 if ( info->index.is_valid() && info->index_owner) release( info->index );
     115                if ( info->index.is_valid() && info->index_owner ) release( info->index );
    108116                glDeleteVertexArrays( 1, &info->glid );
    109                 m_vertex_arrays.destroy( va );
    110117        }
    111118}
     
    113120void nv::gl_context::release( framebuffer f )
    114121{
    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
     129void nv::gl_context::release( gl_framebuffer_info* info )
     130{
    116131        if ( info )
    117132        {
     
    122137                        glDeleteRenderbuffers( 1, &info->depth_rb_glid );
    123138                glDeleteFramebuffers( 1, &info->glid );
    124                 m_framebuffers.destroy( f );
    125139        }
    126140}
     
    881895nv::gl_context::~gl_context()
    882896{
    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 );
    887901}
    888902
Note: See TracChangeset for help on using the changeset viewer.