source: trunk/src/gl/gl_vertex_buffer.cc @ 99

Last change on this file since 99 was 99, checked in by epyon, 12 years ago
  • vertex_buffer - added assign by range (will change with the next commit)
  • gl_vertex_buffer - implementation of the above
  • gui element - recalculate_absolute_children() added, destructor and fix
  • object - get_id added
  • lualib_test - cleanups
File size: 2.8 KB
RevLine 
[42]1// Copyright (C) 2012-2013 Kornel Kisielewicz
2// This file is part of NV Libraries.
3// For conditions of distribution and use, see copyright notice in nv.hh
4
5#include "nv/gl/gl_vertex_buffer.hh"
6
7#include "nv/lib/gl.hh"
8#include "nv/gl/gl_enum.hh"
9
10using namespace nv;
11
12gl_vertex_buffer::gl_vertex_buffer( buffer_hint hint, int size, void* data )
13        : vertex_buffer( hint, size ), m_name()
14{
15        if (data)
16        {
17                assign( data );
18        }
19}
20
21void gl_vertex_buffer::assign( void* data )
22{
23        glBindBuffer( GL_ARRAY_BUFFER, m_name.get_value() );
24        glBufferData( GL_ARRAY_BUFFER, m_size, data, buffer_hint_to_enum( m_hint ) );
25        glBindBuffer( GL_ARRAY_BUFFER, 0);
26}
27
[99]28void gl_vertex_buffer::assign( void* data, int offset, int size )
29{
30        glBindBuffer( GL_ARRAY_BUFFER, m_name.get_value() );
31        glBufferSubData( GL_ARRAY_BUFFER, offset, size, data );
32        glBindBuffer( GL_ARRAY_BUFFER, 0);
33}
34
35
[42]36void gl_vertex_buffer::bind()
37{
38        glBindBuffer( GL_ARRAY_BUFFER, m_name.get_value() );
39}
40
41void gl_vertex_buffer::unbind()
42{
43        glBindBuffer( GL_ARRAY_BUFFER, 0 );
44}
45
46bool gl_vertex_buffer::is_valid() const
47{
48        return m_name.is_valid();
49}
[44]50
51gl_index_buffer::gl_index_buffer( buffer_hint hint, int size, void* data )
52        : index_buffer( hint, size ), m_name()
53{
54        if (data)
55        {
56                assign( data );
57        }
58}
59
60void gl_index_buffer::assign( void* data )
61{
62        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
63        glBufferData( GL_ELEMENT_ARRAY_BUFFER, m_size, data, buffer_hint_to_enum( m_hint ) );
64        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0);
65}
66
[99]67void gl_index_buffer::assign( void* data, int offset, int size )
68{
69        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
70        glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, offset, size, data );
71        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0);
72}
73
[44]74void gl_index_buffer::bind()
75{
76        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
77}
78
79void gl_index_buffer::unbind()
80{
81        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
82}
83
84bool gl_index_buffer::is_valid() const
85{
86        return m_name.is_valid();
87}
88
89gl_vertex_array::gl_vertex_array()
90{
91
92}
93
94void gl_vertex_array::bind()
95{
96        for ( vertex_buffer_attribute_map::iterator i = m_map.begin();  i != m_map.end(); ++i )
97        {
98                int location                = i->first;
99                vertex_buffer_attribute* va = i->second;
100                vertex_buffer*           vb = va->get_buffer();
101                glEnableVertexAttribArray( location );
102                vb->bind();
103                glVertexAttribPointer(
104                        location,
105                        va->get_components(),
[70]106                        nv::datatype_to_gl_enum( va->get_datatype() ),
[44]107                        GL_FALSE,
108                        va->get_stride(),
109                        (void*)va->get_offset()
110                        );
111                vb->unbind();
112        }
113
114}
115
116void gl_vertex_array::unbind()
117{
118        for ( vertex_buffer_attribute_map::iterator i = m_map.begin();  i != m_map.end(); ++i )
119        {
120                glDisableVertexAttribArray( i->first );
121        }
122}
Note: See TracBrowser for help on using the repository browser.