Changeset 304 for trunk/tests
- Timestamp:
- 08/11/14 11:56:19 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/md3_test/md3_test.cc
r239 r304 7 7 #include <nv/interface/context.hh> 8 8 #include <nv/interface/window.hh> 9 #include <nv/interface/program.hh>10 #include <nv/interface/texture2d.hh>11 9 #include <nv/interface/mesh_loader.hh> 12 10 #include <nv/io/c_file_system.hh> … … 22 20 #include <glm/gtx/matrix_interpolation.hpp> 23 21 24 bool GPU_ANIMATION = false;22 bool GPU_ANIMATION = true; 25 23 26 24 class mesh_part 27 25 { 28 26 public: 29 mesh_part( const std::string& path, nv:: program* program, nv::window* window )27 mesh_part( const std::string& path, nv::window* window ) 30 28 { 31 29 NV_PROFILE("mesh_construct"); … … 42 40 { 43 41 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(); 46 43 } 47 44 delete loader; 48 45 m_entry = nullptr; 49 46 { 50 47 NV_PROFILE("create_mesh"); 51 48 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() ); 53 50 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(); 62 59 } 63 60 64 61 void setup_animation( nv::uint32 start, nv::uint32 stop, nv::uint32 fps, bool loop ) 65 62 { 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 ) 70 69 { 71 70 m_mesh->update( ms ); 71 m_mesh->update_animation( m_entry, ms ); 72 72 m_mesh->update( program ); 73 73 } … … 82 82 ~mesh_part() 83 83 { 84 delete m_tag_map;85 84 delete m_mesh_data; 86 85 delete m_mesh; … … 88 87 89 88 private: 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; 93 92 }; 94 93 … … 102 101 protected: 103 102 nv::device* m_device; 103 nv::context* m_context; 104 104 nv::window* m_window; 105 nv::texture 2d*m_diffuse;106 nv::texture 2d*m_diffuse_weapon;105 nv::texture m_diffuse; 106 nv::texture m_diffuse_weapon; 107 107 108 108 nv::clear_state m_clear_state; … … 114 114 mesh_part* m_head; 115 115 mesh_part* m_weapon; 116 nv::program *m_program;116 nv::program m_program; 117 117 }; 118 118 … … 120 120 { 121 121 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(); 124 125 125 126 nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::REPEAT ); 126 127 nv::image_data* data = m_device->create_image_data( "data/doom.png" ); 127 m_diffuse = m_device->create_texture 2d( 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() ); 128 129 delete data; 129 130 data = m_device->create_image_data( "data/rocketl.png" ); 130 m_diffuse_weapon = m_device->create_texture 2d( 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() ); 131 132 delete data; 132 133 … … 148 149 nv::slurp( "obj.frag" ) 149 150 ); 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 ); 154 155 return true; 155 156 } … … 176 177 ticks = m_device->get_ticks(); 177 178 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 ); 180 181 { 181 182 NV_PROFILE( "clear" ); 182 m_ window->get_context()->clear( m_clear_state );183 m_context->clear( m_clear_state ); 183 184 } 184 185 … … 194 195 m_scene_state.get_camera().set_perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f); 195 196 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) ); 200 201 } 201 202 … … 208 209 209 210 //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 ); 211 212 m_scene_state.set_model( model ); 212 213 m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_torso->get_mesh() ); 213 214 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 ); 215 216 m_scene_state.set_model( head ); 216 217 m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_head->get_mesh() ); 217 218 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 ); 219 220 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() ); 222 223 223 224 } … … 273 274 application::~application() 274 275 { 275 delete m_program;276 m_device->release( m_program ); 276 277 delete m_torso; 277 278 delete m_legs; 278 279 delete m_head; 279 280 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 ); 282 283 delete m_window; 283 284 delete m_device;
Note: See TracChangeset
for help on using the changeset viewer.