7#include <QtOpenGL/qtopenglglobal.h>
11#include <QtCore/qshareddata.h>
12#include <QtCore/qflags.h>
13#include <QtCore/qlist.h>
14#include <QtCore/qmetatype.h>
15#include <QtGui/qopenglcontext.h>
19typedef unsigned int GLuint;
25class QOpenGLDebugLogger;
26class QOpenGLDebugLoggerPrivate;
33 InvalidSource = 0x00000000,
34 APISource = 0x00000001,
35 WindowSystemSource = 0x00000002,
36 ShaderCompilerSource = 0x00000004,
37 ThirdPartySource = 0x00000008,
38 ApplicationSource = 0x00000010,
39 OtherSource = 0x00000020,
40 LastSource = OtherSource,
41 AnySource = 0xffffffff
43 Q_DECLARE_FLAGS(Sources, Source)
46 InvalidType = 0x00000000,
47 ErrorType = 0x00000001,
48 DeprecatedBehaviorType = 0x00000002,
49 UndefinedBehaviorType = 0x00000004,
50 PortabilityType = 0x00000008,
51 PerformanceType = 0x00000010,
52 OtherType = 0x00000020,
53 MarkerType = 0x00000040,
54 GroupPushType = 0x00000080,
55 GroupPopType = 0x00000100,
56 LastType = GroupPopType,
59 Q_DECLARE_FLAGS(Types, Type)
62 InvalidSeverity = 0x00000000,
63 HighSeverity = 0x00000001,
64 MediumSeverity = 0x00000002,
65 LowSeverity = 0x00000004,
66 NotificationSeverity = 0x00000008,
67 LastSeverity = NotificationSeverity,
68 AnySeverity = 0xffffffff
70 Q_DECLARE_FLAGS(Severities, Severity)
72 QOpenGLDebugMessage();
73 QOpenGLDebugMessage(
const QOpenGLDebugMessage &debugMessage);
75 QOpenGLDebugMessage &operator=(
const QOpenGLDebugMessage &debugMessage);
76 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QOpenGLDebugMessage)
77 ~QOpenGLDebugMessage();
79 void swap(QOpenGLDebugMessage &other)
noexcept { d.swap(other.d); }
81 Source source()
const;
83 Severity severity()
const;
85 QString message()
const;
87 static QOpenGLDebugMessage createApplicationMessage(
const QString &text,
89 Severity severity = NotificationSeverity,
90 Type type = OtherType);
91 static QOpenGLDebugMessage createThirdPartyMessage(
const QString &text,
93 Severity severity = NotificationSeverity,
94 Type type = OtherType);
96 bool operator==(
const QOpenGLDebugMessage &debugMessage)
const;
97 inline bool operator!=(
const QOpenGLDebugMessage &debugMessage)
const {
return !operator==(debugMessage); }
100 friend class QOpenGLDebugLogger;
101 friend class QOpenGLDebugLoggerPrivate;
102 QSharedDataPointer<QOpenGLDebugMessagePrivate> d;
106Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Sources)
107Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Types)
108Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Severities)
110#ifndef QT_NO_DEBUG_STREAM
111Q_OPENGL_EXPORT QDebug operator<<(QDebug debug,
const QOpenGLDebugMessage &message);
112Q_OPENGL_EXPORT
QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Source source);
113Q_OPENGL_EXPORT
QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Type type);
114Q_OPENGL_EXPORT
QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Severity severity);
117class QOpenGLDebugLoggerPrivate;
122 Q_PROPERTY(LoggingMode loggingMode READ loggingMode)
131 explicit QOpenGLDebugLogger(QObject *parent =
nullptr);
132 ~QOpenGLDebugLogger();
136 bool isLogging()
const;
137 LoggingMode loggingMode()
const;
139 qint64 maximumMessageLength()
const;
141 void pushGroup(
const QString &name,
143 QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource);
146 void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
147 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
148 QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
150 void enableMessages(
const QList<GLuint> &ids,
151 QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
152 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
154 void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
155 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
156 QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
158 void disableMessages(
const QList<GLuint> &ids,
159 QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
160 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
162 QList<QOpenGLDebugMessage> loggedMessages()
const;
165 void logMessage(
const QOpenGLDebugMessage &debugMessage);
166 void startLogging(LoggingMode loggingMode = AsynchronousLogging);
170 void messageLogged(
const QOpenGLDebugMessage &debugMessage);
173 Q_DISABLE_COPY(QOpenGLDebugLogger)
174 Q_DECLARE_PRIVATE(QOpenGLDebugLogger)
175 Q_PRIVATE_SLOT(d_func(),
void _q_contextAboutToBeDestroyed())
180QT_DECL_METATYPE_EXTERN(QOpenGLDebugMessage, Q_OPENGL_EXPORT)
The QOpenGLDebugLogger enables logging of OpenGL debugging messages.
QOpenGLDebugMessagePrivate()
The QOpenGLDebugMessage class wraps an OpenGL debug message.
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
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