Changeset 302 for trunk/src/gl/gl_device.cc
- Timestamp:
- 08/07/14 19:06:34 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gl/gl_device.cc
r301 r302 7 7 #include "nv/gl/gl_window.hh" 8 8 #include "nv/gl/gl_program.hh" 9 #include "nv/gl/gl_vertex_buffer.hh"10 9 #include "nv/logging.hh" 11 10 #include "nv/lib/sdl.hh" … … 56 55 } 57 56 58 vertex_buffer* gl_device::create_vertex_buffer( buffer_hint hint, size_t size, const void* source /*= nullptr */ )59 {60 return new gl_vertex_buffer( hint, size, source );61 }62 63 index_buffer* gl_device::create_index_buffer( buffer_hint hint, size_t size, const void* source /*= nullptr */ )64 {65 return new gl_index_buffer( hint, size, source );66 }67 68 vertex_array* gl_device::create_vertex_array()69 {70 return new vertex_array();71 }72 73 57 // this is a temporary function that will be removed once we find a way to 74 58 // pass binary file data around … … 101 85 gl_device::~gl_device() 102 86 { 103 // TODO: better use release_texture 104 for ( auto& t : m_textures ) glDeleteTextures( 1, &t.glid ); 87 while ( m_textures.size() > 0 ) 88 release( m_textures.get_handle(0) ); 89 while ( m_buffers.size() > 0 ) 90 release( m_buffers.get_handle(0) ); 105 91 106 92 SDL_Quit(); … … 142 128 } 143 129 144 void nv::gl_device::release _texture( texture t )130 void nv::gl_device::release( texture t ) 145 131 { 146 132 gl_texture_info* info = m_textures.get( t ); 147 133 if ( info ) 148 134 { 149 glDeleteTextures( 1, &(info->glid) ); 135 if ( info->glid != 0 ) 136 { 137 glDeleteTextures( 1, &(info->glid) ); 138 } 150 139 m_textures.destroy( t ); 140 } 141 } 142 143 void nv::gl_device::release( buffer b ) 144 { 145 gl_buffer_info* info = m_buffers.get( b ); 146 if ( info ) 147 { 148 if ( info->glid != 0 ) 149 { 150 glDeleteBuffers( 1, &(info->glid) ); 151 } 152 m_buffers.destroy( b ); 151 153 } 152 154 } … … 157 159 } 158 160 161 nv::buffer nv::gl_device::create_buffer( buffer_type type, buffer_hint hint, size_t size, const void* source /*= nullptr */ ) 162 { 163 unsigned glid = 0; 164 unsigned glenum = buffer_type_to_enum( type ); 165 glGenBuffers( 1, &glid ); 166 167 glBindBuffer( glenum, glid ); 168 glBufferData( glenum, (GLsizeiptr)size, source, buffer_hint_to_enum( hint ) ); 169 glBindBuffer( glenum, 0 ); 170 171 buffer result = m_buffers.create(); 172 gl_buffer_info* info = m_buffers.get( result ); 173 info->type = type; 174 info->hint = hint; 175 info->size = size; 176 info->glid = glid; 177 return result; 178 } 179 180 const buffer_info* nv::gl_device::get_buffer_info( buffer t ) 181 { 182 return m_buffers.get( t ); 183 }
Note: See TracChangeset
for help on using the changeset viewer.