Home | History | Annotate | Download | only in gl
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ui/gl/gl_implementation_linux.h"
      6 
      7 #include "base/files/file_path.h"
      8 #include "base/logging.h"
      9 #include "base/native_library.h"
     10 #include "base/path_service.h"
     11 #include "ui/gl/gl_bindings.h"
     12 #include "ui/gl/gl_gl_api_implementation.h"
     13 #include "ui/gl/gl_implementation.h"
     14 #include "ui/gl/gl_osmesa_api_implementation.h"
     15 
     16 namespace gfx {
     17 
     18 // Load a library, printing an error message on failure.
     19 base::NativeLibrary LoadLibrary(const base::FilePath& filename) {
     20   std::string error;
     21   base::NativeLibrary library = base::LoadNativeLibrary(filename, &error);
     22   if (!library) {
     23     DVLOG(1) << "Failed to load " << filename.MaybeAsASCII() << ": " << error;
     24     return NULL;
     25   }
     26   return library;
     27 }
     28 
     29 base::NativeLibrary LoadLibrary(const char* filename) {
     30   return LoadLibrary(base::FilePath(filename));
     31 }
     32 
     33 bool InitializeGLBindingsOSMesaGL() {
     34   base::FilePath module_path;
     35   if (!PathService::Get(base::DIR_MODULE, &module_path)) {
     36     LOG(ERROR) << "PathService::Get failed.";
     37     return false;
     38   }
     39 
     40   base::NativeLibrary library = LoadLibrary(module_path.Append("libosmesa.so"));
     41   if (!library)
     42     return false;
     43 
     44   GLGetProcAddressProc get_proc_address =
     45       reinterpret_cast<GLGetProcAddressProc>(
     46           base::GetFunctionPointerFromNativeLibrary(library,
     47                                                     "OSMesaGetProcAddress"));
     48   if (!get_proc_address) {
     49     LOG(ERROR) << "OSMesaGetProcAddress not found.";
     50     base::UnloadNativeLibrary(library);
     51     return false;
     52   }
     53 
     54   SetGLGetProcAddressProc(get_proc_address);
     55   AddGLNativeLibrary(library);
     56   SetGLImplementation(kGLImplementationOSMesaGL);
     57 
     58   InitializeGLBindingsGL();
     59   InitializeGLBindingsOSMESA();
     60   return true;
     61 }
     62 
     63 }  // namespace gfx
     64