refactor: cleanup opengl

This commit is contained in:
parker
2025-06-26 09:09:35 +01:00
parent b702fd55f7
commit 89b04be318
7 changed files with 211 additions and 96 deletions

View File

@@ -22,6 +22,7 @@ qt_add_executable(${AppExec}
src/gui/main.cpp src/gui/main.cpp
src/gui/Interface.cpp src/gui/Interface.cpp
src/gui/viewport/Viewport.cpp src/gui/viewport/Viewport.cpp
src/gui/viewport/ViewportGLWidget.cpp
src/gui/network/NetworkGraphicsView.cpp src/gui/network/NetworkGraphicsView.cpp
src/gui/network/NetworkGraphicsScene.cpp src/gui/network/NetworkGraphicsScene.cpp
src/gui/network/Network.cpp src/gui/network/Network.cpp

View File

@@ -0,0 +1,91 @@
#include "gui/viewport/OpenGLWidget.h"
void ViewportGLWidget::initializeGL()
{
initializeOpenGLFunctions();
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLuint vbo;
// create buffer of vertices
glGenBuffers(1, &vbo);
// set purpose
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// store data in the buffer
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// vertex shader
const std::string vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\n";
// shader type
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
// convert source
const GLchar* vertexShaderSourceC = vertexShaderSource.c_str();
// create shader object
glShaderSource(vertexShader, 1, &vertexShaderSourceC, NULL);
// compile shader object
glCompileShader(vertexShader);
// fragment shader
const std::string fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n";
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
const GLchar* fragmentShaderSourceC = fragmentShaderSource.c_str();
glShaderSource(fragmentShader, 1, &fragmentShaderSourceC, NULL);
glCompileShader(fragmentShader);
// create shader program
shaderProgram = glCreateProgram();
// attach shaders
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
// link program
glLinkProgram(shaderProgram);
// delete shaders now that the program is complete
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (void*)0);
glEnableVertexAttribArray(0);
// unbind vertex array
glBindVertexArray(0);
QSurfaceFormat fmt = context()->format();
std::cout << "format: " << (fmt.renderableType() == QSurfaceFormat::OpenGLES ? "GLES" : "Desktop") << "\n";
std::cout << "format: " << (fmt.renderableType() == QSurfaceFormat::OpenGL ? "true" : "false") << "\n";
glClearColor(0.16f, 0.16f, 0.16f, 1.0f);
}
void ViewportGLWidget::resizeGL(int w, int h)
{
}
void ViewportGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
}

View File

@@ -4,105 +4,16 @@
#include <iostream> #include <iostream>
#include <QOpenGLFunctions_3_2_Core> #include <QOpenGLFunctions_3_2_Core>
class MyGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_2_Core class ViewportGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_2_Core
{ {
public: public:
MyGLWidget(QWidget *parent) : QOpenGLWidget(parent) { } ViewportGLWidget(QWidget *parent) : QOpenGLWidget(parent) { }
QSize sizeHint() const override { return QSize(-1, -1); } QSize sizeHint() const override { return QSize(-1, -1); }
GLuint vao; GLuint vao;
GLuint shaderProgram; GLuint shaderProgram;
protected: protected:
void initializeGL() override void initializeGL() override;
{ void resizeGL(int w, int h) override;
// Set up the rendering context, load shaders and other resources, etc.: void paintGL() override;
initializeOpenGLFunctions();
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLuint vbo;
// create buffer of vertices
glGenBuffers(1, &vbo);
// set purpose
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// store data in the buffer
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// vertex shader
const std::string vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\n";
// shader type
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
// convert source
const GLchar* vertexShaderSourceC = vertexShaderSource.c_str();
// create shader object
glShaderSource(vertexShader, 1, &vertexShaderSourceC, NULL);
// compile shader object
glCompileShader(vertexShader);
// fragment shader
const std::string fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n";
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
const GLchar* fragmentShaderSourceC = fragmentShaderSource.c_str();
glShaderSource(fragmentShader, 1, &fragmentShaderSourceC, NULL);
glCompileShader(fragmentShader);
// create shader program
shaderProgram = glCreateProgram();
// attach shaders
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
// link program
glLinkProgram(shaderProgram);
// delete shaders now that the program is complete
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (void*)0);
glEnableVertexAttribArray(0);
// unbind vertex array
glBindVertexArray(0);
QSurfaceFormat fmt = context()->format();
std::cout << "format: " << (fmt.renderableType() == QSurfaceFormat::OpenGLES ? "GLES" : "Desktop") << "\n";
std::cout << "format: " << (fmt.renderableType() == QSurfaceFormat::OpenGL ? "true" : "false") << "\n";
glClearColor(0.16f, 0.16f, 0.16f, 1.0f);
}
void resizeGL(int w, int h) override
{
}
void paintGL() override
{
initializeOpenGLFunctions();
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
}; };

