5#ifndef LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
6#define LIBHYBRISEGLSERVERBUFFERINTEGRATION_H
8#include <QtWaylandClient/private/qwayland-wayland.h>
9#include "qwayland-libhybris-egl-server-buffer.h"
10#include <QtWaylandClient/private/qwaylandserverbufferintegration_p.h>
11#include <QtWaylandClient/private/qwaylanddisplay_p.h>
12#include <QtCore/QList>
13#include <QtCore/QTextStream>
16#include <EGL/eglext.h>
18typedef void *EGLImageKHR;
19typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer,
const EGLint *attrib_list);
20typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
23#ifndef GL_OES_EGL_image
27#ifndef EGL_HYBRIS_native_buffer
28typedef EGLBoolean (EGLAPIENTRYP PFNEGLHYBRISCREATEREMOTEBUFFERPROC)(EGLint width, EGLint
height, EGLint
usage, EGLint
format, EGLint
stride,
51 QOpenGLTexture *m_texture =
nullptr;
53 QList<int32_t> m_ints;
56 int32_t m_hybrisFormat;
64 void initialize(QWaylandDisplay *display)
override;
68 inline EGLImageKHR
eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer,
const EGLint *attrib_list);
71 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);
75 int32_t numFds, wl_array *ints, int32_t name, int32_t width, int32_t height, int32_t stride, int32_t format)
override;
78 const QString &interface, uint32_t version);
81 PFNEGLCREATEIMAGEKHRPROC m_egl_create_image;
82 PFNEGLDESTROYIMAGEKHRPROC m_egl_destroy_image;
83 PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_gl_egl_image_target_texture;
84 PFNEGLHYBRISCREATEREMOTEBUFFERPROC m_egl_create_buffer;
85 QWaylandDisplay *m_display =
nullptr;
86 EGLDisplay m_egl_display = EGL_NO_DISPLAY;
87 bool m_egl_initialized =
false;
92 if (!m_egl_initialized)
95 if (!m_egl_create_image) {
96 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to used unresolved function eglCreateImageKHR");
97 return EGL_NO_IMAGE_KHR;
99 return m_egl_create_image(m_egl_display, ctx, target, buffer,attrib_list);
104 if (!m_egl_destroy_image) {
105 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglDestroyImageKHR");
108 return m_egl_destroy_image(m_egl_display, image);
113 if (!m_gl_egl_image_target_texture) {
114 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to use unresolved function glEGLImageTargetRenderbufferStorageOES");
117 m_gl_egl_image_target_texture(target,image);
121 int num_ints,
int *ints,
int num_fds,
int *fds, EGLClientBuffer *buffer)
123 if (!m_egl_create_buffer) {
124 qWarning(
"LibHybrisEglServerBufferIntegration: Trying to use unresolved function eglHybrisCreateRemoteBuffer");
127 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.