// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef GLWIDGET_H #define GLWIDGET_H #include #include #include #include #include #include "logo.h" QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram) class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: GLWidget(QWidget *parent = nullptr); ~GLWidget(); static bool isTransparent() { return m_transparent; } static void setTransparent(bool t) { m_transparent = t; } QSize minimumSizeHint() const override; QSize sizeHint() const override; public slots: void setXRotation(int angle); void setYRotation(int angle); void setZRotation(int angle); void cleanup(); signals: void xRotationChanged(int angle); void yRotationChanged(int angle); void zRotationChanged(int angle); protected: void initializeGL() override; void paintGL() override; void resizeGL(int width, int height) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; private: void setupVertexAttribs(); bool m_core; int m_xRot = 0; int m_yRot = 0; int m_zRot = 0; QPoint m_lastPos; Logo m_logo; QOpenGLVertexArrayObject m_vao; QOpenGLBuffer m_logoVbo; QOpenGLShaderProgram *m_program = nullptr; int m_projMatrixLoc = 0; int m_mvMatrixLoc = 0; int m_normalMatrixLoc = 0; int m_lightPosLoc = 0; QMatrix4x4 m_proj; QMatrix4x4 m_camera; QMatrix4x4 m_world; static bool m_transparent; }; #endif