Changeset 231 for trunk


Ignore:
Timestamp:
05/06/14 13:38:28 (11 years ago)
Author:
epyon
Message:
  • further simplification of mesh classes
  • updated tests
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/interface/animated_mesh.hh

    r230 r231  
    3535        };
    3636
    37         class animated_mesh
     37        class animated_mesh : public mesh_interface
    3838        {
    3939        public:
    40                 animated_mesh( context* a_context ) : m_context( a_context ), m_va( nullptr ) {}
     40                animated_mesh() {}
    4141                virtual void run_animation( animation_entry* ) {}
    42                 virtual void update( uint32 ) {}
    43                 virtual void update( program* ) {}
    4442                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;
    5243        };
    5344
  • trunk/nv/interface/context.hh

    r157 r231  
    3232        };
    3333
     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
    3449        class device;
    3550        class context
     
    4055                // temporary
    4156                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
    4262                virtual void apply_render_state( const render_state& state ) = 0;
    4363                virtual const ivec4& get_viewport() = 0;
  • trunk/src/gfx/keyframed_mesh.cc

    r230 r231  
    1616
    1717keyframed_mesh::keyframed_mesh( context* a_context, mesh_data* a_data )
    18         : animated_mesh( a_context )
     18        : animated_mesh()
    1919        , m_data( a_data )
    2020        , m_start_frame( false )
     
    2828        , m_active( false )
    2929{
    30         m_va = m_context->get_device()->create_vertex_array();
     30        m_va = a_context->get_device()->create_vertex_array();
    3131}
    3232
     
    126126        m_loc_next_normal   = a_program->get_attribute( "nv_next_normal" )->get_location();
    127127
    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() );
    129129        m_va->add_vertex_buffer( m_loc_next_position, vb, nv::FLOAT, 3, 0, 0, false );
    130130        m_va->add_vertex_buffer( nv::POSITION, vb, nv::FLOAT, 3 );
    131131
    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() );
    133133        m_va->add_vertex_buffer( m_loc_next_normal, vb, nv::FLOAT, 3, 0, 0, false );
    134134        m_va->add_vertex_buffer( nv::NORMAL, vb, nv::FLOAT, 3 );
    135135
    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() );
    137137        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() );
    139139        m_va->set_index_buffer( ib, nv::UINT, true );
    140140}
     
    163163        : keyframed_mesh( a_context, a_data )
    164164{
    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) );
    166166        m_va->add_vertex_buffer( nv::slot::POSITION, m_vb_position, nv::FLOAT, 3 );
    167167
    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) );
    169169        m_va->add_vertex_buffer( nv::slot::NORMAL, m_vb_normal, nv::FLOAT, 3 );
    170170
    171171        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() );
    173173        m_va->add_vertex_buffer( nv::slot::TEXCOORD, vb, nv::FLOAT, 2 );
    174174
    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() );
    176176        m_va->set_index_buffer( ib, nv::UINT, true );
    177177
  • trunk/src/gfx/skeletal_mesh.cc

    r230 r231  
    1212
    1313nv::skeletal_mesh::skeletal_mesh( context* a_context, md5_loader* a_loader )
    14         : animated_mesh( a_context )
     14        : animated_mesh()
    1515        , m_data( a_loader )
    1616        , m_animation( nullptr )
  • trunk/tests/md2_test/md2_test.cc

    r224 r231  
    5858        }
    5959
     60        nv::mesh_interface* get_mesh() { return m_mesh; }
     61
    6062        size_t get_max_frames()
    6163        {
    6264                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 );
    7365        }
    7466
     
    8072
    8173private:
    82         nv::mesh_data*           m_mesh_data;
    83         nv::keyframed_mesh_gpu*  m_mesh;
     74        nv::mesh_data*       m_mesh_data;
     75        nv::keyframed_mesh*  m_mesh;
    8476};
    8577
     
    10698        NV_PROFILE( "app_construct" );
    10799        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 );
    109101
    110102        nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::REPEAT );
     
    178170                        NV_PROFILE( "draw" );
    179171                        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() );
    181178                }
    182179
  • trunk/tests/render_test/rl.cc

    r214 r231  
    8080{
    8181        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 );
    8383       
    8484        nv::image_data* sprites = m_device->create_image_data( "spritesheet.png" );
Note: See TracChangeset for help on using the changeset viewer.