Changeset 417 for trunk/src/gfx


Ignore:
Timestamp:
07/10/15 19:50:47 (10 years ago)
Author:
epyon
Message:
  • further access restrictions improvements
Location:
trunk/src/gfx
Files:
3 edited

Legend:

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

    r416 r417  
    2323        , m_active( false )
    2424{
    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;
    3740        m_pbuffer      = buffer();
    3841}
     
    4750        if ( !m_tag_map ) return transform();
    4851        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;
    5053        NV_ASSERT( data, "TAG FAIL" );
    5154        transform last = data->get_raw_transform( m_last_frame );
     
    183186        : keyframed_mesh( a_context, a_data, a_tag_map )
    184187{
     188        const raw_data_channel* vchannel = m_has_tangent ? a_data->get_channel< vertex_pnt >() : a_data->get_channel< vertex_pn >();
    185189        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() );
    188192
    189193        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() );
    191195
    192196        const raw_data_channel* index_channel = m_mesh_data->get_channel( slot::INDEX );
  • trunk/src/gfx/mesh_creator.cc

    r416 r417  
    1919        {
    2020                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 );
    2525                max_frames = nv::max<uint32>( count, max_frames );
    2626                if ( pkeys && pkeys->size() > 0 && keys && keys->size() > 0 )
    2727                {
    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 );
    2929                        nv_key_transform* channel = channel_creator.data();
    3030                        const nv_key_transform* pchannel = pkeys->get_channel(0)->data_cast< nv_key_transform >();
     
    5555        for ( size_t i = 0; i < m_data->get_count(); ++i )
    5656        {
    57                 key_data* old_keys = m_data->m_nodes[i].data;
     57                key_channel_set* old_keys = m_data->m_nodes[i].data;
    5858                if ( old_keys && old_keys->size() > 0 )
    5959                {
     
    6969                        }
    7070
    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
    7375                        data_descriptor final_key = old_keys->get_final_key();
    7476
     
    8789
    8890                        delete old_keys;
    89                         new_keys->add_key_channel( kt_channel.release() );
    9091                        m_data->m_nodes[i].data = new_keys;
    9192                }
     
    105106                if ( node.data )
    106107                {
    107                         key_data* kdata  = node.data;
     108                        key_channel_set* kdata  = node.data;
    108109                        for ( size_t c = 0; c < kdata->size(); ++c )
    109110                        {
    110                                 raw_data_channel_creator channel( const_cast< raw_data_channel* >( kdata->get_channel( c ) ) );
     111                                raw_data_channel_access channel( kdata, c );
    111112                                size_t key_size = channel.element_size();
    112113                                for ( size_t n = 0; n < channel.size(); ++n )
     
    127128        for ( uint32 c = 0; c < m_data->size(); ++c )
    128129        {
    129                 raw_data_channel_creator channel( m_data, c );
     130                raw_data_channel_access channel( m_data, c );
    130131                const data_descriptor&  desc    = channel.descriptor();
    131132                uint8* raw_data = channel.raw_data();
     
    175176        size_t n_offset = 0;
    176177        if ( ch_n == -1 ) return;
    177         raw_data_channel_creator channel( m_data, unsigned( ch_n ) );
     178        raw_data_channel_access channel( m_data, unsigned( ch_n ) );
    178179        for ( const auto& cslot : channel.descriptor() )
    179180                if ( cslot.vslot == slot::NORMAL )
     
    251252        }
    252253
    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 );
    255256        vec3* tangents2             = new vec3[ p_channel->size() ];
    256257        uint32 tri_count = i_channel ? i_channel->size() / 3 : t_channel->size() / 3;
     
    333334        delete tangents2;
    334335
    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;
    337338}
    338339
     
    343344        desc.append( b->descriptor() );
    344345
    345         raw_data_channel_creator result( desc, a->size() );
     346        raw_data_channel* result = data_channel_creator::create( desc, a->size() );
    346347        for ( uint32 i = 0; i < a->size(); ++i )
    347348        {
    348                 raw_copy_n( a->raw_data() + i * a->element_size(), a->element_size(), result.raw_data() + i*desc.element_size() );
    349                 raw_copy_n( b->raw_data() + i * b->element_size(), b->element_size(), result.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;
    353354}
    354355
     
    360361        size_t vtx_size = a->element_size();
    361362
    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();
    363365
    364366        if ( frame_count == 1 )
    365367        {
    366368                size_t a_size = vtx_size * a->size();
    367                 raw_copy_n( a->raw_data(), a_size, result.raw_data() );
    368                 raw_copy_n( b->raw_data(), vtx_size * b->size(), result.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 );
    369371        }
    370372        else
     
    377379                for ( size_t i = 0; i < frame_count; ++i )
    378380                {
    379                         raw_copy_n( a->raw_data() + pos_a, frame_size_a, result.raw_data() + pos );
    380                         raw_copy_n( b->raw_data() + pos_b, frame_size_b, result.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;
    381383                        pos_b += frame_size_b;
    382384                        pos   += frame_size_a + frame_size_b;
     
    384386        }
    385387
    386         return result.release();
     388        return result;
    387389}
    388390
     
    422424                bool old_is_index = old->size() > 0 && old->descriptor()[0].vslot == slot::INDEX;
    423425                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 ) );
    425427                NV_ASSERT( data[c], "Merge problem!" );
    426428                if ( old_is_index )
     
    431433                                {
    432434                                        NV_ASSERT( size + osize < uint16(-1), "Index out of range!" );
    433                                         raw_data_channel_creator ic( data[c] );
     435                                        raw_data_channel_access ic( data[c] );
    434436                                        uint16* indexes = reinterpret_cast<uint16*>( ic.raw_data() );
    435437                                        for ( uint16 i = uint16( old->size() ); i < ic.size(); ++i )
     
    440442                        case UINT   :
    441443                                {
    442                                         raw_data_channel_creator ic( data[c] );
     444                                        raw_data_channel_access ic( data[c] );
    443445                                        uint32* indexes = reinterpret_cast<uint32*>( ic.raw_data() );
    444446                                        for ( uint32 i = old->size(); i < ic.size(); ++i )
  • trunk/src/gfx/skeletal_mesh.cc

    r416 r417  
    4545                        {
    4646                                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 );
    4848                        }
    4949                }
Note: See TracChangeset for help on using the changeset viewer.