- Timestamp:
- 05/20/13 22:09:10 (13 years ago)
- File:
-
- 1 edited
-
trunk/src/gl/texture_atlas.cc (modified) (3 diffs)
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 int best_height = INT_MAX;26 int best_index = -1;27 int best_width = INT_MAX;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 int y = fit( i, size );29 int y = fit( i, size ); 31 30 if( y >= 0 ) 32 31 { 33 glm::ivec3 node = m_nodes[ i ];32 glm::ivec3 node = m_nodes[ i ]; 34 33 if ( ( (y + size.y) < best_height ) || 35 ( ((y + size.y) == best_height) && (node.z < best_width)) )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 return region( glm::ivec2( -1, -1 ), glm::ivec2( 0, 0 ) );49 }45 if ( best_index == -1 ) 46 { 47 return region( glm::ivec2( -1, -1 ), glm::ivec2( 0, 0 ) ); 48 } 50 49 51 m_nodes.insert( m_nodes.begin() + best_index, glm::ivec3( r.pos.x, r.pos.y + size.y, size.x ) );50 m_nodes.insert( m_nodes.begin() + best_index, glm::ivec3( r.pos.x, r.pos.y + size.y, size.x ) ); 52 51 53 for( size_t i = best_index+1; i < m_nodes.size(); ++i )54 {55 glm::ivec3 node = m_nodes[ i ];56 glm::ivec3 prev = m_nodes[ i-1 ];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 if (node.x < (prev.x + prev.z) )59 {60 int shrink = prev.x + prev.z - node.x;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 if (m_nodes[ i ].z <= 0)65 {63 if (m_nodes[ i ].z <= 0) 64 { 66 65 m_nodes.erase( m_nodes.begin() + i ); 67 --i;68 }69 else70 {71 break;72 }73 }74 else75 {76 break;77 }78 }79 merge();80 m_used += size.x * size.y;81 return r;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 if( node.y > y )101 {102 y = node.y;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.
