Index: ui/gl/gl_implementation_linux.cc |
diff --git a/ui/gl/gl_implementation_linux.cc b/ui/gl/gl_implementation_linux.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..94e17bdbe5a4478a4641c0c7f01cca997996dfb1 |
--- /dev/null |
+++ b/ui/gl/gl_implementation_linux.cc |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2013 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/gl/gl_implementation_linux.h" |
+ |
+#include "base/files/file_path.h" |
+#include "base/logging.h" |
+#include "base/native_library.h" |
+#include "base/path_service.h" |
+#include "ui/gl/gl_bindings.h" |
+#include "ui/gl/gl_gl_api_implementation.h" |
+#include "ui/gl/gl_implementation.h" |
+#include "ui/gl/gl_osmesa_api_implementation.h" |
+ |
+namespace gfx { |
+ |
+// Load a library, printing an error message on failure. |
+base::NativeLibrary LoadLibrary(const base::FilePath& filename) { |
+ std::string error; |
+ base::NativeLibrary library = base::LoadNativeLibrary(filename, &error); |
+ if (!library) { |
+ DVLOG(1) << "Failed to load " << filename.MaybeAsASCII() << ": " << error; |
+ return NULL; |
+ } |
+ return library; |
+} |
+ |
+base::NativeLibrary LoadLibrary(const char* filename) { |
+ return LoadLibrary(base::FilePath(filename)); |
+} |
+ |
+bool InitializeGLBindingsOSMesaGL() { |
+ base::FilePath module_path; |
+ if (!PathService::Get(base::DIR_MODULE, &module_path)) { |
+ LOG(ERROR) << "PathService::Get failed."; |
+ return false; |
+ } |
+ |
+ base::NativeLibrary library = LoadLibrary(module_path.Append("libosmesa.so")); |
+ if (!library) |
+ return false; |
+ |
+ GLGetProcAddressProc get_proc_address = |
+ reinterpret_cast<GLGetProcAddressProc>( |
+ base::GetFunctionPointerFromNativeLibrary(library, |
+ "OSMesaGetProcAddress")); |
+ if (!get_proc_address) { |
+ LOG(ERROR) << "OSMesaGetProcAddress not found."; |
+ base::UnloadNativeLibrary(library); |
+ return false; |
+ } |
+ |
+ SetGLGetProcAddressProc(get_proc_address); |
+ AddGLNativeLibrary(library); |
+ SetGLImplementation(kGLImplementationOSMesaGL); |
+ |
+ InitializeGLBindingsGL(); |
+ InitializeGLBindingsOSMESA(); |
+ return true; |
+} |
+ |
+} // namespace gfx |