| Index: Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp
|
| diff --git a/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp b/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp
|
| deleted file mode 100644
|
| index ffda1fa5105f31f15f52dcf12b70a7cc103fd9dd..0000000000000000000000000000000000000000
|
| --- a/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp
|
| +++ /dev/null
|
| @@ -1,286 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2012 Intel Corporation. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
| - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
| - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
| - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
| - * THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "GLXSurface.h"
|
| -
|
| -#if USE(ACCELERATED_COMPOSITING) && USE(GLX)
|
| -
|
| -namespace WebCore {
|
| -
|
| -static PFNGLXBINDTEXIMAGEEXTPROC pGlXBindTexImageEXT = 0;
|
| -static PFNGLXRELEASETEXIMAGEEXTPROC pGlXReleaseTexImageEXT = 0;
|
| -
|
| -static bool resolveGLMethods()
|
| -{
|
| - static bool resolved = false;
|
| - if (resolved)
|
| - return true;
|
| -
|
| - pGlXBindTexImageEXT = reinterpret_cast<PFNGLXBINDTEXIMAGEEXTPROC>(glXGetProcAddress(reinterpret_cast<const GLubyte*>("glXBindTexImageEXT")));
|
| - pGlXReleaseTexImageEXT = reinterpret_cast<PFNGLXRELEASETEXIMAGEEXTPROC>(glXGetProcAddress(reinterpret_cast<const GLubyte*>("glXReleaseTexImageEXT")));
|
| -
|
| - resolved = pGlXBindTexImageEXT && pGlXReleaseTexImageEXT;
|
| -
|
| - return resolved;
|
| -}
|
| -
|
| -static int glxAttributes[] = {
|
| - GLX_TEXTURE_FORMAT_EXT,
|
| - GLX_TEXTURE_FORMAT_RGBA_EXT,
|
| - GLX_TEXTURE_TARGET_EXT,
|
| - GLX_TEXTURE_2D_EXT,
|
| - 0
|
| -};
|
| -
|
| -static bool isMesaGLX()
|
| -{
|
| - static bool isMesa = !!strstr(glXGetClientString(X11Helper::nativeDisplay(), GLX_VENDOR), "Mesa");
|
| - return isMesa;
|
| -}
|
| -
|
| -GLXTransportSurface::GLXTransportSurface(const IntSize& size, SurfaceAttributes attributes)
|
| - : GLTransportSurface(size, attributes)
|
| -{
|
| - m_sharedDisplay = X11Helper::nativeDisplay();
|
| - attributes |= GLPlatformSurface::DoubleBuffered;
|
| - m_configSelector = adoptPtr(new GLXConfigSelector(attributes));
|
| - OwnPtrX11<XVisualInfo> visInfo(m_configSelector->visualInfo(m_configSelector->surfaceContextConfig()));
|
| -
|
| - if (!visInfo.get()) {
|
| - destroy();
|
| - return;
|
| - }
|
| -
|
| - X11Helper::createOffScreenWindow(&m_bufferHandle, *visInfo.get(), size);
|
| -
|
| - if (!m_bufferHandle) {
|
| - destroy();
|
| - return;
|
| - }
|
| -
|
| - m_drawable = m_bufferHandle;
|
| -}
|
| -
|
| -GLXTransportSurface::~GLXTransportSurface()
|
| -{
|
| -}
|
| -
|
| -PlatformSurfaceConfig GLXTransportSurface::configuration()
|
| -{
|
| - return m_configSelector->surfaceContextConfig();
|
| -}
|
| -
|
| -void GLXTransportSurface::setGeometry(const IntRect& newRect)
|
| -{
|
| - GLTransportSurface::setGeometry(newRect);
|
| - X11Helper::resizeWindow(newRect, m_drawable);
|
| - // Force resize of GL surface after window resize.
|
| - glXSwapBuffers(sharedDisplay(), m_drawable);
|
| -}
|
| -
|
| -void GLXTransportSurface::swapBuffers()
|
| -{
|
| - if (!m_drawable)
|
| - return;
|
| -
|
| - glXSwapBuffers(sharedDisplay(), m_drawable);
|
| -}
|
| -
|
| -void GLXTransportSurface::destroy()
|
| -{
|
| - GLTransportSurface::destroy();
|
| -
|
| - if (m_bufferHandle) {
|
| - X11Helper::destroyWindow(m_bufferHandle);
|
| - m_bufferHandle = 0;
|
| - m_drawable = 0;
|
| - }
|
| -
|
| - m_configSelector = nullptr;
|
| -}
|
| -
|
| -GLPlatformSurface::SurfaceAttributes GLXTransportSurface::attributes() const
|
| -{
|
| - return m_configSelector->attributes();
|
| -}
|
| -
|
| -GLXOffScreenSurface::GLXOffScreenSurface(SurfaceAttributes surfaceAttributes)
|
| - : GLPlatformSurface(surfaceAttributes)
|
| - , m_pixmap(0)
|
| - , m_glxPixmap(0)
|
| -{
|
| - initialize(surfaceAttributes);
|
| -}
|
| -
|
| -GLXOffScreenSurface::~GLXOffScreenSurface()
|
| -{
|
| -}
|
| -
|
| -void GLXOffScreenSurface::initialize(SurfaceAttributes attributes)
|
| -{
|
| - m_sharedDisplay = X11Helper::nativeDisplay();
|
| -
|
| - m_configSelector = adoptPtr(new GLXConfigSelector(attributes));
|
| -
|
| - OwnPtrX11<XVisualInfo> visualInfo(m_configSelector->visualInfo(m_configSelector->pixmapContextConfig()));
|
| - X11Helper::createPixmap(&m_pixmap, *visualInfo.get());
|
| -
|
| - if (!m_pixmap) {
|
| - destroy();
|
| - return;
|
| - }
|
| -
|
| - m_glxPixmap = glXCreateGLXPixmap(m_sharedDisplay, visualInfo.get(), m_pixmap);
|
| -
|
| - if (!m_glxPixmap) {
|
| - destroy();
|
| - return;
|
| - }
|
| -
|
| - m_drawable = m_glxPixmap;
|
| -}
|
| -
|
| -PlatformSurfaceConfig GLXOffScreenSurface::configuration()
|
| -{
|
| - return m_configSelector->pixmapContextConfig();
|
| -}
|
| -
|
| -void GLXOffScreenSurface::destroy()
|
| -{
|
| - freeResources();
|
| -}
|
| -
|
| -void GLXOffScreenSurface::freeResources()
|
| -{
|
| - Display* display = sharedDisplay();
|
| -
|
| - if (!display)
|
| - return;
|
| -
|
| - if (m_glxPixmap) {
|
| - glXDestroyGLXPixmap(display, m_glxPixmap);
|
| - glXWaitGL();
|
| - m_glxPixmap = 0;
|
| - }
|
| -
|
| - if (m_pixmap) {
|
| - X11Helper::destroyPixmap(m_pixmap);
|
| - m_pixmap = 0;
|
| - }
|
| -
|
| - m_configSelector = nullptr;
|
| - m_drawable = 0;
|
| -}
|
| -
|
| -GLXTransportSurfaceClient::GLXTransportSurfaceClient(const PlatformBufferHandle handle)
|
| - : GLTransportSurfaceClient(handle)
|
| -{
|
| - if (!resolveGLMethods())
|
| - return;
|
| -
|
| - XWindowAttributes attr;
|
| - Display* display = X11Helper::nativeDisplay();
|
| - if (!XGetWindowAttributes(display, handle, &attr))
|
| - return;
|
| -
|
| - // Ensure that the window is mapped.
|
| - if (attr.map_state == IsUnmapped || attr.map_state == IsUnviewable)
|
| - return;
|
| -
|
| - ScopedXPixmapCreationErrorHandler handler;
|
| -
|
| - XRenderPictFormat* format = XRenderFindVisualFormat(display, attr.visual);
|
| - bool hasAlpha = (format->type == PictTypeDirect && format->direct.alphaMask);
|
| - m_xPixmap = XCompositeNameWindowPixmap(display, handle);
|
| -
|
| - if (!m_xPixmap)
|
| - return;
|
| -
|
| - glxAttributes[1] = (format->depth == 32 && hasAlpha) ? GLX_TEXTURE_FORMAT_RGBA_EXT : GLX_TEXTURE_FORMAT_RGB_EXT;
|
| -
|
| - GLPlatformSurface::SurfaceAttributes sharedSurfaceAttributes = GLPlatformSurface::Default;
|
| -
|
| - if (hasAlpha) {
|
| - sharedSurfaceAttributes = GLPlatformSurface::SupportAlpha;
|
| - m_hasAlpha = true;
|
| - }
|
| -
|
| - GLXConfigSelector configSelector(sharedSurfaceAttributes);
|
| -
|
| - m_glxPixmap = glXCreatePixmap(display, configSelector.surfaceClientConfig(format->depth, XVisualIDFromVisual(attr.visual)), m_xPixmap, glxAttributes);
|
| -
|
| - if (!m_glxPixmap || !handler.isValidOperation()) {
|
| - destroy();
|
| - return;
|
| - }
|
| -
|
| - createTexture();
|
| - glXWaitX();
|
| - pGlXBindTexImageEXT(display, m_glxPixmap, GLX_FRONT_EXT, 0);
|
| -}
|
| -
|
| -GLXTransportSurfaceClient::~GLXTransportSurfaceClient()
|
| -{
|
| -}
|
| -
|
| -void GLXTransportSurfaceClient::destroy()
|
| -{
|
| - Display* display = X11Helper::nativeDisplay();
|
| - if (!display)
|
| - return;
|
| -
|
| - if (m_texture) {
|
| - pGlXReleaseTexImageEXT(display, m_glxPixmap, GLX_FRONT_EXT);
|
| - GLTransportSurfaceClient::destroy();
|
| - }
|
| -
|
| - if (m_glxPixmap) {
|
| - glXDestroyPixmap(display, m_glxPixmap);
|
| - m_glxPixmap = 0;
|
| - glXWaitGL();
|
| - }
|
| -
|
| - if (m_xPixmap) {
|
| - X11Helper::destroyPixmap(m_xPixmap);
|
| - m_xPixmap = 0;
|
| - }
|
| -}
|
| -
|
| -void GLXTransportSurfaceClient::prepareTexture()
|
| -{
|
| - if (isMesaGLX() && m_texture) {
|
| - Display* display = X11Helper::nativeDisplay();
|
| - glBindTexture(GL_TEXTURE_2D, m_texture);
|
| - // Mesa doesn't re-bind texture to the front buffer on glXSwapBufer
|
| - // Manually release previous lock and rebind texture to surface to ensure frame updates.
|
| - pGlXReleaseTexImageEXT(display, m_glxPixmap, GLX_FRONT_EXT);
|
| - pGlXBindTexImageEXT(display, m_glxPixmap, GLX_FRONT_EXT, 0);
|
| - }
|
| -}
|
| -
|
| -}
|
| -
|
| -#endif
|
|
|