Changeset 416 for trunk/src/formats


Ignore:
Timestamp:
07/10/15 14:16:42 (10 years ago)
Author:
epyon
Message:
  • mesh_data and key_data are data_channel_set (WIP)
  • massive cleanup of privacy in data_channels
Location:
trunk/src/formats
Files:
6 edited

Legend:

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

    r415 r416  
    66
    77#include "nv/formats/assimp_loader.hh"
     8
     9#include "nv/interface/data_channel_access.hh"
    810#include "nv/stl/unordered_map.hh"
    911#include "nv/lib/assimp.hh"
     
    103105}
    104106
    105 mesh_data* nv::assimp_loader::release_mesh_data( size_t index /*= 0 */ )
     107data_channel_set* nv::assimp_loader::release_mesh_data( size_t index /*= 0 */ )
    106108{
    107109        if ( index >= m_mesh_count ) return nullptr;
    108         mesh_data* result = new mesh_data;
     110        data_channel_set* result = data_channel_set_creator::create( 2 );
    109111        load_mesh_data( result, index );
    110112        return result;
    111113}
    112 void nv::assimp_loader::load_mesh_data( mesh_data* data, size_t index )
     114void nv::assimp_loader::load_mesh_data( data_channel_set* data, size_t index )
    113115{
    114116        const aiScene* scene = reinterpret_cast<const aiScene*>( m_scene );
    115117        const aiMesh*  mesh  = scene->mMeshes[ index ];
    116         data->set_name( mesh->mName.data );
    117118
    118119        bool skinned = mesh->mNumBones > 0;
     
    180181                }
    181182        }
    182         data->add_channel( channel.release() );
    183         data->add_channel( ichannel.release() );
     183
     184        data_channel_set_creator maccess( data );
     185        maccess.set_name( mesh->mName.data );
     186        maccess.add_channel( channel.release() );
     187        maccess.add_channel( ichannel.release() );
    184188}
    185189
     
    283287}
    284288
    285 mesh_nodes_data* nv::assimp_loader::release_merged_bones( mesh_data* meshes )
     289mesh_nodes_data* nv::assimp_loader::release_merged_bones( data_channel_set* meshes )
    286290{
    287291        const aiScene* scene = reinterpret_cast<const aiScene*>( m_scene );
     
    317321                        if ( m > 0 && bones.size() > 0 )
    318322                        {
    319                                 data_channel_creator< assimp_skinned_vtx > channel( meshes[m].get_raw_channels()[0] );
     323                                data_channel_creator< assimp_skinned_vtx > channel( const_cast< raw_data_channel* >( meshes[m].get_channel(0) ) );
    320324                                for ( unsigned v = 0; v < channel.size(); ++v )
    321325                                {
     
    456460//              }
    457461//      }
    458         data->data->add_channel( pchannel_creator.release() );
    459         data->data->add_channel( rchannel_creator.release() );
    460 //      data->data->add_channel( schannel_creator.release() );
     462        data->data->add_key_channel( pchannel_creator.release() );
     463        data->data->add_key_channel( rchannel_creator.release() );
     464//      data->data->add_key_channel( schannel_creator.release() );
    461465}
    462466
     
    466470        const aiScene* scene = reinterpret_cast<const aiScene*>( m_scene );
    467471        bool has_bones = false;
    468         mesh_data* meshes = new mesh_data[ m_mesh_count ];
     472        data_channel_set* meshes = data_channel_set_creator::create_array( m_mesh_count, 2 );
    469473        for ( size_t m = 0; m < m_mesh_count; ++m )
    470474        {
    471475                const aiMesh* mesh = scene->mMeshes[ m ];
    472                 meshes[m].set_name( mesh->mName.data );
     476                data_channel_set_creator( &meshes[m] ).set_name( mesh->mName.data );
    473477                if ( mesh->mNumBones > 0 ) has_bones = true;
    474478                load_mesh_data(&meshes[m],m);
  • trunk/src/formats/md2_loader.cc

    r413 r416  
    88
    99#include "nv/core/logging.hh"
     10#include "nv/interface/data_channel_access.hh"
     11
    1012#include <cstring>
    1113
     
    309311
    310312
    311 mesh_data* nv::md2_loader::release_mesh_data( size_t )
    312 {
    313         mesh_data* data = new mesh_data( "md2_mesh" );
     313data_channel_set* nv::md2_loader::release_mesh_data( size_t )
     314{
     315        data_channel_set* data = data_channel_set_creator::create( 3 );
    314316        release_mesh_frame( data, -1 );
    315317        return data;
    316318}
    317319
    318 void nv::md2_loader::release_mesh_frame( mesh_data* data, sint32 frame )
     320void nv::md2_loader::release_mesh_frame( data_channel_set* data, sint32 frame )
    319321{
    320322        md2_t* md2 = reinterpret_cast< md2_t* >( m_md2 );
     
    364366        }
    365367
    366         data->add_channel( mc_pn.release() );
    367         data->add_channel( mc_t.release() );
    368         data->add_channel( ic.release() );
     368        data_channel_set_creator maccess( data );
     369
     370        maccess.add_channel( mc_pn.release() );
     371        maccess.add_channel( mc_t.release() );
     372        maccess.add_channel( ic.release() );
    369373}
    370374
    371375mesh_data_pack* nv::md2_loader::release_mesh_data_pack()
    372376{
    373         mesh_data* data = new mesh_data[1];
     377        data_channel_set* data = data_channel_set_creator::create_array( 1, 3 );
    374378        release_mesh_frame( &data[0], -1 );
    375379        return new mesh_data_pack( 1, data );
  • trunk/src/formats/md3_loader.cc

    r413 r416  
    88
    99#include "nv/core/logging.hh"
     10#include "nv/interface/data_channel_access.hh"
    1011
    1112using namespace nv;
     
    322323};
    323324
    324 mesh_data* nv::md3_loader::release_mesh_data( nv::size_t index )
    325 {
    326         mesh_data* data = new mesh_data;
     325data_channel_set* nv::md3_loader::release_mesh_data( nv::size_t index )
     326{
     327        data_channel_set* data = data_channel_set_creator::create(3);
    327328        release_mesh_frame( data, -1, static_cast< sint32 >( index ) );
    328329        return data;
    329330}
    330331
    331 void nv::md3_loader::release_mesh_frame( mesh_data* data, sint32 frame, sint32 surface )
     332void nv::md3_loader::release_mesh_frame( data_channel_set* data, sint32 frame, sint32 surface )
    332333{
    333334        md3_t* md3 = reinterpret_cast< md3_t* >( m_md3 );
     
    412413        }
    413414
    414         data->set_name( reinterpret_cast< char* >( md3->header.name ) );
    415         data->add_channel( mc_pn.release() );
    416         data->add_channel( mc_t.release() );
    417         data->add_channel( ic.release() );
     415        data_channel_set_creator maccess( data );
     416        maccess.set_name( reinterpret_cast<char*>( md3->header.name ) );
     417        maccess.add_channel( mc_pn.release() );
     418        maccess.add_channel( mc_t.release() );
     419        maccess.add_channel( ic.release() );
    418420}
    419421
     
    436438       
    437439                raw_data_channel* keys = load_tags( name );
    438                 nodes[i].data->add_channel( keys );
     440                nodes[i].data->add_key_channel( keys );
    439441        }
    440442        return new mesh_nodes_data( "tags", node_count, nodes );
     
    445447        md3_t* md3 = reinterpret_cast<md3_t*>( m_md3 );
    446448        int count = 1;
    447         mesh_data* data = nullptr;
     449        data_channel_set* data = nullptr;
    448450        if ( m_merge_all )
    449451        {
    450                 data = new mesh_data[1];
     452                data = data_channel_set_creator::create_array(1,3);
    451453                release_mesh_frame( &data[0], -1, -1 );
    452                 data[0].set_name( reinterpret_cast< char* >( md3->header.name ) );
     454                data_channel_set_creator( &data[0] ).set_name( reinterpret_cast< char* >( md3->header.name ) );
    453455        }
    454456        else
    455457        {
    456458                count = md3->header.num_surfaces;
    457                 data = new mesh_data[ count ];
     459                data = data_channel_set_creator::create_array( count, 3 );
    458460                for ( int i = 0; i < count; ++i )
    459461                {
    460462                        release_mesh_frame( &data[i], -1, i );
    461                         data[i].set_name( reinterpret_cast< char* >( md3->surfaces[i].header.name ) );
     463                        data_channel_set_creator( &data[i] ).set_name( reinterpret_cast< char* >( md3->surfaces[i].header.name ) );
    462464                }
    463465        }
  • trunk/src/formats/md5_loader.cc

    r415 r416  
    1010#include "nv/stl/vector.hh"
    1111#include "nv/io/std_stream.hh"
     12#include "nv/interface/data_channel_access.hh"
    1213
    1314#include <stdio.h>  // sscanf
     
    136137                {
    137138                        assert( m_type == MESH );
    138                         mesh_data* mesh = new mesh_data("md5_mesh");
     139                        data_channel_set_creator mesh;
    139140
    140141                        uint32 num_verts   = 0;
     
    163164                                                data_channel_creator<md5_vtx_pntiw> ch_pntiw( num_verts );
    164165                                                tdata = ch_t.data();
    165                                                 mesh->add_channel( ch_pnt.release() );
    166                                                 mesh->add_channel( ch_t.release() );
     166                                                mesh.add_channel( ch_pnt.release() );
     167                                                mesh.add_channel( ch_t.release() );
    167168                                                // TODO: hack to prevent rendering
    168169                                                //ch_pntiw->m_count = 0;
    169                                                 mesh->add_channel( ch_pntiw.release() );
     170                                                mesh.add_channel( ch_pntiw.release() );
    170171                                        }
    171172                                        weight_info.resize( num_verts );
     
    210211                                        }             
    211212
    212                                         mesh->add_channel( ch_i.release() );
     213                                        mesh.add_channel( ch_i.release() );
    213214                                }
    214215                                else if ( command == "numweights" )
     
    235236                        }
    236237
    237                         prepare_mesh( nodes, weight_info.size(), mesh, weights.data(), weight_info.data() );
    238 
    239                         m_meshes[ num_meshes ] = mesh;
     238                        data_channel_set* mdata = mesh.release();
     239                        prepare_mesh( nodes, weight_info.size(), mdata, weights.data(), weight_info.data() );
     240
     241                        m_meshes[ num_meshes ] = mdata;
    240242                        num_meshes++;
    241243                } // mesh
     
    258260                                nodes[i].data      = new key_data;
    259261                                data_channel_creator< md5_key_t > fc( num_frames );
    260                                 nodes[i].data->add_channel( fc.release() );
     262                                nodes[i].data->add_key_channel( fc.release() );
    261263                                next_line( sstream );
    262264                        }
     
    335337}
    336338
    337 bool md5_loader::prepare_mesh( mesh_node_data* nodes, uint32 vtx_count, mesh_data* mdata, md5_weight* weights, md5_weight_info* weight_info )
     339bool md5_loader::prepare_mesh( mesh_node_data* nodes, uint32 vtx_count, data_channel_set* mdata, md5_weight* weights, md5_weight_info* weight_info )
    338340{
    339341        assert( m_type == MESH );
     
    400402        }
    401403
    402         const uint32*    idata = reinterpret_cast< uint32* >( const_cast< uint8* >( mdata->get_index_channel()->raw_data() ) );
     404        const uint32*    idata = reinterpret_cast< uint32* >( const_cast< uint8* >( mdata->get_channel( slot::INDEX )->raw_data() ) );
    403405        const md5_vtx_t* tdata = mdata->get_channel_data<md5_vtx_t>();
    404406
    405407        // Prepare normals
    406         uint32 tri_count = mdata->get_count() / 3;
     408        uint32 tri_count = mdata->get_channel_size( slot::INDEX ) / 3;
    407409        for ( unsigned int i = 0; i < tri_count; ++i )
    408410        {
     
    503505}
    504506
    505 mesh_data* nv::md5_loader::release_mesh_data( size_t index )
    506 {
    507         mesh_data* result = m_meshes[ index ];
     507data_channel_set* nv::md5_loader::release_mesh_data( size_t index )
     508{
     509        data_channel_set* result = m_meshes[ index ];
    508510        m_meshes[ index ] = nullptr;
    509511        return result;
     
    520522{
    521523        uint32 size = m_meshes.size();
    522         mesh_data* meshes = new mesh_data[ size ];
     524        data_channel_set* meshes = data_channel_set_creator::create_array( size, 4 );
    523525        for ( uint32 i = 0; i < size; ++i )
    524526        {
    525                 m_meshes[i]->move_to( meshes[i] );
     527                data_channel_set_creator( m_meshes[i] ).move_to( meshes[i] );
    526528                delete m_meshes[i];
    527529                m_meshes[i] = nullptr;
  • trunk/src/formats/nmd_loader.cc

    r415 r416  
    88#include "nv/io/std_stream.hh"
    99#include "nv/stl/string.hh"
     10#include "nv/interface/data_channel_access.hh"
    1011
    1112using namespace nv;
     
    3435bool nv::nmd_loader::load_mesh( stream& source, const nmd_element_header& e )
    3536{
    36         mesh_data* mesh = new mesh_data();
     37        data_channel_set_creator mesh;
    3738        for ( uint32 s = 0; s < e.children; ++s )
    3839        {
     
    4546                raw_data_channel_creator channel_creator( stream_header.format, stream_header.count );
    4647                source.read( channel_creator.raw_data(), channel_creator.element_size(), channel_creator.size() );
    47                 mesh->add_channel( channel_creator.release() );
     48                mesh.add_channel( channel_creator.release() );
    4849        }
    4950        m_mesh_names.push_back( e.name );
    50         m_meshes.push_back( mesh );
    51         return true;
    52 }
    53 
    54 mesh_data* nv::nmd_loader::release_mesh_data( size_t index )
    55 {
    56         mesh_data* result = m_meshes[ index ];
    57         if ( m_strings ) result->set_name( m_strings->get( m_mesh_names[ index ] ) );
     51        m_meshes.push_back( mesh.release() );
     52        return true;
     53}
     54
     55data_channel_set* nv::nmd_loader::release_mesh_data( size_t index )
     56{
     57        data_channel_set* result = m_meshes[ index ];
     58        if ( m_strings ) data_channel_set_creator( result ).set_name( m_strings->get( m_mesh_names[ index ] ) );
    5859        m_meshes[ index ] = nullptr;
    5960        return result;
     
    6364{
    6465        uint32 size = m_meshes.size();
    65         mesh_data* meshes = new mesh_data[ size ];
     66        data_channel_set* meshes = data_channel_set_creator::create_array( size, 0 );
    6667        for ( uint32 i = 0; i < size; ++i )
    6768        {
    68                 m_meshes[i]->move_to( meshes[i] );
     69                data_channel_set_creator( m_meshes[i] ).move_to( meshes[i] );
    6970                delete m_meshes[i];
    7071        }
     
    130131                                raw_data_channel_creator channel_creator( cheader.format, cheader.count );
    131132                                source.read( channel_creator.raw_data(), channel_creator.element_size(), channel_creator.size() );
    132                                 kdata->add_channel( channel_creator.release() );
     133                                kdata->add_key_channel( channel_creator.release() );
    133134                        }
    134135                }
     
    160161// nmd format dump
    161162// HACK : TEMPORARY - will go to it's own file, probably nmd_io
    162 static void nmd_dump_mesh( const mesh_data* mesh, stream& stream_out )
    163 {
    164         array_view< raw_data_channel* > data  = mesh->get_raw_channels();
    165 
     163static void nmd_dump_mesh( const data_channel_set* mesh, stream& stream_out )
     164{
    166165        uint32 size = sizeof( nmd_element_header );
    167         for ( auto chan : data )
     166        for ( auto chan : *mesh )
    168167        {
    169168                size += sizeof( nmd_element_header ) + sizeof( nmd_stream_header );
     
    174173        eheader.type     = nmd_type::MESH;
    175174        eheader.name     = 0;
    176         eheader.children = static_cast< uint16 >( data.size() );
     175        eheader.children = static_cast< uint16 >( mesh->size() );
    177176        eheader.size     = size;
    178177        stream_out.write( &eheader, sizeof( eheader ), 1 );
    179178
    180         for ( auto chan : data )
     179        for ( auto chan : *mesh )
    181180        {
    182181                nmd_element_header cheader;
     
    203202                total += sizeof( nmd_element_header ) + sizeof( nmd_node_header );
    204203                if ( node->data )
    205                         for ( uint32 c = 0; c < node->data->get_channel_count(); ++c )
     204                        for ( uint32 c = 0; c < node->data->size(); ++c )
    206205                        {
    207206                                total += sizeof( nmd_element_header ) + sizeof( nmd_stream_header );
     
    227226                const mesh_node_data* node = nodes->get_node(i);
    228227                uint32 chan_size  = 0;
    229                 uint32 chan_count = ( node->data ? node->data->get_channel_count() : 0 );
     228                uint32 chan_count = ( node->data ? node->data->size() : 0 );
    230229                for ( uint32 c = 0; c < chan_count; ++c )
    231230                {
     
    280279        for ( uint32 i = 0; i < model->get_count(); ++i )
    281280        {
    282                 const mesh_data* mesh = model->get_mesh(i);
     281                const data_channel_set* mesh = model->get_mesh(i);
    283282                nmd_dump_mesh( mesh, stream_out );
    284283        }
  • trunk/src/formats/obj_loader.cc

    r413 r416  
    77#include "nv/formats/obj_loader.hh"
    88#include "nv/io/std_stream.hh"
     9#include "nv/interface/data_channel_access.hh"
     10
    911#include <sstream>
    1012
     
    330332                }
    331333
    332                 mesh_data* mesh = new mesh_data(reader->name);
    333                 mesh->add_channel( channel.release() );
    334                 m_meshes.push_back( mesh );
     334                data_channel_set_creator result;// ( reader->name );
     335                result.add_channel( channel.release() );
     336                m_meshes.push_back( result.release() );
    335337
    336338                reader->reset();
     
    341343}
    342344
    343 mesh_data* nv::obj_loader::release_mesh_data( size_t index )
    344 {
    345         mesh_data* result = m_meshes[ index ];
     345data_channel_set* nv::obj_loader::release_mesh_data( size_t index )
     346{
     347        data_channel_set* result = m_meshes[ index ];
    346348        m_meshes[ index ] = nullptr;
    347349        return result;
     
    356358{
    357359        uint32 size = m_meshes.size();
    358         mesh_data* meshes = new mesh_data[ size ];
     360        data_channel_set* meshes = data_channel_set_creator::create_array( size, 1 );
    359361        for ( uint32 i = 0; i < size; ++i )
    360362        {
    361                 m_meshes[i]->move_to( meshes[i] );
     363                data_channel_set_creator( m_meshes[i] ).move_to( meshes[i] );
    362364                delete m_meshes[i];
    363365        }
Note: See TracChangeset for help on using the changeset viewer.