blob: bd1137053817919a9e02958415270b820b361d85 (
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
87
88
89
90
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef GL_GL_CONTEXT_QT_H_
#define GL_GL_CONTEXT_QT_H_
#include <QObject>
#include <QtCore/qscopedpointer.h>
#include <QtGui/qtgui-config.h>
#include "ui/gl/gl_context.h"
#if QT_CONFIG(opengl) && defined(USE_OZONE)
#include <EGL/egl.h>
#include <EGL/eglext.h>
#endif
namespace gl {
class GLSurface;
}
QT_BEGIN_NAMESPACE
class GLContextHelper : public QObject {
Q_OBJECT
public:
static void initialize();
static void destroy();
static bool initializeContext(gl::GLContext* context, gl::GLSurface* surface, gl::GLContextAttribs attribs);
static void* getEGLConfig();
static void* getGlXConfig();
static void* getEGLDisplay();
static void* getXDisplay();
static void* getNativeDisplay();
static QFunctionPointer getGlXGetProcAddress();
static QFunctionPointer getEglGetProcAddress();
static bool isCreateContextRobustnessSupported();
static void *getGlxPlatformInterface();
static void *getEglPlatformInterface();
private:
Q_INVOKABLE bool initializeContextOnBrowserThread(gl::GLContext* context, gl::GLSurface* surface, gl::GLContextAttribs attribs);
static GLContextHelper* contextHelper;
bool m_robustness = false;
};
#if QT_CONFIG(opengl) && defined(USE_OZONE)
#undef eglCreateImage
#undef eglDestroyImage
#undef eglExportDMABUFImageMESA
#undef eglExportDMABUFImageQueryMESA
#undef eglGetError
#undef eglQueryString
class EGLHelper
{
public:
struct EGLFunctions
{
EGLFunctions();
PFNEGLCREATEIMAGEPROC eglCreateImage;
PFNEGLDESTROYIMAGEPROC eglDestroyImage;
PFNEGLEXPORTDMABUFIMAGEMESAPROC eglExportDMABUFImageMESA;
PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC eglExportDMABUFImageQueryMESA;
PFNEGLGETERRORPROC eglGetError;
PFNEGLQUERYSTRINGPROC eglQueryString;
};
static EGLHelper *instance();
EGLFunctions *functions() const { return m_functions.get(); }
void queryDmaBuf(const int width, const int height, int *fd, int *stride, int *offset,
uint64_t *modifiers);
bool isDmaBufSupported();
private:
EGLHelper();
QScopedPointer<EGLFunctions> m_functions;
bool m_isDmaBufSupported = false;
};
#endif // QT_CONFIG(opengl) && defined(USE_OZONE)
QT_END_NAMESPACE
#endif
|