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
3359a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.comstruct GrGLInterface;
3459a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
356fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.comconst GrGLInterface* GrGLDefaultInterface();
3659a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
3757f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com/**
3857f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
39a3b15ed0373b873d4c497b51384b8c07d751753acommit-bot@chromium.org * GLX on linux, AGL on Mac). The interface is only valid for the GL context
40a3b15ed0373b873d4c497b51384b8c07d751753acommit-bot@chromium.org * that is current when the interface is created.
4157f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com */
42373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.comconst GrGLInterface* GrGLCreateNativeInterface();
43373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.com
44d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#if SK_MESA
4557f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com/**
4657f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * Creates a GrGLInterface for an OSMesa context.
4757f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com */
48373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.comconst GrGLInterface* GrGLCreateMesaInterface();
49d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#endif
50d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com
51d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#if SK_ANGLE
52d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com/**
53d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com * Creates a GrGLInterface for an ANGLE context.
54d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com */
55d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.comconst GrGLInterface* GrGLCreateANGLEInterface();
56d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#endif
57373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.com
5874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com/**
5974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
6074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * CPU overhead.
6174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com */
62aae7c2a5b7a11616879e6179357cf38f5bff53aecommit-bot@chromium.orgconst SK_API GrGLInterface* GrGLCreateNullInterface();
6374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com
640da3719050473344b6013fd7b614611984f20effrobertphillips@google.com/**
65fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com * Creates a debugging GrGLInterface that doesn't draw anything. Used for
660da3719050473344b6013fd7b614611984f20effrobertphillips@google.com * finding memory leaks and invalid memory accesses.
670da3719050473344b6013fd7b614611984f20effrobertphillips@google.com */
680da3719050473344b6013fd7b614611984f20effrobertphillips@google.comconst GrGLInterface* GrGLCreateDebugInterface();
690da3719050473344b6013fd7b614611984f20effrobertphillips@google.com
7056bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
7156bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.comtypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
7256bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.comtypedef intptr_t GrGLInterfaceCallbackData;
7356bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#endif
7456bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com
75d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org/** Function that returns a new interface identical to "interface" but without support for
76d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org    GL_NV_path_rendering. */
77d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.orgconst GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*);
78d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org
79a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org/** Function that returns a new interface identical to "interface" but with support for
80a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org    test version of GL_EXT_debug_marker. */
81a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.orgconst GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*,
82a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org                                                     GrGLInsertEventMarkerProc insertEventMarkerFn,
83a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org                                                     GrGLPushGroupMarkerProc pushGroupMarkerFn,
84a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org                                                     GrGLPopGroupMarkerProc popGroupMarkerFn);
85a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org
86d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org/**
87cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrContext uses the following interface to make all calls into OpenGL. When a
88cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrContext is created it is given a GrGLInterface. The interface's function
89cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * pointers must be valid for the OpenGL context associated with the GrContext.
90cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * On some platforms, such as Windows, function pointers for OpenGL extensions
91cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * may vary between OpenGL contexts. So the caller must be careful to use a
92cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrGLInterface initialized for the correct context. All functions that should
93cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * be available based on the OpenGL's version and extension string must be
94cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * non-NULL or GrContext creation will fail. This can be tested with the
95cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * validate() method when the OpenGL context has been made current.
96bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com */
97a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.orgstruct SK_API GrGLInterface : public SkRefCnt {
98ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.comprivate:
999c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    // simple wrapper class that exists only to initialize a pointer to NULL
100ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    template <typename FNPTR_TYPE> class GLPtr {
101ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    public:
102ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        GLPtr() : fPtr(NULL) {}
103c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr operator=(FNPTR_TYPE ptr) { fPtr = ptr; return *this; }
104ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        operator FNPTR_TYPE() const { return fPtr; }
105ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    private:
106ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        FNPTR_TYPE fPtr;
107ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    };
108ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com
109c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    // This is a temporary workaround to keep Chromium's GrGLInterface factories compiling until
110c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    // they're updated to use the Functions struct.
111c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    template <typename FNPTR_TYPE> class GLPtrAlias {
112c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    public:
113c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtrAlias(GLPtr<FNPTR_TYPE>* base) : fBase(base) {}
114c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        void operator=(FNPTR_TYPE ptr) { *fBase = ptr; }
115c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    private:
116c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<FNPTR_TYPE>* fBase;
117c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    };
118c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
119a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.org    typedef SkRefCnt INHERITED;
12015e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com
121ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.compublic:
12215e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com    SK_DECLARE_INST_COUNT(GrGLInterface)
12315e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com
1240b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com    GrGLInterface();
1250b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com
126d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org    static GrGLInterface* NewClone(const GrGLInterface*);
127d8ed85101ee77ad2cb0c186a79d197698a75d246commit-bot@chromium.org
1289e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // Validates that the GrGLInterface supports its advertised standard. This means the necessary
1299e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // function pointers have been initialized for both the GL version and any advertised
1309e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // extensions.
1319e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    bool validate() const;
13289ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
1339e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    // Indicates the type of GL implementation
1349e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    union {
1359e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org        GrGLStandard fStandard;
1369e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org        GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
1379e90aed5de82732cc9921f01388d3063a41a053bcommit-bot@chromium.org    };
138b65e0cb8ad8a690498142d2b0097be250b0c7dfbtwiz@google.com
13990313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org    GrGLExtensions fExtensions;
14090313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org
141f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org    bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
14290313cc36a6f43a3e9d3818aca536cd6631c222bcommit-bot@chromium.org
143c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    /**
144c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org     * The function pointers are in a struct so that we can have a compiler generated assignment
145c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org     * operator.
146c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org     */
147c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    struct Functions {
148c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLActiveTextureProc> fActiveTexture;
149c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLAttachShaderProc> fAttachShader;
150c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBeginQueryProc> fBeginQuery;
151c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation;
152c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindBufferProc> fBindBuffer;
153c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation;
154c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
155c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindFramebufferProc> fBindFramebuffer;
156c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer;
157c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindTextureProc> fBindTexture;
158c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindVertexArrayProc> fBindVertexArray;
159c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBlendColorProc> fBlendColor;
160c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBlendFuncProc> fBlendFunc;
161c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer;
162c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBufferDataProc> fBufferData;
163c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBufferSubDataProc> fBufferSubData;
164c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
165c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLClearProc> fClear;
166c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLClearColorProc> fClearColor;
167c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLClearStencilProc> fClearStencil;
168c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLColorMaskProc> fColorMask;
169c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCompileShaderProc> fCompileShader;
170c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
17137d20f75320e8182f4cdbce5f3d59a339f915e05krajcevski        GLPtr<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D;
172c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
173f23809101e2467cb509ddc6ad4de50017c0a2094junov        GLPtr<GrGLCopyTextureCHROMIUMProc> fCopyTextureCHROMIUM;
174c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCreateProgramProc> fCreateProgram;
175c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCreateShaderProc> fCreateShader;
176c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCullFaceProc> fCullFace;
177c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers;
178c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
179c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteProgramProc> fDeleteProgram;
180c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteQueriesProc> fDeleteQueries;
181c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
182c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteShaderProc> fDeleteShader;
183c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteTexturesProc> fDeleteTextures;
184c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
185c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDepthMaskProc> fDepthMask;
186c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDisableProc> fDisable;
187c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
188c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawArraysProc> fDrawArrays;
189c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawBufferProc> fDrawBuffer;
190c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawBuffersProc> fDrawBuffers;
191c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDrawElementsProc> fDrawElements;
192c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLEnableProc> fEnable;
193c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
194c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLEndQueryProc> fEndQuery;
195c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFinishProc> fFinish;
196c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFlushProc> fFlush;
197160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org        GLPtr<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
198c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
199c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
200c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
201c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLFrontFaceProc> fFrontFace;
202c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenBuffersProc> fGenBuffers;
203c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers;
204c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap;
205c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenQueriesProc> fGenQueries;
206c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers;
207c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenTexturesProc> fGenTextures;
208c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays;
209c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
210c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetErrorProc> fGetError;
211c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
212c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetIntegervProc> fGetIntegerv;
213c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
214c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
215c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
216c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
217c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetQueryivProc> fGetQueryiv;
218c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
219c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetProgramivProc> fGetProgramiv;
220c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
221c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
222c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetShaderivProc> fGetShaderiv;
223c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetStringProc> fGetString;
224c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetStringiProc> fGetStringi;
225c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
226c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation;
227a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org        GLPtr<GrGLInsertEventMarkerProc> fInsertEventMarker;
228a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateBufferDataProc> fInvalidateBufferData;
229a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData;
230a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer;
231a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer;
232a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateTexImageProc> fInvalidateTexImage;
233a34bb60c4e319f2289106d519544fe09d43eabd5bsalomon@google.com        GLPtr<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage;
234c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLLineWidthProc> fLineWidth;
235c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLLinkProgramProc> fLinkProgram;
236c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLMapBufferProc> fMapBuffer;
237160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org        GLPtr<GrGLMapBufferRangeProc> fMapBufferRange;
238beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLMapBufferSubDataProc> fMapBufferSubData;
239beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLMapTexSubImage2DProc> fMapTexSubImage2D;
240f66967243c3732523c2035f7d6dbf65c2d20b264commit-bot@chromium.org        GLPtr<GrGLMatrixLoadfProc> fMatrixLoadf;
241f66967243c3732523c2035f7d6dbf65c2d20b264commit-bot@chromium.org        GLPtr<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity;
242c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPixelStoreiProc> fPixelStorei;
243a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org        GLPtr<GrGLPopGroupMarkerProc> fPopGroupMarker;
244a3baf3be0e2a3128fb73bd41d40d130f75a4dc86commit-bot@chromium.org        GLPtr<GrGLPushGroupMarkerProc> fPushGroupMarker;
245c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLQueryCounterProc> fQueryCounter;
246c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLReadBufferProc> fReadBuffer;
247c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLReadPixelsProc> fReadPixels;
248c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage;
249c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
250c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA
251c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
252c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  older extensions for performance reasons or due to ES3 driver bugs. We want the function
253c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  that creates the GrGLInterface to provide all available functions and internally
254c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  we will select among them. They all have a method called glRenderbufferStorageMultisample*.
255c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
256c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
257c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  variations.
258c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //
259c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
260c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  assume the function pointers for the standard (or equivalent GL_ARB) version have
261c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
262c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  functionality.
263c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
264c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
265c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
266c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  GL_APPLE_framebuffer_multisample
267c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
268c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
269c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
270c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        //  the standard function in ES3+ or GL 3.0+.
271c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
272c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
273c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
274c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLBindUniformLocation> fBindUniformLocation;
275c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
276c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
277c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLScissorProc> fScissor;
278c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLShaderSourceProc> fShaderSource;
279c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFuncProc> fStencilFunc;
280c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
281c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilMaskProc> fStencilMask;
282c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
283c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilOpProc> fStencilOp;
284c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate;
285c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexImage2DProc> fTexImage2D;
286c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexParameteriProc> fTexParameteri;
287c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexParameterivProc> fTexParameteriv;
288c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D;
289c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLTexStorage2DProc> fTexStorage2D;
290c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
291c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1fProc> fUniform1f;
292c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1iProc> fUniform1i;
293c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1fvProc> fUniform1fv;
294c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform1ivProc> fUniform1iv;
295c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2fProc> fUniform2f;
296c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2iProc> fUniform2i;
297c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2fvProc> fUniform2fv;
298c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform2ivProc> fUniform2iv;
299c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3fProc> fUniform3f;
300c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3iProc> fUniform3i;
301c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3fvProc> fUniform3fv;
302c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform3ivProc> fUniform3iv;
303c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4fProc> fUniform4f;
304c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4iProc> fUniform4i;
305c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4fvProc> fUniform4fv;
306c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniform4ivProc> fUniform4iv;
307c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
308c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
309c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
310c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUnmapBufferProc> fUnmapBuffer;
311beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData;
312beb8b3a4da83ce30e313e72ae0e444870acecb7ecommit-bot@chromium.org        GLPtr<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D;
313c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLUseProgramProc> fUseProgram;
314c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
315c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer;
316c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLViewportProc> fViewport;
317c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
318c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        // Experimental: Functions for GL_NV_path_rendering. These will be
319c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        // alphabetized with the above functions once this is fully supported
320c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        // (and functions we are unlikely to use will possibly be omitted).
32132b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen        GLPtr<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation;
322c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathCommandsProc> fPathCommands;
323c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathCoordsProc> fPathCoords;
324c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathParameteriProc> fPathParameteri;
325c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathParameterfProc> fPathParameterf;
326c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLGenPathsProc> fGenPaths;
327c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLDeletePathsProc> fDeletePaths;
3288dd90cb1fd541b9a2a264725e3dfeae736c91e22cdalton        GLPtr<GrGLIsPathProc> fIsPath;
329c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc;
330c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFillPathProc> fStencilFillPath;
331c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath;
332c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
333c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
334c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLPathTexGenProc> fPathTexGen;
335c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverFillPathProc> fCoverFillPath;
336c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath;
337c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
338c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org        GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
339c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton        // NV_path_rendering v1.2
340c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath;
341c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath;
342c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced;
343c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton        GLPtr<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced;
344c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton        // NV_path_rendering v1.3
34532b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen        GLPtr<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen;
346149b3ec2b1ccaf00e40bf296d2a3394852d73fe9cdalton        GLPtr<GrGLPathMemoryGlyphIndexArrayProc> fPathMemoryGlyphIndexArray;
347c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org    } fFunctions;
348c72425ae368bfcb47de7d2532eb90d305ec0d1cfcommit-bot@chromium.org
34956bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    // Per-GL func callback
35056bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
35156bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    GrGLInterfaceCallbackProc fCallback;
35256bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    GrGLInterfaceCallbackData fCallbackData;
35356bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#endif
354944bcf0acb78f8f9da01e991f1307629959e338absalomon
355944bcf0acb78f8f9da01e991f1307629959e338absalomon    // This exists for internal testing.
356944bcf0acb78f8f9da01e991f1307629959e338absalomon    virtual void abandon() const {}
357bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com};
35859a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
35959a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com#endif
360