summaryrefslogtreecommitdiffstats
path: root/src/opengl/doc/snippets/code/src_gui_opengl_qopengldebug.cpp
blob: bb5c212205c9e037148f5fb9d761f471a40b6273 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QOpenGLContext>
#include <QSurfaceFormat>
#include <QWidget>
#include <QtOpenGL/QOpenGLDebugLogger>

namespace src_gui_opengl_qopengldebug {
struct LogHandler : public QObject
{
    Q_OBJECT
public slots:
    static bool handleLoggedMessage() { return true; };
};
struct SnippetWrapper : public QObject
{
    Q_OBJECT
    void wrapper1(LogHandler *receiver);
    const QWidget *receiver;
};

void wrapper0() {

//! [0]
GLenum error = GL_NO_ERROR;
do {
    error = glGetError();
    if (error != GL_NO_ERROR) {
        // handle the error
    }
} while (error != GL_NO_ERROR);
//! [0]


//! [1]
QSurfaceFormat format;
// asks for a OpenGL 3.2 debug context using the Core profile
format.setMajorVersion(3);
format.setMinorVersion(2);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setOption(QSurfaceFormat::DebugContext);

QOpenGLContext *context = new QOpenGLContext;
context->setFormat(format);
context->create();
//! [1]

} // wrapper0


void SnippetWrapper::wrapper1(LogHandler *receiver) {
//! [2]
QOpenGLContext *ctx = QOpenGLContext::currentContext();
QOpenGLDebugLogger *logger = new QOpenGLDebugLogger(this);

logger->initialize(); // initializes in the current context, i.e. ctx
//! [2]


//! [3]
ctx->hasExtension(QByteArrayLiteral("GL_KHR_debug"));
//! [3]


//! [4]
const QList<QOpenGLDebugMessage> messages = logger->loggedMessages();
for (const QOpenGLDebugMessage &message : messages)
    qDebug() << message;
//! [4]


//! [5]
connect(logger, &QOpenGLDebugLogger::messageLogged, receiver, &LogHandler::handleLoggedMessage);
logger->startLogging();
//! [5]


//! [6]
QOpenGLDebugMessage message =
    QOpenGLDebugMessage::createApplicationMessage(QStringLiteral("Custom message"));

logger->logMessage(message);
//! [6]

} // SnippetWrapper::wrapper1
} // src_gui_opengl_qopengldebug