GrGLInterface.h revision d3baf20dd1de9940717dd50b5c9ff6061561342e
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"
12a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.org#include "SkRefCnt.h"
1359a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
1459a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com////////////////////////////////////////////////////////////////////////////////
1559a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
1659a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com/**
1789ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com * Classifies GL contexts (currently as Desktop vs. ES2). This is a bitfield.
1889ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com * A GrGLInterface (defined below) may support multiple bindings.
1989ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com */
2089ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.comenum GrGLBinding {
2189ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com    kNone_GrGLBinding = 0x0,
2289ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
2389ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com    kDesktop_GrGLBinding = 0x01,
24eb170703fcd46bba729f2fdf7cd32460baaaaf06bsalomon@google.com    kES_GrGLBinding = 0x02,  // ES2+ only
2589ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
2689ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com    // for iteration of GrGLBindings
27b447d215772a5984dc776a8dc058e0711d566c04bsalomon@google.com    kFirstGrGLBinding = kDesktop_GrGLBinding,
28eb170703fcd46bba729f2fdf7cd32460baaaaf06bsalomon@google.com    kLastGrGLBinding = kES_GrGLBinding
2989ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com};
3089ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
3146b450a04973a0869c3e4c5fce1dc5bdb77042aabsalomon@google.com// Temporary alias until Chromium can be updated.
3246b450a04973a0869c3e4c5fce1dc5bdb77042aabsalomon@google.comstatic const GrGLBinding kES2_GrGLBinding = kES_GrGLBinding;
3346b450a04973a0869c3e4c5fce1dc5bdb77042aabsalomon@google.com
3489ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com////////////////////////////////////////////////////////////////////////////////
3589ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
3689ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com/**
370b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * Rather than depend on platform-specific GL headers and libraries, we require
380b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * the client to provide a struct of GL function pointers. This struct can be
390b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * specified per-GrContext as a parameter to GrContext::Create. If NULL is
400b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * passed to Create then the "default" GL interface is used. If the default is
410b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com * also NULL GrContext creation will fail.
420b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com *
436fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com * The default interface is returned by GrGLDefaultInterface. This function's
440da3719050473344b6013fd7b614611984f20effrobertphillips@google.com * implementation is platform-specific. Several have been provided, along with
450da3719050473344b6013fd7b614611984f20effrobertphillips@google.com * an implementation that simply returns NULL. It is implementation-specific
466fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com * whether the same GrGLInterface is returned or whether a new one is created
476fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com * at each call. Some platforms may not be able to use a single GrGLInterface
486fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com * because extension function ptrs vary across contexts. Note that GrGLInterface
49fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com * is ref-counted. So if the same object is returned by multiple calls to
506fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com * GrGLDefaultInterface, each should bump the ref count.
5156bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com *
5256bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a
5356bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com * callback function that will be called prior to each GL function call. See
5456bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com * comments in GrGLConfig.h
5559a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com */
560b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com
5759a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.comstruct GrGLInterface;
5859a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
596fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.comconst GrGLInterface* GrGLDefaultInterface();
6059a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
6157f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com/**
6257f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
6357f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * GLX on linux, AGL on Mac). On platforms that have context-specific function
64fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com * pointers for GL extensions (e.g. windows) the returned interface is only
6557f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * valid for the context that was current at creation.
6657f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com */
67373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.comconst GrGLInterface* GrGLCreateNativeInterface();
68373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.com
69d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#if SK_MESA
7057f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com/**
7157f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com * Creates a GrGLInterface for an OSMesa context.
7257f5d9854bfc78c347cb587e044fb3950f9ad298bsalomon@google.com */
73373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.comconst GrGLInterface* GrGLCreateMesaInterface();
74d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#endif
75d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com
76d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#if SK_ANGLE
77d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com/**
78d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com * Creates a GrGLInterface for an ANGLE context.
79d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com */
80d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.comconst GrGLInterface* GrGLCreateANGLEInterface();
81d3b9fbbc48c13a1b2a664cf7e01374a44c201f51robertphillips@google.com#endif
82373a6635b7190b4af4d265fdd4b70f102ec3a6fdbsalomon@google.com
8374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com/**
8474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
8574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * CPU overhead.
8674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com */
8774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comconst GrGLInterface* GrGLCreateNullInterface();
8874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com
890da3719050473344b6013fd7b614611984f20effrobertphillips@google.com/**
90fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com * Creates a debugging GrGLInterface that doesn't draw anything. Used for
910da3719050473344b6013fd7b614611984f20effrobertphillips@google.com * finding memory leaks and invalid memory accesses.
920da3719050473344b6013fd7b614611984f20effrobertphillips@google.com */
930da3719050473344b6013fd7b614611984f20effrobertphillips@google.comconst GrGLInterface* GrGLCreateDebugInterface();
940da3719050473344b6013fd7b614611984f20effrobertphillips@google.com
9556bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
9656bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.comtypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
9756bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.comtypedef intptr_t GrGLInterfaceCallbackData;
9856bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#endif
9956bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com
100bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com/*
101cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrContext uses the following interface to make all calls into OpenGL. When a
102cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrContext is created it is given a GrGLInterface. The interface's function
103cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * pointers must be valid for the OpenGL context associated with the GrContext.
104cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * On some platforms, such as Windows, function pointers for OpenGL extensions
105cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * may vary between OpenGL contexts. So the caller must be careful to use a
106cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * GrGLInterface initialized for the correct context. All functions that should
107cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * be available based on the OpenGL's version and extension string must be
108cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * non-NULL or GrContext creation will fail. This can be tested with the
109cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com * validate() method when the OpenGL context has been made current.
110bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com */
111a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.orgstruct SK_API GrGLInterface : public SkRefCnt {
112ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.comprivate:
1139c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    // simple wrapper class that exists only to initialize a pointer to NULL
114ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    template <typename FNPTR_TYPE> class GLPtr {
115ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    public:
116ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        GLPtr() : fPtr(NULL) {}
117ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        GLPtr operator =(FNPTR_TYPE ptr) { fPtr = ptr; return *this; }
118ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        operator FNPTR_TYPE() const { return fPtr; }
119ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    private:
120ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com        FNPTR_TYPE fPtr;
121ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    };
122ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com
123a4de8c257ea0be8ff7081f645249b6afe5c48e7ecommit-bot@chromium.org    typedef SkRefCnt INHERITED;
12415e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com
125ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.compublic:
12615e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com    SK_DECLARE_INST_COUNT(GrGLInterface)
12715e9d3e66e161ce23df30bc13f8a0c87d196b463robertphillips@google.com
1280b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com    GrGLInterface();
1290b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com
13089ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com    // Validates that the GrGLInterface supports a binding. This means that
13189ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com    // the GrGLinterface advertises the binding in fBindingsExported and all
132cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com    // the necessary function pointers have been initialized. The interface is
133cc61b1762814ada94970ac071aa2d0a96f897363bsalomon@google.com    // validated for the current OpenGL context.
13489ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com    bool validate(GrGLBinding binding) const;
13589ec61e33daa9cbac200d38f7c5bb8b88046999absalomon@google.com
136b65e0cb8ad8a690498142d2b0097be250b0c7dfbtwiz@google.com    // Indicator variable specifying the type of GL implementation
137ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    // exported:  GLES2 and/or Desktop.
138b65e0cb8ad8a690498142d2b0097be250b0c7dfbtwiz@google.com    GrGLBinding fBindingsExported;
139b65e0cb8ad8a690498142d2b0097be250b0c7dfbtwiz@google.com
140ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLActiveTextureProc> fActiveTexture;
141ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLAttachShaderProc> fAttachShader;
142ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBeginQueryProc> fBeginQuery;
143ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation;
144ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindBufferProc> fBindBuffer;
145ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation;
146ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
147ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindFramebufferProc> fBindFramebuffer;
148ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer;
149ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBindTextureProc> fBindTexture;
150ecd84842b3f65918eb040c53391172b6413fd7adbsalomon@google.com    GLPtr<GrGLBindVertexArrayProc> fBindVertexArray;
151ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBlendColorProc> fBlendColor;
152ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBlendFuncProc> fBlendFunc;
153ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer;
154ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBufferDataProc> fBufferData;
155ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLBufferSubDataProc> fBufferSubData;
156ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
157ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLClearProc> fClear;
158ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLClearColorProc> fClearColor;
159ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLClearStencilProc> fClearStencil;
16046fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLClientActiveTextureProc> fClientActiveTexture;
161ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLColorMaskProc> fColorMask;
162ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLCompileShaderProc> fCompileShader;
163ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
16498168bb394bbb10cd7d3468828e7dc4376a70e12commit-bot@chromium.org    GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
165ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLCreateProgramProc> fCreateProgram;
166ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLCreateShaderProc> fCreateShader;
167ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLCullFaceProc> fCullFace;
168ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers;
169ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
170ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteProgramProc> fDeleteProgram;
171ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteQueriesProc> fDeleteQueries;
172ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
173ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteShaderProc> fDeleteShader;
174ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDeleteTexturesProc> fDeleteTextures;
175ecd84842b3f65918eb040c53391172b6413fd7adbsalomon@google.com    GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
176ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDepthMaskProc> fDepthMask;
177ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDisableProc> fDisable;
17846fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLDisableClientStateProc> fDisableClientState;
179ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
180ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDrawArraysProc> fDrawArrays;
181ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDrawBufferProc> fDrawBuffer;
182ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDrawBuffersProc> fDrawBuffers;
183ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLDrawElementsProc> fDrawElements;
184ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLEnableProc> fEnable;
18546fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLEnableClientStateProc> fEnableClientState;
186ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
187ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLEndQueryProc> fEndQuery;
188ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLFinishProc> fFinish;
189ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLFlushProc> fFlush;
190ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
191ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
192f3a60c09b975f50bbd14215df10effffd2fd46e8bsalomon@google.com    GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
193ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLFrontFaceProc> fFrontFace;
194ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGenBuffersProc> fGenBuffers;
195ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers;
196cffff79a40bd7672e13b31b9801a3f3cda64875ecommit-bot@chromium.org    GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap;
197ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGenQueriesProc> fGenQueries;
198ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers;
199ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGenTexturesProc> fGenTextures;
200ecd84842b3f65918eb040c53391172b6413fd7adbsalomon@google.com    GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays;
201ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
202ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetErrorProc> fGetError;
203ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
204ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetIntegervProc> fGetIntegerv;
205ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
206ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
207ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
208ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
209ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetQueryivProc> fGetQueryiv;
210ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
211ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetProgramivProc> fGetProgramiv;
212ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
213ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
214ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetShaderivProc> fGetShaderiv;
215ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetStringProc> fGetString;
2161744f97ea73384b9f75b0ccee0a36a213c681d3absalomon@google.com    GLPtr<GrGLGetStringiProc> fGetStringi;
217ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
218ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation;
219ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLLineWidthProc> fLineWidth;
220ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLLinkProgramProc> fLinkProgram;
221f5897f83e65f18a85f71f2d3357df13c5443e89fcommit-bot@chromium.org    GLPtr<GrGLLoadIdentityProc> fLoadIdentity;
222f5897f83e65f18a85f71f2d3357df13c5443e89fcommit-bot@chromium.org    GLPtr<GrGLLoadMatrixfProc> fLoadMatrixf;
223ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLMapBufferProc> fMapBuffer;
224f5897f83e65f18a85f71f2d3357df13c5443e89fcommit-bot@chromium.org    GLPtr<GrGLMatrixModeProc> fMatrixMode;
225ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLPixelStoreiProc> fPixelStorei;
226ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLQueryCounterProc> fQueryCounter;
227ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLReadBufferProc> fReadBuffer;
228ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLReadPixelsProc> fReadPixels;
229ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage;
230a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org
231a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org#if !GR_GL_IGNORE_ES3_MSAA
232a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA
233a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
234a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  older extensions for performance reasons or due to ES3 driver bugs. We want the function
235a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  that creates the GrGLInterface to provide all available functions and internally
236a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  we will select among them. They all have a method called glRenderbufferStorageMultisample*.
237a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
238a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
239a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  variations.
240a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //
241a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
242a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  assume the function pointers for the standard (or equivalent GL_ARB) version have
243a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
244a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  functionality.
245a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org
246a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
247a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
248a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  GL_APPLE_framebuffer_multisample
249a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
250a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org#endif
251a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
252a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org    //  the standard function in ES3+ or GL 3.0+.
253ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
254a8e5a06f69b7e0cb17a4b3203f0a7a1d52aa73eccommit-bot@chromium.org
255d3baf20dd1de9940717dd50b5c9ff6061561342ecommit-bot@chromium.org    // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
256d3baf20dd1de9940717dd50b5c9ff6061561342ecommit-bot@chromium.org    GLPtr<GrGLBindUniformLocation> fBindUniformLocation;
257d3baf20dd1de9940717dd50b5c9ff6061561342ecommit-bot@chromium.org
258ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
259ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLScissorProc> fScissor;
260ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLShaderSourceProc> fShaderSource;
261ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLStencilFuncProc> fStencilFunc;
262ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
263ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLStencilMaskProc> fStencilMask;
264ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
265ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLStencilOpProc> fStencilOp;
266ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate;
26746fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLTexGenfProc> fTexGenf;
26846fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLTexGenfvProc> fTexGenfv;
26946fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLTexGeniProc> fTexGeni;
270ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLTexImage2DProc> fTexImage2D;
271ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLTexParameteriProc> fTexParameteri;
2724d063dea5ee9d5a62e3566a07cb8386cb1a59585bsalomon@google.com    GLPtr<GrGLTexParameterivProc> fTexParameteriv;
273ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D;
274ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLTexStorage2DProc> fTexStorage2D;
275a6ffb58b109f71512bde4e14d06a655914578c8drobertphillips@google.com    GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
276ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform1fProc> fUniform1f;
277ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform1iProc> fUniform1i;
278ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform1fvProc> fUniform1fv;
279ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform1ivProc> fUniform1iv;
280ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform2fProc> fUniform2f;
281ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform2iProc> fUniform2i;
282ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform2fvProc> fUniform2fv;
283ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform2ivProc> fUniform2iv;
284ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform3fProc> fUniform3f;
285ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform3iProc> fUniform3i;
286ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform3fvProc> fUniform3fv;
287ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform3ivProc> fUniform3iv;
288ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform4fProc> fUniform4f;
289ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform4iProc> fUniform4i;
290ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform4fvProc> fUniform4fv;
291ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniform4ivProc> fUniform4iv;
292ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
293ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
294ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
295ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUnmapBufferProc> fUnmapBuffer;
296ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLUseProgramProc> fUseProgram;
297ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
298ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer;
29946fbfe0cd1bbe60fd15ce52e784f5d51450ff5fdcommit-bot@chromium.org    GLPtr<GrGLVertexPointerProc> fVertexPointer;
300ba800e22253d96a7ba6aab09e969e1581f2b487dbsalomon@google.com    GLPtr<GrGLViewportProc> fViewport;
301271cffc77bd2fcb3458559e509634442517ca1e9bsalomon@google.com
302fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    // Experimental: Functions for GL_NV_path_rendering. These will be
303fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com    // alphabetized with the above functions once this is fully supported
304fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    // (and functions we are unlikely to use will possibly be omitted).
305fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathCommandsProc> fPathCommands;
306fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathCoordsProc> fPathCoords;
307fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathSubCommandsProc> fPathSubCommands;
308fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathSubCoordsProc> fPathSubCoords;
309fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathStringProc> fPathString;
310fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathGlyphsProc> fPathGlyphs;
311fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathGlyphRangeProc> fPathGlyphRange;
312fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLWeightPathsProc> fWeightPaths;
313fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLCopyPathProc> fCopyPath;
314fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLInterpolatePathsProc> fInterpolatePaths;
315fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLTransformPathProc> fTransformPath;
316fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathParameterivProc> fPathParameteriv;
317fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathParameteriProc> fPathParameteri;
318fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathParameterfvProc> fPathParameterfv;
319fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathParameterfProc> fPathParameterf;
320fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathDashArrayProc> fPathDashArray;
321fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGenPathsProc> fGenPaths;
322fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLDeletePathsProc> fDeletePaths;
323fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLIsPathProc> fIsPath;
324fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc;
325fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathStencilDepthOffsetProc> fPathStencilDepthOffset;
326fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLStencilFillPathProc> fStencilFillPath;
327fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath;
328fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
329fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
330fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathCoverDepthFuncProc> fPathCoverDepthFunc;
331fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathColorGenProc> fPathColorGen;
332fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathTexGenProc> fPathTexGen;
333fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPathFogGenProc> fPathFogGen;
334fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLCoverFillPathProc> fCoverFillPath;
335fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath;
336fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
337fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
338fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathParameterivProc> fGetPathParameteriv;
339fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathParameterfvProc> fGetPathParameterfv;
340fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathCommandsProc> fGetPathCommands;
341fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathCoordsProc> fGetPathCoords;
342fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathDashArrayProc> fGetPathDashArray;
343fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathMetricsProc> fGetPathMetrics;
344fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathMetricRangeProc> fGetPathMetricRange;
345fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathSpacingProc> fGetPathSpacing;
346fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathColorGenivProc> fGetPathColorGeniv;
347fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathColorGenfvProc> fGetPathColorGenfv;
348fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathTexGenivProc> fGetPathTexGeniv;
349fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathTexGenfvProc> fGetPathTexGenfv;
350fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLIsPointInFillPathProc> fIsPointInFillPath;
351fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLIsPointInStrokePathProc> fIsPointInStrokePath;
352fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLGetPathLengthProc> fGetPathLength;
353fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com    GLPtr<GrGLPointAlongPathProc> fPointAlongPath;
354fe11cb6486adfccc1a9ca9658ae25907192a8642bsalomon@google.com
35556bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    // Per-GL func callback
35656bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
35756bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    GrGLInterfaceCallbackProc fCallback;
35856bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com    GrGLInterfaceCallbackData fCallbackData;
35956bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com#endif
36056bfc5acc210987838744eece7383bc2f6b34915bsalomon@google.com
361bf2a46941e8fdebfcd24ea8f7184779021898225bsalomon@google.com};
36259a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com
36359a190bcab5d4b2bf03f8f10cb6a581d19fed403twiz@google.com#endif
364