
Vertex Array Object
By: a guest on
Apr 1st, 2012 | syntax:
C++ | size: 2.18 KB | hits: 36 | expires: Never
#include "TexturedQuad.h"
GLfloat quadVertices[] = {-0.5f,0.5f,0.0f,
-0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0f,
0.5f,0.5f,0.0f};
GLfloat quadNormals[] = { 0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f};
GLfloat quadTexCoords[] = {0.0f,0.0f,
0.0f,1.0f,
1.0f,1.0f,
1.0f,0.0f};
GLuint quadIndices[] = {0, 1, 2, 2, 3, 0};
TexturedQuad::TexturedQuad(Shader *shader)
{
this->shader = shader;
glGenVertexArrays(1, &quadArrayObjID);
glBindVertexArray(quadArrayObjID);
// VBO for vertex data
glGenBuffers(1, &quadVertexBufferObjID);
glBindBuffer(GL_ARRAY_BUFFER, quadVertexBufferObjID);
glBufferData(GL_ARRAY_BUFFER, 4*3*sizeof(GLfloat), quadVertices, GL_STATIC_DRAW);
glVertexAttribPointer(glGetAttribLocation(shader->GetProgram(), "in_Position"), 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(glGetAttribLocation(shader->GetProgram(), "in_Position"));
// VBO for normal data
glGenBuffers(1, &quadNormalBufferObjID);
glBindBuffer(GL_ARRAY_BUFFER, quadNormalBufferObjID);
glBufferData(GL_ARRAY_BUFFER, 4*3*sizeof(GLfloat), quadNormals, GL_STATIC_DRAW);
glVertexAttribPointer(glGetAttribLocation(shader->GetProgram(), "in_Normal"), 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(glGetAttribLocation(shader->GetProgram(), "in_Normal"));
// VBO for texture data
glGenBuffers(1, &quadTexCoordBufferObjID);
glBindBuffer(GL_ARRAY_BUFFER, quadTexCoordBufferObjID);
glBufferData(GL_ARRAY_BUFFER, 4*2*sizeof(GLfloat), quadTexCoords, GL_STATIC_DRAW);
glVertexAttribPointer(glGetAttribLocation(shader->GetProgram(), "in_TexCoord"), 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(glGetAttribLocation(shader->GetProgram(), "in_TexCoord"));
// Index buffer
glGenBuffers(1, &quadIndexBufferObjID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, quadIndexBufferObjID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6*sizeof(GLuint), quadIndices, GL_STATIC_DRAW);
glBindVertexArray(0);
}
void TexturedQuad::Render(GLMatrix<GLfloat> transform)
{
glBindVertexArray(quadArrayObjID);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0L);
}