Krita Source Code Documentation
Loading...
Searching...
No Matches
KisOpenGLCanvasRenderer.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2015 Michael Abrahams <miabraha@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef KIS_OPENGL_CANVAS_RENDERER_H
9#define KIS_OPENGL_CANVAS_RENDERER_H
10
11#include <QtGlobal>
12
13#ifndef Q_OS_MACOS
14#include <QOpenGLFunctions>
15#else
16#include <QOpenGLFunctions_3_2_Core>
17#endif
19
20#include "kritaui_export.h"
21#include "kis_ui_types.h"
22#include "KisWraparoundAxis.h"
23
24class KisCanvas2;
27class QOpenGLShaderProgram;
28class QPainterPath;
30
31#ifndef Q_MOC_RUN
32#ifndef Q_OS_MACOS
33#define GLFunctions QOpenGLFunctions
34#else
35#define GLFunctions QOpenGLFunctions_3_2_Core
36#endif
37
38#endif
44 : private GLFunctions
45{
46public:
47 class CanvasBridge;
48
50 KisImageWSP image,
51 const KisDisplayConfig &displayConfig,
53
55
56 Q_DISABLE_COPY(KisOpenGLCanvasRenderer)
57
58public:
59 void resizeGL(int width, int height);
60 void initializeGL();
61
65 void paintCanvasOnly(const QRect &canvasImageDirtyRect, const QRect &viewportUpdateRect = QRect());
66
67private:
68 void renderCanvasGL(const QRect &updateRect);
69
70public:
71 void paintToolOutline(const KisOptimizedBrushOutline &path, const QRect &viewportUpdateRect, const int thickness = 1);
72
75
77 bool wrapAroundViewingMode() const;
78
81
82 void channelSelectionChanged(const QBitArray &channelFlags);
83 void setDisplayConfig(const KisDisplayConfig &config);
84 void finishResizingImage(qint32 w, qint32 h);
87
89
90private:
91 void setDisplayFilterImpl(QSharedPointer<KisDisplayFilter> displayFilter, bool initializing);
92
93public:
95
96 void updateConfig();
97 void updateCursorColor();
99
100private:
101 void initializeShaders();
103
104 void reportFailedShaderCompilation(const QString &context);
105 void drawBackground(const QRect &updateRect);
106 void drawImage(const QRect &updateRect);
107 void drawImageTiles(int firstCol, int lastCol, int firstRow, int lastRow, qreal scaleX, qreal scaleY, const QPoint &wrapAroundOffset);
108 void drawCheckers(const QRect &updateRect);
109 void drawGrid(const QRect &updateRect);
110
111 QRectF widgetToSurface(const QRectF &rc);
112 QRectF surfaceToWidget(const QRectF &rc);
113
114private:
115 struct Private;
116 Private * const d;
117
118 KisCanvas2 *canvas() const;
119 QOpenGLContext *context() const;
120 qreal devicePixelRatioF() const;
122 QColor borderColor() const;
123};
124
126{
128
129public:
130 CanvasBridge() = default;
131 virtual ~CanvasBridge() = default;
132
133 Q_DISABLE_COPY(CanvasBridge)
134
135protected:
136 virtual KisCanvas2 *canvas() const = 0;
137 virtual QOpenGLContext *openglContext() const = 0;
138 virtual qreal devicePixelRatioF() const = 0;
140 virtual QColor borderColor() const = 0;
141 virtual GLenum internalTextureFormat() const = 0;
142};
143
144#endif // KIS_OPENGL_CANVAS_RENDERER_H
float value(const T *src, size_t ch)
WrapAroundAxis
KisDisplayConfig This class keeps track of the color management configuration for image to display....
The KisDisplayFilter class is the base class for filters that are applied by the canvas to the projec...
virtual KisCanvas2 * canvas() const =0
virtual QColor borderColor() const =0
virtual KisCoordinatesConverter * coordinatesConverter() const =0
virtual QOpenGLContext * openglContext() const =0
virtual GLenum internalTextureFormat() const =0
virtual qreal devicePixelRatioF() const =0
QRect updateCanvasProjection(KisUpdateInfoSP info)
void setDisplayFilter(QSharedPointer< KisDisplayFilter > displayFilter)
void drawImage(const QRect &updateRect)
void drawBackground(const QRect &updateRect)
QRectF surfaceToWidget(const QRectF &rc)
void resizeGL(int width, int height)
KisOpenGLImageTexturesSP openGLImageTextures() const
void channelSelectionChanged(const QBitArray &channelFlags)
QOpenGLContext * context() const
KisUpdateInfoSP startUpdateCanvasProjection(const QRect &rc)
void paintCanvasOnly(const QRect &canvasImageDirtyRect, const QRect &viewportUpdateRect=QRect())
void setDisplayFilterImpl(QSharedPointer< KisDisplayFilter > displayFilter, bool initializing)
QRectF widgetToSurface(const QRectF &rc)
void drawImageTiles(int firstCol, int lastCol, int firstRow, int lastRow, qreal scaleX, qreal scaleY, const QPoint &wrapAroundOffset)
void drawGrid(const QRect &updateRect)
void reportFailedShaderCompilation(const QString &context)
void setDisplayConfig(const KisDisplayConfig &config)
WrapAroundAxis wrapAroundViewingModeAxis() const
KisOpenGLCanvasRenderer(CanvasBridge *canvasBridge, KisImageWSP image, const KisDisplayConfig &displayConfig, QSharedPointer< KisDisplayFilter > displayFilter)
void setWrapAroundViewingModeAxis(WrapAroundAxis value)
void drawCheckers(const QRect &updateRect)
void finishResizingImage(qint32 w, qint32 h)
void paintToolOutline(const KisOptimizedBrushOutline &path, const QRect &viewportUpdateRect, const int thickness=1)
void renderCanvasGL(const QRect &updateRect)
KisCoordinatesConverter * coordinatesConverter() const
void notifyImageColorSpaceChanged(const KoColorSpace *cs)