1 | // Copyright (C) 2020 The Qt Company Ltd. |
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only |
3 | |
4 | #ifndef QT_EGL_P_H |
5 | #define QT_EGL_P_H |
6 | |
7 | // |
8 | // W A R N I N G |
9 | // ------------- |
10 | // |
11 | // This file is not part of the Qt API. It exists purely as an |
12 | // implementation detail. This header file may change from version to |
13 | // version without notice, or even be removed. |
14 | // |
15 | // We mean it. |
16 | // |
17 | |
18 | // q(data/text)stream.h must be included before any header file that defines Status |
19 | #include <QtCore/qdatastream.h> |
20 | #include <QtCore/qtextstream.h> |
21 | #include <QtCore/private/qglobal_p.h> |
22 | |
23 | #ifdef QT_EGL_NO_X11 |
24 | # ifndef EGL_NO_X11 |
25 | # define EGL_NO_X11 |
26 | # endif |
27 | # ifndef MESA_EGL_NO_X11_HEADERS |
28 | # define // MESA |
29 | # endif |
30 | # if !defined(Q_OS_INTEGRITY) |
31 | # define WIN_INTERFACE_CUSTOM // NV |
32 | # endif // Q_OS_INTEGRITY |
33 | #else // QT_EGL_NO_X11 |
34 | // If one has an eglplatform.h with https://github.com/KhronosGroup/EGL-Registry/pull/130 |
35 | // that needs USE_X11 to be defined. |
36 | # define USE_X11 |
37 | #endif |
38 | |
39 | #ifdef QT_EGL_WAYLAND |
40 | # define WAYLAND // NV |
41 | #endif // QT_EGL_WAYLAND |
42 | |
43 | #include <EGL/egl.h> |
44 | #include <EGL/eglext.h> |
45 | |
46 | #include <stdint.h> |
47 | |
48 | QT_BEGIN_NAMESPACE |
49 | |
50 | namespace QtInternal { |
51 | |
52 | template <class FromType, class ToType> |
53 | struct QtEglConverter |
54 | { |
55 | static inline ToType convert(FromType v) |
56 | { return v; } |
57 | }; |
58 | |
59 | template <> |
60 | struct QtEglConverter<uint32_t, uintptr_t> |
61 | { |
62 | static inline uintptr_t convert(uint32_t v) |
63 | { return v; } |
64 | }; |
65 | |
66 | #if QT_POINTER_SIZE > 4 |
67 | template <> |
68 | struct QtEglConverter<uintptr_t, uint32_t> |
69 | { |
70 | static inline uint32_t convert(uintptr_t v) |
71 | { return uint32_t(v); } |
72 | }; |
73 | #endif |
74 | |
75 | template <> |
76 | struct QtEglConverter<uint32_t, void *> |
77 | { |
78 | static inline void *convert(uint32_t v) |
79 | { return reinterpret_cast<void *>(uintptr_t(v)); } |
80 | }; |
81 | |
82 | template <> |
83 | struct QtEglConverter<void *, uint32_t> |
84 | { |
85 | static inline uint32_t convert(void *v) |
86 | { return uintptr_t(v); } |
87 | }; |
88 | |
89 | } // QtInternal |
90 | |
91 | template <class ToType, class FromType> |
92 | static inline ToType qt_egl_cast(FromType from) |
93 | { return QtInternal::QtEglConverter<FromType, ToType>::convert(from); } |
94 | |
95 | QT_END_NAMESPACE |
96 | |
97 | #endif // QT_EGL_P_H |
98 | |