gfx/skia/trunk/include/gpu/gl/GrGLInterface.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/skia/trunk/include/gpu/gl/GrGLInterface.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,368 @@
     1.4 +/*
     1.5 + * Copyright 2011 Google Inc.
     1.6 + *
     1.7 + * Use of this source code is governed by a BSD-style license that can be
     1.8 + * found in the LICENSE file.
     1.9 + */
    1.10 +
    1.11 +#ifndef GrGLInterface_DEFINED
    1.12 +#define GrGLInterface_DEFINED
    1.13 +
    1.14 +#include "GrGLFunctions.h"
    1.15 +#include "GrGLExtensions.h"
    1.16 +#include "SkRefCnt.h"
    1.17 +
    1.18 +////////////////////////////////////////////////////////////////////////////////
    1.19 +
    1.20 +/**
    1.21 + * Rather than depend on platform-specific GL headers and libraries, we require
    1.22 + * the client to provide a struct of GL function pointers. This struct can be
    1.23 + * specified per-GrContext as a parameter to GrContext::Create. If NULL is
    1.24 + * passed to Create then a "default" GL interface is created. If the default is
    1.25 + * also NULL GrContext creation will fail.
    1.26 + *
    1.27 + * The default interface is returned by GrGLDefaultInterface. This function's
    1.28 + * implementation is platform-specific. Several have been provided, along with
    1.29 + * an implementation that simply returns NULL.
    1.30 + *
    1.31 + * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a
    1.32 + * callback function that will be called prior to each GL function call. See
    1.33 + * comments in GrGLConfig.h
    1.34 + */
    1.35 +
    1.36 +struct GrGLInterface;
    1.37 +
    1.38 +const GrGLInterface* GrGLDefaultInterface();
    1.39 +
    1.40 +/**
    1.41 + * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
    1.42 + * GLX on linux, AGL on Mac). The interface is only valid for the GL context
    1.43 + * that is current when the interface is created.
    1.44 + */
    1.45 +const GrGLInterface* GrGLCreateNativeInterface();
    1.46 +
    1.47 +#if SK_MESA
    1.48 +/**
    1.49 + * Creates a GrGLInterface for an OSMesa context.
    1.50 + */
    1.51 +const GrGLInterface* GrGLCreateMesaInterface();
    1.52 +#endif
    1.53 +
    1.54 +#if SK_ANGLE
    1.55 +/**
    1.56 + * Creates a GrGLInterface for an ANGLE context.
    1.57 + */
    1.58 +const GrGLInterface* GrGLCreateANGLEInterface();
    1.59 +#endif
    1.60 +
    1.61 +/**
    1.62 + * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
    1.63 + * CPU overhead.
    1.64 + */
    1.65 +const SK_API GrGLInterface* GrGLCreateNullInterface();
    1.66 +
    1.67 +/**
    1.68 + * Creates a debugging GrGLInterface that doesn't draw anything. Used for
    1.69 + * finding memory leaks and invalid memory accesses.
    1.70 + */
    1.71 +const GrGLInterface* GrGLCreateDebugInterface();
    1.72 +
    1.73 +#if GR_GL_PER_GL_FUNC_CALLBACK
    1.74 +typedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
    1.75 +typedef intptr_t GrGLInterfaceCallbackData;
    1.76 +#endif
    1.77 +
    1.78 +/** Function that returns a new interface identical to "interface" but without support for
    1.79 +    GL_NV_path_rendering. */
    1.80 +const GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*);
    1.81 +
    1.82 +/** Function that returns a new interface identical to "interface" but with support for
    1.83 +    test version of GL_EXT_debug_marker. */
    1.84 +const GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*,
    1.85 +                                                     GrGLInsertEventMarkerProc insertEventMarkerFn,
    1.86 +                                                     GrGLPushGroupMarkerProc pushGroupMarkerFn,
    1.87 +                                                     GrGLPopGroupMarkerProc popGroupMarkerFn);
    1.88 +
    1.89 +/**
    1.90 + * GrContext uses the following interface to make all calls into OpenGL. When a
    1.91 + * GrContext is created it is given a GrGLInterface. The interface's function
    1.92 + * pointers must be valid for the OpenGL context associated with the GrContext.
    1.93 + * On some platforms, such as Windows, function pointers for OpenGL extensions
    1.94 + * may vary between OpenGL contexts. So the caller must be careful to use a
    1.95 + * GrGLInterface initialized for the correct context. All functions that should
    1.96 + * be available based on the OpenGL's version and extension string must be
    1.97 + * non-NULL or GrContext creation will fail. This can be tested with the
    1.98 + * validate() method when the OpenGL context has been made current.
    1.99 + */
   1.100 +struct SK_API GrGLInterface : public SkRefCnt {
   1.101 +private:
   1.102 +    // simple wrapper class that exists only to initialize a pointer to NULL
   1.103 +    template <typename FNPTR_TYPE> class GLPtr {
   1.104 +    public:
   1.105 +        GLPtr() : fPtr(NULL) {}
   1.106 +        GLPtr operator=(FNPTR_TYPE ptr) { fPtr = ptr; return *this; }
   1.107 +        operator FNPTR_TYPE() const { return fPtr; }
   1.108 +    private:
   1.109 +        FNPTR_TYPE fPtr;
   1.110 +    };
   1.111 +
   1.112 +    // This is a temporary workaround to keep Chromium's GrGLInterface factories compiling until
   1.113 +    // they're updated to use the Functions struct.
   1.114 +    template <typename FNPTR_TYPE> class GLPtrAlias {
   1.115 +    public:
   1.116 +        GLPtrAlias(GLPtr<FNPTR_TYPE>* base) : fBase(base) {}
   1.117 +        void operator=(FNPTR_TYPE ptr) { *fBase = ptr; }
   1.118 +    private:
   1.119 +        GLPtr<FNPTR_TYPE>* fBase;
   1.120 +    };
   1.121 +
   1.122 +    typedef SkRefCnt INHERITED;
   1.123 +
   1.124 +public:
   1.125 +    SK_DECLARE_INST_COUNT(GrGLInterface)
   1.126 +
   1.127 +    GrGLInterface();
   1.128 +
   1.129 +    static GrGLInterface* NewClone(const GrGLInterface*);
   1.130 +
   1.131 +    // Validates that the GrGLInterface supports its advertised standard. This means the necessary
   1.132 +    // function pointers have been initialized for both the GL version and any advertised
   1.133 +    // extensions.
   1.134 +    bool validate() const;
   1.135 +
   1.136 +    // Indicates the type of GL implementation
   1.137 +    union {
   1.138 +        GrGLStandard fStandard;
   1.139 +        GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
   1.140 +    };
   1.141 +
   1.142 +    GrGLExtensions fExtensions;
   1.143 +
   1.144 +    bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
   1.145 +
   1.146 +    /**
   1.147 +     * The function pointers are in a struct so that we can have a compiler generated assignment
   1.148 +     * operator.
   1.149 +     */
   1.150 +    struct Functions {
   1.151 +        GLPtr<GrGLActiveTextureProc> fActiveTexture;
   1.152 +        GLPtr<GrGLAttachShaderProc> fAttachShader;
   1.153 +        GLPtr<GrGLBeginQueryProc> fBeginQuery;
   1.154 +        GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation;
   1.155 +        GLPtr<GrGLBindBufferProc> fBindBuffer;
   1.156 +        GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation;
   1.157 +        GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
   1.158 +        GLPtr<GrGLBindFramebufferProc> fBindFramebuffer;
   1.159 +        GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer;
   1.160 +        GLPtr<GrGLBindTextureProc> fBindTexture;
   1.161 +        GLPtr<GrGLBindVertexArrayProc> fBindVertexArray;
   1.162 +        GLPtr<GrGLBlendColorProc> fBlendColor;
   1.163 +        GLPtr<GrGLBlendFuncProc> fBlendFunc;
   1.164 +        GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer;
   1.165 +        GLPtr<GrGLBufferDataProc> fBufferData;
   1.166 +        GLPtr<GrGLBufferSubDataProc> fBufferSubData;
   1.167 +        GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
   1.168 +        GLPtr<GrGLClearProc> fClear;
   1.169 +        GLPtr<GrGLClearColorProc> fClearColor;
   1.170 +        GLPtr<GrGLClearStencilProc> fClearStencil;
   1.171 +        GLPtr<GrGLColorMaskProc> fColorMask;
   1.172 +        GLPtr<GrGLCompileShaderProc> fCompileShader;
   1.173 +        GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
   1.174 +        GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
   1.175 +        GLPtr<GrGLCreateProgramProc> fCreateProgram;
   1.176 +        GLPtr<GrGLCreateShaderProc> fCreateShader;
   1.177 +        GLPtr<GrGLCullFaceProc> fCullFace;
   1.178 +        GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers;
   1.179 +        GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
   1.180 +        GLPtr<GrGLDeleteProgramProc> fDeleteProgram;
   1.181 +        GLPtr<GrGLDeleteQueriesProc> fDeleteQueries;
   1.182 +        GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
   1.183 +        GLPtr<GrGLDeleteShaderProc> fDeleteShader;
   1.184 +        GLPtr<GrGLDeleteTexturesProc> fDeleteTextures;
   1.185 +        GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
   1.186 +        GLPtr<GrGLDepthMaskProc> fDepthMask;
   1.187 +        GLPtr<GrGLDisableProc> fDisable;
   1.188 +        GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
   1.189 +        GLPtr<GrGLDrawArraysProc> fDrawArrays;
   1.190 +        GLPtr<GrGLDrawBufferProc> fDrawBuffer;
   1.191 +        GLPtr<GrGLDrawBuffersProc> fDrawBuffers;
   1.192 +        GLPtr<GrGLDrawElementsProc> fDrawElements;
   1.193 +        GLPtr<GrGLEnableProc> fEnable;
   1.194 +        GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
   1.195 +        GLPtr<GrGLEndQueryProc> fEndQuery;
   1.196 +        GLPtr<GrGLFinishProc> fFinish;
   1.197 +        GLPtr<GrGLFlushProc> fFlush;
   1.198 +        GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
   1.199 +        GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
   1.200 +        GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
   1.201 +        GLPtr<GrGLFrontFaceProc> fFrontFace;
   1.202 +        GLPtr<GrGLGenBuffersProc> fGenBuffers;
   1.203 +        GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers;
   1.204 +        GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap;
   1.205 +        GLPtr<GrGLGenQueriesProc> fGenQueries;
   1.206 +        GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers;
   1.207 +        GLPtr<GrGLGenTexturesProc> fGenTextures;
   1.208 +        GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays;
   1.209 +        GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
   1.210 +        GLPtr<GrGLGetErrorProc> fGetError;
   1.211 +        GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
   1.212 +        GLPtr<GrGLGetIntegervProc> fGetIntegerv;
   1.213 +        GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
   1.214 +        GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
   1.215 +        GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
   1.216 +        GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
   1.217 +        GLPtr<GrGLGetQueryivProc> fGetQueryiv;
   1.218 +        GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
   1.219 +        GLPtr<GrGLGetProgramivProc> fGetProgramiv;
   1.220 +        GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
   1.221 +        GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
   1.222 +        GLPtr<GrGLGetShaderivProc> fGetShaderiv;
   1.223 +        GLPtr<GrGLGetStringProc> fGetString;
   1.224 +        GLPtr<GrGLGetStringiProc> fGetStringi;
   1.225 +        GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
   1.226 +        GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation;
   1.227 +        GLPtr<GrGLInsertEventMarkerProc> fInsertEventMarker;
   1.228 +        GLPtr<GrGLLineWidthProc> fLineWidth;
   1.229 +        GLPtr<GrGLLinkProgramProc> fLinkProgram;
   1.230 +        GLPtr<GrGLLoadIdentityProc> fLoadIdentity;
   1.231 +        GLPtr<GrGLLoadMatrixfProc> fLoadMatrixf;
   1.232 +        GLPtr<GrGLMapBufferProc> fMapBuffer;
   1.233 +        GLPtr<GrGLMatrixModeProc> fMatrixMode;
   1.234 +        GLPtr<GrGLPixelStoreiProc> fPixelStorei;
   1.235 +        GLPtr<GrGLPopGroupMarkerProc> fPopGroupMarker;
   1.236 +        GLPtr<GrGLPushGroupMarkerProc> fPushGroupMarker;
   1.237 +        GLPtr<GrGLQueryCounterProc> fQueryCounter;
   1.238 +        GLPtr<GrGLReadBufferProc> fReadBuffer;
   1.239 +        GLPtr<GrGLReadPixelsProc> fReadPixels;
   1.240 +        GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage;
   1.241 +
   1.242 +        //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA
   1.243 +        //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
   1.244 +        //  older extensions for performance reasons or due to ES3 driver bugs. We want the function
   1.245 +        //  that creates the GrGLInterface to provide all available functions and internally
   1.246 +        //  we will select among them. They all have a method called glRenderbufferStorageMultisample*.
   1.247 +        //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
   1.248 +        //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
   1.249 +        //  variations.
   1.250 +        //
   1.251 +        //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
   1.252 +        //  assume the function pointers for the standard (or equivalent GL_ARB) version have
   1.253 +        //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
   1.254 +        //  functionality.
   1.255 +
   1.256 +        //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
   1.257 +        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
   1.258 +        //  GL_APPLE_framebuffer_multisample
   1.259 +        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
   1.260 +
   1.261 +        //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
   1.262 +        //  the standard function in ES3+ or GL 3.0+.
   1.263 +        GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
   1.264 +
   1.265 +        // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
   1.266 +        GLPtr<GrGLBindUniformLocation> fBindUniformLocation;
   1.267 +
   1.268 +        GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
   1.269 +        GLPtr<GrGLScissorProc> fScissor;
   1.270 +        GLPtr<GrGLShaderSourceProc> fShaderSource;
   1.271 +        GLPtr<GrGLStencilFuncProc> fStencilFunc;
   1.272 +        GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
   1.273 +        GLPtr<GrGLStencilMaskProc> fStencilMask;
   1.274 +        GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
   1.275 +        GLPtr<GrGLStencilOpProc> fStencilOp;
   1.276 +        GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate;
   1.277 +        GLPtr<GrGLTexGenfvProc> fTexGenfv;
   1.278 +        GLPtr<GrGLTexGeniProc> fTexGeni;
   1.279 +        GLPtr<GrGLTexImage2DProc> fTexImage2D;
   1.280 +        GLPtr<GrGLTexParameteriProc> fTexParameteri;
   1.281 +        GLPtr<GrGLTexParameterivProc> fTexParameteriv;
   1.282 +        GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D;
   1.283 +        GLPtr<GrGLTexStorage2DProc> fTexStorage2D;
   1.284 +        GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
   1.285 +        GLPtr<GrGLUniform1fProc> fUniform1f;
   1.286 +        GLPtr<GrGLUniform1iProc> fUniform1i;
   1.287 +        GLPtr<GrGLUniform1fvProc> fUniform1fv;
   1.288 +        GLPtr<GrGLUniform1ivProc> fUniform1iv;
   1.289 +        GLPtr<GrGLUniform2fProc> fUniform2f;
   1.290 +        GLPtr<GrGLUniform2iProc> fUniform2i;
   1.291 +        GLPtr<GrGLUniform2fvProc> fUniform2fv;
   1.292 +        GLPtr<GrGLUniform2ivProc> fUniform2iv;
   1.293 +        GLPtr<GrGLUniform3fProc> fUniform3f;
   1.294 +        GLPtr<GrGLUniform3iProc> fUniform3i;
   1.295 +        GLPtr<GrGLUniform3fvProc> fUniform3fv;
   1.296 +        GLPtr<GrGLUniform3ivProc> fUniform3iv;
   1.297 +        GLPtr<GrGLUniform4fProc> fUniform4f;
   1.298 +        GLPtr<GrGLUniform4iProc> fUniform4i;
   1.299 +        GLPtr<GrGLUniform4fvProc> fUniform4fv;
   1.300 +        GLPtr<GrGLUniform4ivProc> fUniform4iv;
   1.301 +        GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
   1.302 +        GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
   1.303 +        GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
   1.304 +        GLPtr<GrGLUnmapBufferProc> fUnmapBuffer;
   1.305 +        GLPtr<GrGLUseProgramProc> fUseProgram;
   1.306 +        GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
   1.307 +        GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer;
   1.308 +        GLPtr<GrGLViewportProc> fViewport;
   1.309 +
   1.310 +        // Experimental: Functions for GL_NV_path_rendering. These will be
   1.311 +        // alphabetized with the above functions once this is fully supported
   1.312 +        // (and functions we are unlikely to use will possibly be omitted).
   1.313 +        GLPtr<GrGLPathCommandsProc> fPathCommands;
   1.314 +        GLPtr<GrGLPathCoordsProc> fPathCoords;
   1.315 +        GLPtr<GrGLPathSubCommandsProc> fPathSubCommands;
   1.316 +        GLPtr<GrGLPathSubCoordsProc> fPathSubCoords;
   1.317 +        GLPtr<GrGLPathStringProc> fPathString;
   1.318 +        GLPtr<GrGLPathGlyphsProc> fPathGlyphs;
   1.319 +        GLPtr<GrGLPathGlyphRangeProc> fPathGlyphRange;
   1.320 +        GLPtr<GrGLWeightPathsProc> fWeightPaths;
   1.321 +        GLPtr<GrGLCopyPathProc> fCopyPath;
   1.322 +        GLPtr<GrGLInterpolatePathsProc> fInterpolatePaths;
   1.323 +        GLPtr<GrGLTransformPathProc> fTransformPath;
   1.324 +        GLPtr<GrGLPathParameterivProc> fPathParameteriv;
   1.325 +        GLPtr<GrGLPathParameteriProc> fPathParameteri;
   1.326 +        GLPtr<GrGLPathParameterfvProc> fPathParameterfv;
   1.327 +        GLPtr<GrGLPathParameterfProc> fPathParameterf;
   1.328 +        GLPtr<GrGLPathDashArrayProc> fPathDashArray;
   1.329 +        GLPtr<GrGLGenPathsProc> fGenPaths;
   1.330 +        GLPtr<GrGLDeletePathsProc> fDeletePaths;
   1.331 +        GLPtr<GrGLIsPathProc> fIsPath;
   1.332 +        GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc;
   1.333 +        GLPtr<GrGLPathStencilDepthOffsetProc> fPathStencilDepthOffset;
   1.334 +        GLPtr<GrGLStencilFillPathProc> fStencilFillPath;
   1.335 +        GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath;
   1.336 +        GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
   1.337 +        GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
   1.338 +        GLPtr<GrGLPathCoverDepthFuncProc> fPathCoverDepthFunc;
   1.339 +        GLPtr<GrGLPathColorGenProc> fPathColorGen;
   1.340 +        GLPtr<GrGLPathTexGenProc> fPathTexGen;
   1.341 +        GLPtr<GrGLPathFogGenProc> fPathFogGen;
   1.342 +        GLPtr<GrGLCoverFillPathProc> fCoverFillPath;
   1.343 +        GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath;
   1.344 +        GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
   1.345 +        GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
   1.346 +        GLPtr<GrGLGetPathParameterivProc> fGetPathParameteriv;
   1.347 +        GLPtr<GrGLGetPathParameterfvProc> fGetPathParameterfv;
   1.348 +        GLPtr<GrGLGetPathCommandsProc> fGetPathCommands;
   1.349 +        GLPtr<GrGLGetPathCoordsProc> fGetPathCoords;
   1.350 +        GLPtr<GrGLGetPathDashArrayProc> fGetPathDashArray;
   1.351 +        GLPtr<GrGLGetPathMetricsProc> fGetPathMetrics;
   1.352 +        GLPtr<GrGLGetPathMetricRangeProc> fGetPathMetricRange;
   1.353 +        GLPtr<GrGLGetPathSpacingProc> fGetPathSpacing;
   1.354 +        GLPtr<GrGLGetPathColorGenivProc> fGetPathColorGeniv;
   1.355 +        GLPtr<GrGLGetPathColorGenfvProc> fGetPathColorGenfv;
   1.356 +        GLPtr<GrGLGetPathTexGenivProc> fGetPathTexGeniv;
   1.357 +        GLPtr<GrGLGetPathTexGenfvProc> fGetPathTexGenfv;
   1.358 +        GLPtr<GrGLIsPointInFillPathProc> fIsPointInFillPath;
   1.359 +        GLPtr<GrGLIsPointInStrokePathProc> fIsPointInStrokePath;
   1.360 +        GLPtr<GrGLGetPathLengthProc> fGetPathLength;
   1.361 +        GLPtr<GrGLPointAlongPathProc> fPointAlongPath;
   1.362 +    } fFunctions;
   1.363 +
   1.364 +    // Per-GL func callback
   1.365 +#if GR_GL_PER_GL_FUNC_CALLBACK
   1.366 +    GrGLInterfaceCallbackProc fCallback;
   1.367 +    GrGLInterfaceCallbackData fCallbackData;
   1.368 +#endif
   1.369 +};
   1.370 +
   1.371 +#endif

mercurial