diff options
Diffstat (limited to 'src/compositor/hardware_integration/dri2_xcb/dri2xcbbuffer.cpp')
-rw-r--r-- | src/compositor/hardware_integration/dri2_xcb/dri2xcbbuffer.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/compositor/hardware_integration/dri2_xcb/dri2xcbbuffer.cpp b/src/compositor/hardware_integration/dri2_xcb/dri2xcbbuffer.cpp new file mode 100644 index 000000000..eb516d1d2 --- /dev/null +++ b/src/compositor/hardware_integration/dri2_xcb/dri2xcbbuffer.cpp @@ -0,0 +1,46 @@ +#include "dri2xcbbuffer.h" + +#include "waylandobject.h" + +#define EGL_EGLEXT_PROTOTYPES +#include <EGL/egl.h> +#include <EGL/eglext.h> + +Dri2XcbBuffer::Dri2XcbBuffer(uint32_t id, uint32_t name, const QSize &size, uint32_t stride, wl_visual *visual, EGLDisplay eglDisplay, Wayland::Compositor *compositor) + :m_egl_display(eglDisplay) +{ + base()->compositor = compositor->base(); + base()->visual = visual; + base()->height = size.height(); + base()->width = size.width(); + base()->attach = 0; + base()->damage = 0; + + EGLint attribs[] = { + EGL_WIDTH, size.width(), + EGL_HEIGHT, size.height(), + EGL_DRM_BUFFER_STRIDE_MESA, stride /4, + EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, + EGL_NONE + }; + + m_image = eglCreateImageKHR(m_egl_display, + EGL_NO_CONTEXT, + EGL_DRM_BUFFER_MESA, + (EGLClientBuffer) name, attribs); +} + +Dri2XcbBuffer::~Dri2XcbBuffer() +{ + eglDestroyImageKHR (m_egl_display, m_image); +} + +void dri2XcbBufferDestroy(struct wl_client *client, struct wl_buffer *buffer) +{ + delete Wayland::wayland_cast<Dri2XcbBuffer *>(buffer); +} + +EGLImageKHR Dri2XcbBuffer::image() const +{ + return m_image; +} |