Changeset 153


Ignore:
Timestamp:
07/08/13 17:22:08 (12 years ago)
Author:
epyon
Message:
  • device & vertex_buffer - void* of data made const for const correctness
  • md3_loader - added keyframed_mesh class
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/formats/md3_loader.hh

    r149 r153  
    2121namespace nv
    2222{
     23
    2324        struct md3_tag
    2425        {
     
    3940                virtual mat4 get_tag( sint32 frame, const std::string& name ) const;
    4041                sint32 get_max_frames() const;
     42                void load_tag_names( std::vector< std::string >& tags );
    4143                void load_tags( std::vector<mat4>& t, const std::string& tag );
    4244                void load_positions( std::vector<vec3>& p, sint32 frame =-1 );
     
    5052        };
    5153
     54        class keyframed_mesh
     55        {
     56        public:
     57                typedef std::vector< mat4 > transforms;
     58                typedef std::unordered_map< std::string, transforms > tag_map;
     59
     60                keyframed_mesh( md3_loader* loader );
     61                size_t get_frame_count() const { return m_frames; };
     62                size_t get_index_count() const { return m_indices.size(); };
     63                size_t get_vertex_count() const { return m_texcoords.size(); };
     64                const std::vector< vec3 >& get_positions() { return m_positions; }
     65                const std::vector< vec3 >& get_normals() { return m_normals; }
     66                const std::vector< vec3 >& get_positions() { return m_positions; }
     67                const std::vector< vec2 >& get_texcoords() { return m_texcoords; }
     68                const std::vector< uint16 >& get_indices() { return m_indices; }
     69                const tag_map& get_tag_map() { return m_tags; }
     70                const vec3* get_position_data( uint32 frame = 0 ) { return m_positions.data() + m_texcoords.size() * frame; }
     71                const vec3* get_normal_data( uint32 frame = 0 ) { return m_normals.data() + m_texcoords.size() * frame; }
     72        protected:
     73
     74                std::size_t           m_frames;
     75                tag_map               m_tags;
     76                std::vector< vec3 >   m_normals;
     77                std::vector< vec3 >   m_positions;
     78                std::vector< vec2 >   m_texcoords;
     79                std::vector< uint16 > m_indices;
     80        };
     81
    5282}
    5383
  • trunk/nv/gl/gl_device.hh

    r121 r153  
    2323                virtual window* create_window( uint16 width, uint16 height );
    2424                virtual program* create_program( const string& vs_source, const string& fs_source );
    25                 virtual vertex_buffer* create_vertex_buffer( buffer_hint hint, size_t size, void* source = nullptr );
    26                 virtual index_buffer* create_index_buffer( buffer_hint hint, size_t size, void* source = nullptr );
     25                virtual vertex_buffer* create_vertex_buffer( buffer_hint hint, size_t size, const void* source = nullptr );
     26                virtual index_buffer* create_index_buffer( buffer_hint hint, size_t size, const void* source = nullptr );
    2727                virtual vertex_array* create_vertex_array();
    2828                virtual image_data* create_image_data( const std::string& filename ); // temporary
  • trunk/nv/gl/gl_vertex_buffer.hh

    r121 r153  
    2222        {
    2323        public:
    24                 gl_vertex_buffer( buffer_hint hint, size_t size, void* data = nullptr );
    25                 virtual void update( void* data, size_t offset, size_t size );
     24                gl_vertex_buffer( buffer_hint hint, size_t size, const void* data = nullptr );
     25                virtual void update( const void* data, size_t offset, size_t size );
    2626                virtual void bind();
    2727                virtual void unbind();
     
    3434        {
    3535        public:
    36                 gl_index_buffer( buffer_hint hint, size_t size, void* data = nullptr );
    37                 virtual void update( void* data, size_t offset, size_t size );
     36                gl_index_buffer( buffer_hint hint, size_t size, const void* data = nullptr );
     37                virtual void update( const void* data, size_t offset, size_t size );
    3838                virtual void bind();
    3939                virtual void unbind();
  • trunk/nv/interface/device.hh

    r121 r153  
    3030                virtual window* create_window( uint16 width, uint16 height ) = 0;
    3131                virtual program* create_program( const string& vs_source, const string& fs_source ) = 0;
    32                 virtual vertex_buffer* create_vertex_buffer( buffer_hint hint, size_t size, void* source = nullptr ) = 0;
    33                 virtual index_buffer* create_index_buffer( buffer_hint hint, size_t size, void* source = nullptr ) = 0;
     32                virtual vertex_buffer* create_vertex_buffer( buffer_hint hint, size_t size, const void* source = nullptr ) = 0;
     33                virtual index_buffer* create_index_buffer( buffer_hint hint, size_t size, const void* source = nullptr ) = 0;
    3434                virtual vertex_array* create_vertex_array() = 0;
    3535                virtual image_data* create_image_data( const std::string& filename ) = 0; // temporary
  • trunk/nv/interface/vertex_buffer.hh

    r121 r153  
    3333        public:
    3434                buffer( buffer_hint hint, size_t size ) { m_size = size; m_hint = hint; }
    35                 virtual void update( void* data, size_t offset, size_t size ) = 0;
     35                virtual void update( const void* data, size_t offset, size_t size ) = 0;
    3636                virtual void bind() = 0;
    3737                virtual void unbind() = 0;
  • trunk/src/formats/md3_loader.cc

    r149 r153  
    351351}
    352352
    353 sint32 nv::md3_loader::get_max_frames() const
     353sint32 md3_loader::get_max_frames() const
    354354{
    355355        return ((md3_t*)m_md3)->header.num_frames;
     356}
     357
     358void md3_loader::load_tag_names( std::vector< std::string >& tags )
     359{
     360        tags.clear();
     361        md3_t* md3 = (md3_t*)m_md3;
     362        for ( sint32 i = 0; i < md3->header.num_tags; ++i )
     363        {
     364                const md3_tag_t& rtag = md3->tags[i + md3->header.num_tags];
     365                tags.push_back( (char*)(rtag.name) );
     366        }
    356367}
    357368
     
    480491
    481492}
     493
     494keyframed_mesh::keyframed_mesh( md3_loader* loader )
     495{
     496        loader->load_positions( m_positions );
     497        loader->load_normals( m_normals );
     498        loader->load_texcoords( m_texcoords );
     499        loader->load_indicies( m_indices );
     500
     501        std::vector< std::string > names;
     502        loader->load_tag_names( names );
     503        for ( auto& name : names )
     504        {
     505                loader->load_tags( m_tags[ name ], name );
     506        }
     507
     508        m_frames = loader->get_max_frames();
     509}
     510
  • trunk/src/gl/gl_device.cc

    r121 r153  
    5353}
    5454
    55 vertex_buffer* gl_device::create_vertex_buffer( buffer_hint hint, size_t size, void* source /*= nullptr */ )
     55vertex_buffer* gl_device::create_vertex_buffer( buffer_hint hint, size_t size, const void* source /*= nullptr */ )
    5656{
    5757        return new gl_vertex_buffer( hint, size, source );
    5858}
    5959
    60 index_buffer* gl_device::create_index_buffer( buffer_hint hint, size_t size, void* source /*= nullptr */ )
     60index_buffer* gl_device::create_index_buffer( buffer_hint hint, size_t size, const void* source /*= nullptr */ )
    6161{
    6262        return new gl_index_buffer( hint, size, source );
  • trunk/src/gl/gl_vertex_buffer.cc

    r121 r153  
    1010using namespace nv;
    1111
    12 gl_vertex_buffer::gl_vertex_buffer( buffer_hint hint, size_t size, void* data )
     12gl_vertex_buffer::gl_vertex_buffer( buffer_hint hint, size_t size, const void* data )
    1313        : vertex_buffer( hint, size ), m_name()
    1414{
     
    1818}
    1919
    20 void gl_vertex_buffer::update( void* data, size_t offset, size_t size )
     20void gl_vertex_buffer::update( const void* data, size_t offset, size_t size )
    2121{
    2222        glBufferSubData( GL_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)size, data );
     
    3939}
    4040
    41 gl_index_buffer::gl_index_buffer( buffer_hint hint, size_t size, void* data )
     41gl_index_buffer::gl_index_buffer( buffer_hint hint, size_t size, const void* data )
    4242        : index_buffer( hint, size ), m_name()
    4343{
     
    4747}
    4848
    49 void gl_index_buffer::update( void* data, size_t offset, size_t size )
     49void gl_index_buffer::update( const void* data, size_t offset, size_t size )
    5050{
    5151        glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)size, data );
Note: See TracChangeset for help on using the changeset viewer.