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) 2017 Jolla Ltd, author: <giulio.camuffo@jollamobile.com>
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
5#define LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
6
7#include <QtWaylandCompositor/private/qwlserverbufferintegration_p.h>
8
9#include "qwayland-server-libhybris-egl-server-buffer.h"
10
11#include <QtGui/QWindow>
12#include <QtGui/qpa/qplatformnativeinterface.h>
13#include <QtGui/QGuiApplication>
14
15#include <QtWaylandCompositor/qwaylandcompositor.h>
16#include <QtWaylandCompositor/private/qwayland-server-server-buffer-extension.h>
17
18#include <QtCore/QDebug>
19#include <EGL/egl.h>
20#include <EGL/eglext.h>
21
22#ifndef EGL_KHR_image
23typedef void *EGLImageKHR;
24typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
25typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
26#endif
27
28#ifndef EGL_HYBRIS_native_buffer
29typedef EGLBoolean (EGLAPIENTRYP PFNEGLHYBRISCREATENATIVEBUFFERPROC)(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint *stride, EGLClientBuffer *buffer);
30typedef EGLBoolean (EGLAPIENTRYP PFNEGLHYBRISGETNATIVEBUFFERINFOPROC)(EGLClientBuffer buffer, int *num_ints, int *num_fds);
31typedef EGLBoolean (EGLAPIENTRYP PFNEGLHYBRISSERIALIZENATIVEBUFFERPROC)(EGLClientBuffer buffer, int *ints, int *fds);
32#endif
33
34#ifndef GL_OES_EGL_image
35typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
36#endif
37
39
41
42class LibHybrisEglServerBuffer : public QtWayland::ServerBuffer, public QtWaylandServer::qt_libhybris_buffer
43{
44public:
46
47 struct ::wl_resource *resourceForClient(struct ::wl_client *) override;
49
50private:
51 LibHybrisEglServerBufferIntegration *m_integration = nullptr;
52
53 EGLImageKHR m_image;
54 EGLClientBuffer m_buffer;
55
56 int32_t m_name;
57 int32_t m_stride;
58 QOpenGLTexture *m_texture = nullptr;
59 QtWaylandServer::qt_libhybris_egl_server_buffer::format m_hybris_format;
60 QList<int32_t> m_ints;
61 QList<int32_t> m_fds;
62};
63
66 public QtWaylandServer::qt_libhybris_egl_server_buffer
67{
68public:
71
73
76
77 EGLDisplay display() const { return m_egl_display; }
78
79 inline EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
82
83 inline EGLBoolean eglHybrisCreateNativeBuffer(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint *stride, EGLClientBuffer *buffer);
84 inline void eglHybrisGetNativeBufferInfo(EGLClientBuffer buffer, int *num_ints, int *num_fds);
85 inline void eglHybrisSerializeNativeBuffer(EGLClientBuffer buffer, int *ints, int *fds);
86
87private:
88 EGLDisplay m_egl_display = EGL_NO_DISPLAY;
89 PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_gl_egl_image_target_texture_2d;
90
91 PFNEGLHYBRISCREATENATIVEBUFFERPROC m_egl_create_buffer;
92 PFNEGLHYBRISGETNATIVEBUFFERINFOPROC m_egl_get_buffer_info;
93 PFNEGLHYBRISSERIALIZENATIVEBUFFERPROC m_egl_serialize_buffer;
94
95 PFNEGLCREATEIMAGEKHRPROC m_egl_create_image;
96 PFNEGLDESTROYIMAGEKHRPROC m_egl_destroy_image;
97};
98
100{
101 if (!m_egl_create_image) {
102 qWarning("LibHybrisEglServerBufferIntegration: Trying to used unresolved function eglCreateImageKHR");
103 return EGL_NO_IMAGE_KHR;
104 }
105 return m_egl_create_image(m_egl_display, ctx, target, buffer,attrib_list);
106}
107
109{
110 if (!m_egl_destroy_image) {
111 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglDestroyImageKHR");
112 return false;
113 }
114 return m_egl_destroy_image(m_egl_display, image);
115}
116
118{
119 if (m_gl_egl_image_target_texture_2d)
120 return m_gl_egl_image_target_texture_2d(target, image);
121 else
122 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function glEGLImageTargetTexture2DOES");
123}
124
126{
127 if (m_egl_create_buffer)
128 return m_egl_create_buffer(width, height, usage, format, stride, buffer);
129 else
130 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglHybrisCreateNativeBuffer");
131 return EGL_FALSE;
132}
133
135{
136 if (m_egl_get_buffer_info)
137 m_egl_get_buffer_info(buffer, num_ints, num_fds);
138 else
139 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglHybrisGetNativeBufferInfo");
140}
141
143{
144 if (m_egl_serialize_buffer)
145 m_egl_serialize_buffer(buffer, ints, fds);
146 else
147 qWarning("LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglHybrisSerializeNativeBuffer");
148}
149
151
152#endif
EGLBoolean eglHybrisCreateNativeBuffer(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint *stride, EGLClientBuffer *buffer)
void eglHybrisSerializeNativeBuffer(EGLClientBuffer buffer, int *ints, int *fds)
EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
bool supportsFormat(QtWayland::ServerBuffer::Format format) const override
void eglHybrisGetNativeBufferInfo(EGLClientBuffer buffer, int *num_ints, int *num_fds)
QtWayland::ServerBuffer * createServerBufferFromImage(const QImage &qimage, QtWayland::ServerBuffer::Format format) override
void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
LibHybrisEglServerBuffer(LibHybrisEglServerBufferIntegration *integration, const QImage &qimage, QtWayland::ServerBuffer::Format format)
struct::wl_resource * resourceForClient(struct ::wl_client *) override
\inmodule QtGui
Definition qimage.h:37
\inmodule QtGui
\qmltype WaylandCompositor \instantiates QWaylandCompositor \inqmlmodule QtWayland....
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
EGLint EGLint EGLint EGLint * stride
typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC)(EGLDisplay dpy
EGLContext EGLenum EGLClientBuffer const EGLint * attrib_list
EGLint EGLint EGLint format
EGLint EGLint usage
EGLContext EGLenum EGLClientBuffer buffer
EGLContext EGLenum target
Combined button and popup list for selecting options.
Definition image.cpp:4
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
typedef EGLDisplay(EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform
void const EGLint * attrib_list
#define qWarning
Definition qlogging.h:166
GLint GLsizei GLsizei height
const void GLsizei GLsizei stride
GLenum GLuint buffer
GLint GLsizei width
typedef GLenum(GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void)
GLenum target
#define GL_APIENTRYP
GLint GLsizei GLsizei GLenum format
void * GLeglImageOES
GLsizeiptr const void GLenum usage
Definition qopenglext.h:543