Changeset 101


Ignore:
Timestamp:
06/04/13 02:51:08 (12 years ago)
Author:
epyon
Message:
  • fixes to cached_buffer, mesh and device
  • extension of vertex_buffer
Location:
trunk/nv
Files:
4 edited

Legend:

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

    r100 r101  
    8484                        {
    8585                                const vector& bv = bslice->data();
    86                                 bslice.m_offset = m_data.size();
     86                                bslice->m_offset = m_data.size();
    8787                                m_data.insert( m_data.end(), bv.cbegin(), bv.cend() );
    8888                        }
    89                         else if ( bslice.m_locked )
     89                        else if ( bslice->m_locked )
    9090                        {
    9191                                const vector& bv = bslice->data();
    9292                                std::copy( bv.cbegin(), bv.cend(), m_data.begin() + bslice->m_offset );
    93                                 m_min = glm::min( m_min, bslice->m_offset );
    94                                 m_max = glm::max( m_max, bslice->m_offset + bv.size() );
     93                                m_min = glm::min<int>( m_min, bslice->m_offset );
     94                                m_max = glm::max<int>( m_max, bslice->m_offset + bv.size() );
    9595                        }
    9696                }
     
    106106                void commit()
    107107                {
    108                         int bsize = get_max_size();
     108                        size_t bsize = (size_t)get_max_size();
    109109                        if ( m_data.size() > bsize )
    110110                        {
  • trunk/nv/interface/device.hh

    r92 r101  
    4141                {
    4242                        vertex_array* result = create_vertex_array();
    43                         for ( auto attr : m->get_attributes() )
     43                        for ( auto& attr : m->get_attributes() )
    4444                        {
    4545                                // TODO : error checking
     
    5151                                const vertex_attribute_base* i = m->get_indices();
    5252                                index_buffer* vb = create_index_buffer( hint, i->get_size(), i->get_data() );
    53                                 result->set_index_buffer( vb );
     53                                result->set_index_buffer( vb, true );
    5454                        }
    5555                        return result;
  • trunk/nv/interface/mesh.hh

    r73 r101  
    8080                {
    8181                        if ( m_indices ) delete m_indices; // error?
    82                         m_indices = new vertex_attribute<T>( attr );
     82                        m_indices = new vertex_attribute<T>("");
    8383                        return m_indices;
    8484                }
     
    117117                {
    118118                        delete m_indices;
    119                         for ( auto v : m_map )
     119                        for ( auto& v : m_map )
    120120                        {
    121121                                delete v.second;
  • trunk/nv/interface/vertex_buffer.hh

    r100 r101  
    2020namespace nv
    2121{
     22        class vertex_array;
    2223
    2324        enum buffer_hint
     
    6263
    6364                vertex_buffer* get_buffer() const { return m_buffer; }
     65                void set_buffer( vertex_buffer* b, bool owner ) { if (m_owner) delete m_buffer; m_buffer = b; m_owner = owner; }
    6466                datatype get_datatype() const { return m_datatype; }
    6567                int get_components() const { return m_components; }
     
    7577                }
    7678        protected:
     79                friend class vertex_array;
     80
    7781                vertex_buffer* m_buffer;
    7882                datatype       m_datatype;
     
    9195                void add_vertex_buffer( int location, vertex_buffer* buffer, datatype datatype, int components, int offset = 0, int stride = 0, bool owner = true )
    9296                {
    93                         m_map[ location ] = new vertex_buffer_attribute( buffer, datatype, components, offset, stride, owner );
     97                        auto p = new vertex_buffer_attribute( buffer, datatype, components, offset, stride, owner );
     98                        m_map[ location ] = p;
    9499                };
    95                 void set_index_buffer( index_buffer* buffer ) { m_index = buffer; }
     100                void update_vertex_buffer( int location, vertex_buffer* b, bool owner )
     101                {
     102                        auto i = m_map.find( location );
     103                        if ( i != m_map.end() )
     104                        {
     105                                i->second->set_buffer( b, owner );
     106                        }
     107                };
     108                void set_index_buffer( index_buffer* buffer, bool owner )
     109                {
     110                        m_index = buffer;
     111                        m_index_owner = owner;
     112                }
    96113                virtual void bind() = 0;
    97114                virtual void unbind() = 0;
     
    101118                                delete i->second;
    102119                        }
    103                         if (m_index) delete m_index;
     120                        if (m_index && m_index_owner) delete m_index;
    104121                }
    105122        protected:
    106123                vertex_buffer_attribute_map m_map;
    107124                index_buffer* m_index;
     125                bool m_index_owner;
    108126        };
    109127
Note: See TracChangeset for help on using the changeset viewer.