Changeset 520 for trunk/src/gfx


Ignore:
Timestamp:
10/03/16 17:45:46 (9 years ago)
Author:
epyon
Message:
  • ecs updates
  • animation updates
  • ragdoll manager
  • lua has own random engine
  • several minor fixes
  • particle engine/particle group
  • shitload of other stuff
  • bullet world
Location:
trunk/src/gfx
Files:
4 edited

Legend:

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

    r509 r520  
    101101}
    102102
     103void nv::debug_data::push_wire_capsule( const transform& tr, float radius, float height )
     104{
     105        vec3 p = tr.get_position();
     106        quat o = tr.get_orientation();
     107        vec3 dir   = o * vec3( 0, 1, 0 );
     108        vec3 ldir  = o * vec3( 1, 0, 0 );
     109        vec3 h1dir = o * normalize( vec3( 1, -1, 0 ) );
     110        vec3 h2dir = o * normalize( vec3( 1, 1, 0 ) );
     111        vec3 sp1[12];
     112        vec3 sp2[12];
     113        vec3 hsp1[12];
     114        vec3 hsp2[12];
     115        for ( uint32 i = 0; i < 12; ++i )
     116        {
     117                sp1[i]  = nv::math::rotate( ldir * radius, ( float( i ) / 12.0f ) * math::two_pi<float>(), dir );
     118                hsp1[i] = nv::math::rotate( h1dir * radius, ( float( i ) / 12.0f ) * math::two_pi<float>(), dir );
     119        }
     120        for ( uint32 i = 0; i < 12; ++i )
     121        {
     122                sp2[i]  = nv::math::rotate( ldir * radius + height * dir, ( float( i ) / 12.0f ) * math::two_pi<float>(), dir );
     123                hsp2[i] = nv::math::rotate( h2dir * radius + height * dir, ( float( i ) / 12.0f ) * math::two_pi<float>(), dir );
     124        }
     125
     126        for ( uint32 i = 0; i < 12; ++i )
     127        {
     128                push_line( p + sp1[i], p + sp1[( i + 1 ) % 12], vec3( 1.0f, 0.0f, 0.0f ) );
     129                push_line( p + sp2[i], p + sp2[( i + 1 ) % 12], vec3( 0.0f, 1.0f, 0.0f ) );
     130                push_line( p + sp1[i], p + sp2[i], vec3( 0.0f, 0.0f, 1.0f ) );
     131
     132                push_line( p + hsp1[i], p + sp1[i], vec3( 0.0f, 0.0f, 1.0f ) );
     133                push_line( p + hsp1[i], p + hsp1[( i + 1 ) % 12], vec3( 1.0f, 0.0f, 0.0f ) );
     134                push_line( p + hsp2[i], p + sp2[i], vec3( 0.0f, 0.0f, 1.0f ) );
     135                push_line( p + hsp2[i], p + hsp2[( i + 1 ) % 12], vec3( 0.0f, 1.0f, 0.0f ) );
     136
     137                push_line( p + hsp1[i], p - radius * dir, vec3( 0.0f, 0.0f, 1.0f ) );
     138                push_line( p + hsp2[i], p + ( height + radius ) * dir, vec3( 0.0f, 0.0f, 1.0f ) );
     139
     140        }
     141
     142               
     143}
     144
     145
    103146nv::debug_data::~debug_data()
    104147{
  • trunk/src/gfx/gfx_terminal.cc

    r514 r520  
    8484                fgcolor = fg.get_argb32();
    8585                bgcolor = bg.get_argb32();
    86                 gylph   = uint32( ch );
    87                 NV_LOG_INFO( uint32(
    88                         ( fgcolor & uint32( 0x00FF0000 ) ) >> 16 ), "-", uint32( ( fgcolor & uint32( 0x0000FF00 ) ) >> 8 ),"-" , uint32( fgcolor & uint32( 0x000000FF ) ) );
     86                gylph   = uint32( uint8(ch) );
    8987        }
    9088};
     
    139137        m_dc.p = m_context->create_program( nv_gfx_terminal_vs, nv_gfx_terminal_fs );
    140138
    141         m_data->buffer = m_context->create_buffer( nv::UNIFORM_BUFFER, nv::DYNAMIC_DRAW, tsize.x * tsize.y * sizeof( gfx_terminal_uniform_block ), m_data->data );
     139        m_data->buffer = m_context->create_buffer( nv::UNIFORM_BUFFER, nv::STREAM_DRAW, tsize.x * tsize.y * sizeof( gfx_terminal_uniform_block ), m_data->data );
    142140        m_context->bind( m_data->buffer, 7 );
    143141        m_context->get_device()->set_opt_uniform( m_dc.p, "term_size", vec2( tsize ) );
     
    151149void gfx_terminal::update()
    152150{
    153         m_context->bind( m_data->buffer, 7 );
    154         m_context->update( m_data->buffer, m_data->data, 0, m_data->size.x * m_data->size.y * sizeof( gfx_terminal_uniform_block ) );
    155         m_update_needed = false;
     151        if ( m_update_needed )
     152        {
     153                m_context->bind( m_data->buffer, 7 );
     154                m_context->update( m_data->buffer, m_data->data, 0, m_data->size.x * m_data->size.y * sizeof( gfx_terminal_uniform_block ) );
     155                m_update_needed = false;
     156        }
    156157}
    157158
  • trunk/src/gfx/mesh_creator.cc

    r503 r520  
    8787}
    8888
     89
     90nv::aabb nv::mesh_data_creator::calculate_aabb()
     91{
     92        NV_ASSERT_ALWAYS( m_pos_channel, "No position channel found!" );
     93        vec3 minv;
     94        vec3 maxv;
     95
     96        if ( m_pos_channel->size() > 0 )
     97        {
     98                minv = *reinterpret_cast<const vec3*>( m_pos_channel->raw_data() + m_pos_offset );
     99                maxv = minv;
     100        }
     101
     102        for ( uint32 c = 0; c < m_pos_channel->size(); ++c )
     103        {
     104                vec3 v = *reinterpret_cast<const vec3*>( m_pos_channel->raw_data() + c*m_pos_channel->element_size() + m_pos_offset );
     105                minv = nv::math::min( minv, v );
     106                maxv = nv::math::max( maxv, v );
     107        }
     108        vec3 extents  = maxv - minv;
     109        vec3 hextents = extents * 0.5f;
     110        vec3 halfv    = minv + hextents;
     111        return aabb( nv::transform( halfv ), hextents );
     112}
    89113
    90114void nv::mesh_data_creator::transform( const vec3& pos, const mat3& r33, float scale /*= 1.0f */ )
  • trunk/src/gfx/skeleton_instance.cc

    r486 r520  
    182182}
    183183
     184void nv::skeleton_transforms::delocalize_rec( const data_node_tree& node_data, uint32 id, const transform& parent, const array_view< bool >& mask )
     185{
     186        transform global_mat = parent;
     187        bool b = mask[id];
     188        if ( !b )
     189                global_mat = m_transforms[id];
     190        else
     191        {
     192                global_mat *= m_transforms[id];
     193                m_transforms[id] = global_mat;
     194        }
     195        for ( auto child : node_data.children( id ) )
     196        {
     197                delocalize_rec( node_data, child, global_mat, mask );
     198        }
     199}
     200
Note: See TracChangeset for help on using the changeset viewer.