Changeset 413 for trunk/src/formats


Ignore:
Timestamp:
07/09/15 18:53:08 (10 years ago)
Author:
epyon
Message:
  • data_descriptor creators ( buggy )
Location:
trunk/src/formats
Files:
6 edited

Legend:

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

    r412 r413  
    77#include "nv/formats/assimp_loader.hh"
    88#include "nv/stl/unordered_map.hh"
    9 #include "nv/gfx/mesh_creator.hh"
    109#include "nv/lib/assimp.hh"
    1110
     
    123122        else
    124123                channel = raw_data_channel::create< assimp_plain_vtx >( mesh->mNumVertices );
     124        uint8* cdata = const_cast< uint8*>( channel->raw_data() );
    125125
    126126        data->add_channel( channel );
     
    139139                nv::vec4 vt ( t_i[0], t_i[1], t_i[2], det );
    140140                if ( skinned )
    141                         reinterpret_cast< assimp_skinned_vtx* >(channel->data)[i] = assimp_skinned_vtx( v, s, n, vt );
     141                        reinterpret_cast< assimp_skinned_vtx* >( cdata )[i] = assimp_skinned_vtx( v, s, n, vt );
    142142                else
    143                         reinterpret_cast< assimp_plain_vtx* >(channel->data)[i] = assimp_plain_vtx( v, s, n, vt );
     143                        reinterpret_cast< assimp_plain_vtx* >( cdata )[i] = assimp_plain_vtx( v, s, n, vt );
    144144        }
    145145
    146146        if ( skinned )
    147147        {
    148                 assimp_skinned_vtx* vtx = reinterpret_cast< assimp_skinned_vtx* >( channel->data );
     148                assimp_skinned_vtx* vtx = reinterpret_cast< assimp_skinned_vtx* >( cdata );
    149149                for (unsigned int m=0; m<mesh->mNumBones; m++)
    150150                {
     
    169169        }
    170170
    171         raw_data_channel* ichannel = raw_data_channel::create< index_u16 >( mesh->mNumFaces * 3 );
    172         data->add_channel( ichannel );
    173         uint16* indices = reinterpret_cast<uint16*>( ichannel->data );
     171        data_channel_creator< index_u16 > ichannel( mesh->mNumFaces * 3 );
     172        uint16* indices = reinterpret_cast<uint16*>( ichannel.raw_data() );
    174173        for (unsigned int i=0; i<mesh->mNumFaces; i++)
    175174        {
     
    180179                }
    181180        }
     181        data->add_channel( ichannel.release() );
    182182}
    183183
     
    315315                        if ( m > 0 && bones.size() > 0 )
    316316                        {
    317                                 raw_data_channel* channel = meshes[m].get_raw_channels()[0];
    318                                 assimp_skinned_vtx* va = reinterpret_cast< assimp_skinned_vtx* >( channel->data );
    319                                 for ( unsigned v = 0; v < channel->element_count(); ++v )
     317                                data_channel_creator< assimp_skinned_vtx > channel( meshes[m].get_raw_channels()[0] );
     318                                for ( unsigned v = 0; v < channel.size(); ++v )
    320319                                {
    321                                         assimp_skinned_vtx& vertex = va[v];
     320                                        assimp_skinned_vtx& vertex = channel.data()[v];
    322321
    323322                                        for ( int i = 0 ; i < 4; ++i)
     
    418417
    419418        data->data = new key_data;
    420         raw_data_channel* raw_pchannel = raw_data_channel::create<assimp_key_p>( node->mNumPositionKeys );
    421         raw_data_channel* raw_rchannel = raw_data_channel::create<assimp_key_r>( node->mNumRotationKeys );
    422         //raw_data_channel* raw_schannel = raw_data_channel::create<assimp_key_s>( node->mNumScalingKeys );
    423         data->data->add_channel( raw_pchannel );
    424         data->data->add_channel( raw_rchannel );
    425         //data->data->add_channel( raw_schannel );
    426         assimp_key_p* pchannel = reinterpret_cast< assimp_key_p* >( raw_pchannel->data );
    427         assimp_key_r* rchannel = reinterpret_cast< assimp_key_r* >( raw_rchannel->data );
     419        data_channel_creator< assimp_key_p > pchannel_creator( node->mNumPositionKeys );
     420        data_channel_creator< assimp_key_r > rchannel_creator( node->mNumRotationKeys );
     421//      data_channel_creator< assimp_key_s > schannel_creator( node->mNumScalingKeys );
     422
     423        assimp_key_p* pchannel = pchannel_creator.data();
     424        assimp_key_r* rchannel = rchannel_creator.data();
    428425        //assimp_key_s* schannel = ((assimp_key_s*)(raw_schannel->data));
    429426
     
    457454//              }
    458455//      }
    459 
     456        data->data->add_channel( pchannel_creator.release() );
     457        data->data->add_channel( rchannel_creator.release() );
     458//      data->data->add_channel( schannel_creator.release() );
    460459}
    461460
  • trunk/src/formats/md2_loader.cc

    r412 r413  
    324324        size_t frame_count   = ( frame == -1 ? num_frames : 1 );
    325325
    326         raw_data_channel* mc_pn = raw_data_channel::create< vtx_md2_pn >( num_verts * frame_count );
    327         vtx_md2_pn* vtx_pn = reinterpret_cast< vtx_md2_pn* >( mc_pn->data );
     326        data_channel_creator< vtx_md2_pn > mc_pn( num_verts * frame_count );
     327        vtx_md2_pn* vtx_pn = mc_pn.data();
    328328
    329329        uint32 index = 0;
     
    347347        }
    348348
    349         raw_data_channel* mc_t = raw_data_channel::create< vtx_md2_t >( num_verts );
    350         vtx_md2_t* vtx_t = reinterpret_cast< vtx_md2_t* >( mc_t->data );
     349        data_channel_creator< vtx_md2_t > mc_t( num_verts );
     350        vtx_md2_t* vtx_t = mc_t.data();
    351351
    352352        vec2 scale( 1.0f / static_cast<float>( md2->header.skinwidth ), 1.0f / static_cast<float>( md2->header.skinheight ) );
     
    357357        }
    358358
    359         raw_data_channel* ic = raw_data_channel::create< index_u16 >( m_new_indexes.size() );
     359        data_channel_creator< index_u16 > ic( m_new_indexes.size() );
    360360        if ( m_new_indexes.size() > 0 )
    361361        {
    362                 uint16* icp = reinterpret_cast< uint16* >( ic->data );
     362                uint16* icp = reinterpret_cast< uint16* >( ic.raw_data() );
    363363                raw_copy_n( m_new_indexes.data(), m_new_indexes.size(), icp );
    364364        }
    365365
    366         data->add_channel( mc_pn );
    367         data->add_channel( mc_t );
    368         data->add_channel( ic );
     366        data->add_channel( mc_pn.release() );
     367        data->add_channel( mc_t.release() );
     368        data->add_channel( ic.release() );
    369369}
    370370
  • trunk/src/formats/md3_loader.cc

    r412 r413  
    289289{
    290290        md3_t* md3 = reinterpret_cast< md3_t* >( m_md3 );
    291         raw_data_channel* result = raw_data_channel::create<md3_key>( uint32( md3->header.num_frames ) );
     291        data_channel_creator< md3_key > result( uint32( md3->header.num_frames ) );
    292292        // TODO: is this brain damaged in efficiency (loop nest order) or what?
    293293        for ( sint32 f = 0; f < md3->header.num_frames; ++f )
     
    303303                                vec3 axisy  ( md3_vec3( rtag.axis[2] ) );
    304304                                vec3 origin ( md3_vec3( rtag.origin )  );
    305                                 reinterpret_cast< md3_key*>(result->data)[f].tform = transform( origin, quat( mat3( axisx, axisy, axisz ) ) );
     305                                result.data()[f].tform = transform( origin, quat( mat3( axisx, axisy, axisz ) ) );
    306306                        }
    307307                }
    308308
    309309        }
    310         return result;
     310        return result.release();
    311311}
    312312
     
    352352                }
    353353
    354         raw_data_channel* mc_pn = raw_data_channel::create< vtx_md3_pn >( uint32( num_verts * frame_count ) );
    355         raw_data_channel* mc_t  = raw_data_channel::create< vtx_md3_t >( uint32( num_verts ) );
    356         raw_data_channel* ic = raw_data_channel::create< index_u16 >( uint32( index_count ) );
    357         vtx_md3_pn* vtx_pn = reinterpret_cast< vtx_md3_pn* >( mc_pn->data );
    358         vtx_md3_t*  vtx_t  = reinterpret_cast< vtx_md3_t* >( mc_t->data );
    359         uint16*     icp    = reinterpret_cast< uint16* >( ic->data );
     354        data_channel_creator< vtx_md3_pn > mc_pn( static_cast< uint32 >( num_verts * frame_count ) );
     355        data_channel_creator< vtx_md3_t > mc_t( static_cast< uint32 >( num_verts ) );
     356        data_channel_creator< index_u16 > ic( static_cast< uint32 >( index_count ) );
     357        vtx_md3_pn* vtx_pn = mc_pn.data();
     358        vtx_md3_t*  vtx_t = mc_t.data();
     359        uint16*     icp    = &(ic.data()[0].index);
    360360
    361361        uint32 index  = 0;
     
    413413
    414414        data->set_name( reinterpret_cast< char* >( md3->header.name ) );
    415         data->add_channel( mc_pn );
    416         data->add_channel( mc_t );
    417         data->add_channel( ic );
     415        data->add_channel( mc_pn.release() );
     416        data->add_channel( mc_t.release() );
     417        data->add_channel( ic.release() );
    418418}
    419419
  • trunk/src/formats/md5_loader.cc

    r412 r413  
    160160                                        md5_vtx_t* tdata = nullptr;
    161161                                        {
    162                                                 raw_data_channel* ch_pnt = raw_data_channel::create<md5_vtx_pnt>( num_verts );
    163                                                 raw_data_channel* ch_t   = raw_data_channel::create<md5_vtx_t>( num_verts );
     162                                                data_channel_creator<md5_vtx_pnt> ch_pnt( num_verts );
     163                                                data_channel_creator<md5_vtx_t>   ch_t( num_verts );
    164164                                                ch_pntiw = raw_data_channel::create<md5_vtx_pntiw>( num_verts );
    165                                                 tdata = reinterpret_cast< md5_vtx_t* >( ch_t->data );
    166                                                 mesh->add_channel( ch_pnt );
    167                                                 mesh->add_channel( ch_t );
     165                                                tdata = ch_t.data();
     166                                                mesh->add_channel( ch_pnt.release() );
     167                                                mesh->add_channel( ch_t.release() );
    168168                                                // TODO: hack to prevent rendering
    169169                                                //ch_pntiw->m_count = 0;
     
    191191                                        sstream >> num_tris;
    192192
    193                                         raw_data_channel* ch_i = raw_data_channel::create<index_u32>( num_tris * 3 );
    194                                         uint32* vtx_i                = reinterpret_cast< uint32* >( ch_i->data );
     193                                        data_channel_creator< index_u32 > ch_i( num_tris * 3 );
     194                                        uint32* vtx_i                = reinterpret_cast< uint32* >( ch_i.raw_data() );
    195195                                        uint32 idx = 0;
    196                                         mesh->add_channel( ch_i );
    197196
    198197                                        next_line( sstream );
     
    211210                                                vtx_i[idx++] = ti2;
    212211                                        }             
     212
     213                                        mesh->add_channel( ch_i.release() );
    213214                                }
    214215                                else if ( command == "numweights" )
     
    235236                        }
    236237
    237                         prepare_mesh( reinterpret_cast< md5_vtx_pntiw* >( ch_pntiw->data ), nodes, weight_info.size(), mesh, weights.data(), weight_info.data() );
     238                        prepare_mesh( reinterpret_cast< md5_vtx_pntiw* >( const_cast< uint8* >( ch_pntiw->raw_data() ) ), nodes, weight_info.size(), mesh, weights.data(), weight_info.data() );
    238239
    239240                        m_meshes[ num_meshes ] = mesh;
     
    337338{
    338339        assert( m_type == MESH );
    339         md5_vtx_pnt* vtcs       = reinterpret_cast< md5_vtx_pnt* >( mdata->get_channel< md5_vtx_pnt >()->data );
     340        data_channel_creator< md5_vtx_pnt > pnt( const_cast< raw_data_channel* >( mdata->get_channel< md5_vtx_pnt >() ) );
     341        md5_vtx_pnt* vtcs       = pnt.data();
    340342
    341343        for ( uint32 i = 0; i < vtx_count; ++i )
     
    396398        }
    397399
    398         const uint32*    idata = reinterpret_cast< uint32* >( mdata->get_index_channel()->data );
     400        const uint32*    idata = reinterpret_cast< uint32* >( const_cast< uint8* >( mdata->get_index_channel()->raw_data() ) );
    399401        const md5_vtx_t* tdata = mdata->get_channel_data<md5_vtx_t>();
    400402
     
    484486                {
    485487                        const mesh_node_data& pjoint = nodes[parent_id];
    486                         const transform* ptv = reinterpret_cast< const transform* >( pjoint.data->get_channel(0)->data );
     488                        const transform* ptv = reinterpret_cast< const transform* >( pjoint.data->get_channel(0)->raw_data() );
    487489                        transform ptr;
    488490                        if ( pjoint.data->get_channel(0)->element_count() > index ) ptr = ptv[ index ];
     
    495497                }
    496498
    497                 reinterpret_cast< transform* >( joint.data->get_channel(0)->data )[index] = transform( pos, orient );
     499                reinterpret_cast< transform* >( const_cast< uint8* >( joint.data->get_channel(0)->raw_data() ) )[index] = transform( pos, orient );
    498500        }
    499501}
  • trunk/src/formats/nmd_loader.cc

    r412 r413  
    4343                nmd_stream_header stream_header;
    4444                source.read( &stream_header, sizeof( stream_header ), 1 );
    45                 raw_data_channel* channel = raw_data_channel::create( stream_header.format, stream_header.count );
    46                 source.read( channel->data, stream_header.format.element_size(), stream_header.count );
    47                 mesh->add_channel( channel );
     45                raw_data_channel_creator channel_creator( stream_header.format, stream_header.count );
     46                source.read( channel_creator.raw_data(), channel_creator.element_size(), channel_creator.size() );
     47                mesh->add_channel( channel_creator.release() );
    4848        }
    4949        m_mesh_names.push_back( e.name );
     
    128128                                nv::nmd_stream_header cheader;
    129129                                source.read( &cheader, sizeof( cheader ), 1 );
    130                                 raw_data_channel* channel = raw_data_channel::create( cheader.format, cheader.count );
    131                                 source.read( channel->data, channel->element_size(), channel->element_count() );
    132                                 kdata->add_channel( channel );
     130                                raw_data_channel_creator channel_creator( cheader.format, cheader.count );
     131                                source.read( channel_creator.raw_data(), channel_creator.element_size(), channel_creator.size() );
     132                                kdata->add_channel( channel_creator.release() );
    133133                        }
    134134                }
  • trunk/src/formats/obj_loader.cc

    r412 r413  
    324324                }
    325325       
    326                 raw_data_channel* channel = raw_data_channel::create( m_descriptor, reader->size * 3 );
     326                raw_data_channel_creator channel( m_descriptor, reader->size * 3 );
    327327                if ( reader->raw_size() > 0 )
    328328                {
    329                         raw_copy_n( reader->raw_pointer(), reader->raw_size(), channel->data );
     329                        raw_copy_n( reader->raw_pointer(), reader->raw_size(), channel.raw_data() );
    330330                }
    331331
    332332                mesh_data* mesh = new mesh_data(reader->name);
    333                 mesh->add_channel( channel );
     333                mesh->add_channel( channel.release() );
    334334                m_meshes.push_back( mesh );
    335335
Note: See TracChangeset for help on using the changeset viewer.