Ignore:
Timestamp:
07/09/15 14:40:36 (10 years ago)
Author:
epyon
Message:
  • refactoring of raw_data_channel and data_descriptor access
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gfx/skeletal_mesh.cc

    r411 r412  
    1313nv::skeletal_mesh_cpu::skeletal_mesh_cpu( context* a_context, const mesh_data* a_mesh_data, const mesh_nodes_data* bones )
    1414        : skeletal_mesh( a_context )
    15         , m_data( a_mesh_data )
    16 {
    17         const raw_data_channel* pnt_chan = a_mesh_data->get_channel<md5_vtx_pnt>();
    18         m_pntdata.assign( reinterpret_cast<const md5_vtx_pnt*>( pnt_chan->data ), pnt_chan->count );
     15{
     16        const raw_data_channel* pnt_chan   = a_mesh_data->get_channel<md5_vtx_pnt>();
     17        const raw_data_channel* pntiw_chan = a_mesh_data->get_channel<md5_vtx_pntiw>();
     18
     19        m_pntdata.assign( reinterpret_cast<const md5_vtx_pnt*>( pnt_chan->data ), pnt_chan->element_count() );
    1920        m_bone_offset.resize( bones->get_count() );
    2021        m_transform.resize( bones->get_count() );
     
    2425                m_bone_offset[i] = transform( bones->get_node(i)->transform );
    2526        }
     27
    2628        m_vtx_data  = a_mesh_data->get_channel_data<md5_vtx_pntiw>();
    2729        m_indices   = a_mesh_data->get_count();
    28         m_va        = a_context->create_vertex_array( a_mesh_data,
    29 STREAM_DRAW );
     30        m_va        = a_context->create_vertex_array();
     31
     32        array_view< raw_data_channel* > channels = a_mesh_data->get_raw_channels();
     33        for ( uint32 ch = 0; ch < channels.size(); ++ch )
     34        {
     35                const raw_data_channel* channel = channels[ch];
     36                if ( channel->element_count() > 0 && channel != pntiw_chan )
     37                {
     38                        const data_descriptor& desc = channel->descriptor();
     39                        if ( desc[0].vslot == slot::INDEX )
     40                        {
     41                                buffer b = a_context->get_device()->create_buffer( INDEX_BUFFER, STREAM_DRAW, channel->raw_size(), channel->raw_data() );
     42                                a_context->set_index_buffer( m_va, b, desc[0].etype, true );
     43                        }
     44                        else
     45                        {
     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 );
     48                        }
     49                }
     50        }
     51
    3052        m_pbuffer   = a_context->find_buffer( m_va, slot::POSITION );
    3153}
Note: See TracChangeset for help on using the changeset viewer.