Changeset 543 for trunk/src/gl/gl_device.cc
- Timestamp:
- 02/06/17 21:13:58 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 }
Note: See TracChangeset
for help on using the changeset viewer.