Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_opengl.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Adrian Page <adrian@pagenet.plus.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KIS_OPENGL_H_
7#define KIS_OPENGL_H_
8
11#include <QtGlobal>
12#include <QFlags>
13
14#include <QSurfaceFormat>
15#include <QStringList>
16
17#include "kis_config.h"
18#include <KisQStringListFwd.h>
19
20#include "kritaui_export.h"
21
22class QOpenGLContext;
23class QString;
24class QSurfaceFormat;
25
30class KRITAUI_EXPORT KisOpenGL
31{
32public:
35 BilinearFilterMode, // linear, no mipmap
36 TrilinearFilterMode, // LINEAR_MIPMAP_LINEAR
37 HighQualityFiltering // Mipmaps + custom shader
38 };
39
41 RendererNone = 0x00,
42 RendererAuto = 0x01,
43 RendererDesktopGL = 0x02,
44 RendererOpenGLES = 0x04,
45 RendererSoftware = 0x08
46 };
47 Q_DECLARE_FLAGS(OpenGLRenderers, OpenGLRenderer)
48
50 AngleRendererDefault = 0x0000,
51 AngleRendererD3d11 = 0x0002,
52 AngleRendererD3d9 = 0x0004,
53 AngleRendererD3d11Warp = 0x0008, // "Windows Advanced Rasterization Platform"
54 };
55
56 struct KRITAUI_EXPORT RendererConfig {
57 QSurfaceFormat format;
58 AngleRenderer angleRenderer = AngleRendererDefault;
59
60 OpenGLRenderer rendererId() const;
61 };
62
64 XCB_GLX = 0,
65 XCB_EGL
66 };
67
68public:
69 static RendererConfig selectSurfaceConfig(KisOpenGL::OpenGLRenderer preferredRenderer,
70 KisConfig::RootSurfaceFormat preferredRootSurfaceFormat,
71 KisConfig::CanvasSurfaceBitDepthMode preferredCanvasSurfaceBitMode,
72 bool enableDebug);
73
74 static void setDefaultSurfaceConfig(const RendererConfig &config);
75
76 static OpenGLRenderer getCurrentOpenGLRenderer();
77 static OpenGLRenderer getQtPreferredOpenGLRenderer();
78 static OpenGLRenderers getSupportedOpenGLRenderers();
79 static OpenGLRenderer getUserPreferredOpenGLRendererConfig();
80 static void setUserPreferredOpenGLRendererConfig(OpenGLRenderer renderer);
81 static QString convertOpenGLRendererToConfig(OpenGLRenderer renderer);
82 static OpenGLRenderer convertConfigToOpenGLRenderer(QString renderer);
83
85 static void initialize();
86
88 static void initializeContext(QOpenGLContext *ctx);
89
90 static const QString &getDebugText();
91
92 static QStringList getOpenGLWarnings();
93
94 static QString currentDriver();
95 static bool supportsLoD();
96 static bool hasOpenGL3();
97 static bool hasOpenGLES();
98 static bool supportsVAO();
99
101 static bool hasOpenGL();
102
107 static bool supportsFenceSync();
108
109 static bool supportsBufferMapping();
110
111 static bool forceDisableTextureBuffers();
112 static bool shouldUseTextureBuffers(bool userPreference);
113
114 static bool useTextureBufferInvalidation();
115
122 static bool useFBOForToolOutlineRendering();
123
128 static bool needsFenceWorkaround();
129
130 static void testingInitializeDefaultSurfaceFormat();
131 static void setDebugSynchronous(bool value);
132
133 static void glInvalidateBufferData(uint buffer);
134
135 static std::optional<XcbGLProviderProtocol> xcbGlProviderProtocol();
136
137private:
138 static void fakeInitWindowsOpenGL(KisOpenGL::OpenGLRenderers supportedRenderers, KisOpenGL::OpenGLRenderer preferredByQt);
139
141
142
143};
144
145#ifdef Q_OS_WIN
146Q_DECLARE_OPERATORS_FOR_FLAGS(KisOpenGL::OpenGLRenderers);
147#endif
148
150
151#endif // KIS_OPENGL_H_
float value(const T *src, size_t ch)
Q_DECLARE_FLAGS(KisUpdaterContextSnapshotEx, KisUpdaterContextSnapshotExTag)
unsigned int uint
CanvasSurfaceBitDepthMode
Definition kis_config.h:189
static void fakeInitWindowsOpenGL(KisOpenGL::OpenGLRenderers supportedRenderers, KisOpenGL::OpenGLRenderer preferredByQt)
@ NearestFilterMode
Definition kis_opengl.h:34
@ BilinearFilterMode
Definition kis_opengl.h:35
@ TrilinearFilterMode
Definition kis_opengl.h:36
XcbGLProviderProtocol
Definition kis_opengl.h:63
Q_DECLARE_OPERATORS_FOR_FLAGS(KisBaseRectsWalker::SubtreeVisitFlags)
Q_DECLARE_METATYPE(KisPaintopLodLimitations)
QSurfaceFormat format
Definition kis_opengl.h:57