1876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com/*
2876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * Copyright 2011 Google Inc.
3876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com *
4876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be
5876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * found in the LICENSE file.
6876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com */
7876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
8876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#ifndef GrGLInterface_DEFINED
9876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#define GrGLInterface_DEFINED
10876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
11bfd7ce57c0aad1e408c18c3a8139c0f914c945e6bsalomon@google.com#include "GrGLFunctions.h"
1219833a9af574c703e527d2a7c82ff81b3d3bb3d9commit-bot@chromium.org#include "SkRefCnt.h"
13876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
14876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com////////////////////////////////////////////////////////////////////////////////
15876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
16876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com/**
1759502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com * Classifies GL contexts (currently as Desktop vs. ES2). This is a bitfield.
1859502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com * A GrGLInterface (defined below) may support multiple bindings.
1959502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com */
2059502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.comenum GrGLBinding {
2159502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com    kNone_GrGLBinding = 0x0,
2259502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com
2359502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com    kDesktop_GrGLBinding = 0x01,
24536e306af1cd1fdaf898396ca96318ad498cfc87bsalomon@google.com    kES_GrGLBinding = 0x02,  // ES2+ only
2559502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com
2659502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com    // for iteration of GrGLBindings
279c8e0ac3d11615f62aeb48568070abc6e5aa64dcbsalomon@google.com    kFirstGrGLBinding = kDesktop_GrGLBinding,
28536e306af1cd1fdaf898396ca96318ad498cfc87bsalomon@google.com    kLastGrGLBinding = kES_GrGLBinding
2959502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com};
3059502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com
31d1caa7e17d2a6ec0c61344e99649b50f99a1d6d6bsalomon@google.com// Temporary alias until Chromium can be updated.
32d1caa7e17d2a6ec0c61344e99649b50f99a1d6d6bsalomon@google.comstatic const GrGLBinding kES2_GrGLBinding = kES_GrGLBinding;
33d1caa7e17d2a6ec0c61344e99649b50f99a1d6d6bsalomon@google.com
3459502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com////////////////////////////////////////////////////////////////////////////////
3559502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com
3659502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com/**
37876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * Rather than depend on platform-specific GL headers and libraries, we require
38876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * the client to provide a struct of GL function pointers. This struct can be
39876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * specified per-GrContext as a parameter to GrContext::Create. If NULL is
40876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * passed to Create then the "default" GL interface is used. If the default is
41876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * also NULL GrContext creation will fail.
42876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com *
43876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * The default interface is returned by GrGLDefaultInterface. This function's
4423918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.com * implementation is platform-specific. Several have been provided, along with
4523918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.com * an implementation that simply returns NULL. It is implementation-specific
46876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * whether the same GrGLInterface is returned or whether a new one is created
47876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * at each call. Some platforms may not be able to use a single GrGLInterface
48876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * because extension function ptrs vary across contexts. Note that GrGLInterface
491fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com * is ref-counted. So if the same object is returned by multiple calls to
50876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * GrGLDefaultInterface, each should bump the ref count.
51876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com *
52876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a
53876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * callback function that will be called prior to each GL function call. See
54876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com * comments in GrGLConfig.h
55876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com */
56876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
57876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.comstruct GrGLInterface;
58876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
59876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.comconst GrGLInterface* GrGLDefaultInterface();
60876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
61e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com/**
62e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
63e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com * GLX on linux, AGL on Mac). On platforms that have context-specific function
641fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com * pointers for GL extensions (e.g. windows) the returned interface is only
65e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com * valid for the context that was current at creation.
66e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com */
67e58107a546878475c7e7b718af8cec550f75cc5bbsalomon@google.comconst GrGLInterface* GrGLCreateNativeInterface();
68e58107a546878475c7e7b718af8cec550f75cc5bbsalomon@google.com
69d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#if SK_MESA
70e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com/**
71e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com * Creates a GrGLInterface for an OSMesa context.
72e3fffbf73859285f4e221dfb48926c88f1f92eb2bsalomon@google.com */
73e58107a546878475c7e7b718af8cec550f75cc5bbsalomon@google.comconst GrGLInterface* GrGLCreateMesaInterface();
74d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#endif
75d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com
76d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#if SK_ANGLE
77d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com/**
78d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com * Creates a GrGLInterface for an ANGLE context.
79d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com */
80d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.comconst GrGLInterface* GrGLCreateANGLEInterface();
81d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#endif
82e58107a546878475c7e7b718af8cec550f75cc5bbsalomon@google.com
8330e54d65a96995f2cfd1a160e4489637c5b41ffebsalomon@google.com/**
8430e54d65a96995f2cfd1a160e4489637c5b41ffebsalomon@google.com * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
8530e54d65a96995f2cfd1a160e4489637c5b41ffebsalomon@google.com * CPU overhead.
8630e54d65a96995f2cfd1a160e4489637c5b41ffebsalomon@google.com */
871ae47addbe902224434131fc4390404a70272c49commit-bot@chromium.orgconst SK_API GrGLInterface* GrGLCreateNullInterface();
8830e54d65a96995f2cfd1a160e4489637c5b41ffebsalomon@google.com
8923918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.com/**
901fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com * Creates a debugging GrGLInterface that doesn't draw anything. Used for
9123918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.com * finding memory leaks and invalid memory accesses.
9223918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.com */
9323918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.comconst GrGLInterface* GrGLCreateDebugInterface();
9423918895cfc517934d8b0bcee6e3dec0fe54479frobertphillips@google.com
95876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
96876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.comtypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
97876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.comtypedef intptr_t GrGLInterfaceCallbackData;
98876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#endif
99876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
100876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com/*
101b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * GrContext uses the following interface to make all calls into OpenGL. When a
102b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * GrContext is created it is given a GrGLInterface. The interface's function
103b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * pointers must be valid for the OpenGL context associated with the GrContext.
104b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * On some platforms, such as Windows, function pointers for OpenGL extensions
105b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * may vary between OpenGL contexts. So the caller must be careful to use a
106b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * GrGLInterface initialized for the correct context. All functions that should
107b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * be available based on the OpenGL's version and extension string must be
108b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * non-NULL or GrContext creation will fail. This can be tested with the
109b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com * validate() method when the OpenGL context has been made current.
110876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com */
11119833a9af574c703e527d2a7c82ff81b3d3bb3d9commit-bot@chromium.orgstruct SK_API GrGLInterface : public SkRefCnt {
112b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.comprivate:
11357ac1f62662752cb47458cdbbcb6520dd11c2df9bsalomon@google.com    // simple wrapper class that exists only to initialize a pointer to NULL
114b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    template <typename FNPTR_TYPE> class GLPtr {
115b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    public:
116b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com        GLPtr() : fPtr(NULL) {}
117b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com        GLPtr operator =(FNPTR_TYPE ptr) { fPtr = ptr; return *this; }
118b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com        operator FNPTR_TYPE() const { return fPtr; }
119b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    private:
120b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com        FNPTR_TYPE fPtr;
121b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    };
122b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com
12319833a9af574c703e527d2a7c82ff81b3d3bb3d9commit-bot@chromium.org    typedef SkRefCnt INHERITED;
124f5c20afa64879f855e3a5e1834158fbc26455dffrobertphillips@google.com
125b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.compublic:
126f5c20afa64879f855e3a5e1834158fbc26455dffrobertphillips@google.com    SK_DECLARE_INST_COUNT(GrGLInterface)
127f5c20afa64879f855e3a5e1834158fbc26455dffrobertphillips@google.com
128876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com    GrGLInterface();
129876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
13059502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com    // Validates that the GrGLInterface supports a binding. This means that
13159502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com    // the GrGLinterface advertises the binding in fBindingsExported and all
132b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com    // the necessary function pointers have been initialized. The interface is
133b0bf9db8255a36a00deff572d1f7ec1b7cdac27cbsalomon@google.com    // validated for the current OpenGL context.
13459502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com    bool validate(GrGLBinding binding) const;
13559502c0c349a8c16bf22ff2f6b5c5a425847e31ebsalomon@google.com
136876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com    // Indicator variable specifying the type of GL implementation
137b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    // exported:  GLES2 and/or Desktop.
138876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com    GrGLBinding fBindingsExported;
139876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
140b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLActiveTextureProc> fActiveTexture;
141b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLAttachShaderProc> fAttachShader;
142b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBeginQueryProc> fBeginQuery;
143b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation;
144b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindBufferProc> fBindBuffer;
145b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation;
146b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
147b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindFramebufferProc> fBindFramebuffer;
148b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer;
149b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBindTextureProc> fBindTexture;
1509a46f0a0bef797bac9fa6a16753a57685ccd597absalomon@google.com    GLPtr<GrGLBindVertexArrayProc> fBindVertexArray;
151b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBlendColorProc> fBlendColor;
152b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBlendFuncProc> fBlendFunc;
153b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer;
154b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBufferDataProc> fBufferData;
155b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLBufferSubDataProc> fBufferSubData;
156b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
157b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLClearProc> fClear;
158b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLClearColorProc> fClearColor;
159b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLClearStencilProc> fClearStencil;
1605d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLClientActiveTextureProc> fClientActiveTexture;
161b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLColorMaskProc> fColorMask;
162b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLCompileShaderProc> fCompileShader;
163b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
164b4aab8551c2484cdc246fb10f4eced04bdb66f66commit-bot@chromium.org    GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
165b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLCreateProgramProc> fCreateProgram;
166b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLCreateShaderProc> fCreateShader;
167b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLCullFaceProc> fCullFace;
168b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers;
169b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
170b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteProgramProc> fDeleteProgram;
171b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteQueriesProc> fDeleteQueries;
172b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
173b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteShaderProc> fDeleteShader;
174b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDeleteTexturesProc> fDeleteTextures;
1759a46f0a0bef797bac9fa6a16753a57685ccd597absalomon@google.com    GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
176b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDepthMaskProc> fDepthMask;
177b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDisableProc> fDisable;
1785d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLDisableClientStateProc> fDisableClientState;
179b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
180b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDrawArraysProc> fDrawArrays;
181b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDrawBufferProc> fDrawBuffer;
182b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDrawBuffersProc> fDrawBuffers;
183b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLDrawElementsProc> fDrawElements;
184b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLEnableProc> fEnable;
1855d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLEnableClientStateProc> fEnableClientState;
186b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
187b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLEndQueryProc> fEndQuery;
188b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLFinishProc> fFinish;
189b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLFlushProc> fFlush;
190b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
191b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
1920bbc99f219c9be6a225127f53ee4817fdb32b5a7bsalomon@google.com    GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
193b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLFrontFaceProc> fFrontFace;
194b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGenBuffersProc> fGenBuffers;
195b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers;
1960ff3aefe0b1053dc95c5ac0df3ad6e104a19201acommit-bot@chromium.org    GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap;
197b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGenQueriesProc> fGenQueries;
198b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers;
199b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGenTexturesProc> fGenTextures;
2009a46f0a0bef797bac9fa6a16753a57685ccd597absalomon@google.com    GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays;
201b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
202b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetErrorProc> fGetError;
203b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
204b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetIntegervProc> fGetIntegerv;
205b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
206b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
207b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
208b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
209b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetQueryivProc> fGetQueryiv;
210b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
211b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetProgramivProc> fGetProgramiv;
212b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
213b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
214b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetShaderivProc> fGetShaderiv;
215b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetStringProc> fGetString;
2166b5111dbe767bb1a59cabe65f359f6a0a5f89af6bsalomon@google.com    GLPtr<GrGLGetStringiProc> fGetStringi;
217b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
218b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation;
219b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLLineWidthProc> fLineWidth;
220b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLLinkProgramProc> fLinkProgram;
2218a23552a6aa55a1f4b380a5ec21c257568f0247acommit-bot@chromium.org    GLPtr<GrGLLoadIdentityProc> fLoadIdentity;
2228a23552a6aa55a1f4b380a5ec21c257568f0247acommit-bot@chromium.org    GLPtr<GrGLLoadMatrixfProc> fLoadMatrixf;
223b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLMapBufferProc> fMapBuffer;
2248a23552a6aa55a1f4b380a5ec21c257568f0247acommit-bot@chromium.org    GLPtr<GrGLMatrixModeProc> fMatrixMode;
225b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLPixelStoreiProc> fPixelStorei;
226b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLQueryCounterProc> fQueryCounter;
227b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLReadBufferProc> fReadBuffer;
228b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLReadPixelsProc> fReadPixels;
229b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage;
2304463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org
2314463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org#if !GR_GL_IGNORE_ES3_MSAA
2324463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA
2334463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
2344463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  older extensions for performance reasons or due to ES3 driver bugs. We want the function
2354463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  that creates the GrGLInterface to provide all available functions and internally
2364463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  we will select among them. They all have a method called glRenderbufferStorageMultisample*.
2374463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
2384463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
2394463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  variations.
2404463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //
2414463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
2424463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  assume the function pointers for the standard (or equivalent GL_ARB) version have
2434463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
2444463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  functionality.
2454463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org
2464463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
2474463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
2484463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  GL_APPLE_framebuffer_multisample
2494463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
2504463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org#endif
2514463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
2524463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org    //  the standard function in ES3+ or GL 3.0+.
253b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
2544463fac7395b5a85284ff5330204820e5f81fdb7commit-bot@chromium.org
255231ab1c1f4d64496dcefa6c12294db583f1a6c21commit-bot@chromium.org    // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
256231ab1c1f4d64496dcefa6c12294db583f1a6c21commit-bot@chromium.org    GLPtr<GrGLBindUniformLocation> fBindUniformLocation;
257231ab1c1f4d64496dcefa6c12294db583f1a6c21commit-bot@chromium.org
258b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
259b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLScissorProc> fScissor;
260b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLShaderSourceProc> fShaderSource;
261b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLStencilFuncProc> fStencilFunc;
262b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
263b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLStencilMaskProc> fStencilMask;
264b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
265b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLStencilOpProc> fStencilOp;
266b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate;
2675d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLTexGenfProc> fTexGenf;
2685d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLTexGenfvProc> fTexGenfv;
2695d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLTexGeniProc> fTexGeni;
270b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLTexImage2DProc> fTexImage2D;
271b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLTexParameteriProc> fTexParameteri;
272aea1b0fb97b3d75b4340ebd8c198c0b6de44c5eebsalomon@google.com    GLPtr<GrGLTexParameterivProc> fTexParameteriv;
273b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D;
274b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLTexStorage2DProc> fTexStorage2D;
275c0a0d2a2e7925d83012c8c37a7223a7285cfce26robertphillips@google.com    GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
276b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform1fProc> fUniform1f;
277b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform1iProc> fUniform1i;
278b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform1fvProc> fUniform1fv;
279b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform1ivProc> fUniform1iv;
280b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform2fProc> fUniform2f;
281b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform2iProc> fUniform2i;
282b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform2fvProc> fUniform2fv;
283b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform2ivProc> fUniform2iv;
284b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform3fProc> fUniform3f;
285b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform3iProc> fUniform3i;
286b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform3fvProc> fUniform3fv;
287b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform3ivProc> fUniform3iv;
288b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform4fProc> fUniform4f;
289b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform4iProc> fUniform4i;
290b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform4fvProc> fUniform4fv;
291b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniform4ivProc> fUniform4iv;
292b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
293b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
294b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
295b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUnmapBufferProc> fUnmapBuffer;
296b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLUseProgramProc> fUseProgram;
297b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
298b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer;
2995d106f23702893cdcb0854241bd78b431facf145commit-bot@chromium.org    GLPtr<GrGLVertexPointerProc> fVertexPointer;
300b5d93a4daa6751c909d711e299f3ad5393079874bsalomon@google.com    GLPtr<GrGLViewportProc> fViewport;
301876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
302b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    // Experimental: Functions for GL_NV_path_rendering. These will be
3031fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com    // alphabetized with the above functions once this is fully supported
304b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    // (and functions we are unlikely to use will possibly be omitted).
305b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathCommandsProc> fPathCommands;
306b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathCoordsProc> fPathCoords;
307b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathSubCommandsProc> fPathSubCommands;
308b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathSubCoordsProc> fPathSubCoords;
309b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathStringProc> fPathString;
310b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathGlyphsProc> fPathGlyphs;
311b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathGlyphRangeProc> fPathGlyphRange;
312b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLWeightPathsProc> fWeightPaths;
313b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLCopyPathProc> fCopyPath;
314b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLInterpolatePathsProc> fInterpolatePaths;
315b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLTransformPathProc> fTransformPath;
316b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathParameterivProc> fPathParameteriv;
317b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathParameteriProc> fPathParameteri;
318b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathParameterfvProc> fPathParameterfv;
319b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathParameterfProc> fPathParameterf;
320b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathDashArrayProc> fPathDashArray;
321b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGenPathsProc> fGenPaths;
322b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLDeletePathsProc> fDeletePaths;
323b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLIsPathProc> fIsPath;
324b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc;
325b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathStencilDepthOffsetProc> fPathStencilDepthOffset;
326b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLStencilFillPathProc> fStencilFillPath;
327b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath;
328b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
329b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
330b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathCoverDepthFuncProc> fPathCoverDepthFunc;
331b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathColorGenProc> fPathColorGen;
332b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathTexGenProc> fPathTexGen;
333b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPathFogGenProc> fPathFogGen;
334b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLCoverFillPathProc> fCoverFillPath;
335b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath;
336b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
337b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
338b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathParameterivProc> fGetPathParameteriv;
339b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathParameterfvProc> fGetPathParameterfv;
340b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathCommandsProc> fGetPathCommands;
341b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathCoordsProc> fGetPathCoords;
342b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathDashArrayProc> fGetPathDashArray;
343b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathMetricsProc> fGetPathMetrics;
344b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathMetricRangeProc> fGetPathMetricRange;
345b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathSpacingProc> fGetPathSpacing;
346b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathColorGenivProc> fGetPathColorGeniv;
347b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathColorGenfvProc> fGetPathColorGenfv;
348b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathTexGenivProc> fGetPathTexGeniv;
349b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathTexGenfvProc> fGetPathTexGenfv;
350b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLIsPointInFillPathProc> fIsPointInFillPath;
351b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLIsPointInStrokePathProc> fIsPointInStrokePath;
352b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLGetPathLengthProc> fGetPathLength;
353b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com    GLPtr<GrGLPointAlongPathProc> fPointAlongPath;
354b3fc17b03bed59cae2c22d1f73e4c4af403dbab0bsalomon@google.com
355876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com    // Per-GL func callback
356876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#if GR_GL_PER_GL_FUNC_CALLBACK
357876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com    GrGLInterfaceCallbackProc fCallback;
358876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com    GrGLInterfaceCallbackData fCallbackData;
359876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#endif
360876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
361876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com};
362876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com
363876688bbdef378c43ef01f50e52fa8539f28ec33bsalomon@google.com#endif
364