- Timestamp:
- 11/03/15 19:06:23 (10 years ago)
- Location:
- trunk
- Files:
-
- 16 edited
- 9 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/legacy/keyframed_mesh.cc
r470 r480 12 12 13 13 using namespace nv; 14 15 #if 0 14 16 15 17 nv::keyframed_mesh::keyframed_mesh( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map ) … … 247 249 delete[] m_data; 248 250 } 251 252 #endif -
trunk/legacy/keyframed_mesh.hh
r470 r480 11 11 #include <nv/interface/context.hh> 12 12 #include <nv/interface/animated_mesh.hh> 13 #include <nv/formats/md3_loader.hh>14 13 15 14 namespace nv 16 15 { 16 17 #if 0 17 18 18 19 class keyframed_mesh : public animated_mesh … … 95 96 }; 96 97 98 #endif 99 97 100 } // namespace nv 98 101 -
trunk/legacy/md2_loader.cc
r453 r480 368 368 } 369 369 370 mesh_data_pack* nv::md2_loader::release_mesh_data_pack()371 {372 data_channel_set* data = data_channel_set_creator::create_set_array( 1, 3 );373 release_mesh_frame( &data[0], -1 );374 return new mesh_data_pack( 1, data );375 } -
trunk/legacy/md2_loader.hh
r453 r480 28 28 virtual bool load( stream& source ); 29 29 virtual data_channel_set* release_mesh_data( size_t index = 0 ); 30 virtual mesh_data_pack* release_mesh_data_pack();31 30 virtual size_t get_mesh_count() const { return 1; } 32 31 private: -
trunk/legacy/md3_loader.cc
r475 r480 435 435 } 436 436 437 mesh_data_pack* nv::md3_loader::release_mesh_data_pack()438 {439 md3_t* md3 = reinterpret_cast<md3_t*>( m_md3 );440 int count = 1;441 data_channel_set* data = nullptr;442 if ( m_merge_all )443 {444 data = data_channel_set_creator::create_set_array(1,3);445 release_mesh_frame( &data[0], -1, -1 );446 }447 else448 {449 count = md3->header.num_surfaces;450 data = data_channel_set_creator::create_set_array( count, 3 );451 for ( int i = 0; i < count; ++i )452 {453 release_mesh_frame( &data[i], -1, i );454 data_channel_set_creator( &data[i] ).set_name( make_name( reinterpret_cast< char* >( md3->surfaces[i].header.name ) ) );455 }456 }457 return new mesh_data_pack( uint32( count ), data, release_mesh_nodes_data() );458 }459 460 437 nv::size_t md3_loader::get_max_frames() const 461 438 { -
trunk/legacy/md3_loader.hh
r453 r480 34 34 virtual bool load( stream& source ); 35 35 virtual data_channel_set* release_mesh_data( size_t index = 0 ); 36 virtual mesh_data_pack* release_mesh_data_pack();37 36 virtual size_t get_mesh_count() const { return 1; } 38 37 size_t get_max_frames() const; -
trunk/legacy/skeletal_mesh.cc
r479 r480 12 12 13 13 #include "nv/core/logging.hh" 14 14 #if 0 15 15 void nv::skeletal_animation_entry::update_skeleton( skeleton_instance& data, uint32 a_ms_time ) const 16 16 { … … 39 39 m_data.prepare( m_temp_anim, bones ? bones : m_temp_anim ); 40 40 } 41 42 nv::skeletal_mesh::skeletal_mesh( context* a_context, const data_channel_set* a_mesh, const mesh_nodes_data* a_bone_data ) 43 : m_skeleton( a_bone_data ? a_bone_data->size() : 0 ), m_context( a_context ), m_bone_data( a_bone_data ), m_index_count( 0 ), m_parent_id(-1) 44 { 45 if ( a_mesh ) 46 { 47 m_va = a_context->create_vertex_array( a_mesh, nv::STATIC_DRAW ); 48 m_index_count = a_mesh->get_channel_size( slot::INDEX ); 49 m_parent_id = a_mesh->get_parent_id(); 50 } 51 } 52 53 void nv::skeletal_mesh::update_animation( animation_entry& a_anim, uint32 a_anim_time ) 54 { 55 skeletal_animation_entry& anim = static_cast<skeletal_animation_entry&>( a_anim ); 56 anim.prepare( m_bone_data ); 57 anim.update_skeleton( m_skeleton, a_anim_time ); 58 } 59 60 void nv::skeletal_mesh::update_program( program a_program ) 61 { 62 m_context->get_device()->set_opt_uniform_array( a_program, "nv_m_bones", m_skeleton.transforms(), m_skeleton.size() ); 63 } 64 65 nv::transform nv::skeletal_mesh::get_node_transform( uint32 node_id ) const 66 { 67 return transform( get_node_matrix( node_id ) ); 68 } 69 70 nv::mat4 nv::skeletal_mesh::get_node_matrix( uint32 node_id ) const 71 { 72 return m_skeleton.transforms()[ node_id ]; 73 } 41 #endif -
trunk/legacy/skeletal_mesh.hh
r477 r480 16 16 namespace nv 17 17 { 18 18 #if 0 19 19 class skeletal_animation_entry : public animation_entry 20 20 { … … 33 33 skeleton_binding m_data; 34 34 }; 35 36 class skeletal_mesh : public animated_mesh 37 { 38 public: 39 skeletal_mesh( context* a_context, const data_channel_set* a_mesh, const mesh_nodes_data* a_bone_data ); 40 virtual vertex_array get_vertex_array() const { return m_va; } 41 virtual size_t get_index_count() const { return m_index_count; } 42 virtual void run_animation( animation_entry& a_anim ) 43 { 44 update_animation( a_anim, 0 ); 45 } 46 virtual void update_program( program a_program ); 47 virtual void update_animation( animation_entry& a_anim, uint32 a_anim_time ); 48 virtual transform get_node_transform( uint32 node_id ) const; 49 virtual mat4 get_node_matrix( uint32 node_id ) const; 50 virtual sint16 get_parent_id() const { return m_parent_id; } 51 virtual uint32 get_node_count() const { return m_skeleton.size(); } 52 skeleton_instance& get_skeleton() { return m_skeleton; } 53 const mesh_nodes_data* get_bone_data() { return m_bone_data; } 54 context* get_context() { return m_context; } 55 ~skeletal_mesh() 56 { 57 m_context->release( m_va ); 58 } 59 protected: 60 skeleton_instance m_skeleton; 61 vertex_array m_va; 62 uint32 m_index_count; 63 context* m_context; 64 const mesh_nodes_data* m_bone_data; 65 sint16 m_parent_id; 66 }; 35 #endif 67 36 68 37 } // namespace nv -
trunk/nv/core/resource.hh
r479 r480 22 22 { 23 23 24 struct resource_unchecked {}; 24 25 template < typename T > class resource; 25 26 template < typename T > class resource_handle; … … 32 33 33 34 protected: 34 virtual const void* lock( resource_id id, resource_type_id type_hash ) = 0;35 virtual const void* lock( resource_id id, resource_type_id type_hash, bool checked = true ) = 0; 35 36 // virtual const void* create( resource_id id, resource_type_id type_hash ) = 0; 36 37 virtual void unlock( resource_id id, resource_type_id type_hash ) = 0; … … 38 39 39 40 template< typename T > 40 const T* lock( resource_id id )41 { 42 return reinterpret_cast< const T* >( lock( id, shash64( rtti_type_hash<T>::hash() ) ) );41 const T* lock( resource_id id, bool checked = true ) 42 { 43 return reinterpret_cast< const T* >( lock( id, shash64( rtti_type_hash<T>::hash() ), checked ) ); 43 44 } 44 45 template< typename T > … … 75 76 constexpr bool is_valid() const { return m_id && m_handler; } 76 77 constexpr explicit operator bool() const { return is_valid(); } 78 resource_lock< T > lock() const { return resource_lock< T >( *this, resource_unchecked() ); } 77 79 ~resource() 78 80 { … … 146 148 static const uint64 hash_value = rtti_type_hash<T>::value; 147 149 public: 148 explicit resource_lock( const resource< T >& r ) : m_id( r.m_id ), m_handler( r.m_handler ), m_resource( r.m_handler->lock<T>( r.m_id ) ) {} 150 resource_lock() = delete; 151 explicit resource_lock( const resource< T >& r, resource_unchecked ) 152 : m_id( r.m_id ) 153 , m_handler( r.m_handler ) 154 , m_resource( r.m_handler ? r.m_handler->lock<T>( r.m_id, false ) : nullptr ) {} 155 explicit resource_lock( const resource< T >& r ) 156 : m_id( r.m_id ) 157 , m_handler( r.m_handler ) 158 , m_resource( r.m_handler->lock<T>( r.m_id ) ) {} 149 159 explicit resource_lock( const resource_handle< T >& r, resource_handler* handler ) : m_id( r.m_id ), m_handler( handler ), m_resource( handler->lock( r.m_id, shash64( hash_value ) ) ) {} 160 resource_lock( const resource_lock& ) = delete; 161 resource_lock& operator=( const resource_lock& other ) = delete; 162 resource_lock( resource_lock&& other ) 163 { 164 m_id = other.m_id; 165 m_handler = other.m_handler; 166 m_resource = other.m_resource; 167 other.m_handler = nullptr; 168 } 169 resource_lock& operator=( resource_lock&& other ) 170 { 171 if ( this != &other ) 172 { 173 if ( m_handler ) m_handler->unlock( m_id, shash64( hash_value ) ); 174 m_id = other.m_id; 175 m_handler = other.m_handler; 176 m_resource = other.m_resource; 177 other.m_handler = nullptr; 178 } 179 return *this; 180 } 150 181 const T& operator*() const { return *m_resource; } 151 182 const T* operator->() const { return m_resource; } 183 constexpr bool is_valid() const { return m_resource != nullptr; } 184 constexpr explicit operator bool() const { return is_valid(); } 152 185 ~resource_lock() 153 186 { 154 m_handler->unlock( m_id, shash64( hash_value ) );187 if ( m_handler ) m_handler->unlock( m_id, shash64( hash_value ) ); 155 188 } 156 189 private: -
trunk/nv/engine/resource_system.hh
r479 r480 125 125 } 126 126 127 resource_type add( shash64 id, stored_type resource )128 {129 m_store[id] = resource;130 return create< T >( id );131 }132 133 127 virtual ~custom_resource_manager() 134 128 { … … 136 130 } 137 131 protected: 138 virtual const void* lock( resource_id id, resource_type_id ) 132 resource_type add( shash64 id, stored_type resource ) 133 { 134 auto m = m_store.find( shash64( id ) ); 135 if ( m != m_store.end() ) 136 { 137 release( m->second ); 138 } 139 m_store[id] = resource; 140 return create< T >( id ); 141 } 142 143 virtual const void* lock( resource_id id, resource_type_id, bool ) 139 144 { 140 145 auto m = m_store.find( id ); … … 150 155 using lua_resource_manager = custom_resource_manager< T, Heap, lua_resource_manager_base >; 151 156 157 158 template < typename T, bool Heap = true > 159 class manual_resource_manager : public custom_resource_manager< T, Heap > 160 { 161 public: 162 manual_resource_manager() {} 163 using custom_resource_manager< T, Heap >::add; 164 protected: 165 virtual bool load_resource( const nv::string_view& ) { return false; } 166 167 }; 152 168 } 153 169 -
trunk/nv/formats/assimp_loader.hh
r428 r480 25 25 virtual size_t get_mesh_count() const { return m_mesh_count; } 26 26 virtual ~assimp_loader(); 27 virtual mesh_data_pack* release_mesh_data_pack();28 27 virtual size_t get_nodes_data_count() const; 29 28 virtual mesh_nodes_data* release_mesh_nodes_data( size_t index = 0 ); -
trunk/nv/formats/nmd_loader.hh
r470 r480 83 83 virtual size_t get_nodes_data_count() const { return 1; } 84 84 virtual mesh_nodes_data* release_mesh_nodes_data( size_t = 0 ); 85 virtual mesh_data_pack* release_mesh_data_pack();86 85 virtual size_t get_mesh_count() const { return m_meshes.size(); } 87 86 virtual ~nmd_loader(); … … 104 103 void nmd_dump_element( stream& stream_out, const data_channel_set& data, nmd_type type ); 105 104 void nmd_dump_nodes( stream& stream_out, const mesh_nodes_data& nodes ); 106 void nmd_dump( stream& stream_out, const mesh_data_pack* model, const string_table* strings = nullptr, uint64 name = 0 ); 105 void nmd_dump( stream& stream_out, array_view< data_channel_set* > meshes, const mesh_nodes_data* nodes, const string_table* strings = nullptr, uint64 name = 0 ); 106 void nmd_dump( stream& stream_out, const mesh_nodes_data& animation, const string_table* strings = nullptr, uint64 name = 0 ); 107 107 108 108 109 } -
trunk/nv/formats/obj_loader.hh
r425 r480 28 28 virtual bool load( stream& source ); 29 29 virtual data_channel_set* release_mesh_data( size_t index = 0 ); 30 virtual mesh_data_pack* release_mesh_data_pack();31 30 virtual size_t get_mesh_count() const { return m_meshes.size(); } 32 31 ~obj_loader(); -
trunk/nv/gfx/mesh_creator.hh
r457 r480 18 18 { 19 19 public: 20 mesh_data_creator( data_channel_set* data ); 20 mesh_data_creator( data_channel_set* data ) : m_data( data ) 21 { 22 initialize(); 23 } 24 21 25 // assumes that position and normal is vec3, tangent is vec4 22 26 void transform( float scale, const mat3& r33 ); … … 64 68 { 65 69 public: 66 mesh_nodes_creator( mesh_nodes_data* data ) : m_data( data ) {} 70 mesh_nodes_creator( mesh_nodes_data* data ) : m_data( data ) 71 {} 67 72 // assumes that keys are equally spaced 68 73 void pre_transform_keys(); … … 74 79 }; 75 80 76 class mesh_creator77 {78 public:79 mesh_creator( mesh_data_pack* pack ) : m_pack( pack ) {}80 void delete_mesh( uint32 index );81 // assumes that keys are equally spaced82 void pre_transform_keys()83 {84 if ( m_pack->m_nodes )85 mesh_nodes_creator( m_pack->m_nodes ).pre_transform_keys();86 }87 void generate_tangents()88 {89 for ( size_t m = 0; m < m_pack->m_count; ++m )90 mesh_data_creator( &(m_pack->m_meshes[m]) ).generate_tangents();91 }92 93 // assumes that keys are equally spaced94 void merge_keys() { mesh_nodes_creator( m_pack->m_nodes ).merge_keys(); }95 // assumes that position and normal is vec3, tangent is vec496 void flip_normals()97 {98 for ( size_t m = 0; m < m_pack->m_count; ++m )99 mesh_data_creator( &(m_pack->m_meshes[m]) ).flip_normals();100 }101 void transform( float scale, const mat3& r33 )102 {103 for ( size_t m = 0; m < m_pack->m_count; ++m )104 mesh_data_creator( &(m_pack->m_meshes[m]) ).transform( scale, r33 );105 if ( m_pack->m_nodes )106 mesh_nodes_creator( m_pack->m_nodes ).transform( scale, r33 );107 }108 // assumes models have same format109 // currently only data merge110 bool merge( mesh_data_pack* other )111 {112 for ( size_t m = 0; m < m_pack->m_count; ++m )113 {114 if (!mesh_data_creator( &(m_pack->m_meshes[m]) ).is_same_format( &(other->m_meshes[m]) ) )115 return false;116 }117 for ( size_t m = 0; m < m_pack->m_count; ++m )118 {119 mesh_data_creator(&(m_pack->m_meshes[m]) ).merge( &(other->m_meshes[m]) );120 }121 return true;122 }123 private:124 mesh_data_pack* m_pack;125 };126 81 } 127 82 -
trunk/nv/gfx/skeleton_instance.hh
r479 r480 55 55 void animate( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame ); 56 56 protected: 57 void animate_rec( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame, uint32 id, const mat4& parent );57 void animate_rec( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame, uint32 id, const transform& parent ); 58 58 void animate_flat( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame ); 59 59 -
trunk/nv/interface/animated_mesh.hh
r477 r480 22 22 { 23 23 24 #if 0 24 25 class animation_entry 25 26 { … … 51 52 uint32 m_fend; /// end time (in frames) 52 53 }; 53 54 class animated_mesh : public mesh_interface 55 { 56 public: 57 animated_mesh() {} 58 virtual void update_animation( animation_entry&, uint32 ) {} 59 virtual void run_animation( animation_entry& ) {} 60 virtual transform get_node_transform( uint32 ) const { return transform(); } 61 virtual mat4 get_node_matrix( uint32 ) const { return mat4(); } 62 virtual uint32 get_node_count() const { return 0; } 63 virtual sint16 get_parent_id() const { return -1; } 64 65 }; 66 54 #endif 67 55 68 56 } -
trunk/nv/interface/context.hh
r477 r480 43 43 DRAW_FRAMEBUFFER, 44 44 FRAMEBUFFER, 45 };46 47 class mesh_interface48 {49 public:50 mesh_interface() {}51 virtual void update_program( program ) {}52 virtual nv::vertex_array get_vertex_array() const = 0;53 virtual size_t get_index_count() const = 0;54 virtual nv::primitive get_primitive_type() const { return nv::TRIANGLES; }55 virtual ~mesh_interface() {}56 45 }; 57 46 -
trunk/nv/interface/mesh_data.hh
r477 r480 152 152 }; 153 153 154 class mesh_data_pack155 {156 friend class mesh_creator;157 public:158 explicit mesh_data_pack( uint32 a_count, data_channel_set* a_meshes, mesh_nodes_data* a_nodes = nullptr )159 {160 m_count = a_count;161 m_meshes = a_meshes;162 m_nodes = a_nodes;163 }164 const data_channel_set* get_mesh( uint32 index ) const165 {166 if ( index >= m_count ) return nullptr;167 return &m_meshes[ index ];168 }169 const data_channel_set* get_mesh_by_hash( shash64 h ) const170 {171 for ( uint32 i = 0; i < m_count; ++i )172 {173 if ( m_meshes[i].get_name() == h )174 return &m_meshes[i];175 }176 return nullptr;177 }178 uint32 get_count() const { return m_count; }179 data_channel_set* release_meshes() { data_channel_set* meshes = m_meshes; m_meshes = nullptr; return meshes; }180 mesh_nodes_data* release_nodes() { mesh_nodes_data* nodes = m_nodes; m_nodes = nullptr; return nodes; }181 const mesh_nodes_data* get_nodes() const { return m_nodes; }182 uint32 get_node_count() const { return m_nodes ? m_nodes->size() : 0; }183 ~mesh_data_pack()184 {185 delete[] m_meshes;186 delete m_nodes;187 }188 private:189 uint32 m_count;190 data_channel_set* m_meshes;191 mesh_nodes_data* m_nodes;192 };193 154 } 194 155 -
trunk/nv/interface/mesh_loader.hh
r431 r480 32 32 virtual bool load( stream& source ) = 0; 33 33 virtual data_channel_set* release_mesh_data( size_t index = 0 ) = 0; 34 virtual mesh_data_pack* release_mesh_data_pack() = 0;35 34 virtual size_t get_mesh_count() const = 0; 36 35 virtual size_t get_nodes_data_count() const { return 0; } -
trunk/src/formats/assimp_loader.cc
r475 r480 462 462 } 463 463 464 mesh_data_pack* nv::assimp_loader::release_mesh_data_pack()465 {466 if ( m_scene == nullptr || m_mesh_count == 0 ) return nullptr;467 const aiScene* scene = reinterpret_cast<const aiScene*>( m_scene );468 bool has_bones = false;469 data_channel_set* meshes = data_channel_set_creator::create_set_array( m_mesh_count, 2 );470 for ( size_t m = 0; m < m_mesh_count; ++m )471 {472 const aiMesh* mesh = scene->mMeshes[ m ];473 data_channel_set_creator( &meshes[m] ).set_name( make_name( static_cast<const char*>( mesh->mName.data ) ) );474 if ( mesh->mNumBones > 0 ) has_bones = true;475 load_mesh_data(&meshes[m],m);476 }477 478 mesh_nodes_data* nodes = ( has_bones ? release_merged_bones( meshes ) : release_mesh_nodes_data(0) );479 return new mesh_data_pack( m_mesh_count, meshes, nodes );480 }464 // mesh_data_pack* nv::assimp_loader::release_mesh_data_pack() 465 // { 466 // if ( m_scene == nullptr || m_mesh_count == 0 ) return nullptr; 467 // const aiScene* scene = reinterpret_cast<const aiScene*>( m_scene ); 468 // bool has_bones = false; 469 // data_channel_set* meshes = data_channel_set_creator::create_set_array( m_mesh_count, 2 ); 470 // for ( size_t m = 0; m < m_mesh_count; ++m ) 471 // { 472 // const aiMesh* mesh = scene->mMeshes[ m ]; 473 // data_channel_set_creator( &meshes[m] ).set_name( make_name( static_cast<const char*>( mesh->mName.data ) ) ); 474 // if ( mesh->mNumBones > 0 ) has_bones = true; 475 // load_mesh_data(&meshes[m],m); 476 // } 477 // 478 // mesh_nodes_data* nodes = ( has_bones ? release_merged_bones( meshes ) : release_mesh_nodes_data(0) ); 479 // return new mesh_data_pack( m_mesh_count, meshes, nodes ); 480 // } 481 481 482 482 nv::size_t nv::assimp_loader::get_nodes_data_count() const -
trunk/src/formats/nmd_loader.cc
r475 r480 50 50 } 51 51 52 mesh_data_pack* nv::nmd_loader::release_mesh_data_pack()53 {54 uint32 size = m_meshes.size();55 data_channel_set* meshes = data_channel_set_creator::create_set_array( size, 0 );56 for ( uint32 i = 0; i < size; ++i )57 {58 meshes[i] = move( *m_meshes[i] );59 delete m_meshes[i];60 }61 m_meshes.clear();62 return new mesh_data_pack( size, meshes, release_mesh_nodes_data() );63 }64 65 52 void nv::nmd_loader::reset() 66 53 { … … 240 227 } 241 228 242 void nv::nmd_dump( stream& stream_out, const mesh_data_pack* model, const string_table* strings, uint64 name)229 void nv::nmd_dump( stream& stream_out, array_view< data_channel_set* > meshes, const mesh_nodes_data* nodes, const string_table* strings /*= nullptr*/, uint64 name /*= 0 */ ) 243 230 { 244 231 uint32 elements = ( strings ? 1 : 0 ) // +1 string array 245 + m odel->get_count() // meshes246 + ( model->get_node_count() > 0 ? 1 : 0 ); // nodes232 + meshes.size() // meshes 233 + ( nodes && nodes->size() > 0 ? 1 : 0 ); // nodes 247 234 nmd_dump_header( stream_out, elements, name ); 248 235 249 for ( uint32 i = 0; i < model->get_count(); ++i ) 250 { 251 nmd_dump_element( stream_out, *model->get_mesh( i ), nv::nmd_type::MESH ); 252 } 253 254 if ( model->get_node_count() > 0 ) 255 { 256 nmd_dump_nodes( stream_out, *model->get_nodes() ); 236 for ( uint32 i = 0; i < meshes.size(); ++i ) 237 { 238 NV_ASSERT( meshes[i], "mesh is null!" ); 239 nmd_dump_element( stream_out, *meshes[i], nv::nmd_type::MESH ); 240 } 241 242 if ( nodes && nodes->size() > 0 ) 243 { 244 nmd_dump_nodes( stream_out, *nodes ); 257 245 } 258 246 … … 262 250 } 263 251 } 252 253 void nv::nmd_dump( stream& stream_out, const mesh_nodes_data& animation, const string_table* strings, uint64 name ) 254 { 255 uint32 elements = ( strings ? 1 : 0 ) // +1 string array 256 + ( animation.size() > 0 ? 1 : 0 ); // nodes 257 nmd_dump_header( stream_out, elements, name ); 258 259 if ( animation.size() > 0 ) 260 { 261 nmd_dump_nodes( stream_out, animation ); 262 } 263 264 if ( strings ) 265 { 266 nmd_dump_strings( stream_out, *strings ); 267 } 268 } -
trunk/src/formats/obj_loader.cc
r454 r480 357 357 } 358 358 359 mesh_data_pack* nv::obj_loader::release_mesh_data_pack()360 {361 uint32 size = m_meshes.size();362 data_channel_set* meshes = data_channel_set_creator::create_set_array( size, 1 );363 for ( uint32 i = 0; i < size; ++i )364 {365 meshes[i] = move( *m_meshes[i] );366 delete m_meshes[i];367 }368 m_meshes.clear();369 return new mesh_data_pack( size, meshes );370 } -
trunk/src/gfx/mesh_creator.cc
r471 r480 157 157 } 158 158 } 159 }160 161 nv::mesh_data_creator::mesh_data_creator( data_channel_set* data ) : m_data( data )162 {163 initialize();164 159 } 165 160 … … 656 651 } 657 652 658 void nv::mesh_creator::delete_mesh( uint32 index )659 {660 if ( index < m_pack->get_count() )661 {662 663 m_pack->m_meshes[index] = move( m_pack->m_meshes[m_pack->m_count - 1] );664 m_pack->m_count--;665 }666 } -
trunk/src/gfx/skeleton_instance.cc
r477 r480 6 6 7 7 #include "nv/gfx/skeleton_instance.hh" 8 9 #include "nv/core/profiler.hh" 8 10 9 11 void nv::skeleton_binding::prepare( const mesh_nodes_data* node_data, const mesh_nodes_data* bone_data ) … … 62 64 for ( uint32 n = 0; n < node_data->size(); ++n ) 63 65 if ( ( *node_data )[n]->get_parent_id() == -1 ) 64 animate_rec( node_data, binding, frame, n, mat4() );66 animate_rec( node_data, binding, frame, n, transform() ); 65 67 } 66 68 } 67 69 } 68 70 69 void nv::skeleton_instance::animate_rec( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame, uint32 id, const mat4& parent )71 void nv::skeleton_instance::animate_rec( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame, uint32 id, const transform& parent ) 70 72 { 71 73 // TODO: fix transforms, which are now embedded, 72 74 // see note in assimp_loader.cc:load_node 73 75 const data_channel_set* node = ( *node_data )[id]; 74 mat4node_mat( node->get_transform() );76 transform node_mat( node->get_transform() ); 75 77 76 78 if ( node->size() > 0 ) 77 79 { 78 80 raw_channel_interpolator interpolator( node, binding.m_key ); 79 node_mat = interpolator.get< mat4>( frame );81 node_mat = interpolator.get< transform >( frame ); 80 82 } 81 83 82 mat4global_mat = parent * node_mat;84 transform global_mat = parent * node_mat; 83 85 84 86 sint16 bone_id = binding.m_indices[id]; 85 87 if ( bone_id >= 0 ) 86 88 { 87 m_transform[bone_id] = global_mat * binding.m_offsets[bone_id];89 m_transform[bone_id] = global_mat.extract() * binding.m_offsets[bone_id]; 88 90 } 89 91
Note: See TracChangeset
for help on using the changeset viewer.