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