diff --git a/include/panda_qt/screen.hpp b/include/panda_qt/screen.hpp index bfee19a7..1555e463 100644 --- a/include/panda_qt/screen.hpp +++ b/include/panda_qt/screen.hpp @@ -10,20 +10,7 @@ class ScreenWidget : public QWidget { Q_OBJECT public: - ScreenWidget(QWidget* parent = nullptr) : QWidget(parent) { - // Create a native window for use with our graphics API of choice - setAutoFillBackground(false); - setAttribute(Qt::WA_NativeWindow, true); - setAttribute(Qt::WA_NoSystemBackground, true); - setAttribute(Qt::WA_PaintOnScreen, true); - setAttribute(Qt::WA_KeyCompression, false); - setFocusPolicy(Qt::StrongFocus); - setMouseTracking(true); - - if (!createGLContext()) { - Helpers::panic("Failed to create GL context for display"); - } - } + ScreenWidget(QWidget* parent = nullptr); private: std::unique_ptr glContext = nullptr; diff --git a/src/panda_qt/main.cpp b/src/panda_qt/main.cpp index 723f7ef6..34e71915 100644 --- a/src/panda_qt/main.cpp +++ b/src/panda_qt/main.cpp @@ -12,6 +12,7 @@ int main(int argc, char *argv[]) { window.setWindowTitle("Alber"); ScreenWidget screen(&window); screen.show(); + screen.resize(320, 240); return app.exec(); } \ No newline at end of file diff --git a/src/panda_qt/screen.cpp b/src/panda_qt/screen.cpp index 84bfa48d..4d21bbc7 100644 --- a/src/panda_qt/screen.cpp +++ b/src/panda_qt/screen.cpp @@ -1,16 +1,45 @@ -#include "panda_qt/screen.hpp" - +#include "opengl.hpp" +// opengl.hpp must be included at the very top. This comment exists to make clang-format not reorder it :p +#include +#include +#include #include #include #include #include -#include -#include -#include + +#include "panda_qt/screen.hpp" // OpenGL screen widget, based on https://github.com/melonDS-emu/melonDS/blob/master/src/frontend/qt_sdl/main.cpp #ifdef PANDA3DS_ENABLE_OPENGL +ScreenWidget::ScreenWidget(QWidget* parent) : QWidget(parent) { + // Create a native window for use with our graphics API of choice + setAutoFillBackground(false); + setAttribute(Qt::WA_NativeWindow, true); + setAttribute(Qt::WA_NoSystemBackground, true); + setAttribute(Qt::WA_PaintOnScreen, true); + setAttribute(Qt::WA_KeyCompression, false); + setFocusPolicy(Qt::StrongFocus); + setMouseTracking(true); + + if (!createGLContext()) { + Helpers::panic("Failed to create GL context for display"); + } + + // Make our context current to use it + glContext->MakeCurrent(); + // Enable VSync for now + glContext->SetSwapInterval(1); + + OpenGL::setViewport(320, 240); + OpenGL::setClearColor(1.0, 0.0, 0.0, 1.0); + OpenGL::clearColor(); + + // Swap buffers to display our red as a test + glContext->SwapBuffers(); +} + bool ScreenWidget::createGLContext() { // List of GL context versions we will try. Anything 4.1+ is good static constexpr std::array versionsToTry = {