2 #include "GeometryVBO.h"
4 #include "Shader/ShaderInterface.h"
6 #define VBO_BUFFER_OFFSET(bytes) ((GLubyte *)NULL + (bytes))
10 GeometryVBO::GeometryVBO(void) :
11 m_Vertex(GL_ARRAY_BUFFER),
12 m_Normal(GL_ARRAY_BUFFER),
13 m_Texture(GL_ARRAY_BUFFER),
14 m_VCol(GL_ARRAY_BUFFER),
15 m_Tangents(GL_ARRAY_BUFFER),
16 m_Index(GL_ELEMENT_ARRAY_BUFFER)
20 void GeometryVBO::Release(void)
22 m_Vertex.ReleaseBufferElement();
23 m_Normal.ReleaseBufferElement();
24 m_Texture.ReleaseBufferElement();
25 m_VCol.ReleaseBufferElement();
26 m_Tangents.ReleaseBufferElement();
27 m_Index.ReleaseBufferElement();
32 void GeometryVBO::DrawVBOAll(GLenum primiType, ShaderInterface* shader)
34 if (!m_Vertex.HasBuffer())
37 glEnableClientState(GL_VERTEX_ARRAY);
39 glVertexPointer(3, GL_FLOAT, 0, VBO_BUFFER_OFFSET(0));
41 if (m_Normal.HasBuffer())
42 m_Normal.BindPtrAsNoral();
44 if (m_Texture.HasBuffer())
45 m_Texture.BindPtrAsTexcoord();
47 if (m_VCol.HasBuffer())
48 m_VCol.BindPtrAsColor();
51 if (m_Tangents.HasBuffer())
53 tbuf_id = shader->GetTangentAttribIndex();
55 m_Tangents.BindPtrAsAttrib3f(tbuf_id);
59 glDrawElements(primiType, NumTriangles * 3 * 4, GL_UNSIGNED_INT, VBO_BUFFER_OFFSET(0));
61 glDisableClientState(GL_VERTEX_ARRAY);
62 glDisableClientState(GL_NORMAL_ARRAY);
63 glDisableClientState(GL_COLOR_ARRAY);
64 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
67 glDisableVertexAttribArray(tbuf_id);