Changeset 416 for trunk/src/formats/nmd_loader.cc
- Timestamp:
- 07/10/15 14:16:42 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/formats/nmd_loader.cc
r415 r416 8 8 #include "nv/io/std_stream.hh" 9 9 #include "nv/stl/string.hh" 10 #include "nv/interface/data_channel_access.hh" 10 11 11 12 using namespace nv; … … 34 35 bool nv::nmd_loader::load_mesh( stream& source, const nmd_element_header& e ) 35 36 { 36 mesh_data* mesh = new mesh_data();37 data_channel_set_creator mesh; 37 38 for ( uint32 s = 0; s < e.children; ++s ) 38 39 { … … 45 46 raw_data_channel_creator channel_creator( stream_header.format, stream_header.count ); 46 47 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() ); 48 49 } 49 50 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 55 data_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 ] ) ); 58 59 m_meshes[ index ] = nullptr; 59 60 return result; … … 63 64 { 64 65 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 ); 66 67 for ( uint32 i = 0; i < size; ++i ) 67 68 { 68 m_meshes[i]->move_to( meshes[i] );69 data_channel_set_creator( m_meshes[i] ).move_to( meshes[i] ); 69 70 delete m_meshes[i]; 70 71 } … … 130 131 raw_data_channel_creator channel_creator( cheader.format, cheader.count ); 131 132 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() ); 133 134 } 134 135 } … … 160 161 // nmd format dump 161 162 // 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 163 static void nmd_dump_mesh( const data_channel_set* mesh, stream& stream_out ) 164 { 166 165 uint32 size = sizeof( nmd_element_header ); 167 for ( auto chan : data)166 for ( auto chan : *mesh ) 168 167 { 169 168 size += sizeof( nmd_element_header ) + sizeof( nmd_stream_header ); … … 174 173 eheader.type = nmd_type::MESH; 175 174 eheader.name = 0; 176 eheader.children = static_cast< uint16 >( data.size() );175 eheader.children = static_cast< uint16 >( mesh->size() ); 177 176 eheader.size = size; 178 177 stream_out.write( &eheader, sizeof( eheader ), 1 ); 179 178 180 for ( auto chan : data)179 for ( auto chan : *mesh ) 181 180 { 182 181 nmd_element_header cheader; … … 203 202 total += sizeof( nmd_element_header ) + sizeof( nmd_node_header ); 204 203 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 ) 206 205 { 207 206 total += sizeof( nmd_element_header ) + sizeof( nmd_stream_header ); … … 227 226 const mesh_node_data* node = nodes->get_node(i); 228 227 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 ); 230 229 for ( uint32 c = 0; c < chan_count; ++c ) 231 230 { … … 280 279 for ( uint32 i = 0; i < model->get_count(); ++i ) 281 280 { 282 const mesh_data* mesh = model->get_mesh(i);281 const data_channel_set* mesh = model->get_mesh(i); 283 282 nmd_dump_mesh( mesh, stream_out ); 284 283 }
Note: See TracChangeset
for help on using the changeset viewer.