- Timestamp:
- 05/20/13 22:09:10 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gl/texture_atlas.cc
r13 r27 21 21 { 22 22 region r ( glm::ivec2(0,0), size ); 23 size_t i;24 23 25 26 27 24 int best_height = INT_MAX; 25 int best_index = -1; 26 int best_width = INT_MAX; 28 27 for( size_t i=0; i < m_nodes.size(); ++i ) 29 28 { 30 29 int y = fit( i, size ); 31 30 if( y >= 0 ) 32 31 { 33 32 glm::ivec3 node = m_nodes[ i ]; 34 33 if ( ( (y + size.y) < best_height ) || 35 34 ( ((y + size.y) == best_height) && (node.z < best_width)) ) 36 35 { 37 36 best_height = y + size.y; … … 41 40 r.pos.y = y; 42 41 } 43 44 42 } 43 } 45 44 46 if ( best_index == -1 )47 48 49 45 if ( best_index == -1 ) 46 { 47 return region( glm::ivec2( -1, -1 ), glm::ivec2( 0, 0 ) ); 48 } 50 49 51 50 m_nodes.insert( m_nodes.begin() + best_index, glm::ivec3( r.pos.x, r.pos.y + size.y, size.x ) ); 52 51 53 54 55 56 52 for( size_t i = best_index+1; i < m_nodes.size(); ++i ) 53 { 54 glm::ivec3 node = m_nodes[ i ]; 55 glm::ivec3 prev = m_nodes[ i-1 ]; 57 56 58 59 60 57 if (node.x < (prev.x + prev.z) ) 58 { 59 int shrink = prev.x + prev.z - node.x; 61 60 m_nodes[ i ].x += shrink; 62 61 m_nodes[ i ].z -= shrink; 63 62 64 65 63 if (m_nodes[ i ].z <= 0) 64 { 66 65 m_nodes.erase( m_nodes.begin() + i ); 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 66 --i; 67 } 68 else 69 { 70 break; 71 } 72 } 73 else 74 { 75 break; 76 } 77 } 78 merge(); 79 m_used += size.x * size.y; 80 return r; 82 81 } 83 82 … … 93 92 int y = node.y; 94 93 int wleft = size.x; 95 size_t i = index;96 94 97 95 while( wleft > 0 ) 98 96 { 99 node = m_nodes[ i];100 101 102 103 97 node = m_nodes[ index ]; 98 if( node.y > y ) 99 { 100 y = node.y; 101 } 104 102 if( (y + size.y) > (m_size.y-1) ) 105 103 { 106 104 return -1; 107 105 } 108 106 wleft -= node.z; 109 ++i ;107 ++index; 110 108 } 111 109 return y;
Note: See TracChangeset
for help on using the changeset viewer.