| Index: ui/ozone/platform/x11/gl_ozone_glx.cc
|
| diff --git a/ui/ozone/platform/x11/gl_ozone_glx.cc b/ui/ozone/platform/x11/gl_ozone_glx.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0b08e31e4de2236eda3c30f441e7fef663751a03
|
| --- /dev/null
|
| +++ b/ui/ozone/platform/x11/gl_ozone_glx.cc
|
| @@ -0,0 +1,108 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/ozone/platform/x11/gl_ozone_glx.h"
|
| +
|
| +#include "base/command_line.h"
|
| +#include "ui/gl/gl_context.h"
|
| +#include "ui/gl/gl_context_glx.h"
|
| +#include "ui/gl/gl_gl_api_implementation.h"
|
| +#include "ui/gl/gl_glx_api_implementation.h"
|
| +#include "ui/ozone/platform/x11/gl_surface_glx_ozone.h"
|
| +
|
| +namespace ui {
|
| +
|
| +namespace {
|
| +
|
| +#if defined(OS_OPENBSD)
|
| +const char kGLLibraryName[] = "libGL.so";
|
| +#else
|
| +const char kGLLibraryName[] = "libGL.so.1";
|
| +#endif
|
| +
|
| +} // namespace
|
| +
|
| +bool GLOzoneGLX::InitializeGLOneOffPlatform() {
|
| + if (!gl::GLSurfaceGLX::InitializeOneOff()) {
|
| + LOG(ERROR) << "GLSurfaceGLX::InitializeOneOff failed.";
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +bool GLOzoneGLX::InitializeStaticGLBindings(
|
| + gl::GLImplementation implementation) {
|
| + base::NativeLibrary library = nullptr;
|
| + const base::CommandLine* command_line =
|
| + base::CommandLine::ForCurrentProcess();
|
| +
|
| + if (command_line->HasSwitch(switches::kTestGLLib))
|
| + library = gl::LoadLibraryAndPrintError(
|
| + command_line->GetSwitchValueASCII(switches::kTestGLLib).c_str());
|
| +
|
| + if (!library)
|
| + library = gl::LoadLibraryAndPrintError(kGLLibraryName);
|
| +
|
| + if (!library)
|
| + return false;
|
| +
|
| + gl::GLGetProcAddressProc get_proc_address =
|
| + reinterpret_cast<gl::GLGetProcAddressProc>(
|
| + base::GetFunctionPointerFromNativeLibrary(library,
|
| + "glXGetProcAddress"));
|
| + if (!get_proc_address) {
|
| + LOG(ERROR) << "glxGetProcAddress not found.";
|
| + base::UnloadNativeLibrary(library);
|
| + return false;
|
| + }
|
| +
|
| + gl::SetGLGetProcAddressProc(get_proc_address);
|
| + gl::AddGLNativeLibrary(library);
|
| + gl::SetGLImplementation(gl::kGLImplementationDesktopGL);
|
| +
|
| + gl::InitializeStaticGLBindingsGL();
|
| + gl::InitializeStaticGLBindingsGLX();
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void GLOzoneGLX::InitializeDebugGLBindings() {
|
| + gl::InitializeDebugGLBindingsGL();
|
| + gl::InitializeDebugGLBindingsGLX();
|
| +}
|
| +
|
| +void GLOzoneGLX::ClearGLBindings() {
|
| + gl::ClearGLBindingsGL();
|
| + gl::ClearGLBindingsGLX();
|
| +}
|
| +
|
| +bool GLOzoneGLX::GetGLWindowSystemBindingInfo(
|
| + gl::GLWindowSystemBindingInfo* info) {
|
| + return gl::GetGLWindowSystemBindingInfoGLX(info);
|
| +}
|
| +
|
| +scoped_refptr<gl::GLContext> GLOzoneGLX::CreateGLContext(
|
| + gl::GLShareGroup* share_group,
|
| + gl::GLSurface* compatible_surface,
|
| + gl::GpuPreference gpu_preference) {
|
| + return gl::InitializeGLContext(new gl::GLContextGLX(share_group),
|
| + compatible_surface, gpu_preference);
|
| +}
|
| +
|
| +scoped_refptr<gl::GLSurface> GLOzoneGLX::CreateViewGLSurface(
|
| + gfx::AcceleratedWidget window) {
|
| + return gl::InitializeGLSurface(new GLSurfaceGLXOzone(window));
|
| +}
|
| +
|
| +scoped_refptr<gl::GLSurface> GLOzoneGLX::CreateSurfacelessViewGLSurface(
|
| + gfx::AcceleratedWidget window) {
|
| + return nullptr;
|
| +}
|
| +
|
| +scoped_refptr<gl::GLSurface> GLOzoneGLX::CreateOffscreenGLSurface(
|
| + const gfx::Size& size) {
|
| + return gl::InitializeGLSurface(new gl::UnmappedNativeViewGLSurfaceGLX(size));
|
| +}
|
| +
|
| +} // namespace ui
|
|
|