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
63public:
64 static RendererConfig selectSurfaceConfig(KisOpenGL::OpenGLRenderer preferredRenderer,
65 KisConfig::RootSurfaceFormat preferredRootSurfaceFormat,
66 KisConfig::CanvasSurfaceBitDepthMode preferredCanvasSurfaceBitMode,
67 bool enableDebug);
68
69 static void setDefaultSurfaceConfig(const RendererConfig &config);
70
71 static OpenGLRenderer getCurrentOpenGLRenderer();
72 static OpenGLRenderer getQtPreferredOpenGLRenderer();
73 static OpenGLRenderers getSupportedOpenGLRenderers();
74 static OpenGLRenderer getUserPreferredOpenGLRendererConfig();
75 static void setUserPreferredOpenGLRendererConfig(OpenGLRenderer renderer);
76 static QString convertOpenGLRendererToConfig(OpenGLRenderer renderer);
77 static OpenGLRenderer convertConfigToOpenGLRenderer(QString renderer);
78
80 static void initialize();
81
83 static void initializeContext(QOpenGLContext *ctx);
84
85 static const QString &getDebugText();
86
87 static QStringList getOpenGLWarnings();
88
89 static QString currentDriver();
90 static bool supportsLoD();
91 static bool hasOpenGL3();
92 static bool hasOpenGLES();
93 static bool supportsVAO();
94
96 static bool hasOpenGL();
97
102 static bool supportsFenceSync();
103
104 static bool supportsBufferMapping();
105
106 static bool forceDisableTextureBuffers();
107 static bool shouldUseTextureBuffers(bool userPreference);
108
109 static bool useTextureBufferInvalidation();
110
117 static bool useFBOForToolOutlineRendering();
118
123 static bool needsFenceWorkaround();
124
125 static void testingInitializeDefaultSurfaceFormat();
126 static void setDebugSynchronous(bool value);
127
128 static void glInvalidateBufferData(uint buffer);
129
130private:
131 static void fakeInitWindowsOpenGL(KisOpenGL::OpenGLRenderers supportedRenderers, KisOpenGL::OpenGLRenderer preferredByQt);
132
134
135
136};
137
138#ifdef Q_OS_WIN
139Q_DECLARE_OPERATORS_FOR_FLAGS(KisOpenGL::OpenGLRenderers);
140#endif
141
142#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:167
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
Q_DECLARE_OPERATORS_FOR_FLAGS(KisBaseRectsWalker::SubtreeVisitFlags)
QSurfaceFormat format
Definition kis_opengl.h:57