src/gl/partrenderer.cpp

changeset 27
c57fb7a5ffa3
parent 26
3a9e761e4faa
child 28
c92c1daf735f
--- 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()

mercurial