- Timestamp:
- 07/09/15 20:02:58 (10 years ago)
- Location:
- trunk/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/formats/assimp_loader.cc
r413 r415 117 117 118 118 bool skinned = mesh->mNumBones > 0; 119 raw_data_channel* channel = nullptr; 119 120 data_descriptor desc; 120 121 if ( skinned ) 121 channel = raw_data_channel::create< assimp_skinned_vtx >( mesh->mNumVertices);122 desc.initialize< assimp_skinned_vtx >(); 122 123 else 123 channel = raw_data_channel::create< assimp_plain_vtx >( mesh->mNumVertices);124 uint8* cdata = const_cast< uint8*>( channel->raw_data());125 126 data->add_channel( channel ); 124 desc.initialize< assimp_plain_vtx >(); 125 raw_data_channel_creator channel( desc, mesh->mNumVertices ); 126 uint8* cdata = channel.raw_data(); 127 127 128 if ( mesh->mTangents && mesh->mBitangents ) 128 for (unsigned int i=0; i<mesh->mNumVertices; i++)129 {130 vec3 v = assimp_vec3_cast( mesh->mVertices[ i] );131 vec3 n = glm::normalize( assimp_vec3_cast( mesh->mNormals[ i] ) );132 vec3 t = glm::normalize( assimp_vec3_cast( mesh->mTangents[ i] ) );133 vec3 b = glm::normalize( assimp_vec3_cast( mesh->mBitangents[ i] ) );134 vec2 s = assimp_st_cast( mesh->mTextureCoords[ 0 ][ i] );135 136 glm::vec3 t_i = glm::normalize (t - n * glm::dot (n, t));137 float det = (glm::dot (glm::cross (n, t), b));138 det = (det < 0.0f ? -1.0f : 1.0f );139 nv::vec4 vt( t_i[0], t_i[1], t_i[2], det );140 if ( skinned )141 reinterpret_cast< assimp_skinned_vtx*>( cdata )[i] = assimp_skinned_vtx( v, s, n, vt );142 else143 reinterpret_cast< assimp_plain_vtx*>( cdata )[i] = assimp_plain_vtx( v, s, n, vt );144 }129 for ( unsigned int i = 0; i < mesh->mNumVertices; i++ ) 130 { 131 vec3 v = assimp_vec3_cast( mesh->mVertices[i] ); 132 vec3 n = glm::normalize( assimp_vec3_cast( mesh->mNormals[i] ) ); 133 vec3 t = glm::normalize( assimp_vec3_cast( mesh->mTangents[i] ) ); 134 vec3 b = glm::normalize( assimp_vec3_cast( mesh->mBitangents[i] ) ); 135 vec2 s = assimp_st_cast( mesh->mTextureCoords[0][i] ); 136 137 glm::vec3 t_i = glm::normalize( t - n * glm::dot( n, t ) ); 138 float det = ( glm::dot( glm::cross( n, t ), b ) ); 139 det = ( det < 0.0f ? -1.0f : 1.0f ); 140 nv::vec4 vt( t_i[0], t_i[1], t_i[2], det ); 141 if ( skinned ) 142 reinterpret_cast<assimp_skinned_vtx*>( cdata )[i] = assimp_skinned_vtx( v, s, n, vt ); 143 else 144 reinterpret_cast<assimp_plain_vtx*>( cdata )[i] = assimp_plain_vtx( v, s, n, vt ); 145 } 145 146 146 147 if ( skinned ) … … 179 180 } 180 181 } 182 data->add_channel( channel.release() ); 181 183 data->add_channel( ichannel.release() ); 182 184 } -
trunk/src/formats/md5_loader.cc
r413 r415 137 137 assert( m_type == MESH ); 138 138 mesh_data* mesh = new mesh_data("md5_mesh"); 139 raw_data_channel* ch_pntiw = nullptr;140 139 141 140 uint32 num_verts = 0; … … 160 159 md5_vtx_t* tdata = nullptr; 161 160 { 162 data_channel_creator<md5_vtx_pnt> ch_pnt( num_verts );163 data_channel_creator<md5_vtx_t> ch_t( num_verts );164 ch_pntiw = raw_data_channel::create<md5_vtx_pntiw>( num_verts );161 data_channel_creator<md5_vtx_pnt> ch_pnt( num_verts ); 162 data_channel_creator<md5_vtx_t> ch_t( num_verts ); 163 data_channel_creator<md5_vtx_pntiw> ch_pntiw( num_verts ); 165 164 tdata = ch_t.data(); 166 165 mesh->add_channel( ch_pnt.release() ); … … 168 167 // TODO: hack to prevent rendering 169 168 //ch_pntiw->m_count = 0; 170 mesh->add_channel( ch_pntiw );169 mesh->add_channel( ch_pntiw.release() ); 171 170 } 172 171 weight_info.resize( num_verts ); … … 236 235 } 237 236 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() );237 prepare_mesh( nodes, weight_info.size(), mesh, weights.data(), weight_info.data() ); 239 238 240 239 m_meshes[ num_meshes ] = mesh; … … 258 257 nodes[i].target_id = -1; 259 258 nodes[i].data = new key_data; 260 nodes[i].data->add_channel( raw_data_channel::create< md5_key_t >( num_frames ) ); 259 data_channel_creator< md5_key_t > fc( num_frames ); 260 nodes[i].data->add_channel( fc.release() ); 261 261 next_line( sstream ); 262 262 } … … 335 335 } 336 336 337 bool md5_loader::prepare_mesh( m d5_vtx_pntiw* vtx_data, mesh_node_data* nodes, uint32 vtx_count, mesh_data* mdata, md5_weight* weights, md5_weight_info* weight_info )337 bool md5_loader::prepare_mesh( mesh_node_data* nodes, uint32 vtx_count, mesh_data* mdata, md5_weight* weights, md5_weight_info* weight_info ) 338 338 { 339 339 assert( m_type == MESH ); 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 data_channel_creator< md5_vtx_pnt > pnt ( const_cast< raw_data_channel* >( mdata->get_channel< md5_vtx_pnt >() ) ); 341 data_channel_creator< md5_vtx_pntiw > pntiw( const_cast< raw_data_channel* >( mdata->get_channel< md5_vtx_pntiw >() ) ); 342 md5_vtx_pntiw* vtx_data = pntiw.data(); 343 md5_vtx_pnt* vtcs = pnt.data(); 342 344 343 345 for ( uint32 i = 0; i < vtx_count; ++i ) … … 488 490 const transform* ptv = reinterpret_cast< const transform* >( pjoint.data->get_channel(0)->raw_data() ); 489 491 transform ptr; 490 if ( pjoint.data->get_channel(0)-> element_count() > index ) ptr = ptv[ index ];492 if ( pjoint.data->get_channel(0)->size() > index ) ptr = ptv[ index ]; 491 493 vec3 rot_pos = ptr.get_orientation() * pos; 492 494 -
trunk/src/formats/nmd_loader.cc
r413 r415 189 189 nmd_stream_header sheader; 190 190 sheader.format = chan->descriptor(); 191 sheader.count = chan-> element_count();191 sheader.count = chan->size(); 192 192 stream_out.write( &sheader, sizeof( sheader ), 1 ); 193 stream_out.write( chan->raw_data(), chan->element_size(), chan-> element_count() );193 stream_out.write( chan->raw_data(), chan->element_size(), chan->size() ); 194 194 } 195 195 } … … 257 257 nmd_stream_header cheader; 258 258 cheader.format = channel->descriptor(); 259 cheader.count = channel-> element_count();259 cheader.count = channel->size(); 260 260 stream_out.write( &cheader, sizeof( cheader ), 1 ); 261 stream_out.write( channel->raw_data(), channel->element_size(), channel-> element_count() );261 stream_out.write( channel->raw_data(), channel->element_size(), channel->size() ); 262 262 } 263 263 } -
trunk/src/gfx/keyframed_mesh.cc
r413 r415 23 23 , m_active( false ) 24 24 { 25 m_index_count = m_mesh_data->get_index_channel()-> element_count();26 m_vertex_count = m_mesh_data->get_channel<vertex_t>()-> element_count();25 m_index_count = m_mesh_data->get_index_channel()->size(); 26 m_vertex_count = m_mesh_data->get_channel<vertex_t>()->size(); 27 27 m_vchannel = m_mesh_data->get_channel<vertex_pnt>(); 28 28 m_vsize = sizeof( vertex_pnt ); … … 34 34 m_vsize = sizeof( vertex_pn ); 35 35 } 36 m_frame_count = m_vchannel-> element_count() / m_vertex_count;36 m_frame_count = m_vchannel->size() / m_vertex_count; 37 37 m_pbuffer = buffer(); 38 38 } -
trunk/src/gfx/mesh_creator.cc
r413 r415 19 19 key_data* keys = m_data->m_nodes[i].data; 20 20 key_data* pkeys = ( parent_id != -1 ? m_data->m_nodes[parent_id].data : nullptr ); 21 size_t count = ( keys ? keys->get_channel(0)-> element_count() : 0 );22 size_t pcount = ( pkeys ? pkeys->get_channel(0)-> element_count() : 0 );21 size_t count = ( keys ? keys->get_channel(0)->size() : 0 ); 22 size_t pcount = ( pkeys ? pkeys->get_channel(0)->size() : 0 ); 23 23 max_frames = nv::max<uint32>( count, max_frames ); 24 24 if ( pkeys && pkeys->get_channel_count() > 0 && keys && keys->get_channel_count() > 0 ) … … 58 58 size_t chan_count = old_keys->get_channel_count(); 59 59 if ( chan_count == 1 60 && old_keys->get_channel(0)->descriptor().s lot_count() == 160 && old_keys->get_channel(0)->descriptor().size() == 1 61 61 && old_keys->get_channel(0)->descriptor()[0].etype == TRANSFORM ) continue; 62 62 … … 64 64 for ( size_t c = 0; c < chan_count; ++c ) 65 65 { 66 max_keys = nv::max( max_keys, old_keys->get_channel(c)-> element_count() );66 max_keys = nv::max( max_keys, old_keys->get_channel(c)->size() ); 67 67 } 68 68 … … 78 78 for ( uint16 c = 0; c < chan_count; ++c ) 79 79 { 80 size_t idx = nv::min( old_keys->get_channel(c)-> element_count() - 1, n );80 size_t idx = nv::min( old_keys->get_channel(c)->size() - 1, n ); 81 81 pkey += old_keys->get_raw( old_keys->get_channel(c), idx, pkey ); 82 82 } … … 242 242 if ( !p_channel || !n_channel || !t_channel ) return; 243 243 244 if ( p_channel-> element_count() != n_channel->element_count()245 || p_channel-> element_count() % t_channel->element_count() != 0244 if ( p_channel->size() != n_channel->size() 245 || p_channel->size() % t_channel->size() != 0 246 246 || ( i_type != UINT && i_type != USHORT && i_type != NONE ) ) 247 247 { … … 249 249 } 250 250 251 data_channel_creator< vertex_g > g_channel( p_channel-> element_count() );251 data_channel_creator< vertex_g > g_channel( p_channel->size() ); 252 252 vec4* tangents = &( g_channel.data()[0].tangent ); 253 vec3* tangents2 = new vec3[ p_channel-> element_count() ];254 uint32 tri_count = i_channel ? i_channel-> element_count() / 3 : t_channel->element_count() / 3;255 uint32 vtx_count = p_channel-> element_count();256 uint32 sets = p_channel-> element_count() / t_channel->element_count();253 vec3* tangents2 = new vec3[ p_channel->size() ]; 254 uint32 tri_count = i_channel ? i_channel->size() / 3 : t_channel->size() / 3; 255 uint32 vtx_count = p_channel->size(); 256 uint32 sets = p_channel->size() / t_channel->size(); 257 257 258 258 for ( unsigned int i = 0; i < tri_count; ++i ) … … 292 292 for ( uint32 set = 0; set < sets; ++set ) 293 293 { 294 uint32 nti0 = t_channel-> element_count() * set + ti0;295 uint32 nti1 = t_channel-> element_count() * set + ti1;296 uint32 nti2 = t_channel-> element_count() * set + ti2;294 uint32 nti0 = t_channel->size() * set + ti0; 295 uint32 nti1 = t_channel->size() * set + ti1; 296 uint32 nti2 = t_channel->size() * set + ti2; 297 297 const vec3& v1 = *reinterpret_cast<const vec3*>(p_channel->raw_data() + p_channel->element_size()*nti0 + p_offset ); 298 298 const vec3& v2 = *reinterpret_cast<const vec3*>(p_channel->raw_data() + p_channel->element_size()*nti1 + p_offset ); … … 337 337 nv::raw_data_channel* nv::mesh_data_creator::merge_channels( raw_data_channel* a, raw_data_channel* b ) 338 338 { 339 NV_ASSERT( a-> element_count() == b->element_count(), "merge_channel - bad channels!" );339 NV_ASSERT( a->size() == b->size(), "merge_channel - bad channels!" ); 340 340 data_descriptor desc = a->descriptor(); 341 341 desc.append( b->descriptor() ); 342 342 343 raw_data_channel_creator result( desc, a-> element_count() );344 for ( uint32 i = 0; i < a-> element_count(); ++i )343 raw_data_channel_creator result( desc, a->size() ); 344 for ( uint32 i = 0; i < a->size(); ++i ) 345 345 { 346 346 raw_copy_n( a->raw_data() + i * a->element_size(), a->element_size(), result.raw_data() + i*desc.element_size() ); … … 354 354 { 355 355 if ( a->descriptor() != b->descriptor() ) return nullptr; 356 if ( a-> element_count() % frame_count != 0 ) return nullptr;357 if ( b-> element_count() % frame_count != 0 ) return nullptr;356 if ( a->size() % frame_count != 0 ) return nullptr; 357 if ( b->size() % frame_count != 0 ) return nullptr; 358 358 size_t vtx_size = a->element_size(); 359 359 360 raw_data_channel_creator result( a->descriptor(), a-> element_count() + b->element_count() );360 raw_data_channel_creator result( a->descriptor(), a->size() + b->size() ); 361 361 362 362 if ( frame_count == 1 ) 363 363 { 364 size_t a_size = vtx_size * a-> element_count();364 size_t a_size = vtx_size * a->size(); 365 365 raw_copy_n( a->raw_data(), a_size, result.raw_data() ); 366 raw_copy_n( b->raw_data(), vtx_size * b-> element_count(), result.raw_data() + a_size );366 raw_copy_n( b->raw_data(), vtx_size * b->size(), result.raw_data() + a_size ); 367 367 } 368 368 else 369 369 { 370 size_t frame_size_a = ( a-> element_count() / frame_count ) * vtx_size;371 size_t frame_size_b = ( b-> element_count() / frame_count ) * vtx_size;370 size_t frame_size_a = ( a->size() / frame_count ) * vtx_size; 371 size_t frame_size_b = ( b->size() / frame_count ) * vtx_size; 372 372 size_t pos_a = 0; 373 373 size_t pos_b = 0; … … 406 406 int och_ti = other->get_channel_index( slot::TEXCOORD ); 407 407 if ( ch_pi == -1 || ch_ti == -1 ) return; 408 size_t size = m_data->m_channels[ unsigned(ch_ti) ]-> element_count();409 size_t osize = other->m_channels[ unsigned(och_ti) ]-> element_count();410 size_t count = m_data->m_channels[ unsigned(ch_pi) ]-> element_count();411 size_t ocount = other->m_channels[ unsigned(och_pi) ]-> element_count();408 size_t size = m_data->m_channels[ unsigned(ch_ti) ]->size(); 409 size_t osize = other->m_channels[ unsigned(och_ti) ]->size(); 410 size_t count = m_data->m_channels[ unsigned(ch_pi) ]->size(); 411 size_t ocount = other->m_channels[ unsigned(och_pi) ]->size(); 412 412 if ( count % size != 0 || ocount % osize != 0 ) return; 413 413 if ( count / size != ocount / osize ) return; … … 416 416 { 417 417 raw_data_channel* old = m_data->m_channels[c]; 418 bool old_is_index = old-> element_count() > 0 && old->descriptor()[0].vslot == slot::INDEX;419 size_t frame_count = ( old_is_index ? 1 : old-> element_count() / size );418 bool old_is_index = old->size() > 0 && old->descriptor()[0].vslot == slot::INDEX; 419 size_t frame_count = ( old_is_index ? 1 : old->size() / size ); 420 420 m_data->m_channels[c] = append_channels( old, other->m_channels[c], frame_count ); 421 421 NV_ASSERT( m_data->m_channels[c], "Merge problem!" ); … … 429 429 raw_data_channel_creator ic( m_data->m_channels[c] ); 430 430 uint16* indexes = reinterpret_cast<uint16*>( ic.raw_data() ); 431 for ( uint16 i = uint16( old-> element_count() ); i < ic.size(); ++i )431 for ( uint16 i = uint16( old->size() ); i < ic.size(); ++i ) 432 432 indexes[i] += uint16( size ); 433 433 … … 438 438 raw_data_channel_creator ic( m_data->m_channels[c] ); 439 439 uint32* indexes = reinterpret_cast<uint32*>( ic.raw_data() ); 440 for ( uint32 i = old-> element_count(); i < ic.size(); ++i )440 for ( uint32 i = old->size(); i < ic.size(); ++i ) 441 441 indexes[i] += size; 442 442 } -
trunk/src/gfx/skeletal_mesh.cc
r413 r415 17 17 const raw_data_channel* pntiw_chan = a_mesh_data->get_channel<md5_vtx_pntiw>(); 18 18 19 m_pntdata.assign( pnt_chan->data_cast< md5_vtx_pnt >(), pnt_chan-> element_count() );19 m_pntdata.assign( pnt_chan->data_cast< md5_vtx_pnt >(), pnt_chan->size() ); 20 20 m_bone_offset.resize( bones->get_count() ); 21 21 m_transform.resize( bones->get_count() ); … … 34 34 { 35 35 const raw_data_channel* channel = channels[ch]; 36 if ( channel-> element_count() > 0 && channel != pntiw_chan )36 if ( channel->size() > 0 && channel != pntiw_chan ) 37 37 { 38 38 const data_descriptor& desc = channel->descriptor();
Note: See TracChangeset
for help on using the changeset viewer.