Changeset 116 for trunk


Ignore:
Timestamp:
06/11/13 22:33:08 (12 years ago)
Author:
epyon
Message:
  • support for indexed arrays
Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/interface/device.hh

    r101 r116  
    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, true );
     53                                result->set_index_buffer( vb, i->get_base_type(), true );
    5454                        }
    5555                        return result;
  • trunk/nv/interface/vertex_buffer.hh

    r111 r116  
    9393        {
    9494        public:
    95                 vertex_array() : m_map(), m_index( nullptr ) {}
     95                vertex_array() : m_map(), m_index( nullptr ), m_index_owner( false ), m_index_type(INT) {}
    9696                void add_vertex_buffer( int location, vertex_buffer* buffer, datatype datatype, int components, int offset = 0, int stride = 0, bool owner = true )
    9797                {
     
    107107                        }
    108108                };
    109                 void set_index_buffer( index_buffer* buffer, bool owner )
     109                void set_index_buffer( index_buffer* buffer, datatype datatype, bool owner )
    110110                {
    111                         m_index = buffer;
     111                        m_index       = buffer;
    112112                        m_index_owner = owner;
     113                        m_index_type  = datatype;
    113114                }
     115                bool has_index_buffer() const { return m_index != nullptr; }
     116                datatype get_index_buffer_type() const { return m_index_type; }
    114117                virtual void bind() = 0;
    115118                virtual void unbind() = 0;
     
    124127                vertex_buffer_attribute_map m_map;
    125128                index_buffer* m_index;
    126                 bool m_index_owner;
     129                bool          m_index_owner;
     130                datatype      m_index_type;
    127131        };
    128132
  • trunk/src/gl/gl_context.cc

    r108 r116  
    363363                p->bind();
    364364                va->bind();
    365                 glDrawArrays( primitive_to_enum(prim), 0, count);
     365                if ( va->has_index_buffer() )
     366                {
     367                        glDrawElements( primitive_to_enum(prim), count, datatype_to_gl_enum( va->get_index_buffer_type() ), 0 );
     368                }
     369                else
     370                {
     371                        glDrawArrays( primitive_to_enum(prim), 0, count);
     372                }
    366373                va->unbind();
    367374                p->unbind();
  • trunk/src/gl/gl_vertex_buffer.cc

    r100 r116  
    9292        }
    9393
     94        if ( m_index )
     95        {
     96                m_index->bind();
     97        }
    9498}
    9599
    96100void gl_vertex_array::unbind()
    97101{
     102        if ( m_index )
     103        {
     104                m_index->unbind();
     105        }
     106
    98107        for ( vertex_buffer_attribute_map::iterator i = m_map.begin();  i != m_map.end(); ++i )
    99108        {
Note: See TracChangeset for help on using the changeset viewer.