4#ifndef LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
5#define LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
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>
15#include <EGL/eglext.h>
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);
22#ifndef GL_OES_EGL_image
26#ifndef EGL_HYBRIS_native_buffer
27typedef EGLBoolean (EGLAPIENTRYP PFNEGLHYBRISCREATEREMOTEBUFFERPROC)(EGLint width, EGLint
height, EGLint
usage, EGLint
format, EGLint
stride,
50 QOpenGLTexture *m_texture =
nullptr;
52 QList<int32_t> m_ints;
55 int32_t m_hybrisFormat;
63 void initialize(QWaylandDisplay *display)
override;
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);
74 int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format)
override;
77 const QString &interface, uint32_t version);
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;
91 if (!m_egl_initialized)
94 if (!m_egl_create_image) {
95 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to used unresolved function eglCreateImageKHR");
96 return EGL_NO_IMAGE_KHR;
98 return m_egl_create_image(m_egl_display, ctx, target, buffer,attrib_list);
103 if (!m_egl_destroy_image) {
104 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglDestroyImageKHR");
107 return m_egl_destroy_image(m_egl_display, image);
112 if (!m_gl_egl_image_target_texture) {
113 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to use unresolved function glEGLImageTargetRenderbufferStorageOES");
116 m_gl_egl_image_target_texture(target,image);
120 int num_ints,
int *ints,
int num_fds,
int *fds, EGLClientBuffer *buffer)
122 if (!m_egl_create_buffer) {
123 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglHybrisCreateRemoteBuffer");
126 return m_egl_create_buffer(width, height, usage, format, stride, num_ints, ints, num_fds, fds, buffer);
void initialize(QWaylandDisplay *display) override
EGLBoolean eglHybrisCreateRemoteBuffer(EGLint width, EGLint height, EGLint usage, EGLint format, EGLint stride, int num_ints, int *ints, int num_fds, int *fds, EGLClientBuffer *buffer)
EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
EGLBoolean eglDestroyImageKHR(EGLImageKHR image)
void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
LibHybrisServerBuffer(LibHybrisEglServerBufferIntegration *integration, int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format)
QOpenGLTexture * toOpenGlTexture() override
void libhybris_buffer_add_fd(int32_t fd) override
Combined button and popup list for selecting options.