Changeset 413 for trunk/src/formats
- Timestamp:
- 07/09/15 18:53:08 (10 years ago)
- Location:
- trunk/src/formats
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/formats/assimp_loader.cc
r412 r413 7 7 #include "nv/formats/assimp_loader.hh" 8 8 #include "nv/stl/unordered_map.hh" 9 #include "nv/gfx/mesh_creator.hh"10 9 #include "nv/lib/assimp.hh" 11 10 … … 123 122 else 124 123 channel = raw_data_channel::create< assimp_plain_vtx >( mesh->mNumVertices ); 124 uint8* cdata = const_cast< uint8*>( channel->raw_data() ); 125 125 126 126 data->add_channel( channel ); … … 139 139 nv::vec4 vt ( t_i[0], t_i[1], t_i[2], det ); 140 140 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 ); 142 142 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 ); 144 144 } 145 145 146 146 if ( skinned ) 147 147 { 148 assimp_skinned_vtx* vtx = reinterpret_cast< assimp_skinned_vtx* >( c hannel->data );148 assimp_skinned_vtx* vtx = reinterpret_cast< assimp_skinned_vtx* >( cdata ); 149 149 for (unsigned int m=0; m<mesh->mNumBones; m++) 150 150 { … … 169 169 } 170 170 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() ); 174 173 for (unsigned int i=0; i<mesh->mNumFaces; i++) 175 174 { … … 180 179 } 181 180 } 181 data->add_channel( ichannel.release() ); 182 182 } 183 183 … … 315 315 if ( m > 0 && bones.size() > 0 ) 316 316 { 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 ) 320 319 { 321 assimp_skinned_vtx& vertex = va[v];320 assimp_skinned_vtx& vertex = channel.data()[v]; 322 321 323 322 for ( int i = 0 ; i < 4; ++i) … … 418 417 419 418 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(); 428 425 //assimp_key_s* schannel = ((assimp_key_s*)(raw_schannel->data)); 429 426 … … 457 454 // } 458 455 // } 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() ); 460 459 } 461 460 -
trunk/src/formats/md2_loader.cc
r412 r413 324 324 size_t frame_count = ( frame == -1 ? num_frames : 1 ); 325 325 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(); 328 328 329 329 uint32 index = 0; … … 347 347 } 348 348 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(); 351 351 352 352 vec2 scale( 1.0f / static_cast<float>( md2->header.skinwidth ), 1.0f / static_cast<float>( md2->header.skinheight ) ); … … 357 357 } 358 358 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() ); 360 360 if ( m_new_indexes.size() > 0 ) 361 361 { 362 uint16* icp = reinterpret_cast< uint16* >( ic ->data);362 uint16* icp = reinterpret_cast< uint16* >( ic.raw_data() ); 363 363 raw_copy_n( m_new_indexes.data(), m_new_indexes.size(), icp ); 364 364 } 365 365 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() ); 369 369 } 370 370 -
trunk/src/formats/md3_loader.cc
r412 r413 289 289 { 290 290 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 ) ); 292 292 // TODO: is this brain damaged in efficiency (loop nest order) or what? 293 293 for ( sint32 f = 0; f < md3->header.num_frames; ++f ) … … 303 303 vec3 axisy ( md3_vec3( rtag.axis[2] ) ); 304 304 vec3 origin ( md3_vec3( rtag.origin ) ); 305 re interpret_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 ) ) ); 306 306 } 307 307 } 308 308 309 309 } 310 return result ;310 return result.release(); 311 311 } 312 312 … … 352 352 } 353 353 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); 360 360 361 361 uint32 index = 0; … … 413 413 414 414 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() ); 418 418 } 419 419 -
trunk/src/formats/md5_loader.cc
r412 r413 160 160 md5_vtx_t* tdata = nullptr; 161 161 { 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 ); 164 164 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() ); 168 168 // TODO: hack to prevent rendering 169 169 //ch_pntiw->m_count = 0; … … 191 191 sstream >> num_tris; 192 192 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() ); 195 195 uint32 idx = 0; 196 mesh->add_channel( ch_i );197 196 198 197 next_line( sstream ); … … 211 210 vtx_i[idx++] = ti2; 212 211 } 212 213 mesh->add_channel( ch_i.release() ); 213 214 } 214 215 else if ( command == "numweights" ) … … 235 236 } 236 237 237 prepare_mesh( reinterpret_cast< md5_vtx_pntiw* >( c h_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() ); 238 239 239 240 m_meshes[ num_meshes ] = mesh; … … 337 338 { 338 339 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(); 340 342 341 343 for ( uint32 i = 0; i < vtx_count; ++i ) … … 396 398 } 397 399 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() ) ); 399 401 const md5_vtx_t* tdata = mdata->get_channel_data<md5_vtx_t>(); 400 402 … … 484 486 { 485 487 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() ); 487 489 transform ptr; 488 490 if ( pjoint.data->get_channel(0)->element_count() > index ) ptr = ptv[ index ]; … … 495 497 } 496 498 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 ); 498 500 } 499 501 } -
trunk/src/formats/nmd_loader.cc
r412 r413 43 43 nmd_stream_header stream_header; 44 44 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() ); 48 48 } 49 49 m_mesh_names.push_back( e.name ); … … 128 128 nv::nmd_stream_header cheader; 129 129 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() ); 133 133 } 134 134 } -
trunk/src/formats/obj_loader.cc
r412 r413 324 324 } 325 325 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 ); 327 327 if ( reader->raw_size() > 0 ) 328 328 { 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() ); 330 330 } 331 331 332 332 mesh_data* mesh = new mesh_data(reader->name); 333 mesh->add_channel( channel );333 mesh->add_channel( channel.release() ); 334 334 m_meshes.push_back( mesh ); 335 335
Note: See TracChangeset
for help on using the changeset viewer.