Changeset 90 for trunk/src/gfx/image.cc


Ignore:
Timestamp:
06/02/13 22:33:59 (12 years ago)
Author:
epyon
Message:
  • common - windows SCL warnings proper suppression
  • common - NV_DEPRECATED added
  • interface/image_data added
  • image constructible from image_data by ownership transfer
  • device - create_image_data added (temporary)
  • gl_device - create_image_data implementation (temporary)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gfx/image.cc

    r89 r90  
    55#include "nv/gfx/image.hh"
    66
    7 #include <cstring>
     7#include <algorithm>
    88
    99using namespace nv;
     
    1515}
    1616
     17image::image( image_data* data )
     18        : m_size( data->get_size() ), m_depth( data->get_depth() ), m_data( data->release_data() )
     19{
     20        NV_ASSERT( m_data, "image created from empty image_data!" );
     21}
     22
     23
    1724image::image( glm::ivec2 size, size_t depth, const uint8 * data, bool reversed )
    1825        : m_size( size ), m_depth( depth ), m_data( nullptr )
    1926{
     27        std::size_t bsize = m_size.x * m_size.y * m_depth;
    2028        m_data = new uint8[ m_size.x * m_size.y * m_depth ];
    2129
    2230        if ( reversed )
    2331        {
    24                 for( int i = 0; i < size.y; ++i )
     32                std::size_t bline = m_size.x * m_depth;
     33                for( int i = 0; i < m_size.y; ++i )
    2534                {
    26                         memcpy( m_data + size.x * ( size.y - i - 1) * m_depth, data + i * size.x * m_depth, m_size.x * m_depth );
     35                        std::copy( data + i * bline, data + (i + 1) * bline, m_data + bsize - ( i + 1 ) * bline );
    2736                }
    2837
     
    3039        else
    3140        {
    32                 memcpy( m_data, data, m_size.x * m_size.y * m_depth );
     41                std::copy( data, data + bsize, m_data );
    3342        }
    3443}
     
    3645void image::fill( uint8 value )
    3746{
    38         memset( m_data, value, m_size.x * m_size.y * m_depth );
     47        std::fill( m_data, m_data + m_size.x * m_size.y * m_depth, value );
    3948}
    4049
    4150void image::set_region( region r, const uint8 * data, size_t stride )
    4251{
    43         if ( stride == 0 ) stride = r.size.x;
     52        if ( stride == 0 ) stride = r.size.x * m_depth;
     53       
     54        std::size_t bpos  = (r.pos.y*m_size.x + r.pos.x ) * m_depth;
     55        std::size_t bline = m_size.x*m_depth;
    4456
    4557        for( int i = 0; i < r.size.y; ++i )
    4658        {
    47                 memcpy( m_data+((r.pos.y+i)*m_size.x + r.pos.x ) * m_depth,
    48                         data + (i*stride), r.size.x * m_depth );
     59// TODO: test if same as old:
     60//              memcpy( m_data+((r.pos.y+i)*m_size.x + r.pos.x ) * m_depth,
     61//                      data + (i*stride), r.size.x * m_depth );
     62                std::copy( data + i*stride, data + (i+1)*stride, m_data + bpos + bline * i );
    4963        }
    5064}
Note: See TracChangeset for help on using the changeset viewer.