View File

@@ -9,7 +9,7 @@ Viewport::Viewport(QWidget *parent, Qt::WindowFlags f)
: QWidget(parent, f) : QWidget(parent, f)
{ {
mainLayout_=new QVBoxLayout(); mainLayout_=new QVBoxLayout();
openGLWidget_ = new MyGLWidget(this); openGLWidget_ = new ViewportGLWidget(this);
mainLayout_->addWidget(openGLWidget_); mainLayout_->addWidget(openGLWidget_);
openGLWidget_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); openGLWidget_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

View File

@@ -10,7 +10,7 @@ public:
Viewport(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); Viewport(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
private: private:
QVBoxLayout* mainLayout_; QVBoxLayout* mainLayout_;
MyGLWidget* openGLWidget_; ViewportGLWidget* openGLWidget_;
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
}; };

View File

@@ -0,0 +1,93 @@
#include "gui/viewport/OpenGLWidget.h"
void ViewportGLWidget::initializeGL()
{
// Set up the rendering context, load shaders and other resources, etc.:
initializeOpenGLFunctions();
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLuint vbo;
// create buffer of vertices
glGenBuffers(1, &vbo);
// set purpose
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// store data in the buffer
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// vertex shader
const std::string vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\n";
// shader type
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
// convert source
const GLchar* vertexShaderSourceC = vertexShaderSource.c_str();
// create shader object
glShaderSource(vertexShader, 1, &vertexShaderSourceC, NULL);
// compile shader object
glCompileShader(vertexShader);
// fragment shader
const std::string fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n";
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
const GLchar* fragmentShaderSourceC = fragmentShaderSource.c_str();
glShaderSource(fragmentShader, 1, &fragmentShaderSourceC, NULL);
glCompileShader(fragmentShader);
// create shader program
shaderProgram = glCreateProgram();
// attach shaders
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
// link program
glLinkProgram(shaderProgram);
// delete shaders now that the program is complete
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (void*)0);
glEnableVertexAttribArray(0);
// unbind vertex array
glBindVertexArray(0);
QSurfaceFormat fmt = context()->format();
std::cout << "format: " << (fmt.renderableType() == QSurfaceFormat::OpenGLES ? "GLES" : "Desktop") << "\n";
std::cout << "format: " << (fmt.renderableType() == QSurfaceFormat::OpenGL ? "true" : "false") << "\n";
glClearColor(0.16f, 0.16f, 0.16f, 1.0f);
}
void ViewportGLWidget::resizeGL(int w, int h)
{
}
void ViewportGLWidget::paintGL()
{
initializeOpenGLFunctions();
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
}

View File

@@ -0,0 +1,19 @@
#include <GL/gl.h>
#include <GL/glext.h>
#include <QOpenGLWidget>
#include <iostream>
#include <QOpenGLFunctions_3_2_Core>
class ViewportGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_2_Core
{
public:
ViewportGLWidget(QWidget *parent) : QOpenGLWidget(parent) { }
QSize sizeHint() const override { return QSize(-1, -1); }
GLuint vao;
GLuint shaderProgram;
protected:
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
};