8#include <QtOpenGL/qtopenglglobal.h>
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>
20typedef unsigned int GLuint;
26class QOpenGLDebugLogger;
27class QOpenGLDebugLoggerPrivate;
34 InvalidSource = 0x00000000,
35 APISource = 0x00000001,
36 WindowSystemSource = 0x00000002,
37 ShaderCompilerSource = 0x00000004,
38 ThirdPartySource = 0x00000008,
39 ApplicationSource = 0x00000010,
40 OtherSource = 0x00000020,
41 LastSource = OtherSource,
42 AnySource = 0xffffffff
44 Q_DECLARE_FLAGS(Sources, Source)
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,
60 Q_DECLARE_FLAGS(Types, Type)
63 InvalidSeverity = 0x00000000,
64 HighSeverity = 0x00000001,
65 MediumSeverity = 0x00000002,
66 LowSeverity = 0x00000004,
67 NotificationSeverity = 0x00000008,
68 LastSeverity = NotificationSeverity,
69 AnySeverity = 0xffffffff
71 Q_DECLARE_FLAGS(Severities, Severity)
73 QOpenGLDebugMessage();
74 QOpenGLDebugMessage(
const QOpenGLDebugMessage &debugMessage);
76 QOpenGLDebugMessage &operator=(
const QOpenGLDebugMessage &debugMessage);
77 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QOpenGLDebugMessage)
78 ~QOpenGLDebugMessage();
80 void swap(QOpenGLDebugMessage &other)
noexcept { d.swap(other.d); }
82 Source source()
const;
84 Severity severity()
const;
86 QString message()
const;
88 static QOpenGLDebugMessage createApplicationMessage(
const QString &text,
90 Severity severity = NotificationSeverity,
91 Type type = OtherType);
92 static QOpenGLDebugMessage createThirdPartyMessage(
const QString &text,
94 Severity severity = NotificationSeverity,
95 Type type = OtherType);
97 bool operator==(
const QOpenGLDebugMessage &debugMessage)
const;
98 inline bool operator!=(
const QOpenGLDebugMessage &debugMessage)
const {
return !operator==(debugMessage); }
101 friend class QOpenGLDebugLogger;
102 friend class QOpenGLDebugLoggerPrivate;
103 QSharedDataPointer<QOpenGLDebugMessagePrivate> d;
107Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Sources)
108Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Types)
109Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Severities)
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);
118class QOpenGLDebugLoggerPrivate;
123 Q_PROPERTY(LoggingMode loggingMode READ loggingMode)
132 explicit QOpenGLDebugLogger(QObject *parent =
nullptr);
133 ~QOpenGLDebugLogger();
137 bool isLogging()
const;
138 LoggingMode loggingMode()
const;
140 qint64 maximumMessageLength()
const;
142 void pushGroup(
const QString &name,
144 QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource);
147 void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
148 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
149 QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
151 void enableMessages(
const QList<GLuint> &ids,
152 QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
153 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
155 void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
156 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
157 QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
159 void disableMessages(
const QList<GLuint> &ids,
160 QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
161 QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
163 QList<QOpenGLDebugMessage> loggedMessages()
const;
166 void logMessage(
const QOpenGLDebugMessage &debugMessage);
167 void startLogging(LoggingMode loggingMode = AsynchronousLogging);
171 void messageLogged(
const QOpenGLDebugMessage &debugMessage);
174 Q_DISABLE_COPY(QOpenGLDebugLogger)
175 Q_DECLARE_PRIVATE(QOpenGLDebugLogger)
176 Q_PRIVATE_SLOT(d_func(),
void _q_contextAboutToBeDestroyed())
181QT_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