diff options
Diffstat (limited to 'src/core/ozone/gl_surface_glx_qt.cpp')
-rw-r--r-- | src/core/ozone/gl_surface_glx_qt.cpp | 137 |
1 files changed, 36 insertions, 101 deletions
diff --git a/src/core/ozone/gl_surface_glx_qt.cpp b/src/core/ozone/gl_surface_glx_qt.cpp index e150c940a..61c9ef9de 100644 --- a/src/core/ozone/gl_surface_glx_qt.cpp +++ b/src/core/ozone/gl_surface_glx_qt.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only // Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be @@ -43,27 +7,23 @@ #include "gl_context_qt.h" #include "ozone/gl_surface_glx_qt.h" + #include "ui/gl/gl_bindings.h" +#include "ui/gl/gl_display.h" +#include "ui/gl/gl_display_manager.h" +#include "ui/gl/gl_surface.h" #include "ui/gl/gl_surface_glx.h" -#include <GL/glx.h> -#include <GL/glxext.h> namespace gl { -bool GLSurfaceGLXQt::s_initialized = false; - -GLSurfaceGLXQt::~GLSurfaceGLXQt() -{ - Destroy(); -} - -void GLSurfaceGLX::ShutdownOneOff() +static bool HasGLXExtension(const char *name) { + return GLSurface::ExtensionsContain(GLSurfaceQt::g_extensions.c_str(), name); } bool GLSurfaceGLX::IsCreateContextSupported() { - return ExtensionsContain(GLSurfaceQt::g_extensions, "GLX_ARB_create_context"); + return HasGLXExtension("GLX_ARB_create_context"); } bool GLSurfaceGLX::IsCreateContextRobustnessSupported() @@ -71,16 +31,6 @@ bool GLSurfaceGLX::IsCreateContextRobustnessSupported() return GLContextHelper::isCreateContextRobustnessSupported() && HasGLXExtension("GLX_ARB_create_context_robustness"); } -bool GLSurfaceGLX::IsEXTSwapControlSupported() -{ - return HasGLXExtension("GLX_EXT_swap_control"); -} - -bool GLSurfaceGLX::IsMESASwapControlSupported() -{ - return HasGLXExtension("GLX_MESA_swap_control"); -} - bool GLSurfaceGLX::IsCreateContextProfileSupported() { return false; // ExtensionsContain(g_extensions, "GLX_ARB_create_context_profile"); @@ -88,92 +38,83 @@ bool GLSurfaceGLX::IsCreateContextProfileSupported() bool GLSurfaceGLX::IsCreateContextES2ProfileSupported() { - return ExtensionsContain(GLSurfaceQt::g_extensions, "GLX_ARB_create_context_es2_profile"); + return HasGLXExtension("GLX_ARB_create_context_es2_profile"); } -bool GLSurfaceGLX::IsOMLSyncControlSupported() +bool GLSurfaceGLX::IsRobustnessVideoMemoryPurgeSupported() { - return false; // ExtensionsContain(g_extensions, "GLX_OML_sync_control"); + return false; } -bool GLSurfaceGLX::HasGLXExtension(const char *name) -{ - return ExtensionsContain(GLSurfaceQt::g_extensions, name); -} -bool GLSurfaceGLX::IsTextureFromPixmapSupported() +bool GLSurfaceGLXQt::s_initialized = false; + +GLSurfaceGLXQt::GLSurfaceGLXQt(const gfx::Size& size) + : GLSurfaceQt(size), + m_surfaceBuffer(0) { - return ExtensionsContain(GLSurfaceQt::g_extensions, "GLX_EXT_texture_from_pixmap"); } -const char* GLSurfaceGLX::GetGLXExtensions() +GLSurfaceGLXQt::~GLSurfaceGLXQt() { - return GLSurfaceQt::g_extensions; + Destroy(); } -bool GLSurfaceGLXQt::InitializeOneOff() +GLDisplay *GLSurfaceGLXQt::InitializeOneOff(gl::GpuPreference preference) { if (s_initialized) - return true; + return g_display; - XInitThreads(); - - g_display = GLContextHelper::getXDisplay(); - if (!g_display) { + g_display = GLDisplayManagerX11::GetInstance()->GetDisplay(preference); + if (!g_display->GetDisplay()) { LOG(ERROR) << "GLContextHelper::getXDisplay() failed."; - return false; + return nullptr; } g_config = GLContextHelper::getGlXConfig(); if (!g_config) { LOG(ERROR) << "GLContextHelper::getGlxConfig() failed."; - return false; + return nullptr; } - Display* display = static_cast<Display*>(g_display); + Display* display = static_cast<Display*>(g_display->GetDisplay()); int major, minor; if (!glXQueryVersion(display, &major, &minor)) { LOG(ERROR) << "glxQueryVersion failed."; - return false; + return nullptr; } if (major == 1 && minor < 3) { LOG(ERROR) << "GLX 1.3 or later is required."; - return false; + return nullptr; } s_initialized = true; - return true; + return g_display; } - bool GLSurfaceGLXQt::InitializeExtensionSettingsOneOff() { if (!s_initialized) return false; - Display* display = static_cast<Display*>(g_display); + Display* display = static_cast<Display*>(g_display->GetDisplay()); GLSurfaceQt::g_extensions = glXQueryExtensionsString(display, 0); - g_driver_glx.InitializeExtensionBindings(g_extensions); + g_driver_glx.InitializeExtensionBindings(g_extensions.c_str()); return true; } -bool GLSurfaceGLX::InitializeExtensionSettingsOneOff() -{ - return GLSurfaceGLXQt::InitializeExtensionSettingsOneOff(); -} - bool GLSurfaceGLXQt::Initialize(GLSurfaceFormat format) { Q_ASSERT(!m_surfaceBuffer); - Display* display = static_cast<Display*>(g_display); + Display* display = static_cast<Display*>(g_display->GetDisplay()); const int pbuffer_attributes[] = { GLX_PBUFFER_WIDTH, m_size.width(), GLX_PBUFFER_HEIGHT, m_size.height(), - GLX_LARGEST_PBUFFER, x11::False, - GLX_PRESERVED_CONTENTS, x11::False, - x11::None // MEMO doc: ...must be terminated with None or NULL + GLX_LARGEST_PBUFFER, GL_FALSE, + GLX_PRESERVED_CONTENTS, GL_FALSE, + GL_NONE // MEMO doc: ...must be terminated with None or NULL }; m_surfaceBuffer = glXCreatePbuffer(display, static_cast<GLXFBConfig>(g_config), pbuffer_attributes); @@ -190,17 +131,11 @@ bool GLSurfaceGLXQt::Initialize(GLSurfaceFormat format) void GLSurfaceGLXQt::Destroy() { if (m_surfaceBuffer) { - glXDestroyPbuffer(static_cast<Display*>(g_display), m_surfaceBuffer); + glXDestroyPbuffer(static_cast<Display*>(g_display->GetDisplay()), m_surfaceBuffer); m_surfaceBuffer = 0; } } -GLSurfaceGLXQt::GLSurfaceGLXQt(const gfx::Size& size) - : GLSurfaceQt(size), - m_surfaceBuffer(0) -{ -} - void* GLSurfaceGLXQt::GetHandle() { return reinterpret_cast<void*>(m_surfaceBuffer); |