| Index: ui/gl/gl_implementation_ozone.cc
|
| diff --git a/ui/gl/gl_implementation_ozone.cc b/ui/gl/gl_implementation_ozone.cc
|
| index 715084f50dbf552aea987354bb6b63e3aadc018d..61c52f400ec4c74a4d54191b825f05eec965813b 100644
|
| --- a/ui/gl/gl_implementation_ozone.cc
|
| +++ b/ui/gl/gl_implementation_ozone.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/bind.h"
|
| +#include "base/command_line.h"
|
| #include "ui/gl/gl_bindings.h"
|
| #include "ui/gl/gl_context_stub_with_extensions.h"
|
| #include "ui/gl/gl_egl_api_implementation.h"
|
| @@ -13,6 +14,10 @@
|
| #include "ui/ozone/public/ozone_platform.h"
|
| #include "ui/ozone/public/surface_factory_ozone.h"
|
|
|
| +#if defined(USE_GLX)
|
| +#include "ui/gl/gl_glx_api_implementation.h"
|
| +#endif
|
| +
|
| namespace gfx {
|
|
|
| namespace {
|
| @@ -26,9 +31,25 @@ void GL_BINDING_CALL MarshalDepthRangeToDepthRangef(GLclampd z_near,
|
| glDepthRangef(static_cast<GLclampf>(z_near), static_cast<GLclampf>(z_far));
|
| }
|
|
|
| +#if defined(USE_GLX)
|
| +#if defined(OS_OPENBSD)
|
| +const char kGLLibraryName[] = "libGL.so";
|
| +#else
|
| +const char kGLLibraryName[] = "libGL.so.1";
|
| +#endif
|
| +#endif
|
| +
|
| } // namespace
|
|
|
| void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) {
|
| +#if defined(USE_GLX)
|
| + // TODO: Discuss/change this before submitting CL.
|
| + ui::OzonePlatform::InitializeForGPU();
|
| + // DesktopGL implies GLX on Linux. We only support GLX running the Ozone X11
|
| + // platform, which requires a runtime check.
|
| + if (ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone()->SupportsGLX())
|
| + impls->push_back(kGLImplementationDesktopGL);
|
| +#endif
|
| impls->push_back(kGLImplementationEGLGLES2);
|
| impls->push_back(kGLImplementationOSMesaGL);
|
| }
|
| @@ -43,6 +64,41 @@ bool InitializeStaticGLBindings(GLImplementation implementation) {
|
| switch (implementation) {
|
| case kGLImplementationOSMesaGL:
|
| return InitializeStaticGLBindingsOSMesaGL();
|
| +#if defined(USE_GLX)
|
| + case kGLImplementationDesktopGL: {
|
| + const base::CommandLine* command_line =
|
| + base::CommandLine::ForCurrentProcess();
|
| +
|
| + base::NativeLibrary library = nullptr;
|
| + if (command_line->HasSwitch(switches::kTestGLLib)) {
|
| + library = LoadLibraryAndPrintError(
|
| + command_line->GetSwitchValueASCII(switches::kTestGLLib).c_str());
|
| + } else {
|
| + library = LoadLibraryAndPrintError(kGLLibraryName);
|
| + }
|
| +
|
| + if (!library)
|
| + return false;
|
| +
|
| + GLGetProcAddressProc get_proc_address =
|
| + reinterpret_cast<GLGetProcAddressProc>(
|
| + base::GetFunctionPointerFromNativeLibrary(library,
|
| + "glXGetProcAddress"));
|
| + if (!get_proc_address) {
|
| + LOG(ERROR) << "glxGetProcAddress not found.";
|
| + base::UnloadNativeLibrary(library);
|
| + return false;
|
| + }
|
| +
|
| + SetGLGetProcAddressProc(get_proc_address);
|
| + AddGLNativeLibrary(library);
|
| + SetGLImplementation(kGLImplementationDesktopGL);
|
| +
|
| + InitializeStaticGLBindingsGL();
|
| + InitializeStaticGLBindingsGLX();
|
| + break;
|
| + }
|
| +#endif
|
| case kGLImplementationEGLGLES2:
|
| if (!ui::OzonePlatform::GetInstance()
|
| ->GetSurfaceFactoryOzone()
|
| @@ -76,6 +132,7 @@ bool InitializeDynamicGLBindings(GLImplementation implementation,
|
| GLContext* context) {
|
| switch (implementation) {
|
| case kGLImplementationOSMesaGL:
|
| + case kGLImplementationDesktopGL:
|
| case kGLImplementationEGLGLES2:
|
| InitializeDynamicGLBindingsGL(context);
|
| break;
|
| @@ -85,8 +142,9 @@ bool InitializeDynamicGLBindings(GLImplementation implementation,
|
| new GLContextStubWithExtensions());
|
| mock_context->SetGLVersionString("3.0");
|
| InitializeDynamicGLBindingsGL(mock_context.get());
|
| - } else
|
| + } else {
|
| InitializeDynamicGLBindingsGL(context);
|
| + }
|
| break;
|
| default:
|
| return false;
|
| @@ -96,17 +154,31 @@ bool InitializeDynamicGLBindings(GLImplementation implementation,
|
| }
|
|
|
| void InitializeDebugGLBindings() {
|
| + InitializeDebugGLBindingsEGL();
|
| + InitializeDebugGLBindingsGL();
|
| +#if defined(USE_GLX)
|
| + InitializeDebugGLBindingsGLX();
|
| +#endif
|
| + InitializeDebugGLBindingsOSMESA();
|
| }
|
|
|
| void ClearGLBindings() {
|
| ClearGLBindingsEGL();
|
| ClearGLBindingsGL();
|
| +#if defined(USE_GLX)
|
| + ClearGLBindingsGLX();
|
| +#endif
|
| + ClearGLBindingsOSMESA();
|
| SetGLImplementation(kGLImplementationNone);
|
| UnloadGLNativeLibraries();
|
| }
|
|
|
| bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) {
|
| switch (GetGLImplementation()) {
|
| +#if defined(USE_GLX)
|
| + case kGLImplementationDesktopGL:
|
| + return GetGLWindowSystemBindingInfoGLX(info);
|
| +#endif
|
| case kGLImplementationEGLGLES2:
|
| return GetGLWindowSystemBindingInfoEGL(info);
|
| default:
|
|
|