source: trunk/nv/interface/device.hh @ 153

Last change on this file since 153 was 153, checked in by epyon, 12 years ago
  • device & vertex_buffer - void* of data made const for const correctness
  • md3_loader - added keyframed_mesh class
File size: 2.2 KB
RevLine 
[32]1// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
2// http://chaosforge.org/
3//
4// This file is part of NV Libraries.
5// For conditions of distribution and use, see copyright notice in nv.hh
6/**
7 * @file device.hh
8 * @author Kornel Kisielewicz epyon@chaosforge.org
9 * @brief Device class
10 */
11
12#ifndef NV_DEVICE_HH
13#define NV_DEVICE_HH
14
15#include <nv/common.hh>
16#include <nv/string.hh>
[73]17#include <nv/interface/mesh.hh>
[42]18#include <nv/interface/vertex_buffer.hh>
[45]19#include <nv/interface/texture2d.hh>
[90]20#include <nv/interface/image_data.hh>
[32]21
22namespace nv
23{
24        class window;
25        class program;
26
27        class device
28        {
29        public:
30                virtual window* create_window( uint16 width, uint16 height ) = 0;
[39]31                virtual program* create_program( const string& vs_source, const string& fs_source ) = 0;
[153]32                virtual vertex_buffer* create_vertex_buffer( buffer_hint hint, size_t size, const void* source = nullptr ) = 0;
33                virtual index_buffer* create_index_buffer( buffer_hint hint, size_t size, const void* source = nullptr ) = 0;
[44]34                virtual vertex_array* create_vertex_array() = 0;
[90]35                virtual image_data* create_image_data( const std::string& filename ) = 0; // temporary
[70]36                virtual texture2d* create_texture2d( ivec2 size, image_format aformat, datatype adatatype, sampler asampler, void* data = nullptr ) = 0;
[92]37                virtual uint32 get_ticks() = 0;
38                virtual void delay( uint32 ms ) = 0;
[73]39
40                virtual vertex_array* create_vertex_array( const mesh* m, const attribute_map* am, buffer_hint hint )
41                {
42                        vertex_array* result = create_vertex_array();
[101]43                        for ( auto& attr : m->get_attributes() )
[73]44                        {
45                                // TODO : error checking
46                                vertex_buffer* vb = create_vertex_buffer( hint, attr.second->get_size(), attr.second->get_data() );
47                                result->add_vertex_buffer( am->at( attr.first )->get_location(), vb, attr.second->get_base_type(), attr.second->get_components() );
48                        }
49                        if ( m->has_indices() )
50                        {
51                                const vertex_attribute_base* i = m->get_indices();
52                                index_buffer* vb = create_index_buffer( hint, i->get_size(), i->get_data() );
[116]53                                result->set_index_buffer( vb, i->get_base_type(), true );
[73]54                        }
55                        return result;
56                }
[121]57                virtual ~device() {}
[32]58        };
59
60} // namespace nv
61
62
63#endif // NV_DEVICE_HH
Note: See TracBrowser for help on using the repository browser.