File indexing completed on 2024-12-22 04:14:57
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KISGLIMAGEWIDGET_H 0008 #define KISGLIMAGEWIDGET_H 0009 0010 #include <QOpenGLWidget> 0011 #include <QOpenGLFunctions> 0012 #include <QOpenGLTexture> 0013 #include <QOpenGLShaderProgram> 0014 #include <QOpenGLVertexArrayObject> 0015 #include <QOpenGLBuffer> 0016 #include <QTransform> 0017 #include <KisGLImageF16.h> 0018 #include <opengl/KisSurfaceColorSpace.h> 0019 0020 0021 class KisGLImageWidget : public QOpenGLWidget, protected QOpenGLFunctions 0022 { 0023 Q_OBJECT 0024 public: 0025 KisGLImageWidget(QWidget *parent = nullptr); 0026 KisGLImageWidget(KisSurfaceColorSpace colorSpace, 0027 QWidget *parent = nullptr); 0028 0029 ~KisGLImageWidget(); 0030 0031 void initializeGL() override; 0032 void paintGL() override; 0033 0034 void loadImage(const KisGLImageF16 &image); 0035 0036 void paintEvent(QPaintEvent *event) override; 0037 void resizeEvent(QResizeEvent *event) override; 0038 0039 QSize sizeHint() const override; 0040 0041 public Q_SLOTS: 0042 0043 private Q_SLOTS: 0044 void slotOpenGLContextDestroyed(); 0045 0046 private: 0047 void updateVerticesBuffer(const QRect &rect); 0048 0049 private: 0050 KisGLImageF16 m_sourceImage; 0051 0052 QScopedPointer<QOpenGLShaderProgram> m_shader; 0053 QOpenGLVertexArrayObject m_vao; 0054 QOpenGLBuffer m_verticesBuffer; 0055 QOpenGLBuffer m_textureVerticesBuffer; 0056 QOpenGLTexture m_texture; 0057 0058 bool m_havePendingTextureUpdate = false; 0059 }; 0060 0061 #endif // KISGLIMAGEWIDGET_H