--- a/src/gl/partrenderer.cpp Wed Jan 22 00:23:29 2020 +0200 +++ b/src/gl/partrenderer.cpp Wed Jan 22 01:17:11 2020 +0200 @@ -21,34 +21,6 @@ #include <QMessageBox> #include "partrenderer.h" - -static const char* vertexShaderSource = R"( -#version 330 core - -layout(location=0) in vec3 position; -layout(location=1) in vec4 color; -out vec4 vColor; -uniform mat4 CameraTransformation; - -void main() -{ - vColor = color; - gl_Position = CameraTransformation * vec4(position, 1.0); -} -)"; - -static const char* fragmentShaderSource = R"( -#version 330 core - -in vec4 vColor; -out vec4 fColor; - -void main() -{ - fColor = vColor; -} -)"; - PartRenderer::PartRenderer(Model* model, DocumentManager* documents, const ColorTable& colorTable, QWidget* parent) : QOpenGLWidget{parent}, model{model}, @@ -61,7 +33,6 @@ PartRenderer::~PartRenderer() { - delete this->objects.program; } void PartRenderer::initializeGL() @@ -73,62 +44,13 @@ } glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); - //this->compiler->initialize(); - //this->compiler->build(this->model, this->documents); + this->compiler->initialize(); + this->compiler->build(this->model, this->documents); this->initializeLighting(); this->initialized = true; this->rotation = QQuaternion::fromAxisAndAngle({1, 0, 0}, 30); this->rotation *= QQuaternion::fromAxisAndAngle({0, 1, 0}, 330); glLineWidth(2.0); - this->objects.program = new QOpenGLShaderProgram; - this->objects.program->create(); - this->checkForGLErrors(); - this->objects.program->addShaderFromSourceCode(QOpenGLShader::Vertex, ::vertexShaderSource); - this->checkForGLErrors(); - this->objects.program->addShaderFromSourceCode(QOpenGLShader::Fragment, ::fragmentShaderSource); - this->checkForGLErrors(); - this->objects.program->link(); - this->checkForGLErrors(); - this->objects.program->bind(); - this->checkForGLErrors(); - this->objects.buffer.create(); - this->checkForGLErrors(); - this->objects.buffer.bind(); - this->checkForGLErrors(); - this->objects.buffer.setUsagePattern(QOpenGLBuffer::StaticDraw); - this->checkForGLErrors(); - /* - GLfloat data[] = { - 20.0f, 20.0f, 6.0f, 1.0f, 0.0f, 0.0f, 1.0f, - 30.0f, 20.0f, 6.0f, 0.0f, 1.0f, 0.0f, 1.0f, - 30.0f, 30.0f, 6.0f, 0.0f, 0.0f, 1.0f, 1.0f, - }; - */ - GLfloat data[] = { - 0.00f, 0.75f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, - -0.75f, -0.75f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, - 0.75f, -0.75f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f - }; - this->objects.buffer.allocate(data, sizeof data); - this->checkForGLErrors(); - this->objects.vertexArray.create(); - this->checkForGLErrors(); - this->objects.vertexArray.bind(); - this->checkForGLErrors(); - this->objects.program->enableAttributeArray(0); - this->checkForGLErrors(); - this->objects.program->enableAttributeArray(1); - this->checkForGLErrors(); - this->objects.program->setAttributeBuffer(0, GL_FLOAT, 0, 3); - this->checkForGLErrors(); - this->objects.program->setAttributeBuffer(1, GL_FLOAT, 3, 4); - this->checkForGLErrors(); - this->objects.vertexArray.release(); - this->checkForGLErrors(); - this->objects.buffer.release(); - this->checkForGLErrors(); - this->objects.program->release(); - this->checkForGLErrors(); } /* @@ -227,38 +149,21 @@ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); break; } - this->objects.program->bind(); - this->checkForGLErrors(); - const int cameraTransformationUniform = glGetUniformLocation(this->objects.program->programId(), "CameraTransformation"); - this->checkForGLErrors(); - this->objects.program->setUniformValue(cameraTransformationUniform, rotationMatrix); - this->checkForGLErrors(); - this->objects.vertexArray.bind(); - this->checkForGLErrors(); - glDrawArrays(GL_TRIANGLES, 0, 3); - this->checkForGLErrors(); - this->objects.vertexArray.release(); - this->checkForGLErrors(); - this->objects.program->release(); - this->checkForGLErrors(); -#if 0 + this->compiler->setUniform("CameraTransformation", rotationMatrix); // Lines need to be rendered last so that anti-aliasing does not interfere with polygon rendering. renderVao(gl::ArrayClass::Triangles); renderVao(gl::ArrayClass::Quads); renderVao(gl::ArrayClass::Lines); -#endif glDisable(GL_POLYGON_OFFSET_FILL); } -void PartRenderer::renderVao(const gl::ArrayClass /*arrayClass*/) +void PartRenderer::renderVao(const gl::ArrayClass arrayClass) { - /* this->compiler->bindVertexArray(arrayClass); - const std::size_t vertexCount = this->compiler->vboSize({arrayClass, gl::VboSubclass::VertexData}) / gl::FLOATS_PER_VERTEX; + const std::size_t vertexCount = this->compiler->vboSize(arrayClass) / gl::FLOATS_PER_VERTEX; glDrawArrays(getGlTypeForArrayClass(arrayClass), 0, static_cast<GLsizei>(vertexCount)); this->compiler->releaseVertexArray(arrayClass); this->checkForGLErrors(); - */ } void PartRenderer::checkForGLErrors()