From 1b51d5ba20583ef2106b4db52e081caf5cda7832 Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 24 Jun 2025 20:10:20 +0100 Subject: [PATCH] feat: add opengl widget --- CMakeLists.txt | 4 ++-- src/gui/viewport/OpenGLWidget.cpp | 0 src/gui/viewport/OpenGLWidget.h | 31 +++++++++++++++++++++++++++++++ src/gui/viewport/Viewport.cpp | 14 ++++++++++++++ src/gui/viewport/Viewport.h | 7 +++++++ 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/gui/viewport/OpenGLWidget.cpp create mode 100644 src/gui/viewport/OpenGLWidget.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1eafd22..be05445 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ project(enzo_project) # qt -find_package(Qt6 REQUIRED COMPONENTS Core Widgets SvgWidgets) +find_package(Qt6 REQUIRED COMPONENTS Core Widgets SvgWidgets OpenGLWidgets) qt_standard_project_setup() @@ -31,7 +31,7 @@ qt_add_executable(${AppExec} src/gui/network/NodeIconGraphic.cpp ) -target_link_libraries(${AppExec} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets) +target_link_libraries(${AppExec} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets Qt6::OpenGLWidgets) target_include_directories(${AppExec} PUBLIC src) # tests diff --git a/src/gui/viewport/OpenGLWidget.cpp b/src/gui/viewport/OpenGLWidget.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/gui/viewport/OpenGLWidget.h b/src/gui/viewport/OpenGLWidget.h new file mode 100644 index 0000000..9cf586b --- /dev/null +++ b/src/gui/viewport/OpenGLWidget.h @@ -0,0 +1,31 @@ +#include +#include + +class MyGLWidget : public QOpenGLWidget +{ +public: + MyGLWidget(QWidget *parent) : QOpenGLWidget(parent) { } + +protected: + void initializeGL() override + { + // Set up the rendering context, load shaders and other resources, etc.: + QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); + f->glClearColor(0.16f, 0.16f, 0.16f, 1.0f); + } + + void resizeGL(int w, int h) override + { + // // Update projection matrix and other size related settings: + // m_projection.setToIdentity(); + // m_projection.perspective(45.0f, w / float(h), 0.01f, 100.0f); + } + + void paintGL() override + { + // Draw the scene: + QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); + f->glClear(GL_COLOR_BUFFER_BIT); + } + +}; diff --git a/src/gui/viewport/Viewport.cpp b/src/gui/viewport/Viewport.cpp index e69de29..d7f9e65 100644 --- a/src/gui/viewport/Viewport.cpp +++ b/src/gui/viewport/Viewport.cpp @@ -0,0 +1,14 @@ +#include "gui/viewport/Viewport.h" +#include +#include + +Viewport::Viewport(QWidget *parent, Qt::WindowFlags f) +: QWidget(parent, f) +{ + mainLayout_=new QVBoxLayout(); + openGLWidget_ = new MyGLWidget(this); + mainLayout_->addWidget(openGLWidget_); + + setLayout(mainLayout_); +} + diff --git a/src/gui/viewport/Viewport.h b/src/gui/viewport/Viewport.h index dc6d052..b4d5e67 100644 --- a/src/gui/viewport/Viewport.h +++ b/src/gui/viewport/Viewport.h @@ -1,8 +1,15 @@ #pragma once +#include #include +#include "gui/viewport/OpenGLWidget.h" class Viewport : public QWidget { +public: + Viewport(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); +private: + QVBoxLayout* mainLayout_; + MyGLWidget* openGLWidget_; };