GrGLInterface.h revision 0fc1dbe59271d507e1435a5d06bbfc2ec5bb4816
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
659a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com */
759a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
859a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com#ifndef GrGLInterface_DEFINED
959a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com#define GrGLInterface_DEFINED
1059a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
11637d5e929708db8eace06b81fa3049141f9a07efbsalomon@google.com#include "GrGLFunctions.h"
1290313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org#include "GrGLExtensions.h"
13a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.org#include "SkRefCnt.h"
1459a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
1559a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com////////////////////////////////////////////////////////////////////////////////
1659a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
1759a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com/**
180b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * Rather than depend on platform-specific GL headers and libraries, we require
190b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * the client to provide a struct of GL function pointers. This struct can be
200b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * specified per-GrContext as a parameter to GrContext::Create. If NULL is
21a3b15ed0373b873d4c497b51384b8c07d751753acommit-bot@chromium.org * passed to Create then a "default" GL interface is created. If the default is
220b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * also NULL GrContext creation will fail.
230b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com *
246fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com * The default interface is returned by GrGLDefaultInterface. This function's
250da3719050473344b6013fd7b614611984f20effrobertphillips@google.com * implementation is platform-specific. Several have been provided, along with
26a3b15ed0373b873d4c497b51384b8c07d751753acommit-bot@chromium.org * an implementation that simply returns NULL.
2756bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com *
2856bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a
2956bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com * callback function that will be called prior to each GL function call. See
3056bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com * comments in GrGLConfig.h
3159a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com */
320b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com
33d416a5b10ff9e6d4f55a1f5b0419722132d68ff3cdaltontypedef void(*GrGLFuncPtr)();
34d416a5b10ff9e6d4f55a1f5b0419722132d68ff3cdalton
3559a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.comstruct GrGLInterface;
3659a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
376fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.comconst GrGLInterface* GrGLDefaultInterface();
3859a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
3957f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com/**
4057f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
41a3b15ed0373b873d4c497b51384b8c07d751753acommit-bot@chromium.org * GLX on linux, AGL on Mac). The interface is only valid for the GL context
42a3b15ed0373b873d4c497b51384b8c07d751753acommit-bot@chromium.org * that is current when the interface is created.
4357f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com */
440fc1dbe59271d507e1435a5d06bbfc2ec5bb4816halcanarySK_API const GrGLInterface* GrGLCreateNativeInterface();
45373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.com
46d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#if SK_MESA
4757f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com/**
4857f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * Creates a GrGLInterface for an OSMesa context.
4957f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com */
500fc1dbe59271d507e1435a5d06bbfc2ec5bb4816halcanarySK_API const GrGLInterface* GrGLCreateMesaInterface();
51d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#endif
52d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com
53d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#if SK_ANGLE
54d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com/**
55d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com * Creates a GrGLInterface for an ANGLE context.
56d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com */
570fc1dbe59271d507e1435a5d06bbfc2ec5bb4816halcanarySK_API const GrGLInterface* GrGLCreateANGLEInterface();
58d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#endif
59373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.com
60885bf0925514b9dfe3365bab227d36897d866b5dhendrikw#if SK_COMMAND_BUFFER
61885bf0925514b9dfe3365bab227d36897d866b5dhendrikw/**
62885bf0925514b9dfe3365bab227d36897d866b5dhendrikw * Creates a GrGLInterface for a Command Buffer context.
63885bf0925514b9dfe3365bab227d36897d866b5dhendrikw */
640fc1dbe59271d507e1435a5d06bbfc2ec5bb4816halcanarySK_API const GrGLInterface* GrGLCreateCommandBufferInterface();
65885bf0925514b9dfe3365bab227d36897d866b5dhendrikw#endif
66885bf0925514b9dfe3365bab227d36897d866b5dhendrikw
6774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com/**
6874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
6974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * CPU overhead.
7074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com */
71aae7c2a5b7a11616879e6179357cf38f5bff53aecommit-bot@chromium.orgconst SK_API GrGLInterface* GrGLCreateNullInterface();
7274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com
730da3719050473344b6013fd7b614611984f20effrobertphillips@google.com/**
74fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com * Creates a debugging GrGLInterface that doesn't draw anything. Used for
750da3719050473344b6013fd7b614611984f20effrobertphillips@google.com * finding memory leaks and invalid memory accesses.
760da3719050473344b6013fd7b614611984f20effrobertphillips@google.com */
770da3719050473344b6013fd7b614611984f20effrobertphillips@google.comconst GrGLInterface* GrGLCreateDebugInterface();
780da3719050473344b6013fd7b614611984f20effrobertphillips@google.com
7956bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
8056bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.comtypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
8156bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.comtypedef intptr_t GrGLInterfaceCallbackData;
8256bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#endif
8356bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com
84d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org/** Function that returns a new interface identical to "interface" but without support for
85d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org    GL_NV_path_rendering. */
86d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.orgconst GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*);
87d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org
88a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org/** Function that returns a new interface identical to "interface" but with support for
89a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org    test version of GL_EXT_debug_marker. */
90a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.orgconst GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*,
91a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org                                                     GrGLInsertEventMarkerProc insertEventMarkerFn,
92a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org                                                     GrGLPushGroupMarkerProc pushGroupMarkerFn,
93a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org                                                     GrGLPopGroupMarkerProc popGroupMarkerFn);
94a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org
95d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org/**
96cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrContext uses the following interface to make all calls into OpenGL. When a
97cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrContext is created it is given a GrGLInterface. The interface's function
98cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * pointers must be valid for the OpenGL context associated with the GrContext.
99cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * On some platforms, such as Windows, function pointers for OpenGL extensions
100cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * may vary between OpenGL contexts. So the caller must be careful to use a
101cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrGLInterface initialized for the correct context. All functions that should
102cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * be available based on the OpenGL's version and extension string must be
103cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * non-NULL or GrContext creation will fail. This can be tested with the
104cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * validate() method when the OpenGL context has been made current.
105bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com */
106a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.orgstruct SK_API GrGLInterface : public SkRefCnt {
107ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.comprivate:
1089c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    // simple wrapper class that exists only to initialize a pointer to NULL
109ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    template <typename FNPTR_TYPE> class GLPtr {
110ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    public:
111ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        GLPtr() : fPtr(NULL) {}
112c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr operator=(FNPTR_TYPE ptr) { fPtr = ptr; return *this; }
113ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        operator FNPTR_TYPE() const { return fPtr; }
114ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    private:
115ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        FNPTR_TYPE fPtr;
116ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    };
117ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com
118c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    // This is a temporary workaround to keep Chromium's GrGLInterface factories compiling until
119c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    // they're updated to use the Functions struct.
120c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    template <typename FNPTR_TYPE> class GLPtrAlias {
121c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    public:
122c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtrAlias(GLPtr<FNPTR_TYPE>* base) : fBase(base) {}
123c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        void operator=(FNPTR_TYPE ptr) { *fBase = ptr; }
124c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    private:
125c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<FNPTR_TYPE>* fBase;
126c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    };
127c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
128a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.org    typedef SkRefCnt INHERITED;
12915e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com
130ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.compublic:
1312766c00fc0b6a07d46e5f74cdad45da2ef625237mtklein
13215e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com
1330b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com    GrGLInterface();
1340b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com
135d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org    static GrGLInterface* NewClone(const GrGLInterface*);
136d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org
1379e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // Validates that the GrGLInterface supports its advertised standard. This means the necessary
1389e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // function pointers have been initialized for both the GL version and any advertised
1399e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // extensions.
1409e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    bool validate() const;
14189ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
1429e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // Indicates the type of GL implementation
1439e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    union {
1449e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org        GrGLStandard fStandard;
1459e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org        GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
1469e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    };
147b65e0cb8ad8a690498142d2b0097be250b0c7dfbtwiz@google.com
14890313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org    GrGLExtensions fExtensions;
14990313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org
150f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org    bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
15190313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org
152c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    /**
153c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org     * The function pointers are in a struct so that we can have a compiler generated assignment
154c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org     * operator.
155c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org     */
156c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    struct Functions {
157c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLActiveTextureProc> fActiveTexture;
158c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLAttachShaderProc> fAttachShader;
159c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBeginQueryProc> fBeginQuery;
160c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation;
161c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindBufferProc> fBindBuffer;
162c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation;
163c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
164c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindFramebufferProc> fBindFramebuffer;
165c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer;
166c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindTextureProc> fBindTexture;
167c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindVertexArrayProc> fBindVertexArray;
168bae6f6c3ec927bc1f87cd4c13fec0b52e5677c23cdalton        GLPtr<GrGLBlendBarrierProc> fBlendBarrier;
169c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBlendColorProc> fBlendColor;
170bae6f6c3ec927bc1f87cd4c13fec0b52e5677c23cdalton        GLPtr<GrGLBlendEquationProc> fBlendEquation;
171c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBlendFuncProc> fBlendFunc;
172c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer;
173c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBufferDataProc> fBufferData;
174c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBufferSubDataProc> fBufferSubData;
175c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
176c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLClearProc> fClear;
177c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLClearColorProc> fClearColor;
178c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLClearStencilProc> fClearStencil;
179c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLColorMaskProc> fColorMask;
180c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCompileShaderProc> fCompileShader;
181c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
18237d20f75320e8182f4cdbce5f3d59a339f915e05krajcevski        GLPtr<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D;
183c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
184f23809101e2467cb509ddc6ad4de50017c0a2094junov        GLPtr<GrGLCopyTextureCHROMIUMProc> fCopyTextureCHROMIUM;
185c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCreateProgramProc> fCreateProgram;
186c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCreateShaderProc> fCreateShader;
187c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCullFaceProc> fCullFace;
188c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers;
189c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
190c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteProgramProc> fDeleteProgram;
191c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteQueriesProc> fDeleteQueries;
192c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
193c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteShaderProc> fDeleteShader;
194c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteTexturesProc> fDeleteTextures;
195c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
196c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDepthMaskProc> fDepthMask;
197c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDisableProc> fDisable;
198c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
199c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawArraysProc> fDrawArrays;
200c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawBufferProc> fDrawBuffer;
201c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawBuffersProc> fDrawBuffers;
202c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawElementsProc> fDrawElements;
203c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLEnableProc> fEnable;
204c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
205c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLEndQueryProc> fEndQuery;
206c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFinishProc> fFinish;
207c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFlushProc> fFlush;
208160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org        GLPtr<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
209c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
210c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
211c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
212c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFrontFaceProc> fFrontFace;
213c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenBuffersProc> fGenBuffers;
214c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers;
215c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap;
216c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenQueriesProc> fGenQueries;
217c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers;
218c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenTexturesProc> fGenTextures;
219c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays;
220c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
221c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetErrorProc> fGetError;
222c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
223c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetIntegervProc> fGetIntegerv;
224c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
225c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
226c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
227c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
228c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryivProc> fGetQueryiv;
229c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
230c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetProgramivProc> fGetProgramiv;
231c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
232c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
233c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetShaderivProc> fGetShaderiv;
234ee64d6ef49fbb63e0fc7934334c5ae5e900f5336bsalomon        GLPtr<GrGLGetShaderPrecisionFormatProc> fGetShaderPrecisionFormat;
235c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetStringProc> fGetString;
236c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetStringiProc> fGetStringi;
237c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
238c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation;
239a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org        GLPtr<GrGLInsertEventMarkerProc> fInsertEventMarker;
240a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateBufferDataProc> fInvalidateBufferData;
241a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData;
242a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer;
243a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer;
244a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateTexImageProc> fInvalidateTexImage;
245a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage;
2466dc6f5f4a153d33ed91565cb3cd397a310a937d0bsalomon        GLPtr<GrGLIsTextureProc> fIsTexture;
247c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLLineWidthProc> fLineWidth;
248c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLLinkProgramProc> fLinkProgram;
249c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLMapBufferProc> fMapBuffer;
250160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org        GLPtr<GrGLMapBufferRangeProc> fMapBufferRange;
251beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLMapBufferSubDataProc> fMapBufferSubData;
252beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLMapTexSubImage2DProc> fMapTexSubImage2D;
253c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPixelStoreiProc> fPixelStorei;
254a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org        GLPtr<GrGLPopGroupMarkerProc> fPopGroupMarker;
255a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org        GLPtr<GrGLPushGroupMarkerProc> fPushGroupMarker;
256c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLQueryCounterProc> fQueryCounter;
2570edea2c8e76a9f5340a7a4960193757c4a5fb227cdalton        GLPtr<GrGLRasterSamplesProc> fRasterSamples;
258c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLReadBufferProc> fReadBuffer;
259c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLReadPixelsProc> fReadPixels;
260c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage;
261c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
262c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA
263c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
264c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  older extensions for performance reasons or due to ES3 driver bugs. We want the function
265c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  that creates the GrGLInterface to provide all available functions and internally
266c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  we will select among them. They all have a method called glRenderbufferStorageMultisample*.
267c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
268c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
269c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  variations.
270c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //
271c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
272c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  assume the function pointers for the standard (or equivalent GL_ARB) version have
273c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
274c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  functionality.
275c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
276c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
277c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
278c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  GL_APPLE_framebuffer_multisample
279c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
280c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
281c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
282c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  the standard function in ES3+ or GL 3.0+.
283c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
284c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
285c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
286c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindUniformLocation> fBindUniformLocation;
287c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
288c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
289c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLScissorProc> fScissor;
290c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLShaderSourceProc> fShaderSource;
291c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFuncProc> fStencilFunc;
292c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
293c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilMaskProc> fStencilMask;
294c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
295c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilOpProc> fStencilOp;
296c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate;
297c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexImage2DProc> fTexImage2D;
298c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexParameteriProc> fTexParameteri;
299c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexParameterivProc> fTexParameteriv;
300c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D;
301c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexStorage2DProc> fTexStorage2D;
302fd4167ddf12ea723b828462ec1507acebdef5776cdalton        GLPtr<GrGLTextureBarrierProc> fTextureBarrier;
303c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
304c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1fProc> fUniform1f;
305c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1iProc> fUniform1i;
306c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1fvProc> fUniform1fv;
307c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1ivProc> fUniform1iv;
308c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2fProc> fUniform2f;
309c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2iProc> fUniform2i;
310c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2fvProc> fUniform2fv;
311c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2ivProc> fUniform2iv;
312c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3fProc> fUniform3f;
313c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3iProc> fUniform3i;
314c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3fvProc> fUniform3fv;
315c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3ivProc> fUniform3iv;
316c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4fProc> fUniform4f;
317c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4iProc> fUniform4i;
318c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4fvProc> fUniform4fv;
319c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4ivProc> fUniform4iv;
320c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
321c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
322c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
323c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUnmapBufferProc> fUnmapBuffer;
324beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData;
325beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D;
326c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUseProgramProc> fUseProgram;
32727c1521ccf0f833affa1182d6d9bc5e31b3af351egdaniel        GLPtr<GrGLVertexAttrib1fProc> fVertexAttrib1f;
32827c1521ccf0f833affa1182d6d9bc5e31b3af351egdaniel        GLPtr<GrGLVertexAttrib2fvProc> fVertexAttrib2fv;
32927c1521ccf0f833affa1182d6d9bc5e31b3af351egdaniel        GLPtr<GrGLVertexAttrib3fvProc> fVertexAttrib3fv;
330c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
331c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer;
332c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLViewportProc> fViewport;
333c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
334626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* GL_NV_path_rendering */
335626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMatrixLoadfProc> fMatrixLoadf;
336626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity;
33732b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen        GLPtr<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation;
338c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathCommandsProc> fPathCommands;
339c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathParameteriProc> fPathParameteri;
340c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathParameterfProc> fPathParameterf;
341c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenPathsProc> fGenPaths;
342c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeletePathsProc> fDeletePaths;
3438dd90cb1fd541b9a2a264725e3dfeae736c91e22cdalton        GLPtr<GrGLIsPathProc> fIsPath;
344c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc;
345c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFillPathProc> fStencilFillPath;
346c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath;
347c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
348c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
349c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverFillPathProc> fCoverFillPath;
350c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath;
351c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
352c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
353c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton        // NV_path_rendering v1.2
354c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath;
355c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath;
356c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced;
357c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced;
358c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton        // NV_path_rendering v1.3
35932b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen        GLPtr<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen;
3606bb6d4075b198c5935ab6f2d71364ca7ff0153d1kkinnunen        // CHROMIUM_path_rendering
3616bb6d4075b198c5935ab6f2d71364ca7ff0153d1kkinnunen        GLPtr<GrGLBindFragmentInputLocationProc> fBindFragmentInputLocation;
362626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton
363626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* NV_framebuffer_mixed_samples */
36408b4d29a0a29badc15129c9bc7ee8352bc75278dvbuzinov        GLPtr<GrGLCoverageModulationProc> fCoverageModulation;
365626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton
366626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* ARB_draw_instanced */
367626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDrawArraysInstancedProc> fDrawArraysInstanced;
368626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDrawElementsInstancedProc> fDrawElementsInstanced;
369626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton
370626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* ARB_instanced_arrays */
371626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexAttribDivisorProc> fVertexAttribDivisor;
372626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton
373626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* NV_bindless_texture */
374626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // We use the NVIDIA verson for now because it does not require dynamically uniform handles.
375626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // We may switch the the ARB version and/or omit methods in the future.
376626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureHandleProc> fGetTextureHandle;
377626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureSamplerHandleProc> fGetTextureSamplerHandle;
378626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMakeTextureHandleResidentProc> fMakeTextureHandleResident;
379626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMakeTextureHandleNonResidentProc> fMakeTextureHandleNonResident;
380626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetImageHandleProc> fGetImageHandle;
381626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMakeImageHandleResidentProc> fMakeImageHandleResident;
382626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMakeImageHandleNonResidentProc> fMakeImageHandleNonResident;
383626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLIsTextureHandleResidentProc> fIsTextureHandleResident;
384626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLIsImageHandleResidentProc> fIsImageHandleResident;
385626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLUniformHandleui64Proc> fUniformHandleui64;
386626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLUniformHandleui64vProc> fUniformHandleui64v;
387626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformHandleui64Proc> fProgramUniformHandleui64;
388626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformHandleui64vProc> fProgramUniformHandleui64v;
389626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton
390626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* EXT_direct_state_access */
391626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // We use the EXT verson because it is more expansive and interacts with more extensions
392626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // than the ARB or core (4.5) versions. We may switch and/or omit methods in the future.
393626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureParameteriProc> fTextureParameteri;
394626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureParameterivProc> fTextureParameteriv;
395626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureParameterfProc> fTextureParameterf;
396626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureParameterfvProc> fTextureParameterfv;
397626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureImage1DProc> fTextureImage1D;
398626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureImage2DProc> fTextureImage2D;
399626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureSubImage1DProc> fTextureSubImage1D;
400626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureSubImage2DProc> fTextureSubImage2D;
401626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCopyTextureImage1DProc> fCopyTextureImage1D;
402626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCopyTextureImage2DProc> fCopyTextureImage2D;
403626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCopyTextureSubImage1DProc> fCopyTextureSubImage1D;
404626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCopyTextureSubImage2DProc> fCopyTextureSubImage2D;
405626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureImageProc> fGetTextureImage;
406626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureParameterfvProc> fGetTextureParameterfv;
407626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureParameterivProc> fGetTextureParameteriv;
408626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureLevelParameterfvProc> fGetTextureLevelParameterfv;
409626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetTextureLevelParameterivProc> fGetTextureLevelParameteriv;
410626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // OpenGL 1.2
411626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureImage3DProc> fTextureImage3D;
412626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLTextureSubImage3DProc> fTextureSubImage3D;
413626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCopyTextureSubImage3DProc> fCopyTextureSubImage3D;
414626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCompressedTextureImage3DProc> fCompressedTextureImage3D;
415626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCompressedTextureImage2DProc> fCompressedTextureImage2D;
416626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCompressedTextureImage1DProc> fCompressedTextureImage1D;
417626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCompressedTextureSubImage3DProc> fCompressedTextureSubImage3D;
418626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCompressedTextureSubImage2DProc> fCompressedTextureSubImage2D;
419626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCompressedTextureSubImage1DProc> fCompressedTextureSubImage1D;
420626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetCompressedTextureImageProc> fGetCompressedTextureImage;
421626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // OpenGL 1.5
422626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedBufferDataProc> fNamedBufferData;
423626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedBufferSubDataProc> fNamedBufferSubData;
424626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMapNamedBufferProc> fMapNamedBuffer;
425626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLUnmapNamedBufferProc> fUnmapNamedBuffer;
426626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetNamedBufferParameterivProc> fGetNamedBufferParameteriv;
427626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetNamedBufferPointervProc> fGetNamedBufferPointerv;
428626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetNamedBufferSubDataProc> fGetNamedBufferSubData;
429626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // OpenGL 2.0
430626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform1fProc> fProgramUniform1f;
431626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform2fProc> fProgramUniform2f;
432626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform3fProc> fProgramUniform3f;
433626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform4fProc> fProgramUniform4f;
434626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform1iProc> fProgramUniform1i;
435626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform2iProc> fProgramUniform2i;
436626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform3iProc> fProgramUniform3i;
437626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform4iProc> fProgramUniform4i;
438626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform1fvProc> fProgramUniform1fv;
439626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform2fvProc> fProgramUniform2fv;
440626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform3fvProc> fProgramUniform3fv;
441626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform4fvProc> fProgramUniform4fv;
442626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform1ivProc> fProgramUniform1iv;
443626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform2ivProc> fProgramUniform2iv;
444626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform3ivProc> fProgramUniform3iv;
445626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniform4ivProc> fProgramUniform4iv;
446626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix2fvProc> fProgramUniformMatrix2fv;
447626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix3fvProc> fProgramUniformMatrix3fv;
448626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix4fvProc> fProgramUniformMatrix4fv;
449626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // OpenGL 2.1
450626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix2x3fvProc> fProgramUniformMatrix2x3fv;
451626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix3x2fvProc> fProgramUniformMatrix3x2fv;
452626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix2x4fvProc> fProgramUniformMatrix2x4fv;
453626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix4x2fvProc> fProgramUniformMatrix4x2fv;
454626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix3x4fvProc> fProgramUniformMatrix3x4fv;
455626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLProgramUniformMatrix4x3fvProc> fProgramUniformMatrix4x3fv;
456626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        // OpenGL 3.0
457626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedRenderbufferStorageProc> fNamedRenderbufferStorage;
458626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetNamedRenderbufferParameterivProc> fGetNamedRenderbufferParameteriv;
459626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedRenderbufferStorageMultisampleProc> fNamedRenderbufferStorageMultisample;
460626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLCheckNamedFramebufferStatusProc> fCheckNamedFramebufferStatus;
461626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedFramebufferTexture1DProc> fNamedFramebufferTexture1D;
462626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedFramebufferTexture2DProc> fNamedFramebufferTexture2D;
463626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedFramebufferTexture3DProc> fNamedFramebufferTexture3D;
464626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedFramebufferRenderbufferProc> fNamedFramebufferRenderbuffer;
465626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetNamedFramebufferAttachmentParameterivProc> fGetNamedFramebufferAttachmentParameteriv;
466626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGenerateTextureMipmapProc> fGenerateTextureMipmap;
467626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLFramebufferDrawBufferProc> fFramebufferDrawBuffer;
468626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLFramebufferDrawBuffersProc> fFramebufferDrawBuffers;
469626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLFramebufferReadBufferProc> fFramebufferReadBuffer;
470626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetFramebufferParameterivProc> fGetFramebufferParameteriv;
471626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLNamedCopyBufferSubDataProc> fNamedCopyBufferSubData;
472626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayVertexOffsetProc> fVertexArrayVertexOffset;
473626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayColorOffsetProc> fVertexArrayColorOffset;
474626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayEdgeFlagOffsetProc> fVertexArrayEdgeFlagOffset;
475626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayIndexOffsetProc> fVertexArrayIndexOffset;
476626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayNormalOffsetProc> fVertexArrayNormalOffset;
477626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayTexCoordOffsetProc> fVertexArrayTexCoordOffset;
478626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayMultiTexCoordOffsetProc> fVertexArrayMultiTexCoordOffset;
479626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayFogCoordOffsetProc> fVertexArrayFogCoordOffset;
480626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArraySecondaryColorOffsetProc> fVertexArraySecondaryColorOffset;
481626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayVertexAttribOffsetProc> fVertexArrayVertexAttribOffset;
482626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLVertexArrayVertexAttribIOffsetProc> fVertexArrayVertexAttribIOffset;
483626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLEnableVertexArrayProc> fEnableVertexArray;
484626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDisableVertexArrayProc> fDisableVertexArray;
485626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLEnableVertexArrayAttribProc> fEnableVertexArrayAttrib;
486626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDisableVertexArrayAttribProc> fDisableVertexArrayAttrib;
487626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetVertexArrayIntegervProc> fGetVertexArrayIntegerv;
488626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetVertexArrayPointervProc> fGetVertexArrayPointerv;
489626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetVertexArrayIntegeri_vProc> fGetVertexArrayIntegeri_v;
490626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetVertexArrayPointeri_vProc> fGetVertexArrayPointeri_v;
491626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLMapNamedBufferRangeProc> fMapNamedBufferRange;
492626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLFlushMappedNamedBufferRangeProc> fFlushMappedNamedBufferRange;
493626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton
494626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        /* KHR_debug */
495626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDebugMessageControlProc> fDebugMessageControl;
496626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDebugMessageInsertProc> fDebugMessageInsert;
497626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLDebugMessageCallbackProc> fDebugMessageCallback;
498626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLGetDebugMessageLogProc> fGetDebugMessageLog;
499626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLPushDebugGroupProc> fPushDebugGroup;
500626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLPopDebugGroupProc> fPopDebugGroup;
501626e1ffe84c24a969dc56ca70ab2e950bf5034c4cdalton        GLPtr<GrGLObjectLabelProc> fObjectLabel;
502c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    } fFunctions;
503c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
50456bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    // Per-GL func callback
50556bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
50656bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    GrGLInterfaceCallbackProc fCallback;
50756bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    GrGLInterfaceCallbackData fCallbackData;
50856bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#endif
509944bcf0acb78f8f9da01e991f1307629959e338absalomon
510944bcf0acb78f8f9da01e991f1307629959e338absalomon    // This exists for internal testing.
511944bcf0acb78f8f9da01e991f1307629959e338absalomon    virtual void abandon() const {}
512bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com};
51359a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
51459a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com#endif
515