#include "Object.h" #include using namespace std; Object::Object() { int i; display = true; drawType = GL_LINES; color = vec3(1.0, 0.0, 0.0); transform = mat4(1.0); return; } Object::~Object() { glDeleteBuffers(2, bufferIDs); glDeleteVertexArrays(1, &VAONumber); return; } void Object::Bind(GLuint prog) { GLint attribLoc; Init(); glGenVertexArrays(1, &VAONumber); glBindVertexArray(VAONumber); glGenBuffers(2,bufferIDs); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferIDs[0]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, index.size()*sizeof(GLushort), index.data(), GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, bufferIDs[1]); glBufferData(GL_ARRAY_BUFFER, points.size()*sizeof(Vertex), points.data(), GL_STATIC_DRAW); attribLoc = glGetAttribLocation(prog, "vPosition"); glVertexAttribPointer(attribLoc, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(offsetof(Vertex,position))); glEnableVertexAttribArray(attribLoc); attribLoc = glGetAttribLocation(prog, "vColor"); glVertexAttribPointer(attribLoc, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex) , BUFFER_OFFSET(offsetof(Vertex, color))); glEnableVertexAttribArray(attribLoc); glBindVertexArray(0); // clean up, we no longer need the data pointCount = index.size(); index.clear(); points.clear(); objectMatrixLoc = glGetUniformLocation(prog, "objectM"); return; } void Object::Display() { if (display) { DisplaySetup(); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glUniformMatrix4fv(objectMatrixLoc, 1, true, transform); glBindVertexArray(VAONumber); glDrawElements(drawType, pointCount, GL_UNSIGNED_SHORT, NULL); glBindVertexArray(0); glDisable(GL_CULL_FACE); } return; }