Changeset 353 for trunk


Ignore:
Timestamp:
04/15/15 14:54:00 (10 years ago)
Author:
epyon
Message:
  • minor fixes
Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/engine/particle_engine.hh

    r347 r353  
    161161        public:
    162162                particle_engine( context* a_context );
     163                void reset();
    163164                void load( lua::table_guard& table );
    164165                void draw( particle_system system, const render_state& rs, const scene_state& ss );
     
    171172                ~particle_engine();
    172173        private:
     174                void clear();
    173175                void register_standard_emmiters();
    174176                void register_standard_affectors();
     
    189191                vec3     m_inv_view_dir;
    190192                vec3     m_camera_pos;
     193                uint32   m_last_update;
    191194
    192195                handle_store< particle_system_info, particle_system >      m_systems;
  • trunk/src/engine/particle_engine.cc

    r323 r353  
    461461        m_program_local = m_device->create_program( nv_particle_engine_vertex_shader_local, nv_particle_engine_fragment_shader );
    462462        m_program_world = m_device->create_program( nv_particle_engine_vertex_shader_world, nv_particle_engine_fragment_shader );
     463        m_last_update = 0;
    463464
    464465        register_standard_emmiters();
     
    482483        {
    483484                info->emmiters[i].active      = true;
    484                 info->emmiters[i].last_create = 0;
    485                 info->emmiters[i].next_toggle = random::get().urange( data->emmiters[i].duration_min, data->emmiters[i].duration_max );
     485                info->emmiters[i].last_create = float( m_last_update );
     486                if ( data->emmiters[i].duration_max == 0 )
     487                        info->emmiters[i].next_toggle = 0;
     488                else
     489                        info->emmiters[i].next_toggle = m_last_update + random::get().urange( data->emmiters[i].duration_min, data->emmiters[i].duration_max );
     490
    486491        }
    487492
     
    492497                (particle_vtx*)info->quads, data->quota*6, STREAM_DRAW );
    493498        info->vtx_buffer = m_context->find_buffer( info->vtx_array, slot::POSITION );
    494         info->last_update = 0;
     499        info->last_update = m_last_update;
    495500        info->test = false;
    496501//      result->m_own_va      = true;
     
    511516nv::particle_engine::~particle_engine()
    512517{
     518        clear();
    513519        m_device->release( m_program_world );
    514520        m_device->release( m_program_local );
    515521}
     522
     523void nv::particle_engine::reset()
     524{
     525        clear();
     526        register_standard_emmiters();
     527        register_standard_affectors();
     528}
     529
     530void nv::particle_engine::clear()
     531{
     532        while ( m_systems.size() > 0 )
     533                release( m_systems.get_handle( 0 ) );
     534        m_emmiters.clear();
     535        m_affectors.clear();
     536        m_names.clear();
     537        m_data.clear();
     538        m_last_update = 0;
     539}
     540
    516541
    517542void nv::particle_engine::release( particle_system system )
     
    531556{
    532557        particle_system_info* info = m_systems.get( system );
     558        m_last_update += ms;
    533559        if ( info )
    534560        {
     
    538564                m_inv_view_dir = glm::normalize(-s.get_camera().get_direction());
    539565
    540                 update_emmiters( info, ms );
    541                 destroy_particles( info, ms );
    542                 create_particles( info, ms );
    543                 update_particles( info, ms );
     566                update_emmiters( info, m_last_update );
     567                destroy_particles( info, m_last_update );
     568                create_particles( info, m_last_update );
     569                update_particles( info, m_last_update );
    544570
    545571                generate_data( info );
  • trunk/src/wx/wx_canvas.cc

    r352 r353  
    1717        nv::load_gl_no_context();
    1818        wxClientDC dc( this );
     19        m_render = true;
    1920        m_wm = new nv::sdl::window_manager;
    2021        m_device = new nv::gl_device();
Note: See TracChangeset for help on using the changeset viewer.