[GStreamer] More GL shared context fixes
authorphiln@webkit.org <philn@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Mar 2015 15:22:04 +0000 (15:22 +0000)
committerphiln@webkit.org <philn@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Mar 2015 15:22:04 +0000 (15:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143216

Reviewed by Carlos Garcia Campos.

Moved the GLX/EGL context tests to be done at runtime rather than
using build-time macros because in the GTK port at least, both EGL
and GLX support are mutually exclusive. Also fixed a couple wrong
defines (USE(GLES2) doesn't exist).

* platform/graphics/GLContext.h: Simple utility method to check if
the platform context is compatible with EGL APIs or not.
* platform/graphics/egl/GLContextEGL.h:
(WebCore::GLContextEGL::isEGLContext):
* platform/graphics/glx/GLContextGLX.h:
(WebCore::GLContextGLX::isEGLContext):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::ensureGstGLContext): Do
runtime checks and properly ensure GLES2/GL API usage.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@182139 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/GLContext.h
Source/WebCore/platform/graphics/egl/GLContextEGL.h
Source/WebCore/platform/graphics/glx/GLContextGLX.h
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

index ef7c32b..67e2870 100644 (file)
@@ -1,3 +1,25 @@
+2015-03-30  Philippe Normand  <pnormand@igalia.com>
+
+        [GStreamer] More GL shared context fixes
+        https://bugs.webkit.org/show_bug.cgi?id=143216
+
+        Reviewed by Carlos Garcia Campos.
+
+        Moved the GLX/EGL context tests to be done at runtime rather than
+        using build-time macros because in the GTK port at least, both EGL
+        and GLX support are mutually exclusive. Also fixed a couple wrong
+        defines (USE(GLES2) doesn't exist).
+
+        * platform/graphics/GLContext.h: Simple utility method to check if
+        the platform context is compatible with EGL APIs or not.
+        * platform/graphics/egl/GLContextEGL.h:
+        (WebCore::GLContextEGL::isEGLContext):
+        * platform/graphics/glx/GLContextGLX.h:
+        (WebCore::GLContextGLX::isEGLContext):
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::MediaPlayerPrivateGStreamer::ensureGstGLContext): Do
+        runtime checks and properly ensure GLES2/GL API usage.
+
 2015-03-30  Marcos Chavarría Teijeiro  <chavarria1991@gmail.com>
 
         Add support for deleting emoji on GTK
index 04653b6..7386f02 100644 (file)
@@ -57,6 +57,8 @@ public:
     virtual bool canRenderToDefaultFramebuffer() = 0;
     virtual IntSize defaultFrameBufferSize() = 0;
 
+    virtual bool isEGLContext() const = 0;
+
 #if USE(CAIRO)
     virtual cairo_device_t* cairoDevice() = 0;
 #endif
index 4d8d8e4..bc9c3de 100644 (file)
@@ -45,6 +45,7 @@ public:
 #if USE(CAIRO)
     virtual cairo_device_t* cairoDevice();
 #endif
+    virtual bool isEGLContext() const { return true; }
 
 #if USE(3D_GRAPHICS)
     virtual PlatformGraphicsContext3D platformContext();
index 3ef4ced..774897d 100644 (file)
@@ -49,6 +49,7 @@ public:
     virtual bool canRenderToDefaultFramebuffer();
     virtual IntSize defaultFrameBufferSize();
     virtual cairo_device_t* cairoDevice();
+    virtual bool isEGLContext() const { return false; }
 
 #if USE(3D_GRAPHICS)
     virtual PlatformGraphicsContext3D platformContext();
index 7b3fe0b..05c1d3a 100644 (file)
@@ -980,19 +980,22 @@ bool MediaPlayerPrivateGStreamer::ensureGstGLContext()
 #endif
     }
 
-    PlatformGraphicsContext3D contextHandle = GLContext::sharingContext()->platformContext();
-    if (!contextHandle)
-        return false;
-#if USE(EGL)
-    GstGLPlatform glPlatform = GST_GL_PLATFORM_EGL;
-#else
-    GstGLPlatform glPlatform = GST_GL_PLATFORM_GLX;
-#endif
-#if USE(GLES2)
+    GLContext* webkitContext = GLContext::sharingContext();
+    // EGL and GLX are mutually exclusive, no need for ifdefs here.
+    GstGLPlatform glPlatform = webkitContext->isEGLContext() ? GST_GL_PLATFORM_EGL : GST_GL_PLATFORM_GLX;
+
+#if USE(OPENGL_ES_2)
     GstGLAPI glAPI = GST_GL_API_GLES2;
-#else
+#elif USE(OPENGL)
     GstGLAPI glAPI = GST_GL_API_OPENGL;
+#else
+    ASSERT_NOT_REACHED();
 #endif
+
+    PlatformGraphicsContext3D contextHandle = webkitContext->platformContext();
+    if (!contextHandle)
+        return false;
+
     m_glContext = gst_gl_context_new_wrapped(m_glDisplay.get(), reinterpret_cast<guintptr>(contextHandle), glPlatform, glAPI);
 
     return true;