Home | History | Annotate | Download | only in gl
      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