Don't like ads? PRO users don't see any ads ;-)
Guest

Vertex Array Object

By: a guest on Apr 1st, 2012  |  syntax: C++  |  size: 2.18 KB  |  hits: 36  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include "TexturedQuad.h"
  2.  
  3. GLfloat quadVertices[] = {-0.5f,0.5f,0.0f,
  4.                                                   -0.5f,-0.5f,0.0f,
  5.                                                   0.5f,-0.5f,0.0f,
  6.                                                   0.5f,0.5f,0.0f};
  7.  
  8. GLfloat quadNormals[] = { 0.0f,0.0f,1.0f,
  9.                                                   0.0f,0.0f,1.0f,
  10.                                                   0.0f,0.0f,1.0f,      
  11.                                                   0.0f,0.0f,1.0f};
  12.  
  13. GLfloat quadTexCoords[] = {0.0f,0.0f,
  14.                                                    0.0f,1.0f,
  15.                                                    1.0f,1.0f,
  16.                                                    1.0f,0.0f};
  17.  
  18. GLuint quadIndices[] = {0, 1, 2, 2, 3, 0};
  19.  
  20. TexturedQuad::TexturedQuad(Shader *shader)
  21. {
  22.         this->shader = shader;
  23.  
  24.         glGenVertexArrays(1, &quadArrayObjID); 
  25.         glBindVertexArray(quadArrayObjID);
  26.  
  27.     // VBO for vertex data
  28.         glGenBuffers(1, &quadVertexBufferObjID);
  29.         glBindBuffer(GL_ARRAY_BUFFER, quadVertexBufferObjID);
  30.         glBufferData(GL_ARRAY_BUFFER, 4*3*sizeof(GLfloat), quadVertices, GL_STATIC_DRAW);
  31.         glVertexAttribPointer(glGetAttribLocation(shader->GetProgram(), "in_Position"), 3, GL_FLOAT, GL_FALSE, 0, 0);
  32.         glEnableVertexAttribArray(glGetAttribLocation(shader->GetProgram(), "in_Position"));
  33.  
  34.     // VBO for normal data
  35.         glGenBuffers(1, &quadNormalBufferObjID);
  36.         glBindBuffer(GL_ARRAY_BUFFER, quadNormalBufferObjID);
  37.         glBufferData(GL_ARRAY_BUFFER, 4*3*sizeof(GLfloat), quadNormals, GL_STATIC_DRAW);
  38.         glVertexAttribPointer(glGetAttribLocation(shader->GetProgram(), "in_Normal"), 3, GL_FLOAT, GL_FALSE, 0, 0);
  39.         glEnableVertexAttribArray(glGetAttribLocation(shader->GetProgram(), "in_Normal"));
  40.  
  41.         // VBO for texture data
  42.         glGenBuffers(1, &quadTexCoordBufferObjID);
  43.     glBindBuffer(GL_ARRAY_BUFFER, quadTexCoordBufferObjID);
  44.     glBufferData(GL_ARRAY_BUFFER, 4*2*sizeof(GLfloat), quadTexCoords, GL_STATIC_DRAW);
  45.     glVertexAttribPointer(glGetAttribLocation(shader->GetProgram(), "in_TexCoord"), 2, GL_FLOAT, GL_FALSE, 0, 0);
  46.     glEnableVertexAttribArray(glGetAttribLocation(shader->GetProgram(), "in_TexCoord"));
  47.  
  48.         // Index buffer
  49.     glGenBuffers(1, &quadIndexBufferObjID);
  50.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, quadIndexBufferObjID);
  51.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6*sizeof(GLuint), quadIndices, GL_STATIC_DRAW);
  52.         glBindVertexArray(0);
  53. }
  54.  
  55. void TexturedQuad::Render(GLMatrix<GLfloat> transform)
  56. {
  57.         glBindVertexArray(quadArrayObjID);
  58.         glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0L);
  59. }