Changeset 413 for trunk/src/gfx
- Timestamp:
- 07/09/15 18:53:08 (10 years ago)
- Location:
- trunk/src/gfx
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gfx/keyframed_mesh.cc
r412 r413 184 184 { 185 185 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-> data);186 m_pbuffer = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * m_vsize, m_vchannel->raw_data() ); 187 187 m_context->add_vertex_buffers( m_va, m_pbuffer, m_vchannel ); 188 188 189 buffer vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), m_mesh_data->get_channel <vertex_t>()->data);189 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 190 m_context->add_vertex_buffers( m_va, vb, m_mesh_data->get_channel<vertex_t>() ); 191 191 -
trunk/src/gfx/mesh_creator.cc
r412 r413 24 24 if ( pkeys && pkeys->get_channel_count() > 0 && keys && keys->get_channel_count() > 0 ) 25 25 { 26 nv_key_transform* channel = reinterpret_cast<nv_key_transform*>(keys->get_channel(0)->data); 27 nv_key_transform* pchannel = reinterpret_cast<nv_key_transform*>(pkeys->get_channel(0)->data); 26 data_channel_creator< nv_key_transform > channel_creator( const_cast< raw_data_channel* >( keys->get_channel( 0 ) ) ); 27 nv_key_transform* channel = channel_creator.data(); 28 const nv_key_transform* pchannel = pkeys->get_channel(0)->data_cast< nv_key_transform >(); 28 29 for ( unsigned n = 0; n < count; ++n ) 29 30 { … … 66 67 } 67 68 68 raw_data_channel* raw_channel = raw_data_channel::create<nv_key_transform>( max_keys );69 data_channel_creator< nv_key_transform > kt_channel( max_keys ); 69 70 key_data* new_keys = new key_data; 70 new_keys->add_channel( raw_channel );71 nv_key_transform* channel = reinterpret_cast<nv_key_transform*>(raw_channel->data);72 71 data_descriptor final_key = old_keys->get_final_key(); 73 72 … … 82 81 pkey += old_keys->get_raw( old_keys->get_channel(c), idx, pkey ); 83 82 } 84 channel[n].tform = extract_transform_raw( final_key, key );83 kt_channel.data()[n].tform = extract_transform_raw( final_key, key ); 85 84 } 86 85 87 86 delete old_keys; 87 new_keys->add_channel( kt_channel.release() ); 88 88 m_data->m_nodes[i].data = new_keys; 89 89 } … … 106 106 for ( size_t c = 0; c < kdata->get_channel_count(); ++c ) 107 107 { 108 const raw_data_channel* channel = kdata->get_channel(c);109 size_t key_size = channel ->element_size();110 for ( size_t n = 0; n < channel ->element_count(); ++n )111 { 112 transform_key_raw( channel->descriptor(), channel->data+ n * key_size, scale, r33, ri33 );108 raw_data_channel_creator channel( const_cast< raw_data_channel* >( kdata->get_channel( c ) ) ); 109 size_t key_size = channel.element_size(); 110 for ( size_t n = 0; n < channel.size(); ++n ) 111 { 112 transform_key_raw( kdata->get_channel( c )->descriptor(), channel.raw_data() + n * key_size, scale, r33, ri33 ); 113 113 } 114 114 } … … 125 125 for ( uint32 c = 0; c < m_data->get_channel_count(); ++c ) 126 126 { 127 const raw_data_channel* channel = m_data->get_channel(c);128 const data_descriptor& desc = channel ->descriptor();129 uint8* raw_data = channel ->data;127 raw_data_channel_creator channel( m_data->m_channels[ c ] ); 128 const data_descriptor& desc = channel.descriptor(); 129 uint8* raw_data = channel.raw_data(); 130 130 uint32 vtx_size = desc.element_size(); 131 131 int p_offset = -1; … … 142 142 143 143 if ( p_offset != -1 ) 144 for ( uint32 i = 0; i < channel ->element_count(); i++)144 for ( uint32 i = 0; i < channel.size(); i++) 145 145 { 146 146 vec3& p = *reinterpret_cast<vec3*>( raw_data + vtx_size*i + p_offset ); … … 149 149 150 150 if ( n_offset != -1 ) 151 for ( uint32 i = 0; i < channel ->element_count(); i++)151 for ( uint32 i = 0; i < channel.size(); i++) 152 152 { 153 153 vec3& n = *reinterpret_cast<vec3*>( raw_data + vtx_size*i + n_offset ); … … 155 155 } 156 156 if ( t_offset != -1 ) 157 for ( uint32 i = 0; i < channel ->element_count(); i++)157 for ( uint32 i = 0; i < channel.size(); i++) 158 158 { 159 159 vec4& t = *reinterpret_cast<vec4*>(raw_data + vtx_size*i + t_offset ); … … 173 173 size_t n_offset = 0; 174 174 if ( ch_n == -1 ) return; 175 raw_data_channel * channel = m_data->m_channels[ unsigned( ch_n ) ];176 for ( const auto& cslot : channel ->descriptor() )175 raw_data_channel_creator channel( m_data->m_channels[ unsigned( ch_n ) ] ); 176 for ( const auto& cslot : channel.descriptor() ) 177 177 if ( cslot.vslot == slot::NORMAL ) 178 178 { … … 180 180 } 181 181 182 for ( uint32 i = 0; i < channel ->element_count(); ++i )183 { 184 vec3& normal = *reinterpret_cast<vec3*>( channel ->data + channel->element_size() * i + n_offset );182 for ( uint32 i = 0; i < channel.size(); ++i ) 183 { 184 vec3& normal = *reinterpret_cast<vec3*>( channel.raw_data() + channel.element_size() * i + n_offset ); 185 185 normal = -normal; 186 186 } … … 249 249 } 250 250 251 raw_data_channel* g_channel = raw_data_channel::create<vertex_g>( p_channel->element_count() );252 vec4* tangents = reinterpret_cast<vec4*>( g_channel->data);251 data_channel_creator< vertex_g > g_channel( p_channel->element_count() ); 252 vec4* tangents = &( g_channel.data()[0].tangent ); 253 253 vec3* tangents2 = new vec3[ p_channel->element_count() ]; 254 254 uint32 tri_count = i_channel ? i_channel->element_count() / 3 : t_channel->element_count() / 3; … … 263 263 if ( i_type == UINT ) 264 264 { 265 const uint32* idata = reinterpret_cast<const uint32*>( i_channel-> data);265 const uint32* idata = reinterpret_cast<const uint32*>( i_channel->raw_data() ); 266 266 ti0 = idata[ i * 3 ]; 267 267 ti1 = idata[ i * 3 + 1 ]; … … 270 270 else if ( i_type == USHORT ) 271 271 { 272 const uint16* idata = reinterpret_cast<const uint16*>( i_channel-> data);272 const uint16* idata = reinterpret_cast<const uint16*>( i_channel->raw_data() ); 273 273 ti0 = idata[ i * 3 ]; 274 274 ti1 = idata[ i * 3 + 1 ]; … … 282 282 } 283 283 284 const vec2& w1 = *reinterpret_cast< vec2*>(t_channel->data+ t_channel->element_size()*ti0 + t_offset );285 const vec2& w2 = *reinterpret_cast< vec2*>(t_channel->data+ t_channel->element_size()*ti1 + t_offset );286 const vec2& w3 = *reinterpret_cast< vec2*>(t_channel->data+ t_channel->element_size()*ti2 + t_offset );284 const vec2& w1 = *reinterpret_cast<const vec2*>(t_channel->raw_data() + t_channel->element_size()*ti0 + t_offset ); 285 const vec2& w2 = *reinterpret_cast<const vec2*>(t_channel->raw_data() + t_channel->element_size()*ti1 + t_offset ); 286 const vec2& w3 = *reinterpret_cast<const vec2*>(t_channel->raw_data() + t_channel->element_size()*ti2 + t_offset ); 287 287 vec2 st1 = w3 - w1; 288 288 vec2 st2 = w2 - w1; … … 295 295 uint32 nti1 = t_channel->element_count() * set + ti1; 296 296 uint32 nti2 = t_channel->element_count() * set + ti2; 297 vec3 v1 = *reinterpret_cast<vec3*>(p_channel->data+ p_channel->element_size()*nti0 + p_offset );298 vec3 v2 = *reinterpret_cast<vec3*>(p_channel->data+ p_channel->element_size()*nti1 + p_offset );299 vec3 v3 = *reinterpret_cast<vec3*>(p_channel->data+ p_channel->element_size()*nti2 + p_offset );297 const vec3& v1 = *reinterpret_cast<const vec3*>(p_channel->raw_data() + p_channel->element_size()*nti0 + p_offset ); 298 const vec3& v2 = *reinterpret_cast<const vec3*>(p_channel->raw_data() + p_channel->element_size()*nti1 + p_offset ); 299 const vec3& v3 = *reinterpret_cast<const vec3*>(p_channel->raw_data() + p_channel->element_size()*nti2 + p_offset ); 300 300 vec3 xyz1 = v3 - v1; 301 301 vec3 xyz2 = v2 - v1; … … 321 321 for ( unsigned int i = 0; i < vtx_count; ++i ) 322 322 { 323 const vec3 n = *reinterpret_cast< vec3*>( n_channel->data+ n_channel->element_size()*i + n_offset );323 const vec3 n = *reinterpret_cast<const vec3*>( n_channel->raw_data() + n_channel->element_size()*i + n_offset ); 324 324 const vec3 t = vec3(tangents[i]); 325 325 if ( ! ( t.x == 0.0f && t.y == 0.0f && t.z == 0.0f ) ) … … 331 331 delete tangents2; 332 332 333 m_data->m_channels[ n_channel_index ] = merge_channels( n_channel, g_channel );333 m_data->m_channels[ n_channel_index ] = merge_channels( n_channel, g_channel.channel() ); 334 334 delete n_channel; 335 delete g_channel;336 335 } 337 336 … … 342 341 desc.append( b->descriptor() ); 343 342 344 uint8* data = new uint8[a->element_count() * desc.element_size() ];343 raw_data_channel_creator result( desc, a->element_count() ); 345 344 for ( uint32 i = 0; i < a->element_count(); ++i ) 346 345 { 347 raw_copy_n( a->data + i * a->element_size(), a->element_size(), data + i*desc.element_size() ); 348 raw_copy_n( b->data + i * b->element_size(), b->element_size(), data + i*desc.element_size() + a->element_size() ); 349 } 350 351 raw_data_channel* result = new raw_data_channel; 352 result->m_count = a->element_count(); 353 result->m_desc = desc; 354 result->data = data; 355 return result; 346 raw_copy_n( a->raw_data() + i * a->element_size(), a->element_size(), result.raw_data() + i*desc.element_size() ); 347 raw_copy_n( b->raw_data() + i * b->element_size(), b->element_size(), result.raw_data() + i*desc.element_size() + a->element_size() ); 348 } 349 350 return result.release(); 356 351 } 357 352 … … 363 358 size_t vtx_size = a->element_size(); 364 359 365 uint8* data = new uint8[ ( a->element_count() + b->element_count() ) * vtx_size ]; 366 360 raw_data_channel_creator result( a->descriptor(), a->element_count() + b->element_count() ); 367 361 368 362 if ( frame_count == 1 ) 369 363 { 370 364 size_t a_size = vtx_size * a->element_count(); 371 raw_copy_n( a-> data, a_size, data);372 raw_copy_n( b-> data, vtx_size * b->element_count(), data+ a_size );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 ); 373 367 } 374 368 else … … 381 375 for ( size_t i = 0; i < frame_count; ++i ) 382 376 { 383 raw_copy_n( a-> data + pos_a, frame_size_a, data+ pos );384 raw_copy_n( b-> data + pos_b, frame_size_b, data+ pos + frame_size_a ); pos_a += frame_size_a;377 raw_copy_n( a->raw_data() + pos_a, frame_size_a, result.raw_data() + pos ); 378 raw_copy_n( b->raw_data() + pos_b, frame_size_b, result.raw_data() + pos + frame_size_a ); pos_a += frame_size_a; 385 379 pos_b += frame_size_b; 386 380 pos += frame_size_a + frame_size_b; … … 388 382 } 389 383 390 raw_data_channel* result = new raw_data_channel; 391 result->m_count = a->element_count() + b->element_count(); 392 result->m_desc = a->descriptor(); 393 result->data = data; 394 return result; 384 return result.release(); 395 385 } 396 386 … … 437 427 { 438 428 NV_ASSERT( size + osize < uint16(-1), "Index out of range!" ); 439 uint16* indexes = reinterpret_cast<uint16*>( m_data->m_channels[c]->data ); 440 for ( uint16 i = uint16( old->element_count() ); i < m_data->m_channels[c]->element_count(); ++i ) 429 raw_data_channel_creator ic( m_data->m_channels[c] ); 430 uint16* indexes = reinterpret_cast<uint16*>( ic.raw_data() ); 431 for ( uint16 i = uint16( old->element_count() ); i < ic.size(); ++i ) 441 432 indexes[i] += uint16( size ); 442 433 … … 445 436 case UINT : 446 437 { 447 uint32* indexes = reinterpret_cast<uint32*>( m_data->m_channels[c]->data ); 448 for ( uint32 i = old->element_count(); i < m_data->m_channels[c]->element_count(); ++i ) 438 raw_data_channel_creator ic( m_data->m_channels[c] ); 439 uint32* indexes = reinterpret_cast<uint32*>( ic.raw_data() ); 440 for ( uint32 i = old->element_count(); i < ic.size(); ++i ) 449 441 indexes[i] += size; 450 442 } -
trunk/src/gfx/skeletal_mesh.cc
r412 r413 17 17 const raw_data_channel* pntiw_chan = a_mesh_data->get_channel<md5_vtx_pntiw>(); 18 18 19 m_pntdata.assign( reinterpret_cast<const md5_vtx_pnt*>( pnt_chan->data), pnt_chan->element_count() );19 m_pntdata.assign( pnt_chan->data_cast< md5_vtx_pnt >(), pnt_chan->element_count() ); 20 20 m_bone_offset.resize( bones->get_count() ); 21 21 m_transform.resize( bones->get_count() );
Note: See TracChangeset
for help on using the changeset viewer.