- Timestamp:
- 01/26/13 20:23:31 (12 years ago)
- Location:
- trunk/src/gl
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gl/texture_atlas.cc
r11 r13 7 7 #include "nv/gl/texture_atlas.hh" 8 8 9 #include "nv/logging.hh" 10 9 11 using namespace nv; 10 12 11 13 texture_atlas::texture_atlas( glm::ivec2 size, size_t depth ) 12 : m_size( size ), m_depth( depth ), m_used( 0 ), m_data( nullptr)14 : image( size, depth ), m_used( 0 ) 13 15 { 14 16 m_nodes.push_back( glm::ivec3( 1, 1, m_size.x - 2 ) ); 15 m_data = new uint8[ m_size.x * m_size.y * m_depth ];16 17 fill( 0 ); 17 18 } 18 19 19 glm::ivec4texture_atlas::get_region( glm::ivec2 size )20 region texture_atlas::get_region( glm::ivec2 size ) 20 21 { 21 glm::ivec4 region (0,0,size.x,size.y);22 region r ( glm::ivec2(0,0), size ); 22 23 size_t i; 23 24 … … 37 38 best_index = i; 38 39 best_width = node.z; 39 r egion.x = node.x;40 r egion.y = y;40 r.pos.x = node.x; 41 r.pos.y = y; 41 42 } 42 43 } … … 45 46 if( best_index == -1 ) 46 47 { 47 return glm::ivec4( -1, -1, 0, 0);48 return region( glm::ivec2( -1, -1 ), glm::ivec2( 0, 0 ) ); 48 49 } 49 50 50 m_nodes.insert( m_nodes.begin() + best_index, glm::ivec3( r egion.x, region.y + size.y, size.x ) );51 m_nodes.insert( m_nodes.begin() + best_index, glm::ivec3( r.pos.x, r.pos.y + size.y, size.x ) ); 51 52 52 53 for( size_t i = best_index+1; i < m_nodes.size(); ++i ) … … 78 79 merge(); 79 80 m_used += size.x * size.y; 80 return region; 81 } 82 83 void texture_atlas::set_region( glm::ivec4 region, const uint8 * data, size_t stride ) 84 { 85 for( size_t i = 0; i < region[3]; ++i ) 86 { 87 memcpy( m_data+((region.y+i)*m_size.x + region.x ) * m_depth, 88 data + (i*stride), m_size.x * m_depth ); 89 } 81 return r; 90 82 } 91 83 … … 140 132 fill( 0 ); 141 133 } 142 143 void texture_atlas::fill( uint8 value )144 {145 memset( m_data, value, m_size.x * m_size.y * m_depth );146 }147 148 texture_atlas::~texture_atlas()149 {150 delete[] m_data;151 }152
Note: See TracChangeset
for help on using the changeset viewer.