From: Samuel Rødal Date: Thu, 23 Jun 2011 14:39:59 +0000 (+0200) Subject: Make Wayland EGL integration check if the extension is available. X-Git-Tag: qt-v5.0.0-alpha1~249 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e51a9cd69b0182cd4bb8a06aec754e0c38eb9254;p=profile%2Fivi%2Fqtwayland.git Make Wayland EGL integration check if the extension is available. Prevents failing when using a software implementation of Mesa. --- diff --git a/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp b/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp index 4d3ae46..2f8f1f5 100644 --- a/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp +++ b/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.cpp @@ -64,14 +64,15 @@ public: , egl_context(EGL_NO_CONTEXT) { } EGLDisplay egl_display; - EGLContext egl_context; + bool valid; }; MesaEglIntegration::MesaEglIntegration(WaylandCompositor *compositor) : GraphicsHardwareIntegration(compositor) , d_ptr(new MesaEglIntegrationPrivate) { + d_ptr->valid = false; } void MesaEglIntegration::initializeHardware(Wayland::Display *waylandDisplay) @@ -84,10 +85,17 @@ void MesaEglIntegration::initializeHardware(Wayland::Display *waylandDisplay) if (nativeInterface) { d->egl_display = nativeInterface->nativeResourceForWidget("EglDisplay",m_compositor->topLevelWidget()); if (d->egl_display) { - eglBindWaylandDisplayWL(d->egl_display,waylandDisplay->handle()); - } else { - fprintf(stderr, "Failed to initialize egl display"); + const char *extensionString = eglQueryString(d->egl_display, EGL_EXTENSIONS); + if (extensionString && strstr(extensionString, "EGL_WL_bind_wayland_display") + && eglBindWaylandDisplayWL(d->egl_display, waylandDisplay->handle())) + { + d->valid = true; + } } + + if (!d->valid) + fprintf(stderr, "Failed to initialize egl display\n"); + d->egl_context = nativeInterface->nativeResourceForWidget("EglContext",m_compositor->topLevelWidget()); } } @@ -95,6 +103,11 @@ void MesaEglIntegration::initializeHardware(Wayland::Display *waylandDisplay) GLuint MesaEglIntegration::createTextureFromBuffer(wl_buffer *buffer) { Q_D(MesaEglIntegration); + if (!d->valid) { + fprintf(stderr, "createTextureFromBuffer() failed\n"); + return 0; + } + EGLImageKHR image = eglCreateImageKHR(d->egl_display, d->egl_context, EGL_WAYLAND_BUFFER_WL, buffer, NULL); diff --git a/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.h b/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.h index 333a079..a70fc85 100644 --- a/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.h +++ b/src/qt-compositor/hardware_integration/mesa_egl/mesaeglintegration.h @@ -59,7 +59,6 @@ public: private: Q_DISABLE_COPY(MesaEglIntegration) QScopedPointer d_ptr; - }; #endif // MESAEGLINTEGRATION_H