Changeset 304 for trunk/tests/md3_test


Ignore:
Timestamp:
08/11/14 11:56:19 (11 years ago)
Author:
epyon
Message:
  • mouse wheel support for both SDL 1.2 and 2.0
  • optional unmerged MD3 import
  • selective delete mesh form mesh_creator
  • minor fixes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/md3_test/md3_test.cc

    r239 r304  
    77#include <nv/interface/context.hh>
    88#include <nv/interface/window.hh>
    9 #include <nv/interface/program.hh>
    10 #include <nv/interface/texture2d.hh>
    119#include <nv/interface/mesh_loader.hh>
    1210#include <nv/io/c_file_system.hh>
     
    2220#include <glm/gtx/matrix_interpolation.hpp>
    2321
    24 bool GPU_ANIMATION = false;
     22bool GPU_ANIMATION = true;
    2523
    2624class mesh_part
    2725{
    2826public:
    29         mesh_part( const std::string& path, nv::program* program, nv::window* window )
     27        mesh_part( const std::string& path, nv::window* window )
    3028        {
    3129                NV_PROFILE("mesh_construct");
     
    4240                {
    4341                        NV_PROFILE("create_mesh_data");
    44                         m_mesh_data = loader->release_mesh_data();
    45                         m_tag_map   = loader->create_tag_map();
     42                        m_mesh_data = loader->release_mesh_data_pack();
    4643                }
    4744                delete loader;
    48 
     45                m_entry = nullptr;
    4946                {
    5047                        NV_PROFILE("create_mesh");
    5148                        if ( GPU_ANIMATION )
    52                                 m_mesh      = new nv::keyframed_mesh_gpu( window->get_context(), m_mesh_data, m_tag_map, program );
     49                                m_mesh      = new nv::keyframed_mesh_gpu( window->get_context(), m_mesh_data->get_mesh(0), m_mesh_data->get_nodes() );
    5350                        else
    54                                 m_mesh      = new nv::keyframed_mesh_cpu( window->get_context(), m_mesh_data, m_tag_map );
    55                 }
    56 
    57         }
    58 
    59         nv::mat4 get_transform( const std::string& tag )
    60         {
    61                 return m_mesh->get_tag( tag ).extract();
     51                                m_mesh      = new nv::keyframed_mesh_cpu( window->get_context(), m_mesh_data->get_mesh(0), m_mesh_data->get_nodes() );
     52                }
     53
     54        }
     55
     56        nv::mat4 get_transform( nv::uint32 id )
     57        {
     58                return m_mesh->get_node_transform( id ).extract();
    6259        }
    6360
    6461        void setup_animation( nv::uint32 start, nv::uint32 stop, nv::uint32 fps, bool loop )
    6562        {
    66                 m_mesh->setup_animation( start, stop, fps, loop );
    67         }
    68 
    69         void update( nv::uint32 ms, nv::program* program )
     63                delete m_entry;
     64                m_entry = new nv::animation_entry("test", loop, fps, (float)start, float(stop-1) );
     65                m_mesh->run_animation( m_entry );
     66        }
     67
     68        void update( nv::uint32 ms, nv::program program )
    7069        {
    7170                m_mesh->update( ms );
     71                m_mesh->update_animation( m_entry, ms );
    7272                m_mesh->update( program );
    7373        }
     
    8282        ~mesh_part()
    8383        {
    84                 delete m_tag_map;
    8584                delete m_mesh_data;
    8685                delete m_mesh;
     
    8887
    8988private:
    90         nv::tag_map*        m_tag_map;
    91         nv::mesh_data*      m_mesh_data;
    92         nv::keyframed_mesh* m_mesh;
     89        nv::mesh_data_pack*  m_mesh_data;
     90        nv::keyframed_mesh*  m_mesh;
     91        nv::animation_entry* m_entry;
    9392};
    9493
     
    102101protected:
    103102        nv::device*       m_device;
     103        nv::context*      m_context;
    104104        nv::window*       m_window;
    105         nv::texture2d*    m_diffuse;
    106         nv::texture2d*    m_diffuse_weapon;
     105        nv::texture       m_diffuse;
     106        nv::texture       m_diffuse_weapon;
    107107
    108108        nv::clear_state   m_clear_state;
     
    114114        mesh_part* m_head;
    115115        mesh_part* m_weapon;
    116         nv::program* m_program;
     116        nv::program m_program;
    117117};
    118118
     
    120120{
    121121        NV_PROFILE( "app_construct" );
    122         m_device = new nv::gl_device();
    123         m_window = m_device->create_window( 800, 600, false );
     122        m_device  = new nv::gl_device();
     123        m_window  = m_device->create_window( 800, 600, false );
     124        m_context = m_window->get_context();
    124125
    125126        nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::REPEAT );
    126127        nv::image_data* data = m_device->create_image_data( "data/doom.png" );
    127         m_diffuse  = m_device->create_texture2d( data->get_size(), nv::RGBA, nv::UBYTE, sampler, (void*)data->get_data() );
     128        m_diffuse  = m_device->create_texture( data->get_size(), nv::image_format( nv::RGBA, nv::UBYTE ), sampler, (void*)data->get_data() );
    128129        delete data;
    129130        data = m_device->create_image_data( "data/rocketl.png" );
    130         m_diffuse_weapon = m_device->create_texture2d( data->get_size(), nv::RGBA, nv::UBYTE, sampler, (void*)data->get_data() );
     131        m_diffuse_weapon = m_device->create_texture( data->get_size(), nv::image_format( nv::RGBA, nv::UBYTE ), sampler, (void*)data->get_data() );
    131132        delete data;
    132133
     
    148149                nv::slurp( "obj.frag" )
    149150        );
    150         m_torso   = new mesh_part( "data/upper.md3", m_program, m_window );
    151         m_legs    = new mesh_part( "data/lower.md3", m_program, m_window );
    152         m_head    = new mesh_part( "data/head.md3", m_program, m_window );
    153         m_weapon  = new mesh_part( "data/rocketl.md3", m_program, m_window );
     151        m_torso   = new mesh_part( "data/upper.md3", m_window );
     152        m_legs    = new mesh_part( "data/lower.md3", m_window );
     153        m_head    = new mesh_part( "data/head.md3", m_window );
     154        m_weapon  = new mesh_part( "data/rocketl.md3", m_window );
    154155        return true;
    155156}
     
    176177                ticks      = m_device->get_ticks();
    177178                nv::uint32 elapsed = ticks - last_ticks;
    178                 m_torso->update( elapsed, m_program );
    179                 m_legs->update( elapsed, m_program );
     179                m_torso->update( ticks, m_program );
     180                m_legs->update( ticks, m_program );
    180181                {
    181182                        NV_PROFILE( "clear" );
    182                         m_window->get_context()->clear( m_clear_state );
     183                        m_context->clear( m_clear_state );
    183184                }
    184185
     
    194195                        m_scene_state.get_camera().set_perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f);
    195196
    196                         m_diffuse->bind( 0 );
    197                         m_program->set_uniform( "light_position", glm::vec3(120.0, 120.0, 0) );
    198                         m_program->set_uniform( "light_diffuse",  glm::vec4(1.0,1.0,1.0,1.0) );
    199                         m_program->set_uniform( "light_specular", glm::vec4(1.0,1.0,1.0,1.0) );
     197                        m_context->bind( m_diffuse, nv::TEX_DIFFUSE );
     198                        m_device->set_uniform( m_program, "light_position", glm::vec3(120.0, 120.0, 0) );
     199                        m_device->set_uniform( m_program, "light_diffuse",  glm::vec4(1.0,1.0,1.0,1.0) );
     200                        m_device->set_uniform( m_program, "light_specular", glm::vec4(1.0,1.0,1.0,1.0) );
    200201                }
    201202
     
    208209
    209210                        //model = m_legs->get_transform( "tag_torso", last_legs_frame, legs_frame, legs_interpolate );
    210                         model = m_legs->get_transform( "tag_torso" );
     211                        model = m_legs->get_transform( 0 );
    211212                        m_scene_state.set_model( model );
    212213                        m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_torso->get_mesh() );
    213214
    214                         glm::mat4 head = model * m_torso->get_transform( "tag_head" ); //, last_torso_frame, torso_frame, torso_interpolate );
     215                        glm::mat4 head = model * m_torso->get_transform( 0 ); //, last_torso_frame, torso_frame, torso_interpolate );
    215216                        m_scene_state.set_model( head );
    216217                        m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_head->get_mesh() );
    217218
    218                         glm::mat4 weapon = model * m_torso->get_transform( "tag_weapon" ); //, last_torso_frame, torso_frame, torso_interpolate );
     219                        glm::mat4 weapon = model * m_torso->get_transform( 2 ); //, last_torso_frame, torso_frame, torso_interpolate );
    219220                        m_scene_state.set_model( weapon );
    220                         m_diffuse_weapon->bind( 0 );
    221                         m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_weapon->get_mesh() );
     221                        m_context->bind( m_diffuse_weapon, nv::TEX_DIFFUSE );
     222                        m_context->draw( m_render_state, m_scene_state, m_program, m_weapon->get_mesh() );
    222223
    223224                }
     
    273274application::~application()
    274275{
    275         delete m_program;
     276        m_device->release( m_program );
    276277        delete m_torso;
    277278        delete m_legs;
    278279        delete m_head;
    279280        delete m_weapon;
    280         delete m_diffuse;
    281         delete m_diffuse_weapon;
     281        m_device->release( m_diffuse );
     282        m_device->release( m_diffuse_weapon );
    282283        delete m_window;
    283284        delete m_device;
Note: See TracChangeset for help on using the changeset viewer.