Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qopengldebug.h
Go to the documentation of this file.
1// Copyright (C) 2013 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QOPENGLDEBUG_H
6#define QOPENGLDEBUG_H
7
8#include <QtOpenGL/qtopenglglobal.h>
9
10#ifndef QT_NO_OPENGL
11
12#include <QtCore/qshareddata.h>
13#include <QtCore/qflags.h>
14#include <QtCore/qlist.h>
15#include <QtCore/qmetatype.h>
16#include <QtGui/qopenglcontext.h>
17
18#if defined(Q_QDOC)
19#undef GLuint
20typedef unsigned int GLuint;
21#endif
22
23QT_BEGIN_NAMESPACE
24
25class QDebug;
26class QOpenGLDebugLogger;
27class QOpenGLDebugLoggerPrivate;
29
30class Q_OPENGL_EXPORT QOpenGLDebugMessage
31{
32public:
33 enum Source {
34 InvalidSource = 0x00000000,
35 APISource = 0x00000001,
36 WindowSystemSource = 0x00000002,
37 ShaderCompilerSource = 0x00000004,
38 ThirdPartySource = 0x00000008,
39 ApplicationSource = 0x00000010,
40 OtherSource = 0x00000020,
41 LastSource = OtherSource, // private API
42 AnySource = 0xffffffff
43 };
44 Q_DECLARE_FLAGS(Sources, Source)
45
46 enum Type {
47 InvalidType = 0x00000000,
48 ErrorType = 0x00000001,
49 DeprecatedBehaviorType = 0x00000002,
50 UndefinedBehaviorType = 0x00000004,
51 PortabilityType = 0x00000008,
52 PerformanceType = 0x00000010,
53 OtherType = 0x00000020,
54 MarkerType = 0x00000040,
55 GroupPushType = 0x00000080,
56 GroupPopType = 0x00000100,
57 LastType = GroupPopType, // private API
58 AnyType = 0xffffffff
59 };
60 Q_DECLARE_FLAGS(Types, Type)
61
62 enum Severity {
63 InvalidSeverity = 0x00000000,
64 HighSeverity = 0x00000001,
65 MediumSeverity = 0x00000002,
66 LowSeverity = 0x00000004,
67 NotificationSeverity = 0x00000008,
68 LastSeverity = NotificationSeverity, // private API
69 AnySeverity = 0xffffffff
70 };
71 Q_DECLARE_FLAGS(Severities, Severity)
72
73 QOpenGLDebugMessage();
74 QOpenGLDebugMessage(const QOpenGLDebugMessage &debugMessage);
75
76 QOpenGLDebugMessage &operator=(const QOpenGLDebugMessage &debugMessage);
77 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QOpenGLDebugMessage)
78 ~QOpenGLDebugMessage();
79
80 void swap(QOpenGLDebugMessage &other) noexcept { d.swap(other.d); }
81
82 Source source() const;
83 Type type() const;
84 Severity severity() const;
85 GLuint id() const;
86 QString message() const;
87
88 static QOpenGLDebugMessage createApplicationMessage(const QString &text,
89 GLuint id = 0,
90 Severity severity = NotificationSeverity,
91 Type type = OtherType);
92 static QOpenGLDebugMessage createThirdPartyMessage(const QString &text,
93 GLuint id = 0,
94 Severity severity = NotificationSeverity,
95 Type type = OtherType);
96
97 bool operator==(const QOpenGLDebugMessage &debugMessage) const;
98 inline bool operator!=(const QOpenGLDebugMessage &debugMessage) const { return !operator==(debugMessage); }
99
100private:
101 friend class QOpenGLDebugLogger;
102 friend class QOpenGLDebugLoggerPrivate;
103 QSharedDataPointer<QOpenGLDebugMessagePrivate> d;
104};
105
107Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Sources)
108Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Types)
109Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Severities)
110
111#ifndef QT_NO_DEBUG_STREAM
112Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, const QOpenGLDebugMessage &message);
113Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Source source);
114Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Type type);
115Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Severity severity);
116#endif
117
118class QOpenGLDebugLoggerPrivate;
119
120class Q_OPENGL_EXPORT QOpenGLDebugLogger : public QObject
121{
122 Q_OBJECT
123 Q_PROPERTY(LoggingMode loggingMode READ loggingMode)
124
125public:
126 enum LoggingMode {
127 AsynchronousLogging,
128 SynchronousLogging
129 };
130 Q_ENUM(LoggingMode)
131
132 explicit QOpenGLDebugLogger(QObject *parent = nullptr);
133 ~QOpenGLDebugLogger();
134
135 bool initialize();
136
137 bool isLogging() const;
138 LoggingMode loggingMode() const;
139
140 qint64 maximumMessageLength() const;
141
142 void pushGroup(const QString &name,
143 GLuint id = 0,
144 QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource);
145 void popGroup();
146
147 void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
148 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
149 QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
150
151 void enableMessages(const QList<GLuint> &ids,
152 QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
153 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
154
155 void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
156 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
157 QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
158
159 void disableMessages(const QList<GLuint> &ids,
160 QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
161 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
162
163 QList<QOpenGLDebugMessage> loggedMessages() const;
164
165public Q_SLOTS:
166 void logMessage(const QOpenGLDebugMessage &debugMessage);
167 void startLogging(LoggingMode loggingMode = AsynchronousLogging);
168 void stopLogging();
169
170Q_SIGNALS:
171 void messageLogged(const QOpenGLDebugMessage &debugMessage);
172
173private:
174 Q_DISABLE_COPY(QOpenGLDebugLogger)
175 Q_DECLARE_PRIVATE(QOpenGLDebugLogger)
176 Q_PRIVATE_SLOT(d_func(), void _q_contextAboutToBeDestroyed())
177};
178
179QT_END_NAMESPACE
180
181QT_DECL_METATYPE_EXTERN(QOpenGLDebugMessage, Q_OPENGL_EXPORT)
182
183#endif // QT_NO_OPENGL
184
185#endif // QOPENGLDEBUG_H
The QOpenGLDebugLogger enables logging of OpenGL debugging messages.
The QOpenGLDebugMessage class wraps an OpenGL debug message.
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
#define USE_MANUAL_DEFS
static GLenum qt_messageTypeToGL(QOpenGLDebugMessage::Type type)
static QOpenGLDebugMessage::Severity qt_messageSeverityFromGL(GLenum severity)
static QOpenGLDebugMessage::Type qt_messageTypeFromGL(GLenum type)
static GLenum qt_messageSourceToGL(QOpenGLDebugMessage::Source source)
static GLenum qt_messageSeverityToGL(QOpenGLDebugMessage::Severity severity)
static QString qt_messageTypeToString(QOpenGLDebugMessage::Type type)
#define CONVERT_TO_GL_DEBUG_MESSAGE_CONTROL_PARAMETERS(type, source, target)
#define GET_DEBUG_PROC_ADDRESS(procName)
static QString qt_messageSourceToString(QOpenGLDebugMessage::Source source)
static QOpenGLDebugMessage::Source qt_messageSourceFromGL(GLenum source)
static QString qt_messageSeverityToString(QOpenGLDebugMessage::Severity severity)
#define GL_DEBUG_TYPE_MARKER
#define GL_DEBUG_SEVERITY_LOW
#define GL_DEBUG_SOURCE_THIRD_PARTY
#define GL_DEBUG_TYPE_PORTABILITY
#define GL_DEBUG_TYPE_OTHER
#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR
#define GL_MAX_DEBUG_MESSAGE_LENGTH
#define GL_DEBUG_TYPE_PUSH_GROUP
#define GL_DEBUG_SOURCE_APPLICATION
#define GL_DEBUG_SOURCE_OTHER
#define GL_DEBUG_SEVERITY_MEDIUM
#define GL_DEBUG_SOURCE_SHADER_COMPILER
#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR
#define GL_DEBUG_SEVERITY_NOTIFICATION
#define GL_DEBUG_TYPE_POP_GROUP
#define GL_DEBUG_SOURCE_WINDOW_SYSTEM
#define GL_DEBUG_SOURCE_API
#define GL_DEBUG_CALLBACK_USER_PARAM
#define GL_DEBUG_TYPE_ERROR
#define GL_DEBUG_CALLBACK_FUNCTION
#define GL_DEBUG_SEVERITY_HIGH
#define GL_DEBUG_OUTPUT_SYNCHRONOUS
#define GL_DEBUG_TYPE_PERFORMANCE
#define GL_DEBUG_OUTPUT