1 // Copyright (c) 2012 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 #ifndef UI_GL_GL_IMPLEMENTATION_H_ 6 #define UI_GL_GL_IMPLEMENTATION_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/native_library.h" 12 #include "build/build_config.h" 13 #include "ui/gl/gl_export.h" 14 #include "ui/gl/gl_switches.h" 15 16 namespace gfx { 17 18 class GLContext; 19 20 // The GL implementation currently in use. 21 enum GLImplementation { 22 kGLImplementationNone, 23 kGLImplementationDesktopGL, 24 kGLImplementationOSMesaGL, 25 kGLImplementationAppleGL, 26 kGLImplementationEGLGLES2, 27 kGLImplementationMockGL 28 }; 29 30 struct GLWindowSystemBindingInfo { 31 std::string vendor; 32 std::string version; 33 std::string extensions; 34 }; 35 36 void GetAllowedGLImplementations(std::vector<GLImplementation>* impls); 37 38 #if defined(OS_WIN) 39 typedef void* (WINAPI *GLGetProcAddressProc)(const char* name); 40 #else 41 typedef void* (*GLGetProcAddressProc)(const char* name); 42 #endif 43 44 // Initialize a particular GL implementation. 45 GL_EXPORT bool InitializeGLBindings(GLImplementation implementation); 46 47 // Initialize extension function bindings for a GL implementation. 48 GL_EXPORT bool InitializeGLExtensionBindings(GLImplementation implementation, 49 GLContext* context); 50 51 // Initialize Debug logging wrappers for GL bindings. 52 void InitializeDebugGLBindings(); 53 54 GL_EXPORT void ClearGLBindings(); 55 56 // Set the current GL implementation. 57 GL_EXPORT void SetGLImplementation(GLImplementation implementation); 58 59 // Get the current GL implementation. 60 GL_EXPORT GLImplementation GetGLImplementation(); 61 62 // Does the underlying GL support all features from Desktop GL 2.0 that were 63 // removed from the ES 2.0 spec without requiring specific extension strings. 64 GL_EXPORT bool HasDesktopGLFeatures(); 65 66 // Get the GL implementation with a given name. 67 GLImplementation GetNamedGLImplementation(const std::string& name); 68 69 // Get the name of a GL implementation. 70 const char* GetGLImplementationName(GLImplementation implementation); 71 72 // Add a native library to those searched for GL entry points. 73 void AddGLNativeLibrary(base::NativeLibrary library); 74 75 // Unloads all native libraries. 76 void UnloadGLNativeLibraries(); 77 78 // Set an additional function that will be called to find GL entry points. 79 void SetGLGetProcAddressProc(GLGetProcAddressProc proc); 80 81 // Find a core (non-extension) entry point in the current GL implementation. On 82 // EGL based implementations core entry points will not be queried through 83 // GLGetProcAddressProc. 84 void* GetGLCoreProcAddress(const char* name); 85 86 // Find an entry point in the current GL implementation. 87 void* GetGLProcAddress(const char* name); 88 89 // Return information about the GL window system binding implementation (e.g., 90 // EGL, GLX, WGL). Returns true if the information was retrieved successfully. 91 GL_EXPORT bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info); 92 93 } // namespace gfx 94 95 #endif // UI_GL_GL_IMPLEMENTATION_H_ 96