diff --git a/graph/shape.cpp b/graph/shape.cpp index dabf4b9..b50cd96 100644 --- a/graph/shape.cpp +++ b/graph/shape.cpp @@ -1,151 +1,149 @@ #include "shape.h" #include <QMatrix4x4> #include <QGLShaderProgram> #include "shaderid.h" Shape::Shape(const QString& label, flags_t flags) { this->_label = label; this->flags = flags; } Shape::~Shape() { } QString Shape::label() const { return _label; } void Shape::setGLBuffer(const GLBuffer& buffer) { this->buffer = buffer; } const GLBuffer& Shape::getGLBuffer() const { return buffer; } bool Shape::isUpdating() const { return (flags & S_UPDATE) != 0; } void Shape::setUpdate(bool value) { if (value) - flags ¦= S_UPDATE; + flags |= S_UPDATE; else flags &= ~S_UPDATE; } void Shape::toggleUpdate() { flags ^= S_UPDATE; // Switch first bit of flags (Voir operateur ^(xor)) } bool Shape::isRendering() const { return (flags & S_RENDER) != 0; } bool Shape::isFillMode() const { return (flags & S_FILL_MODE) != 0; } flags_t Shape::getFlags() const { return flags; } void Shape::setRender(bool value) { if (value) - flags ¦= S_RENDER; + flags |= S_RENDER; else flags &= ~S_RENDER; } void Shape::toggleRender() { flags ^= S_RENDER; } void Shape::setFlags(flags_t flags) { this->flags = flags; } void Shape::toggleFillMode() { flags ^= S_FILL_MODE; } void Shape::setFillMode(bool value) { if (value) flags |= S_FILL_MODE; else flags &= ~S_FILL_MODE; } void Shape::render(QGLShaderProgram *shaders, QMatrix4x4 *matrix) { /* translate position */ QVector3D pos = qtVector(this->position()); matrix->translate(pos); /* set color */ shaders->setAttributeValue(ShaderID::color, buffer.color, 4, 0); /* bind buffers */ buffer.vbo.bind(); buffer.ibo.bind(); /* * enable GL_FLOAT formatting * set a ibo offset */ shaders->setAttributeBuffer(ShaderID::vertex, GL_FLOAT, 3, 0); shaders->enableAttributeArray(ShaderID::vertex); // TODO, understand why it starts from nullptr !! #define BUFFER_OFFSET(a) ((char*)nullptr + (a)) GLuint counter = 0; /* loop through GLGroups */ for (auto group : buffer.groups) { /* Finally draw onto the graphics OpenGL engine */ glDrawElements( group.primitive, group.ibo_size, GL_UNSIGNED_INT, BUFFER_OFFSET(counter)); /* Increase elements memory counter */ counter += group.ibo_size; } /* Disable GL_FLOAT formatting */ shaders->disableAttributeArray(ShaderID::vertex); /* release buffers */ buffer.vbo.release(); buffer.vbo.release(); /* re-establish position */ matrix->translate(-pos); } QVector3D qtVector(const SVector<3>& v) { return QVector3D((float)v[0], (float)v[1], (float)v[2]); } - ->>>>>>> ancarola