blob: 212978270d6f13a38e36429daac67bd2521f05ca [file] [log] [blame]
[email protected]c9e2cbbb2012-05-12 21:17:271// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]b9363b22010-06-09 22:06:152// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]c9e2cbbb2012-05-12 21:17:275#ifndef UI_GL_GL_IMPLEMENTATION_H_
6#define UI_GL_GL_IMPLEMENTATION_H_
[email protected]b9363b22010-06-09 22:06:157
[email protected]30aa5c1a2010-07-14 20:47:048#include <string>
[email protected]0f5e8882011-11-08 22:29:389#include <vector>
[email protected]30aa5c1a2010-07-14 20:47:0410
11#include "base/native_library.h"
12#include "build/build_config.h"
[email protected]c9e2cbbb2012-05-12 21:17:2713#include "ui/gl/gl_export.h"
14#include "ui/gl/gl_switches.h"
[email protected]30aa5c1a2010-07-14 20:47:0415
[email protected]b9363b22010-06-09 22:06:1516namespace gfx {
17
[email protected]6494823b2011-10-27 18:30:4418class GLContext;
19
[email protected]b9363b22010-06-09 22:06:1520// The GL implementation currently in use.
21enum GLImplementation {
22 kGLImplementationNone,
23 kGLImplementationDesktopGL,
24 kGLImplementationOSMesaGL,
[email protected]020d047e2011-12-07 19:15:4225 kGLImplementationAppleGL,
[email protected]b9363b22010-06-09 22:06:1526 kGLImplementationEGLGLES2,
27 kGLImplementationMockGL
28};
29
[email protected]45895032013-05-30 17:06:4330struct GLWindowSystemBindingInfo {
31 std::string vendor;
32 std::string version;
33 std::string extensions;
34};
35
[email protected]0f5e8882011-11-08 22:29:3836void GetAllowedGLImplementations(std::vector<GLImplementation>* impls);
37
[email protected]30aa5c1a2010-07-14 20:47:0438#if defined(OS_WIN)
39typedef void* (WINAPI *GLGetProcAddressProc)(const char* name);
40#else
41typedef void* (*GLGetProcAddressProc)(const char* name);
42#endif
43
[email protected]b9363b22010-06-09 22:06:1544// Initialize a particular GL implementation.
[email protected]fe377e12011-08-18 17:37:3645GL_EXPORT bool InitializeGLBindings(GLImplementation implementation);
[email protected]b9363b22010-06-09 22:06:1546
[email protected]6494823b2011-10-27 18:30:4447// Initialize extension function bindings for a GL implementation.
48GL_EXPORT bool InitializeGLExtensionBindings(GLImplementation implementation,
49 GLContext* context);
50
[email protected]e9f6aee52010-11-04 20:32:0651// Initialize Debug logging wrappers for GL bindings.
[email protected]218a5a22010-11-04 19:27:4952void InitializeDebugGLBindings();
53
[email protected]d5ad62a2013-05-23 10:56:2154GL_EXPORT void ClearGLBindings();
[email protected]0f5e8882011-11-08 22:29:3855
[email protected]30aa5c1a2010-07-14 20:47:0456// Set the current GL implementation.
[email protected]8af4d5e2013-03-15 23:55:3357GL_EXPORT void SetGLImplementation(GLImplementation implementation);
[email protected]30aa5c1a2010-07-14 20:47:0458
[email protected]b9363b22010-06-09 22:06:1559// Get the current GL implementation.
[email protected]fe377e12011-08-18 17:37:3660GL_EXPORT GLImplementation GetGLImplementation();
[email protected]b9363b22010-06-09 22:06:1561
[email protected]380aba82011-09-21 18:15:3962// 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.
64GL_EXPORT bool HasDesktopGLFeatures();
65
[email protected]30aa5c1a2010-07-14 20:47:0466// Get the GL implementation with a given name.
[email protected]0f5e8882011-11-08 22:29:3867GLImplementation GetNamedGLImplementation(const std::string& name);
[email protected]30aa5c1a2010-07-14 20:47:0468
[email protected]363b20d2011-01-14 22:54:1669// Get the name of a GL implementation.
70const char* GetGLImplementationName(GLImplementation implementation);
71
[email protected]30aa5c1a2010-07-14 20:47:0472// Add a native library to those searched for GL entry points.
73void AddGLNativeLibrary(base::NativeLibrary library);
74
[email protected]0f5e8882011-11-08 22:29:3875// Unloads all native libraries.
76void UnloadGLNativeLibraries();
77
[email protected]30aa5c1a2010-07-14 20:47:0478// Set an additional function that will be called to find GL entry points.
79void SetGLGetProcAddressProc(GLGetProcAddressProc proc);
80
[email protected]6494823b2011-10-27 18:30:4481// 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.
84void* GetGLCoreProcAddress(const char* name);
85
[email protected]b9363b22010-06-09 22:06:1586// Find an entry point in the current GL implementation.
87void* GetGLProcAddress(const char* name);
88
[email protected]45895032013-05-30 17:06:4389// Return information about the GL window system binding implementation (e.g.,
90// EGL, GLX, WGL). Returns true if the information was retrieved successfully.
91GL_EXPORT bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info);
92
[email protected]b9363b22010-06-09 22:06:1593} // namespace gfx
94
[email protected]c9e2cbbb2012-05-12 21:17:2795#endif // UI_GL_GL_IMPLEMENTATION_H_