diff --git a/CMakeLists.txt b/CMakeLists.txt index aea5675..fb26877 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ qt_add_executable(${AppExec} src/gui/main.cpp src/gui/Interface.cpp src/gui/viewport/Viewport.cpp + src/gui/viewport/ViewportGLWidget.cpp src/gui/network/NetworkGraphicsView.cpp src/gui/network/NetworkGraphicsScene.cpp src/gui/network/Network.cpp diff --git a/src/gui/viewport/OpenGLWidget.cpp b/src/gui/viewport/OpenGLWidget.cpp index e69de29..e69cf99 100644 --- a/src/gui/viewport/OpenGLWidget.cpp +++ b/src/gui/viewport/OpenGLWidget.cpp @@ -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); +} diff --git a/src/gui/viewport/OpenGLWidget.h b/src/gui/viewport/OpenGLWidget.h index a164897..3526ddf 100644 --- a/src/gui/viewport/OpenGLWidget.h +++ b/src/gui/viewport/OpenGLWidget.h @@ -4,105 +4,16 @@ #include #include -class MyGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_2_Core +class ViewportGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_2_Core { public: - MyGLWidget(QWidget *parent) : QOpenGLWidget(parent) { } + ViewportGLWidget(QWidget *parent) : QOpenGLWidget(parent) { } QSize sizeHint() const override { return QSize(-1, -1); } GLuint vao; GLuint shaderProgram; protected: - void initializeGL() override - { - // 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 resizeGL(int w, int h) override - { - } - - void paintGL() override - { - initializeOpenGLFunctions(); - glClear(GL_COLOR_BUFFER_BIT); - glUseProgram(shaderProgram); - glBindVertexArray(vao); - glDrawArrays(GL_TRIANGLES, 0, 3); - } - + void initializeGL() override; + void resizeGL(int w, int h) override; + void paintGL() override; }; diff --git a/src/gui/viewport/Viewport.cpp b/src/gui/viewport/Viewport.cpp index 36808c7..0d20df9 100644 --- a/src/gui/viewport/Viewport.cpp +++ b/src/gui/viewport/Viewport.cpp @@ -9,7 +9,7 @@ Viewport::Viewport(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) { mainLayout_=new QVBoxLayout(); - openGLWidget_ = new MyGLWidget(this); + openGLWidget_ = new ViewportGLWidget(this); mainLayout_->addWidget(openGLWidget_); openGLWidget_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); diff --git a/src/gui/viewport/Viewport.h b/src/gui/viewport/Viewport.h index 8eedfdf..2994da4 100644 --- a/src/gui/viewport/Viewport.h +++ b/src/gui/viewport/Viewport.h @@ -10,7 +10,7 @@ public: Viewport(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); private: QVBoxLayout* mainLayout_; - MyGLWidget* openGLWidget_; + ViewportGLWidget* openGLWidget_; void resizeEvent(QResizeEvent *event) override; }; diff --git a/src/gui/viewport/ViewportGLWidget.cpp b/src/gui/viewport/ViewportGLWidget.cpp new file mode 100644 index 0000000..5efb11b --- /dev/null +++ b/src/gui/viewport/ViewportGLWidget.cpp @@ -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); +} diff --git a/src/gui/viewport/ViewportGLWidget.h b/src/gui/viewport/ViewportGLWidget.h new file mode 100644 index 0000000..3526ddf --- /dev/null +++ b/src/gui/viewport/ViewportGLWidget.h @@ -0,0 +1,19 @@ +#include +#include +#include +#include +#include + +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; +};