Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
libhybriseglserverbufferintegration.h
Go to the documentation of this file.
1// Copyright (C) 2016 Jolla Ltd, author: <giulio.camuffo@jollamobile.com>
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 LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
5#define LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
6
7#include <QtWaylandClient/private/qwayland-wayland.h>
8#include "qwayland-libhybris-egl-server-buffer.h"
9#include <QtWaylandClient/private/qwaylandserverbufferintegration_p.h>
10#include <QtWaylandClient/private/qwaylanddisplay_p.h>
11#include <QtCore/QList>
12#include <QtCore/QTextStream>
13
14#include <EGL/egl.h>
15#include <EGL/eglext.h>
16#ifndef EGL_KHR_image
17typedef void *EGLImageKHR;
18typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
19typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
20#endif
21
22#ifndef GL_OES_EGL_image
23typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
24#endif
25
26#ifndef EGL_HYBRIS_native_buffer
27typedef EGLBoolean (EGLAPIENTRYP PFNEGLHYBRISCREATEREMOTEBUFFERPROC)(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint stride,
28 int num_ints, int *ints, int num_fds, int *fds, EGLClientBuffer *buffer);
29#endif
30
32
33namespace QtWaylandClient {
34
36
37class LibHybrisServerBuffer : public QWaylandServerBuffer, public QtWayland::qt_libhybris_buffer
38{
39public:
40 LibHybrisServerBuffer(LibHybrisEglServerBufferIntegration *integration, int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format);
43
44protected:
45 void libhybris_buffer_add_fd(int32_t fd) override;
46
47private:
48 LibHybrisEglServerBufferIntegration *m_integration = nullptr;
49 EGLImageKHR m_image;
50 QOpenGLTexture *m_texture = nullptr;
51 int m_numFds;
52 QList<int32_t> m_ints;
53 QList<int32_t> m_fds;
54 int32_t m_stride;
55 int32_t m_hybrisFormat;
56};
57
60 , public QtWayland::qt_libhybris_egl_server_buffer
61{
62public:
63 void initialize(QWaylandDisplay *display) override;
64
65 virtual QWaylandServerBuffer *serverBuffer(struct qt_server_buffer *buffer) override;
66
67 inline EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
70 inline EGLBoolean eglHybrisCreateRemoteBuffer(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint stride, int num_ints, int *ints, int num_fds, int *fds, EGLClientBuffer *buffer);
71
72protected:
73 void libhybris_egl_server_buffer_server_buffer_created(struct ::qt_libhybris_buffer *id, struct ::qt_server_buffer *qid,
74 int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format) override;
75private:
76 static void wlDisplayHandleGlobal(void *data, struct ::wl_registry *registry, uint32_t id,
77 const QString &interface, uint32_t version);
78 void initializeEgl();
79
80 PFNEGLCREATEIMAGEKHRPROC m_egl_create_image;
81 PFNEGLDESTROYIMAGEKHRPROC m_egl_destroy_image;
82 PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_gl_egl_image_target_texture;
83 PFNEGLHYBRISCREATEREMOTEBUFFERPROC m_egl_create_buffer;
84 QWaylandDisplay *m_display = nullptr;
85 EGLDisplay m_egl_display = EGL_NO_DISPLAY;
86 bool m_egl_initialized = false;
87};
88
90{
91 if (!m_egl_initialized)
92 initializeEgl();
93
94 if (!m_egl_create_image) {
95 qWarning("LibHybrisEglServerBufferIntegration: Trying to used unresolved function eglCreateImageKHR");
96 return EGL_NO_IMAGE_KHR;
97 }
98 return m_egl_create_image(m_egl_display, ctx, target, buffer,attrib_list);
99}
100
102{
103 if (!m_egl_destroy_image) {
104 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglDestroyImageKHR");
105 return false;
106 }
107 return m_egl_destroy_image(m_egl_display, image);
108}
109
111{
112 if (!m_gl_egl_image_target_texture) {
113 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function glEGLImageTargetRenderbufferStorageOES");
114 return;
115 }
116 m_gl_egl_image_target_texture(target,image);
117}
118
120 int num_ints, int *ints, int num_fds, int *fds, EGLClientBuffer *buffer)
121{
122 if (!m_egl_create_buffer) {
123 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglHybrisCreateRemoteBuffer");
124 return false;
125 }
126 return m_egl_create_buffer(width, height, usage, format, stride, num_ints, ints, num_fds, fds, buffer);
127}
128
129}
130
132
133#endif
\inmodule QtGui
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
EGLBoolean eglHybrisCreateRemoteBuffer(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint stride, int num_ints, int *ints, int num_fds, int *fds, EGLClientBuffer *buffer)
virtual QWaylandServerBuffer * serverBuffer(struct qt_server_buffer *buffer) override
void libhybris_egl_server_buffer_server_buffer_created(struct ::qt_libhybris_buffer *id, struct ::qt_server_buffer *qid, int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format) override
EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
LibHybrisServerBuffer(LibHybrisEglServerBufferIntegration *integration, int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format)
EGLContext ctx
EGLint EGLint EGLint EGLint stride
typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC)(EGLDisplay dpy
EGLContext EGLenum EGLClientBuffer const EGLint * attrib_list
EGLint EGLint EGLint EGLint int int * ints
EGLint EGLint EGLint format
EGLContext EGLenum EGLClientBuffer buffer
EGLint EGLint usage
EGLint EGLint EGLint EGLint int num_ints
EGLint EGLint EGLint EGLint int int int int * fds
EGLContext EGLenum target
EGLint EGLint EGLint EGLint int int int num_fds
struct wl_display * display
Definition linuxdmabuf.h:41
Combined button and popup list for selecting options.
Definition image.cpp:4
static bool initialize()
Definition qctf.cpp:94
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC)(EGLint max_devices
typedef EGLDisplay(EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform
void const EGLint * attrib_list
#define qWarning
Definition qlogging.h:166
GLint GLsizei GLsizei height
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
const void GLsizei GLsizei stride
GLenum GLuint buffer
GLint GLsizei width
typedef GLenum(GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void)
GLenum target
#define GL_APIENTRYP
GLuint64 GLenum GLint fd
GLuint name
GLint GLsizei GLsizei GLenum format
void * GLeglImageOES
GLsizeiptr const void GLenum usage
Definition qopenglext.h:543