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