15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GL_GL_IMPLEMENTATION_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GL_GL_IMPLEMENTATION_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/native_library.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_export.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_switches.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLContext; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The GL implementation currently in use. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum GLImplementation { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGLImplementationNone, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGLImplementationDesktopGL, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGLImplementationOSMesaGL, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGLImplementationAppleGL, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGLImplementationEGLGLES2, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGLImplementationMockGL 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)struct GLWindowSystemBindingInfo { 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string vendor; 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string version; 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string extensions; 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetAllowedGLImplementations(std::vector<GLImplementation>* impls); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* (WINAPI *GLGetProcAddressProc)(const char* name); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* (*GLGetProcAddressProc)(const char* name); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize a particular GL implementation. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GL_EXPORT bool InitializeGLBindings(GLImplementation implementation); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize extension function bindings for a GL implementation. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GL_EXPORT bool InitializeGLExtensionBindings(GLImplementation implementation, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLContext* context); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize Debug logging wrappers for GL bindings. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InitializeDebugGLBindings(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GL_EXPORT void ClearGLBindings(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set the current GL implementation. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GL_EXPORT void SetGLImplementation(GLImplementation implementation); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get the current GL implementation. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GL_EXPORT GLImplementation GetGLImplementation(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does the underlying GL support all features from Desktop GL 2.0 that were 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// removed from the ES 2.0 spec without requiring specific extension strings. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GL_EXPORT bool HasDesktopGLFeatures(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get the GL implementation with a given name. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLImplementation GetNamedGLImplementation(const std::string& name); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get the name of a GL implementation. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GetGLImplementationName(GLImplementation implementation); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Add a native library to those searched for GL entry points. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddGLNativeLibrary(base::NativeLibrary library); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Unloads all native libraries. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UnloadGLNativeLibraries(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set an additional function that will be called to find GL entry points. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetGLGetProcAddressProc(GLGetProcAddressProc proc); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Find a core (non-extension) entry point in the current GL implementation. On 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// EGL based implementations core entry points will not be queried through 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GLGetProcAddressProc. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* GetGLCoreProcAddress(const char* name); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Find an entry point in the current GL implementation. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* GetGLProcAddress(const char* name); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Return information about the GL window system binding implementation (e.g., 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// EGL, GLX, WGL). Returns true if the information was retrieved successfully. 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)GL_EXPORT bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info); 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_GL_GL_IMPLEMENTATION_H_ 96