Changeset 231
- Timestamp:
- 05/06/14 13:38:28 (11 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/nv/interface/animated_mesh.hh
r230 r231 35 35 }; 36 36 37 class animated_mesh 37 class animated_mesh : public mesh_interface 38 38 { 39 39 public: 40 animated_mesh( context* a_context ) : m_context( a_context ), m_va( nullptr) {}40 animated_mesh() {} 41 41 virtual void run_animation( animation_entry* ) {} 42 virtual void update( uint32 ) {}43 virtual void update( program* ) {}44 42 virtual transform get_tag( const std::string& ) const { return transform(); } 45 virtual nv::vertex_array* get_vertex_array() const { return m_va; }46 virtual size_t get_index_count() const { return 0; }47 virtual nv::primitive get_primitive_type() { return nv::TRIANGLES; }48 virtual ~animated_mesh() {}49 protected:50 context* m_context;51 vertex_array* m_va;52 43 }; 53 44 -
trunk/nv/interface/context.hh
r157 r231 32 32 }; 33 33 34 class mesh_interface 35 { 36 public: 37 mesh_interface() : m_va( nullptr ) {} 38 explicit mesh_interface( vertex_array* array ) : m_va( array ) {} 39 virtual void update( uint32 ) {} 40 virtual void update( program* ) {} 41 virtual nv::vertex_array* get_vertex_array() const { return m_va; } 42 virtual size_t get_index_count() const { return 0; } 43 virtual nv::primitive get_primitive_type() { return nv::TRIANGLES; } 44 virtual ~mesh_interface() {} 45 protected: 46 vertex_array* m_va; 47 }; 48 34 49 class device; 35 50 class context … … 40 55 // temporary 41 56 virtual void draw( primitive prim, const render_state& rs, program* p, vertex_array* va, size_t count ) = 0; 57 virtual void draw( const render_state& rs, program* p, mesh_interface* mesh ) 58 { 59 draw( mesh->get_primitive_type(), rs, p, mesh->get_vertex_array(), mesh->get_index_count() ); 60 } 61 42 62 virtual void apply_render_state( const render_state& state ) = 0; 43 63 virtual const ivec4& get_viewport() = 0; -
trunk/src/gfx/keyframed_mesh.cc
r230 r231 16 16 17 17 keyframed_mesh::keyframed_mesh( context* a_context, mesh_data* a_data ) 18 : animated_mesh( a_context)18 : animated_mesh() 19 19 , m_data( a_data ) 20 20 , m_start_frame( false ) … … 28 28 , m_active( false ) 29 29 { 30 m_va = m_context->get_device()->create_vertex_array();30 m_va = a_context->get_device()->create_vertex_array(); 31 31 } 32 32 … … 126 126 m_loc_next_normal = a_program->get_attribute( "nv_next_normal" )->get_location(); 127 127 128 vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ) * m_data->get_frame_count(), (void*)m_data->get_positions().data() );128 vb = a_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ) * m_data->get_frame_count(), (void*)m_data->get_positions().data() ); 129 129 m_va->add_vertex_buffer( m_loc_next_position, vb, nv::FLOAT, 3, 0, 0, false ); 130 130 m_va->add_vertex_buffer( nv::POSITION, vb, nv::FLOAT, 3 ); 131 131 132 vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ) * m_data->get_frame_count(), (void*)m_data->get_normals().data() );132 vb = a_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ) * m_data->get_frame_count(), (void*)m_data->get_normals().data() ); 133 133 m_va->add_vertex_buffer( m_loc_next_normal, vb, nv::FLOAT, 3, 0, 0, false ); 134 134 m_va->add_vertex_buffer( nv::NORMAL, vb, nv::FLOAT, 3 ); 135 135 136 vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec2 ), (void*)m_data->get_texcoords().data() );136 vb = a_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec2 ), (void*)m_data->get_texcoords().data() ); 137 137 m_va->add_vertex_buffer( nv::slot::TEXCOORD, vb, nv::FLOAT, 2 ); 138 nv::index_buffer* ib = m_context->get_device()->create_index_buffer( nv::STATIC_DRAW, m_data->get_index_count() * sizeof( nv::uint32 ), (void*)m_data->get_indices().data() );138 nv::index_buffer* ib = a_context->get_device()->create_index_buffer( nv::STATIC_DRAW, m_data->get_index_count() * sizeof( nv::uint32 ), (void*)m_data->get_indices().data() ); 139 139 m_va->set_index_buffer( ib, nv::UINT, true ); 140 140 } … … 163 163 : keyframed_mesh( a_context, a_data ) 164 164 { 165 m_vb_position = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ), (void*)m_data->get_position_frame(0) );165 m_vb_position = a_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ), (void*)m_data->get_position_frame(0) ); 166 166 m_va->add_vertex_buffer( nv::slot::POSITION, m_vb_position, nv::FLOAT, 3 ); 167 167 168 m_vb_normal = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ), (void*)m_data->get_normal_frame(0) );168 m_vb_normal = a_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec3 ), (void*)m_data->get_normal_frame(0) ); 169 169 m_va->add_vertex_buffer( nv::slot::NORMAL, m_vb_normal, nv::FLOAT, 3 ); 170 170 171 171 nv::vertex_buffer* vb; 172 vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec2 ), (void*)m_data->get_texcoords().data() );172 vb = a_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_data->get_vertex_count() * sizeof( nv::vec2 ), (void*)m_data->get_texcoords().data() ); 173 173 m_va->add_vertex_buffer( nv::slot::TEXCOORD, vb, nv::FLOAT, 2 ); 174 174 175 nv::index_buffer* ib = m_context->get_device()->create_index_buffer( nv::STATIC_DRAW, m_data->get_index_count() * sizeof( nv::uint32 ), (void*)m_data->get_indices().data() );175 nv::index_buffer* ib = a_context->get_device()->create_index_buffer( nv::STATIC_DRAW, m_data->get_index_count() * sizeof( nv::uint32 ), (void*)m_data->get_indices().data() ); 176 176 m_va->set_index_buffer( ib, nv::UINT, true ); 177 177 -
trunk/src/gfx/skeletal_mesh.cc
r230 r231 12 12 13 13 nv::skeletal_mesh::skeletal_mesh( context* a_context, md5_loader* a_loader ) 14 : animated_mesh( a_context)14 : animated_mesh() 15 15 , m_data( a_loader ) 16 16 , m_animation( nullptr ) -
trunk/tests/md2_test/md2_test.cc
r224 r231 58 58 } 59 59 60 nv::mesh_interface* get_mesh() { return m_mesh; } 61 60 62 size_t get_max_frames() 61 63 { 62 64 return m_mesh->get_max_frames(); 63 }64 65 void draw( nv::render_state& rstate, const glm::mat4& m, const glm::mat4& v, const glm::mat4& p )66 {67 NV_PROFILE( "mesh-draw" );68 glm::mat4 mv = v * m;69 m_mesh->get_program()->set_opt_uniform( "nv_m_modelview", mv );70 m_mesh->get_program()->set_opt_uniform( "nv_m_normal", glm::transpose(glm::inverse(glm::mat3(mv))) );71 m_mesh->get_program()->set_uniform( "matrix_mvp", p * mv );72 m_mesh->draw( rstate );73 65 } 74 66 … … 80 72 81 73 private: 82 nv::mesh_data* 83 nv::keyframed_mesh _gpu* m_mesh;74 nv::mesh_data* m_mesh_data; 75 nv::keyframed_mesh* m_mesh; 84 76 }; 85 77 … … 106 98 NV_PROFILE( "app_construct" ); 107 99 m_device = new nv::gl_device(); 108 m_window = m_device->create_window( 800, 600 );100 m_window = m_device->create_window( 800, 600, false ); 109 101 110 102 nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::REPEAT ); … … 178 170 NV_PROFILE( "draw" ); 179 171 glm::mat4 model = glm::mat4(1.0f); 180 m_mesh->draw( m_render_state, model, view, projection ); 172 glm::mat4 mv = view * model; 173 m_program->set_opt_uniform( "nv_m_modelview", mv ); 174 m_program->set_opt_uniform( "nv_m_normal", glm::transpose(glm::inverse(glm::mat3(mv))) ); 175 m_program->set_uniform( "matrix_mvp", projection * mv ); 176 m_mesh->get_mesh()->update( m_program ); 177 m_window->get_context()->draw( m_render_state, m_program, m_mesh->get_mesh() ); 181 178 } 182 179 -
trunk/tests/render_test/rl.cc
r214 r231 80 80 { 81 81 m_device = new nv::gl_device(); 82 m_window = m_device->create_window( 800, 600 );82 m_window = m_device->create_window( 800, 600, false ); 83 83 84 84 nv::image_data* sprites = m_device->create_image_data( "spritesheet.png" );
Note: See TracChangeset
for help on using the changeset viewer.