Changeset 424 for trunk/src/formats


Ignore:
Timestamp:
07/16/15 21:21:19 (10 years ago)
Author:
epyon
Message:
  • refactoring WIP! (compiles though - warnings on purpose)
Location:
trunk/src/formats
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/formats/assimp_loader.cc

    r423 r424  
    108108{
    109109        if ( index >= m_mesh_count ) return nullptr;
    110         data_channel_set* result = data_channel_set_creator::create( 2 );
     110        data_channel_set* result = data_channel_set_creator::create_set( 2 );
    111111        load_mesh_data( result, index );
    112112        return result;
     
    199199                aiBone* bone   = mesh->mBones[m];
    200200                mat4    offset = assimp_mat4_cast( bone->mOffsetMatrix );
    201 //              bones[m].name = bone->mName.data;
    202                 bones[m].name = hash_string< uint64 >( bone->mName.data );
    203                 bones[m].data = nullptr;
    204                 bones[m].parent_id = -1;
    205 //              bones[m].target_id = -1;
    206                 bones[m].transform = offset;
     201                bones[m].data = data_channel_set_creator::create_set( 0 );
     202                data_channel_set_creator access( bones[m].data );
     203                access.set_name( hash_string< uint64 >( bone->mName.data ) );
     204                access.set_transform( offset );
    207205        }
    208206        return true;
     
    302300
    303301                                mesh_node_data& bone = bones[b];
    304                                 auto iname = names.find( bone.name );
     302                                auto iname = names.find( bone.data->get_name() );
    305303                                if ( iname == names.end() )
    306304                                {
     
    308306                                        uint16 index = uint16( final_bones.size() );
    309307                                        final_bones.push_back( bone );
    310                                         names[ bone.name] = index;
     308                                        names[ bone.data->get_name() ] = index;
    311309                                        translate[b] = index;
    312310                                }
     
    390388        mesh_node_data& a_data = nodes[ this_id ];
    391389
    392 //      a_data.name      = name;
    393         a_data.name = hash_string< uint64 >( name.c_str() );
    394         a_data.parent_id = parent_id;
     390        if (anode)
     391                create_keys( &a_data, anode );
     392        else
     393                a_data.data = data_channel_set_creator::create_set( 0 );
     394
     395        data_channel_set_creator access( a_data.data );
     396        access.set_name( hash_string< uint64 >( name.c_str() ) );
     397        access.set_parent_id( parent_id );
    395398        // This value is ignored by the create_transformed_keys, but needed by create_direct_keys!
    396399        // TODO: find a common solution!
    397400        //       This is bad because create_transformed_keys never uses node-transformations for
    398401        //       node's without keys
    399         a_data.transform = nv::assimp_mat4_cast( node->mTransformation );
    400         if (this_id == 0)
    401                 a_data.transform = mat4();
    402         a_data.data = nullptr;
    403 
    404         if (anode) create_keys( &a_data, anode );
     402        access.set_transform( nv::assimp_mat4_cast( node->mTransformation ) );
     403        if ( this_id == 0 ) access.set_transform( mat4() );
    405404
    406405        nv::sint16 next = this_id + 1;
     
    421420        }
    422421
    423         data->data = data_channel_set_creator::create( 2 );
     422        data->data = data_channel_set_creator::create_set( 2 );
    424423        data_channel_set_creator key_set( data->data );
    425424
     
    465464        const aiScene* scene = reinterpret_cast<const aiScene*>( m_scene );
    466465        bool has_bones = false;
    467         data_channel_set* meshes = data_channel_set_creator::create_array( m_mesh_count, 2 );
     466        data_channel_set* meshes = data_channel_set_creator::create_set_array( m_mesh_count, 2 );
    468467        for ( size_t m = 0; m < m_mesh_count; ++m )
    469468        {
  • trunk/src/formats/md2_loader.cc

    r417 r424  
    313313data_channel_set* nv::md2_loader::release_mesh_data( size_t )
    314314{
    315         data_channel_set* data = data_channel_set_creator::create( 3 );
     315        data_channel_set* data = data_channel_set_creator::create_set( 3 );
    316316        release_mesh_frame( data, -1 );
    317317        return data;
     
    367367mesh_data_pack* nv::md2_loader::release_mesh_data_pack()
    368368{
    369         data_channel_set* data = data_channel_set_creator::create_array( 1, 3 );
     369        data_channel_set* data = data_channel_set_creator::create_set_array( 1, 3 );
    370370        release_mesh_frame( &data[0], -1 );
    371371        return new mesh_data_pack( 1, data );
  • trunk/src/formats/md3_loader.cc

    r423 r424  
    324324data_channel_set* nv::md3_loader::release_mesh_data( nv::size_t index )
    325325{
    326         data_channel_set* data = data_channel_set_creator::create(3);
     326        data_channel_set* data = data_channel_set_creator::create_set(3);
    327327        release_mesh_frame( data, -1, static_cast< sint32 >( index ) );
    328328        return data;
     
    424424                const md3_tag_t& rtag = md3->tags[i];
    425425                string_view name( reinterpret_cast< const char* >(rtag.name) );
    426 
    427                 nodes[i].transform = mat4();
    428                 nodes[i].name = hash_string< uint64 >( name.data() );
    429                 nodes[i].parent_id = -1;
    430                 nodes[i].data      = data_channel_set_creator::create( 1 );
    431                 load_tags( data_channel_set_creator( nodes[i].data ).add_channel<md3_key>( uint32( md3->header.num_frames ) ).channel(), name );
     426                nodes[i].data      = data_channel_set_creator::create_set( 1 );
     427                data_channel_set_creator access( nodes[i].data );
     428                access.set_name( hash_string< uint64 >( name.data() ) );
     429                load_tags( access.add_channel<md3_key>( uint32( md3->header.num_frames ) ).channel(), name );
    432430        }
    433431        int name_;
     
    442440        if ( m_merge_all )
    443441        {
    444                 data = data_channel_set_creator::create_array(1,3);
     442                data = data_channel_set_creator::create_set_array(1,3);
    445443                release_mesh_frame( &data[0], -1, -1 );
    446444                data_channel_set_creator( &data[0] ).set_name( reinterpret_cast< char* >( md3->header.name ) );
     
    449447        {
    450448                count = md3->header.num_surfaces;
    451                 data = data_channel_set_creator::create_array( count, 3 );
     449                data = data_channel_set_creator::create_set_array( count, 3 );
    452450                for ( int i = 0; i < count; ++i )
    453451                {
  • trunk/src/formats/md5_loader.cc

    r423 r424  
    118118                        {
    119119                                std::string name;
    120                                 sstream >> name >> nodes[i].parent_id;
     120                                sint16 parent_id;
     121                                sstream >> name >> parent_id;
    121122                                vec3 pos;
    122123                                quat orient;
     
    128129                                unit_quat_w( orient );
    129130                                remove_quotes( name );
    130 //                              nodes[i].name = name;
    131                                 nodes[i].name = hash_string< uint64 >( name.c_str() );
    132 //                              nodes[i].target_id       = -1;
    133                                 nodes[i].parent_id       = -1;
    134                                 nodes[i].transform       = transform( pos, orient ).inverse().extract();
    135                                 nodes[i].data            = nullptr;
     131                                nodes[i].data       = data_channel_set_creator::create_set( 0 );
     132                                data_channel_set_creator access( nodes[i].data );
     133                                access.set_parent_id( parent_id );
     134                                access.set_transform( transform( pos, orient ).inverse().extract() );
     135                                access.set_name( hash_string< uint64 >( name.c_str() ) );
    136136                                next_line( sstream );
    137137                        }
     
    141141                {
    142142                        assert( m_type == MESH );
    143                         data_channel_set* mesh = data_channel_set_creator::create( 4 );
     143                        data_channel_set* mesh = data_channel_set_creator::create_set( 4 );
    144144                        data_channel_set_creator maccess( mesh );
    145145
     
    251251                        {
    252252                                std::string    name;
    253                                 sstream >> name >> nodes[i].parent_id >> joint_infos[i].flags >> joint_infos[i].start_index;
     253                                sint16 parent_id;
     254                                sstream >> name >> parent_id >> joint_infos[i].flags >> joint_infos[i].start_index;
    254255                                remove_quotes( name );
    255 //                              nodes[i].name = name;
    256                                 nodes[i].name = hash_string< uint64 >( name.c_str() );
    257                                 nodes[i].transform = mat4();
    258                                 nodes[i].data = data_channel_set_creator::create( 1 );
    259                                 data_channel_set_creator( nodes[i].data ).add_channel< md5_key_t >( num_frames );
     256                                nodes[i].data = data_channel_set_creator::create_set( 1 );
     257                                data_channel_set_creator access( nodes[i].data );
     258                                access.add_channel< md5_key_t >( num_frames );
     259                                access.set_name( hash_string< uint64 >( name.c_str() ) );
     260                                access.set_parent_id( parent_id );
    260261                                next_line( sstream );
    261262                        }
     
    391392                                md5_weight& weight           = weights[start_weight + j];
    392393                                const mesh_node_data&  joint = nodes[weight.joint_id];
    393                                 const transform tr = transform( joint.transform ).inverse();
     394                                const transform tr = transform( joint.data->get_transform() ).inverse();
    394395                                vec3 rot_pos = tr.get_orientation() * weight.pos;
    395396
     
    454455                {
    455456                        const mesh_node_data&  joint = nodes[vdata.boneindex[j]];
    456                         const transform tr = transform( joint.transform ).inverse();
     457                        const transform tr = transform( joint.data->get_transform() ).inverse();
    457458                        vdata.normal  += ( normal  * tr.get_orientation() ) * vdata.boneweight[j];
    458459                        vdata.tangent += ( tangent * tr.get_orientation() ) * vdata.boneweight[j];
     
    472473                const md5_joint_info& jinfo = joint_infos[i];
    473474                mesh_node_data& joint = nodes[i];
    474                 int parent_id         = joint.parent_id;
     475                int parent_id         = joint.data->get_parent_id();
    475476
    476477                vec3 pos    = base_frames[i].get_position();
     
    519520{
    520521        uint32 size = m_meshes.size();
    521         data_channel_set* meshes = data_channel_set_creator::create_array( size, 4 );
     522        data_channel_set* meshes = data_channel_set_creator::create_set_array( size, 4 );
    522523        for ( uint32 i = 0; i < size; ++i )
    523524        {
  • trunk/src/formats/nmd_loader.cc

    r423 r424  
    3737bool nv::nmd_loader::load_mesh( stream& source, const nmd_element_header& e )
    3838{
    39         data_channel_set* mesh = data_channel_set_creator::create( e.children );
     39        data_channel_set* mesh = data_channel_set_creator::create_set( e.children );
    4040        load_channel_set( source, mesh, e );
    4141//      m_mesh_names.push_back( e.name );
     
    5555{
    5656        uint32 size = m_meshes.size();
    57         data_channel_set* meshes = data_channel_set_creator::create_array( size, 0 );
     57        data_channel_set* meshes = data_channel_set_creator::create_set_array( size, 0 );
    5858        for ( uint32 i = 0; i < size; ++i )
    5959        {
     
    119119bool nv::nmd_loader::load_node( stream& source, mesh_node_data* data, const nmd_element_header& e )
    120120{
    121         data->name = e.name;
    122         data->parent_id = e.parent_id;
    123         data->transform = e.transform;
    124         data->data = nullptr;
     121        data->data = data_channel_set_creator::create_set( e.children );
    125122        if ( e.children > 0 )
    126123        {
    127                 data->data = data_channel_set_creator::create( e.children );
    128124                load_channel_set( source, data->data, e );
    129125        }
     126        data_channel_set_creator access( data->data );
     127        access.set_name( e.name );
     128        access.set_parent_id( e.parent_id );
     129        access.set_transform( e.transform );
    130130        return true;
    131131}
     
    206206        eheader.children   = static_cast<uint16>( chan_count );
    207207        eheader.size       = chan_size;
    208         eheader.name       = node->name;
    209         eheader.parent_id  = node->parent_id;
    210         eheader.transform  = node->transform;
     208        eheader.name       = node->data->get_name();
     209        eheader.parent_id  = node->data->get_parent_id();
     210        eheader.transform  = node->data->get_transform();
    211211        eheader.attributes = 0;
    212212        stream_out.write( &eheader, sizeof( eheader ), 1 );
    213         if ( node->data ) nmd_dump_channel_set( node->data, stream_out );
     213        if ( chan_count > 0 ) nmd_dump_channel_set( node->data, stream_out );
    214214}
    215215
     
    238238        eheader.children   = static_cast<uint16>( mesh.size() );
    239239        eheader.size       = size;
    240         int uncomment;
    241 //      eheader.name       = mesh.get_name();
    242 //      eheader.transform  = mesh.get_transform();
    243 //      eheader.parent_id  = mesh.get_parent_id();
    244         eheader.name       = 0;
    245         eheader.transform  = mat4();
    246         eheader.parent_id  = -1;
     240        eheader.name       = mesh.get_name();
     241        eheader.transform  = mesh.get_transform();
     242        eheader.parent_id  = mesh.get_parent_id();
    247243        eheader.attributes = 0;
    248244        stream_out.write( &eheader, sizeof( eheader ), 1 );
  • trunk/src/formats/obj_loader.cc

    r417 r424  
    326326                }
    327327       
    328                 data_channel_set* result = data_channel_set_creator::create( 1 );
     328                data_channel_set* result = data_channel_set_creator::create_set( 1 );
    329329                data_channel_set_creator raccess( result );// ( reader->name );
    330330                uint8* rdata = raccess.add_channel( m_descriptor, reader->size * 3 ).raw_data();
     
    359359{
    360360        uint32 size = m_meshes.size();
    361         data_channel_set* meshes = data_channel_set_creator::create_array( size, 1 );
     361        data_channel_set* meshes = data_channel_set_creator::create_set_array( size, 1 );
    362362        for ( uint32 i = 0; i < size; ++i )
    363363        {
Note: See TracChangeset for help on using the changeset viewer.