Changeset 13 for trunk/src


Ignore:
Timestamp:
01/26/13 20:23:31 (12 years ago)
Author:
epyon
Message:
  • pure image functionality of texture_atlas split into image clas
Location:
trunk/src/gl
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gl/texture_atlas.cc

    r11 r13  
    77#include "nv/gl/texture_atlas.hh"
    88
     9#include "nv/logging.hh"
     10
    911using namespace nv;
    1012
    1113texture_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 )
    1315{
    1416        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 ];
    1617        fill( 0 );
    1718}
    1819
    19 glm::ivec4 texture_atlas::get_region( glm::ivec2 size )
     20region texture_atlas::get_region( glm::ivec2 size )
    2021{
    21         glm::ivec4 region (0,0,size.x,size.y);
     22        region r ( glm::ivec2(0,0), size );
    2223    size_t i;
    2324
     
    3738                                best_index = i;
    3839                                best_width = node.z;
    39                                 region.x = node.x;
    40                                 region.y = y;
     40                                r.pos.x = node.x;
     41                                r.pos.y = y;
    4142                        }
    4243        }
     
    4546        if( best_index == -1 )
    4647    {
    47         return glm::ivec4( -1, -1, 0, 0 );
     48        return region( glm::ivec2( -1, -1 ), glm::ivec2( 0, 0 ) );
    4849    }
    4950
    50     m_nodes.insert( m_nodes.begin() + best_index, glm::ivec3( region.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 ) );
    5152
    5253    for( size_t i = best_index+1; i < m_nodes.size(); ++i )
     
    7879    merge();
    7980    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;
    9082}
    9183
     
    140132        fill( 0 );
    141133}
    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.