Changeset 153
- Timestamp:
- 07/08/13 17:22:08 (12 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/nv/formats/md3_loader.hh
r149 r153 21 21 namespace nv 22 22 { 23 23 24 struct md3_tag 24 25 { … … 39 40 virtual mat4 get_tag( sint32 frame, const std::string& name ) const; 40 41 sint32 get_max_frames() const; 42 void load_tag_names( std::vector< std::string >& tags ); 41 43 void load_tags( std::vector<mat4>& t, const std::string& tag ); 42 44 void load_positions( std::vector<vec3>& p, sint32 frame =-1 ); … … 50 52 }; 51 53 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 52 82 } 53 83 -
trunk/nv/gl/gl_device.hh
r121 r153 23 23 virtual window* create_window( uint16 width, uint16 height ); 24 24 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 ); 27 27 virtual vertex_array* create_vertex_array(); 28 28 virtual image_data* create_image_data( const std::string& filename ); // temporary -
trunk/nv/gl/gl_vertex_buffer.hh
r121 r153 22 22 { 23 23 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 ); 26 26 virtual void bind(); 27 27 virtual void unbind(); … … 34 34 { 35 35 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 ); 38 38 virtual void bind(); 39 39 virtual void unbind(); -
trunk/nv/interface/device.hh
r121 r153 30 30 virtual window* create_window( uint16 width, uint16 height ) = 0; 31 31 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; 34 34 virtual vertex_array* create_vertex_array() = 0; 35 35 virtual image_data* create_image_data( const std::string& filename ) = 0; // temporary -
trunk/nv/interface/vertex_buffer.hh
r121 r153 33 33 public: 34 34 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; 36 36 virtual void bind() = 0; 37 37 virtual void unbind() = 0; -
trunk/src/formats/md3_loader.cc
r149 r153 351 351 } 352 352 353 sint32 nv::md3_loader::get_max_frames() const353 sint32 md3_loader::get_max_frames() const 354 354 { 355 355 return ((md3_t*)m_md3)->header.num_frames; 356 } 357 358 void 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 } 356 367 } 357 368 … … 480 491 481 492 } 493 494 keyframed_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 53 53 } 54 54 55 vertex_buffer* gl_device::create_vertex_buffer( buffer_hint hint, size_t size, void* source /*= nullptr */ )55 vertex_buffer* gl_device::create_vertex_buffer( buffer_hint hint, size_t size, const void* source /*= nullptr */ ) 56 56 { 57 57 return new gl_vertex_buffer( hint, size, source ); 58 58 } 59 59 60 index_buffer* gl_device::create_index_buffer( buffer_hint hint, size_t size, void* source /*= nullptr */ )60 index_buffer* gl_device::create_index_buffer( buffer_hint hint, size_t size, const void* source /*= nullptr */ ) 61 61 { 62 62 return new gl_index_buffer( hint, size, source ); -
trunk/src/gl/gl_vertex_buffer.cc
r121 r153 10 10 using namespace nv; 11 11 12 gl_vertex_buffer::gl_vertex_buffer( buffer_hint hint, size_t size, void* data )12 gl_vertex_buffer::gl_vertex_buffer( buffer_hint hint, size_t size, const void* data ) 13 13 : vertex_buffer( hint, size ), m_name() 14 14 { … … 18 18 } 19 19 20 void gl_vertex_buffer::update( void* data, size_t offset, size_t size )20 void gl_vertex_buffer::update( const void* data, size_t offset, size_t size ) 21 21 { 22 22 glBufferSubData( GL_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)size, data ); … … 39 39 } 40 40 41 gl_index_buffer::gl_index_buffer( buffer_hint hint, size_t size, void* data )41 gl_index_buffer::gl_index_buffer( buffer_hint hint, size_t size, const void* data ) 42 42 : index_buffer( hint, size ), m_name() 43 43 { … … 47 47 } 48 48 49 void gl_index_buffer::update( void* data, size_t offset, size_t size )49 void gl_index_buffer::update( const void* data, size_t offset, size_t size ) 50 50 { 51 51 glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)size, data );
Note: See TracChangeset
for help on using the changeset viewer.