Changeset 145 for trunk


Ignore:
Timestamp:
07/05/13 09:39:09 (12 years ago)
Author:
epyon
Message:
  • texture_atlas - we want to retain the extra border if handling text, but not textures (apart from that, great job on the bugfix)
Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/gfx/texture_atlas.hh

    r142 r145  
    2929                void merge();
    3030        private:
    31                 size_t  m_used;
     31                size_t m_used;
     32                size_t m_border;
    3233                std::vector<ivec3> m_nodes;
    3334        };
  • trunk/src/gfx/texture_atlas.cc

    r144 r145  
    1313
    1414texture_atlas::texture_atlas( glm::ivec2 size, size_t depth, size_t border /*= 1*/ )
    15         : image( size, depth ), m_used( 0 )
     15        : image( size, depth ), m_used( 0 ), m_border( border )
    1616{
    17         m_nodes.push_back( glm::ivec3( border, border, m_size.x - 2 * border ) );
     17        m_nodes.push_back( glm::ivec3( m_border, m_border, m_size.x - 2 * m_border ) );
    1818        fill( 0 );
    1919}
     
    3030        {
    3131                int y = fit( i, size );
    32                 if( y >= 0 )
     32                if ( y >= 0 )
    3333                {
    3434                        glm::ivec3 node = m_nodes[ i ];
     
    5757                glm::ivec3 prev = m_nodes[ i-1 ];
    5858
    59                 if (node.x < (prev.x + prev.z) )
     59                if ( node.x < prev.x + prev.z )
    6060                {
    6161                        int shrink = prev.x + prev.z - node.x;
     
    6363                        m_nodes[ i ].z -= shrink;
    6464
    65                         if (m_nodes[ i ].z <= 0)
     65                        if ( m_nodes[ i ].z <= 0 )
    6666                        {
    6767                                m_nodes.erase( m_nodes.begin() + static_cast<int>(i) );
     
    8787        glm::ivec3 node = m_nodes[ index ];
    8888
    89         if ( (  node.x + size.x ) > ( m_size.x ) )
     89        if ( node.x + size.x > m_size.x - m_border )
    9090        {
    9191                return -1;
     
    9595        int wleft = size.x;
    9696
    97         while( wleft > 0 )
     97        while ( wleft > 0 )
    9898        {
    9999                node = m_nodes[ index ];
    100                 if( node.y > y )
     100                if ( node.y > y )
    101101                {
    102102                        y = node.y;
    103103                }
    104                 if( (y + size.y) > ( m_size.y ) )
     104                if ( y + size.y > m_size.y - m_border )
    105105                {
    106106                        return -1;
     
    114114void texture_atlas::merge()
    115115{
    116         for( size_t i=0; i < m_nodes.size()-1; ++i )
     116        for ( size_t i=0; i < m_nodes.size()-1; ++i )
    117117    {
    118                 if( m_nodes[ i ].y == m_nodes[ i+1 ].y )
     118                if ( m_nodes[ i ].y == m_nodes[ i+1 ].y )
    119119                {
    120120                        m_nodes[ i ].z += m_nodes[ i+1 ].z;
Note: See TracChangeset for help on using the changeset viewer.