Changeset 417 for trunk/src/gfx
- Timestamp:
- 07/10/15 19:50:47 (10 years ago)
- Location:
- trunk/src/gfx
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gfx/keyframed_mesh.cc
r416 r417 23 23 , m_active( false ) 24 24 { 25 m_index_count = m_mesh_data->get_channel( slot::INDEX )->size(); 26 m_vertex_count = m_mesh_data->get_channel<vertex_t>()->size(); 27 m_vchannel = m_mesh_data->get_channel<vertex_pnt>(); 28 m_vsize = sizeof( vertex_pnt ); 29 m_has_tangent = true; 30 if ( m_vchannel == nullptr ) 31 { 32 m_vchannel = m_mesh_data->get_channel<vertex_pn>(); 33 m_has_tangent = false; 34 m_vsize = sizeof( vertex_pn ); 35 } 36 m_frame_count = m_vchannel->size() / m_vertex_count; 25 m_index_count = m_mesh_data->get_channel_size( slot::INDEX ); 26 m_vertex_count = m_mesh_data->get_channel_size<vertex_t>(); 27 uint32 pos_size = m_mesh_data->get_channel_size<vertex_pnt>(); 28 if ( pos_size == 0 ) 29 { 30 pos_size = m_mesh_data->get_channel_size<vertex_pn>(); 31 m_has_tangent = false; 32 m_vsize = sizeof( vertex_pn ); 33 } 34 else 35 { 36 m_has_tangent = true; 37 m_vsize = sizeof( vertex_pnt ); 38 } 39 m_frame_count = pos_size / m_vertex_count; 37 40 m_pbuffer = buffer(); 38 41 } … … 47 50 if ( !m_tag_map ) return transform(); 48 51 NV_ASSERT( node_id < m_tag_map->get_count(), "TAGMAP FAIL" ); 49 const key_ data* data = m_tag_map->get_node( node_id )->data;52 const key_channel_set* data = m_tag_map->get_node( node_id )->data; 50 53 NV_ASSERT( data, "TAG FAIL" ); 51 54 transform last = data->get_raw_transform( m_last_frame ); … … 183 186 : keyframed_mesh( a_context, a_data, a_tag_map ) 184 187 { 188 const raw_data_channel* vchannel = m_has_tangent ? a_data->get_channel< vertex_pnt >() : a_data->get_channel< vertex_pn >(); 185 189 m_va = m_context->create_vertex_array(); 186 m_pbuffer = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * m_vsize, m_vchannel->raw_data() );187 m_context->add_vertex_buffers( m_va, m_pbuffer, m_vchannel);190 m_pbuffer = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * m_vsize, vchannel->raw_data() ); 191 m_context->add_vertex_buffers( m_va, m_pbuffer, vchannel->descriptor() ); 188 192 189 193 buffer vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), m_mesh_data->get_channel_data<vertex_t>() ); 190 m_context->add_vertex_buffers( m_va, vb, m_mesh_data->get_channel<vertex_t>() );194 m_context->add_vertex_buffers( m_va, vb, m_mesh_data->get_channel<vertex_t>()->descriptor() ); 191 195 192 196 const raw_data_channel* index_channel = m_mesh_data->get_channel( slot::INDEX ); -
trunk/src/gfx/mesh_creator.cc
r416 r417 19 19 { 20 20 sint16 parent_id = m_data->m_nodes[i].parent_id; 21 key_ data* keys = m_data->m_nodes[i].data;22 key_ data* pkeys = ( parent_id != -1 ? m_data->m_nodes[parent_id].data : nullptr );23 size_t count = ( keys ? keys->get_channel (0)->size() : 0 );24 size_t pcount = ( pkeys ? pkeys->get_channel (0)->size() : 0 );21 key_channel_set* keys = m_data->m_nodes[i].data; 22 key_channel_set* pkeys = ( parent_id != -1 ? m_data->m_nodes[parent_id].data : nullptr ); 23 size_t count = ( keys ? keys->get_channel_size(0) : 0 ); 24 size_t pcount = ( pkeys ? pkeys->get_channel_size(0) : 0 ); 25 25 max_frames = nv::max<uint32>( count, max_frames ); 26 26 if ( pkeys && pkeys->size() > 0 && keys && keys->size() > 0 ) 27 27 { 28 data_channel_ creator< nv_key_transform > channel_creator( const_cast< raw_data_channel* >( keys->get_channel( 0 ) ));28 data_channel_access< nv_key_transform > channel_creator( keys, 0 ); 29 29 nv_key_transform* channel = channel_creator.data(); 30 30 const nv_key_transform* pchannel = pkeys->get_channel(0)->data_cast< nv_key_transform >(); … … 55 55 for ( size_t i = 0; i < m_data->get_count(); ++i ) 56 56 { 57 key_ data* old_keys = m_data->m_nodes[i].data;57 key_channel_set* old_keys = m_data->m_nodes[i].data; 58 58 if ( old_keys && old_keys->size() > 0 ) 59 59 { … … 69 69 } 70 70 71 data_channel_creator< nv_key_transform > kt_channel( max_keys ); 72 key_data* new_keys = new key_data; 71 key_channel_set* new_keys = key_channel_set_creator::create( 1 ); 72 key_channel_set_creator nk_access( new_keys ); 73 data_channel_access< nv_key_transform > kt_channel( nk_access.add_channel<nv_key_transform>( max_keys ) ); 74 73 75 data_descriptor final_key = old_keys->get_final_key(); 74 76 … … 87 89 88 90 delete old_keys; 89 new_keys->add_key_channel( kt_channel.release() );90 91 m_data->m_nodes[i].data = new_keys; 91 92 } … … 105 106 if ( node.data ) 106 107 { 107 key_ data* kdata = node.data;108 key_channel_set* kdata = node.data; 108 109 for ( size_t c = 0; c < kdata->size(); ++c ) 109 110 { 110 raw_data_channel_ creator channel( const_cast< raw_data_channel* >( kdata->get_channel( c ) ));111 raw_data_channel_access channel( kdata, c ); 111 112 size_t key_size = channel.element_size(); 112 113 for ( size_t n = 0; n < channel.size(); ++n ) … … 127 128 for ( uint32 c = 0; c < m_data->size(); ++c ) 128 129 { 129 raw_data_channel_ creatorchannel( m_data, c );130 raw_data_channel_access channel( m_data, c ); 130 131 const data_descriptor& desc = channel.descriptor(); 131 132 uint8* raw_data = channel.raw_data(); … … 175 176 size_t n_offset = 0; 176 177 if ( ch_n == -1 ) return; 177 raw_data_channel_ creatorchannel( m_data, unsigned( ch_n ) );178 raw_data_channel_access channel( m_data, unsigned( ch_n ) ); 178 179 for ( const auto& cslot : channel.descriptor() ) 179 180 if ( cslot.vslot == slot::NORMAL ) … … 251 252 } 252 253 253 data_channel_creator< vertex_g > g_channel( p_channel->size() );254 vec4* tangents = &( g_channel.data()[0].tangent );254 raw_data_channel* g_channel = data_channel_creator::create< vertex_g >( p_channel->size() ); 255 vec4* tangents = &( data_channel_access< vertex_g >( g_channel ).data()[0].tangent ); 255 256 vec3* tangents2 = new vec3[ p_channel->size() ]; 256 257 uint32 tri_count = i_channel ? i_channel->size() / 3 : t_channel->size() / 3; … … 333 334 delete tangents2; 334 335 335 ( data_channel_set_creator( m_data ))[ n_channel_index ] = merge_channels( n_channel, g_channel.channel() );336 delete n_channel;336 data_channel_set_creator( m_data ).set_channel( n_channel_index, merge_channels( n_channel, g_channel ) ); 337 delete g_channel; 337 338 } 338 339 … … 343 344 desc.append( b->descriptor() ); 344 345 345 raw_data_channel _creator result( desc, a->size() );346 raw_data_channel* result = data_channel_creator::create( desc, a->size() ); 346 347 for ( uint32 i = 0; i < a->size(); ++i ) 347 348 { 348 raw_copy_n( a->raw_data() + i * a->element_size(), a->element_size(), r esult.raw_data() + i*desc.element_size() );349 raw_copy_n( b->raw_data() + i * b->element_size(), b->element_size(), r esult.raw_data() + i*desc.element_size() + a->element_size() );350 } 351 352 return result .release();349 raw_copy_n( a->raw_data() + i * a->element_size(), a->element_size(), raw_data_channel_access( result ).raw_data() + i*desc.element_size() ); 350 raw_copy_n( b->raw_data() + i * b->element_size(), b->element_size(), raw_data_channel_access( result ).raw_data() + i*desc.element_size() + a->element_size() ); 351 } 352 353 return result; 353 354 } 354 355 … … 360 361 size_t vtx_size = a->element_size(); 361 362 362 raw_data_channel_creator result( a->descriptor(), a->size() + b->size() ); 363 raw_data_channel* result = data_channel_creator::create( a->descriptor(), a->size() + b->size() ); 364 uint8* rdata = raw_data_channel_access( result ).raw_data(); 363 365 364 366 if ( frame_count == 1 ) 365 367 { 366 368 size_t a_size = vtx_size * a->size(); 367 raw_copy_n( a->raw_data(), a_size, r esult.raw_data());368 raw_copy_n( b->raw_data(), vtx_size * b->size(), r esult.raw_data()+ a_size );369 raw_copy_n( a->raw_data(), a_size, rdata ); 370 raw_copy_n( b->raw_data(), vtx_size * b->size(), rdata + a_size ); 369 371 } 370 372 else … … 377 379 for ( size_t i = 0; i < frame_count; ++i ) 378 380 { 379 raw_copy_n( a->raw_data() + pos_a, frame_size_a, r esult.raw_data()+ pos );380 raw_copy_n( b->raw_data() + pos_b, frame_size_b, r esult.raw_data()+ pos + frame_size_a ); pos_a += frame_size_a;381 raw_copy_n( a->raw_data() + pos_a, frame_size_a, rdata + pos ); 382 raw_copy_n( b->raw_data() + pos_b, frame_size_b, rdata + pos + frame_size_a ); pos_a += frame_size_a; 381 383 pos_b += frame_size_b; 382 384 pos += frame_size_a + frame_size_b; … … 384 386 } 385 387 386 return result .release();388 return result; 387 389 } 388 390 … … 422 424 bool old_is_index = old->size() > 0 && old->descriptor()[0].vslot == slot::INDEX; 423 425 size_t frame_count = ( old_is_index ? 1 : old->size() / size ); 424 data [c] = append_channels( old, other->get_channel(c), frame_count);426 data.set_channel( c, append_channels( old, other->get_channel(c), frame_count ) ); 425 427 NV_ASSERT( data[c], "Merge problem!" ); 426 428 if ( old_is_index ) … … 431 433 { 432 434 NV_ASSERT( size + osize < uint16(-1), "Index out of range!" ); 433 raw_data_channel_ creatoric( data[c] );435 raw_data_channel_access ic( data[c] ); 434 436 uint16* indexes = reinterpret_cast<uint16*>( ic.raw_data() ); 435 437 for ( uint16 i = uint16( old->size() ); i < ic.size(); ++i ) … … 440 442 case UINT : 441 443 { 442 raw_data_channel_ creatoric( data[c] );444 raw_data_channel_access ic( data[c] ); 443 445 uint32* indexes = reinterpret_cast<uint32*>( ic.raw_data() ); 444 446 for ( uint32 i = old->size(); i < ic.size(); ++i ) -
trunk/src/gfx/skeletal_mesh.cc
r416 r417 45 45 { 46 46 buffer b = a_context->get_device()->create_buffer( VERTEX_BUFFER, STREAM_DRAW, channel->raw_size(), channel->raw_data() ); 47 a_context->add_vertex_buffers( m_va, b, channel);47 a_context->add_vertex_buffers( m_va, b, desc ); 48 48 } 49 49 }
Note: See TracChangeset
for help on using the changeset viewer.