First triangle drawn in Qt Project
This commit is contained in:
		| @@ -2,8 +2,12 @@ | ||||
| #include "OpenGlViewer.h" | ||||
| #include "defines.h" | ||||
| #include <QKeyEvent> | ||||
| #include <QMessageBox> | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////// | ||||
| // constructor/destructor | ||||
|  | ||||
| MainWindow::MainWindow(QWidget *parent) | ||||
| 	: QMainWindow(parent) | ||||
| 	, ui (new Ui::MainWindowClass) | ||||
| @@ -16,6 +20,10 @@ MainWindow::~MainWindow() | ||||
| 	delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////// | ||||
| // private functions | ||||
|  | ||||
| void MainWindow::setupWindow() | ||||
| { | ||||
| 	ui->setupUi(this); | ||||
| @@ -26,11 +34,32 @@ void MainWindow::setupWindow() | ||||
|  | ||||
| 	this->setCentralWidget(new OpenGlViewer(this)); | ||||
|  | ||||
| 	ui->mainToolBar->addAction("File Info", this, &MainWindow::aboutFile); | ||||
|  | ||||
| 	ui->statusBar->showMessage(DEFAULT_STATUS_MESSAGE); | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////// | ||||
| // private slots | ||||
|  | ||||
| void MainWindow::openFile() | ||||
| { | ||||
| 	//TODO: Open file | ||||
| } | ||||
|  | ||||
| void MainWindow::aboutFile() | ||||
| { | ||||
| 	//TODO: Open Window with file information | ||||
| 	QMessageBox* dialog = new QMessageBox(QMessageBox::Information, WINDOW_NAME, "File Info", QMessageBox::StandardButton::Close, this, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); | ||||
| 	dialog->setDetailedText("This is the cool detailed text\n"); | ||||
| 	dialog->exec(); | ||||
| } | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////// | ||||
| // events | ||||
|  | ||||
| void MainWindow::keyPressEvent(QKeyEvent * keyEvent) | ||||
| { | ||||
| 	switch (keyEvent->key()) | ||||
|   | ||||
| @@ -1,25 +1,84 @@ | ||||
| #include "OpenGlViewer.h" | ||||
| #include "defines.h" | ||||
| #include "Vertex.h" | ||||
|  | ||||
| #include <iostream> | ||||
|  | ||||
| static const Vertex sg_vertexes[] = { | ||||
| 	Vertex(QVector3D(0.00f,  0.75f, 1.0f), QVector3D(1.0f, 0.0f, 0.0f)), | ||||
| 	Vertex(QVector3D(0.75f, -0.75f, 1.0f), QVector3D(0.0f, 1.0f, 0.0f)), | ||||
| 	Vertex(QVector3D(-0.75f, -0.75f, 1.0f), QVector3D(0.0f, 0.0f, 1.0f)) | ||||
| }; | ||||
|  | ||||
| OpenGlViewer::OpenGlViewer(QWidget *parent) | ||||
| 	: QOpenGLWidget(parent) | ||||
| { | ||||
| 	QSurfaceFormat format; | ||||
| 	format.setRenderableType(QSurfaceFormat::OpenGL); | ||||
| 	format.setProfile(QSurfaceFormat::CompatibilityProfile); | ||||
| 	format.setVersion(DEFAULT_MAJOR_VERSION, DEFAULT_MINOR_VERSION); | ||||
| 	format.setProfile(QSurfaceFormat::CoreProfile); | ||||
| 	this->setFormat(format); | ||||
|  | ||||
| 	setFormat(format); | ||||
| } | ||||
|  | ||||
| OpenGlViewer::~OpenGlViewer() | ||||
| { | ||||
| 	mVertexArray.destroy(); | ||||
| 	mVertexBuffer.destroy(); | ||||
| 	delete mProgram; | ||||
| } | ||||
|  | ||||
| void OpenGlViewer::printContextInformation() | ||||
| { | ||||
| 	QString glType; | ||||
| 	QString glVersion; | ||||
| 	QString glProfile; | ||||
|  | ||||
| 	glType = (context()->isOpenGLES()) ? "OpenGL ES" : "OpenGL"; | ||||
| 	glVersion = reinterpret_cast<const char*>(glGetString(GL_VERSION)); | ||||
|  | ||||
| #define CASE(c) case QSurfaceFormat::c: glProfile = #c; break | ||||
| 	switch (format().profile()) | ||||
| 	{ | ||||
| 		CASE(NoProfile); | ||||
| 		CASE(CoreProfile); | ||||
| 		CASE(CompatibilityProfile); | ||||
| 	} | ||||
| #undef CASE | ||||
|  | ||||
| 	std::cout << glType.toStdString() << " - " << glVersion.toStdString() << " (" << glProfile.toStdString() << ")"; | ||||
| } | ||||
|  | ||||
| void OpenGlViewer::initializeGL() | ||||
| { | ||||
| 	initializeOpenGLFunctions(); | ||||
| 	printContextInformation(); | ||||
|  | ||||
| 	//glEnable(GL_DEPTH_TEST); | ||||
| 	glClearColor(DEAFAULT_BACKGROUND); | ||||
|  | ||||
| 	mProgram = new QOpenGLShaderProgram(); | ||||
| 	mProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/simple.vert"); | ||||
| 	mProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/simple.frag"); | ||||
| 	mProgram->link(); | ||||
| 	mProgram->bind(); | ||||
|  | ||||
| 	mVertexBuffer.create(); | ||||
| 	mVertexBuffer.bind(); | ||||
| 	mVertexBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw); | ||||
| 	mVertexBuffer.allocate(sg_vertexes, sizeof(sg_vertexes)); | ||||
|  | ||||
| 	mVertexArray.create(); | ||||
| 	mVertexArray.bind(); | ||||
| 	mProgram->enableAttributeArray(0); | ||||
| 	mProgram->enableAttributeArray(1); | ||||
| 	mProgram->setAttributeBuffer(0, GL_FLOAT, Vertex::positionOffset(), Vertex::PositionTupleSize, Vertex::stride()); | ||||
| 	mProgram->setAttributeBuffer(1, GL_FLOAT, Vertex::colorOffset(), Vertex::ColorTupleSize, Vertex::stride()); | ||||
|  | ||||
| 	mVertexArray.release(); | ||||
| 	mVertexBuffer.release(); | ||||
| 	mProgram->release(); | ||||
|  | ||||
| } | ||||
|  | ||||
| void OpenGlViewer::resizeGL(int w, int h) | ||||
| @@ -30,5 +89,12 @@ void OpenGlViewer::resizeGL(int w, int h) | ||||
| void OpenGlViewer::paintGL() | ||||
| { | ||||
| 	//TODO: paint here | ||||
| 	glClear(GL_COLOR_BUFFER_BIT); | ||||
|  | ||||
| 	mProgram->bind(); | ||||
| 	mVertexArray.bind(); | ||||
| 	glDrawArrays(GL_TRIANGLES, 0, sizeof(sg_vertexes) / sizeof(sg_vertexes[0])); | ||||
| 	mVertexArray.release(); | ||||
| 	mProgram->release(); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Anakin
					Anakin