Changeset 480 for trunk


Ignore:
Timestamp:
11/03/15 19:06:23 (10 years ago)
Author:
epyon
Message:
  • cleanup of legacy code
  • resource updates
Location:
trunk
Files:
16 edited
9 moved

Legend:

Unmodified
Added
Removed
  • trunk/legacy/keyframed_mesh.cc

    r470 r480  
    1212
    1313using namespace nv;
     14
     15#if 0
    1416
    1517nv::keyframed_mesh::keyframed_mesh( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
     
    247249        delete[] m_data;
    248250}
     251
     252#endif
  • trunk/legacy/keyframed_mesh.hh

    r470 r480  
    1111#include <nv/interface/context.hh>
    1212#include <nv/interface/animated_mesh.hh>
    13 #include <nv/formats/md3_loader.hh>
    1413
    1514namespace nv
    1615{
     16
     17#if 0
    1718
    1819        class keyframed_mesh : public animated_mesh
     
    9596        };
    9697
     98#endif
     99
    97100} // namespace nv
    98101
  • trunk/legacy/md2_loader.cc

    r453 r480  
    368368}
    369369
    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  
    2828                virtual bool load( stream& source );
    2929                virtual data_channel_set* release_mesh_data( size_t index = 0 );
    30                 virtual mesh_data_pack* release_mesh_data_pack();
    3130                virtual size_t get_mesh_count() const { return 1; }
    3231        private:
  • trunk/legacy/md3_loader.cc

    r475 r480  
    435435}
    436436
    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         else
    448         {
    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 
    460437nv::size_t md3_loader::get_max_frames() const
    461438{
  • trunk/legacy/md3_loader.hh

    r453 r480  
    3434                virtual bool load( stream& source );
    3535                virtual data_channel_set* release_mesh_data( size_t index = 0 );
    36                 virtual mesh_data_pack* release_mesh_data_pack();
    3736                virtual size_t get_mesh_count() const { return 1; }
    3837                size_t get_max_frames() const;
  • trunk/legacy/skeletal_mesh.cc

    r479 r480  
    1212
    1313#include "nv/core/logging.hh"
    14 
     14#if 0
    1515void nv::skeletal_animation_entry::update_skeleton( skeleton_instance& data, uint32 a_ms_time ) const
    1616{
     
    3939        m_data.prepare( m_temp_anim, bones ? bones : m_temp_anim );
    4040}
    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  
    1616namespace nv
    1717{
    18        
     18#if 0   
    1919        class skeletal_animation_entry : public animation_entry
    2020        {
     
    3333                skeleton_binding m_data;
    3434        };
    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
    6736
    6837} // namespace nv
  • trunk/nv/core/resource.hh

    r479 r480  
    2222{
    2323
     24        struct resource_unchecked {};
    2425        template < typename T > class resource;
    2526        template < typename T > class resource_handle;
     
    3233
    3334        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;
    3536//              virtual const void* create( resource_id id, resource_type_id type_hash ) = 0;
    3637                virtual void unlock( resource_id id, resource_type_id type_hash ) = 0;
     
    3839
    3940                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 ) );
    4344                }
    4445                template< typename T >
     
    7576                constexpr bool is_valid() const { return m_id && m_handler; }
    7677                constexpr explicit operator bool() const { return is_valid(); }
     78                resource_lock< T > lock() const { return resource_lock< T >( *this, resource_unchecked() ); }
    7779                ~resource()
    7880                {
     
    146148                static const uint64 hash_value = rtti_type_hash<T>::value;
    147149        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 ) ) {}
    149159                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                }
    150181                const T& operator*() const { return *m_resource; }
    151182                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(); }
    152185                ~resource_lock()
    153186                {
    154                         m_handler->unlock( m_id, shash64( hash_value ) );
     187                        if ( m_handler ) m_handler->unlock( m_id, shash64( hash_value ) );
    155188                }
    156189        private:
  • trunk/nv/engine/resource_system.hh

    r479 r480  
    125125                }
    126126
    127                 resource_type add( shash64 id, stored_type resource )
    128                 {
    129                         m_store[id] = resource;
    130                         return create< T >( id );
    131                 }
    132 
    133127                virtual ~custom_resource_manager()
    134128                {
     
    136130                }
    137131        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 )
    139144                {
    140145                        auto m = m_store.find( id );
     
    150155        using lua_resource_manager = custom_resource_manager< T, Heap, lua_resource_manager_base >;
    151156
     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        };
    152168}
    153169
  • trunk/nv/formats/assimp_loader.hh

    r428 r480  
    2525                virtual size_t get_mesh_count() const { return m_mesh_count; }
    2626                virtual ~assimp_loader();
    27                 virtual mesh_data_pack* release_mesh_data_pack();
    2827                virtual size_t get_nodes_data_count() const;
    2928                virtual mesh_nodes_data* release_mesh_nodes_data( size_t index = 0 );
  • trunk/nv/formats/nmd_loader.hh

    r470 r480  
    8383                virtual size_t get_nodes_data_count() const { return 1; }
    8484                virtual mesh_nodes_data* release_mesh_nodes_data( size_t = 0 );
    85                 virtual mesh_data_pack* release_mesh_data_pack();
    8685                virtual size_t get_mesh_count() const { return m_meshes.size(); }
    8786                virtual ~nmd_loader();
     
    104103        void nmd_dump_element( stream& stream_out, const data_channel_set& data, nmd_type type );
    105104        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
    107108
    108109}
  • trunk/nv/formats/obj_loader.hh

    r425 r480  
    2828                virtual bool load( stream& source );
    2929                virtual data_channel_set* release_mesh_data( size_t index = 0 );
    30                 virtual mesh_data_pack* release_mesh_data_pack();
    3130                virtual size_t get_mesh_count() const { return m_meshes.size(); }
    3231                ~obj_loader();
  • trunk/nv/gfx/mesh_creator.hh

    r457 r480  
    1818        {
    1919        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
    2125                // assumes that position and normal is vec3, tangent is vec4
    2226                void transform( float scale, const mat3& r33 );
     
    6468        {
    6569        public:
    66                 mesh_nodes_creator( mesh_nodes_data* data ) : m_data( data ) {}
     70                mesh_nodes_creator( mesh_nodes_data* data ) : m_data( data )
     71                {}
    6772                // assumes that keys are equally spaced
    6873                void pre_transform_keys();
     
    7479        };
    7580
    76         class mesh_creator
    77         {
    78         public:
    79                 mesh_creator( mesh_data_pack* pack ) : m_pack( pack ) {}
    80                 void delete_mesh( uint32 index );
    81                 // assumes that keys are equally spaced
    82                 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 spaced
    94                 void merge_keys() { mesh_nodes_creator( m_pack->m_nodes ).merge_keys(); }
    95                 // assumes that position and normal is vec3, tangent is vec4
    96                 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 format
    109                 // currently only data merge
    110                 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         };
    12681}
    12782
  • trunk/nv/gfx/skeleton_instance.hh

    r479 r480  
    5555                void animate( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame );
    5656        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 );
    5858                void animate_flat( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame );
    5959
  • trunk/nv/interface/animated_mesh.hh

    r477 r480  
    2222{
    2323
     24#if 0
    2425        class animation_entry
    2526        {
     
    5152                uint32  m_fend;    /// end time (in frames)
    5253        };
    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
    6755
    6856}
  • trunk/nv/interface/context.hh

    r477 r480  
    4343                DRAW_FRAMEBUFFER,
    4444                FRAMEBUFFER,
    45         };
    46 
    47         class mesh_interface
    48         {
    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() {}
    5645        };
    5746
  • trunk/nv/interface/mesh_data.hh

    r477 r480  
    152152        };
    153153
    154         class mesh_data_pack
    155         {
    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 ) const
    165                 {
    166                         if ( index >= m_count ) return nullptr;
    167                         return &m_meshes[ index ];
    168                 }
    169                 const data_channel_set* get_mesh_by_hash( shash64 h ) const
    170                 {
    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         };
    193154}
    194155
  • trunk/nv/interface/mesh_loader.hh

    r431 r480  
    3232                virtual bool load( stream& source ) = 0;
    3333                virtual data_channel_set* release_mesh_data( size_t index = 0 ) = 0;
    34                 virtual mesh_data_pack* release_mesh_data_pack() = 0;
    3534                virtual size_t get_mesh_count() const = 0;
    3635                virtual size_t get_nodes_data_count() const { return 0; }
  • trunk/src/formats/assimp_loader.cc

    r475 r480  
    462462}
    463463
    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// }
    481481
    482482nv::size_t nv::assimp_loader::get_nodes_data_count() const
  • trunk/src/formats/nmd_loader.cc

    r475 r480  
    5050}
    5151
    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 
    6552void nv::nmd_loader::reset()
    6653{
     
    240227}
    241228
    242 void nv::nmd_dump( stream& stream_out, const mesh_data_pack* model, const string_table* strings, uint64 name )
     229void 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 */ )
    243230{
    244231        uint32 elements = ( strings ? 1 : 0 ) // +1 string array
    245                 + model->get_count() // meshes
    246                 + ( model->get_node_count() > 0 ? 1 : 0 ); // nodes
     232                + meshes.size() // meshes
     233                + ( nodes && nodes->size() > 0 ? 1 : 0 ); // nodes
    247234        nmd_dump_header( stream_out, elements, name );
    248235
    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 );
    257245        }
    258246
     
    262250        }
    263251}
     252
     253void 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  
    357357}
    358358
    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  
    157157                }
    158158        }
    159 }
    160 
    161 nv::mesh_data_creator::mesh_data_creator( data_channel_set* data ) : m_data( data )
    162 {
    163         initialize();
    164159}
    165160
     
    656651}
    657652
    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  
    66
    77#include "nv/gfx/skeleton_instance.hh"
     8
     9#include "nv/core/profiler.hh"
    810
    911void nv::skeleton_binding::prepare( const mesh_nodes_data* node_data, const mesh_nodes_data* bone_data )
     
    6264                        for ( uint32 n = 0; n < node_data->size(); ++n )
    6365                                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() );
    6567                }
    6668        }
    6769}
    6870
    69 void nv::skeleton_instance::animate_rec( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame, uint32 id, const mat4& parent )
     71void nv::skeleton_instance::animate_rec( const mesh_nodes_data* node_data, const skeleton_binding& binding, float frame, uint32 id, const transform& parent )
    7072{
    7173        // TODO: fix transforms, which are now embedded,
    7274        //       see note in assimp_loader.cc:load_node
    7375        const data_channel_set* node = ( *node_data )[id];
    74         mat4 node_mat( node->get_transform() );
     76        transform node_mat( node->get_transform() );
    7577
    7678        if ( node->size() > 0 )
    7779        {
    7880                raw_channel_interpolator interpolator( node, binding.m_key );
    79                 node_mat = interpolator.get< mat4 >( frame );
     81                node_mat = interpolator.get< transform >( frame );
    8082        }
    8183
    82         mat4 global_mat = parent * node_mat;
     84        transform global_mat = parent * node_mat;
    8385
    8486        sint16 bone_id = binding.m_indices[id];
    8587        if ( bone_id >= 0 )
    8688        {
    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];
    8890        }
    8991
Note: See TracChangeset for help on using the changeset viewer.