Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:11:22

0001 // Copyright (C) 2013 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QOPENGLDEBUG_H
0005 #define QOPENGLDEBUG_H
0006 
0007 #include <QtOpenGL/qtopenglglobal.h>
0008 
0009 #ifndef QT_NO_OPENGL
0010 
0011 #include <QtCore/qshareddata.h>
0012 #include <QtCore/qflags.h>
0013 #include <QtCore/qlist.h>
0014 #include <QtCore/qmetatype.h>
0015 #include <QtCore/qdebug.h>
0016 #include <QtGui/qopenglcontext.h>
0017 
0018 #if defined(Q_QDOC)
0019 #undef GLuint
0020 typedef unsigned int GLuint;
0021 #endif
0022 
0023 QT_BEGIN_NAMESPACE
0024 
0025 class QOpenGLDebugLogger;
0026 class QOpenGLDebugLoggerPrivate;
0027 class QOpenGLDebugMessagePrivate;
0028 
0029 class Q_OPENGL_EXPORT QOpenGLDebugMessage
0030 {
0031 public:
0032     enum Source {
0033         InvalidSource        = 0x00000000,
0034         APISource            = 0x00000001,
0035         WindowSystemSource   = 0x00000002,
0036         ShaderCompilerSource = 0x00000004,
0037         ThirdPartySource     = 0x00000008,
0038         ApplicationSource    = 0x00000010,
0039         OtherSource          = 0x00000020,
0040         LastSource           = OtherSource, // private API
0041         AnySource            = 0xffffffff
0042     };
0043     Q_DECLARE_FLAGS(Sources, Source)
0044 
0045     enum Type {
0046         InvalidType            = 0x00000000,
0047         ErrorType              = 0x00000001,
0048         DeprecatedBehaviorType = 0x00000002,
0049         UndefinedBehaviorType  = 0x00000004,
0050         PortabilityType        = 0x00000008,
0051         PerformanceType        = 0x00000010,
0052         OtherType              = 0x00000020,
0053         MarkerType             = 0x00000040,
0054         GroupPushType          = 0x00000080,
0055         GroupPopType           = 0x00000100,
0056         LastType               = GroupPopType, // private API
0057         AnyType                = 0xffffffff
0058     };
0059     Q_DECLARE_FLAGS(Types, Type)
0060 
0061     enum Severity {
0062         InvalidSeverity      = 0x00000000,
0063         HighSeverity         = 0x00000001,
0064         MediumSeverity       = 0x00000002,
0065         LowSeverity          = 0x00000004,
0066         NotificationSeverity = 0x00000008,
0067         LastSeverity         = NotificationSeverity, // private API
0068         AnySeverity          = 0xffffffff
0069     };
0070     Q_DECLARE_FLAGS(Severities, Severity)
0071 
0072     QOpenGLDebugMessage();
0073     QOpenGLDebugMessage(const QOpenGLDebugMessage &debugMessage);
0074 
0075     QOpenGLDebugMessage &operator=(const QOpenGLDebugMessage &debugMessage);
0076     QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QOpenGLDebugMessage)
0077     ~QOpenGLDebugMessage();
0078 
0079     void swap(QOpenGLDebugMessage &other) noexcept { d.swap(other.d); }
0080 
0081     Source source() const;
0082     Type type() const;
0083     Severity severity() const;
0084     GLuint id() const;
0085     QString message() const;
0086 
0087     static QOpenGLDebugMessage createApplicationMessage(const QString &text,
0088                                                         GLuint id = 0,
0089                                                         Severity severity = NotificationSeverity,
0090                                                         Type type = OtherType);
0091     static QOpenGLDebugMessage createThirdPartyMessage(const QString &text,
0092                                                        GLuint id = 0,
0093                                                        Severity severity = NotificationSeverity,
0094                                                        Type type = OtherType);
0095 
0096     bool operator==(const QOpenGLDebugMessage &debugMessage) const;
0097     inline bool operator!=(const QOpenGLDebugMessage &debugMessage) const { return !operator==(debugMessage); }
0098 
0099 private:
0100     friend class QOpenGLDebugLogger;
0101     friend class QOpenGLDebugLoggerPrivate;
0102     QSharedDataPointer<QOpenGLDebugMessagePrivate> d;
0103 };
0104 
0105 Q_DECLARE_SHARED(QOpenGLDebugMessage)
0106 Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Sources)
0107 Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Types)
0108 Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLDebugMessage::Severities)
0109 
0110 #ifndef QT_NO_DEBUG_STREAM
0111 Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, const QOpenGLDebugMessage &message);
0112 Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Source source);
0113 Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Type type);
0114 Q_OPENGL_EXPORT QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Severity severity);
0115 #endif
0116 
0117 class QOpenGLDebugLoggerPrivate;
0118 
0119 class Q_OPENGL_EXPORT QOpenGLDebugLogger : public QObject
0120 {
0121     Q_OBJECT
0122     Q_PROPERTY(LoggingMode loggingMode READ loggingMode)
0123 
0124 public:
0125     enum LoggingMode {
0126         AsynchronousLogging,
0127         SynchronousLogging
0128     };
0129     Q_ENUM(LoggingMode)
0130 
0131     explicit QOpenGLDebugLogger(QObject *parent = nullptr);
0132     ~QOpenGLDebugLogger();
0133 
0134     bool initialize();
0135 
0136     bool isLogging() const;
0137     LoggingMode loggingMode() const;
0138 
0139     qint64 maximumMessageLength() const;
0140 
0141     void pushGroup(const QString &name,
0142                    GLuint id = 0,
0143                    QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource);
0144     void popGroup();
0145 
0146     void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
0147                         QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
0148                         QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
0149 
0150     void enableMessages(const QList<GLuint> &ids,
0151                         QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
0152                         QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
0153 
0154     void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
0155                          QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType,
0156                          QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity);
0157 
0158     void disableMessages(const QList<GLuint> &ids,
0159                          QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource,
0160                          QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType);
0161 
0162     QList<QOpenGLDebugMessage> loggedMessages() const;
0163 
0164 public Q_SLOTS:
0165     void logMessage(const QOpenGLDebugMessage &debugMessage);
0166     void startLogging(LoggingMode loggingMode = AsynchronousLogging);
0167     void stopLogging();
0168 
0169 Q_SIGNALS:
0170     void messageLogged(const QOpenGLDebugMessage &debugMessage);
0171 
0172 private:
0173     Q_DISABLE_COPY(QOpenGLDebugLogger)
0174     Q_DECLARE_PRIVATE(QOpenGLDebugLogger)
0175     Q_PRIVATE_SLOT(d_func(), void _q_contextAboutToBeDestroyed())
0176 };
0177 
0178 QT_END_NAMESPACE
0179 
0180 QT_DECL_METATYPE_EXTERN(QOpenGLDebugMessage, Q_OPENGL_EXPORT)
0181 
0182 #endif // QT_NO_OPENGL
0183 
0184 #endif // QOPENGLDEBUG_H