Index: ui/gl/gl_implementation_android.cc |
diff --git a/ui/gl/gl_implementation_android.cc b/ui/gl/gl_implementation_android.cc |
index f644866b3d8e0aa257619b837ba50f77077913d2..20c7f23eb0ef39ca1a2547cd9a27a75444dc9e95 100644 |
--- a/ui/gl/gl_implementation_android.cc |
+++ b/ui/gl/gl_implementation_android.cc |
@@ -45,6 +45,37 @@ base::NativeLibrary LoadLibrary(const char* filename) { |
void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) { |
impls->push_back(kGLImplementationEGLGLES2); |
+ impls->push_back(kGLImplementationOSMesaGL); |
+} |
+ |
+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; |
} |
bool InitializeGLBindings(GLImplementation implementation) { |
@@ -90,6 +121,8 @@ bool InitializeGLBindings(GLImplementation implementation) { |
::gfx::g_driver_gl.fn.glDepthRangeFn = MarshalDepthRangeToDepthRangef; |
break; |
} |
+ case kGLImplementationOSMesaGL: |
+ return InitializeGLBindingsOSMesaGL(); |
case kGLImplementationMockGL: { |
SetGLGetProcAddressProc(GetMockGLProcAddress); |
SetGLImplementation(kGLImplementationMockGL); |
@@ -111,6 +144,10 @@ bool InitializeGLExtensionBindings(GLImplementation implementation, |
InitializeGLExtensionBindingsGL(context); |
InitializeGLExtensionBindingsEGL(context); |
break; |
+ case kGLImplementationOSMesaGL: |
+ InitializeGLExtensionBindingsGL(context); |
+ InitializeGLExtensionBindingsOSMESA(context); |
+ break; |
case kGLImplementationMockGL: |
InitializeGLExtensionBindingsGL(context); |
break; |