180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef GrGLInterface_DEFINED 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define GrGLInterface_DEFINED 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrGLFunctions.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrRefCnt.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//////////////////////////////////////////////////////////////////////////////// 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Classifies GL contexts (currently as Desktop vs. ES2). This is a bitfield. 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * A GrGLInterface (defined below) may support multiple bindings. 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruenum GrGLBinding { 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kNone_GrGLBinding = 0x0, 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kDesktop_GrGLBinding = 0x01, 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kES2_GrGLBinding = 0x02, 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // for iteration of GrGLBindings 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kFirstGrGLBinding = kDesktop_GrGLBinding, 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kLastGrGLBinding = kES2_GrGLBinding 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//////////////////////////////////////////////////////////////////////////////// 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Rather than depend on platform-specific GL headers and libraries, we require 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * the client to provide a struct of GL function pointers. This struct can be 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * specified per-GrContext as a parameter to GrContext::Create. If NULL is 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * passed to Create then the "default" GL interface is used. If the default is 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * also NULL GrContext creation will fail. 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * The default interface is returned by GrGLDefaultInterface. This function's 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * implementation is platform-specific. Several have been provided, along with 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * an implementation that simply returns NULL. It is implementation-specific 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * whether the same GrGLInterface is returned or whether a new one is created 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * at each call. Some platforms may not be able to use a single GrGLInterface 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * because extension function ptrs vary across contexts. Note that GrGLInterface 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * is ref-counted. So if the same object is returned by multiple calls to 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * GrGLDefaultInterface, each should bump the ref count. 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * callback function that will be called prior to each GL function call. See 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * comments in GrGLConfig.h 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct GrGLInterface; 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrGLInterface* GrGLDefaultInterface(); 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows, 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * GLX on linux, AGL on Mac). On platforms that have context-specific function 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * pointers for GL extensions (e.g. windows) the returned interface is only 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * valid for the context that was current at creation. 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrGLInterface* GrGLCreateNativeInterface(); 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_MESA 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Creates a GrGLInterface for an OSMesa context. 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrGLInterface* GrGLCreateMesaInterface(); 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_ANGLE 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Creates a GrGLInterface for an ANGLE context. 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrGLInterface* GrGLCreateANGLEInterface(); 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Creates a null GrGLInterface that doesn't draw anything. Used for measuring 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * CPU overhead. 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrGLInterface* GrGLCreateNullInterface(); 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Creates a debugging GrGLInterface that doesn't draw anything. Used for 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * finding memory leaks and invalid memory accesses. 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrGLInterface* GrGLCreateDebugInterface(); 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if GR_GL_PER_GL_FUNC_CALLBACK 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querutypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*); 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querutypedef intptr_t GrGLInterfaceCallbackData; 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * GrContext uses the following interface to make all calls into OpenGL. When a 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * GrContext is created it is given a GrGLInterface. The interface's function 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * pointers must be valid for the OpenGL context associated with the GrContext. 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * On some platforms, such as Windows, function pointers for OpenGL extensions 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * may vary between OpenGL contexts. So the caller must be careful to use a 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * GrGLInterface initialized for the correct context. All functions that should 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * be available based on the OpenGL's version and extension string must be 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * non-NULL or GrContext creation will fail. This can be tested with the 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * validate() method when the OpenGL context has been made current. 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct GR_API GrGLInterface : public GrRefCnt { 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // simple wrapper class that exists only to initialize a pointer to NULL 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru template <typename FNPTR_TYPE> class GLPtr { 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru public: 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr() : fPtr(NULL) {} 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr operator =(FNPTR_TYPE ptr) { fPtr = ptr; return *this; } 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru operator FNPTR_TYPE() const { return fPtr; } 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru private: 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru FNPTR_TYPE fPtr; 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru typedef GrRefCnt INHERITED; 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_DECLARE_INST_COUNT(GrGLInterface) 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLInterface(); 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Validates that the GrGLInterface supports a binding. This means that 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // the GrGLinterface advertises the binding in fBindingsExported and all 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // the necessary function pointers have been initialized. The interface is 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // validated for the current OpenGL context. 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool validate(GrGLBinding binding) const; 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Indicator variable specifying the type of GL implementation 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // exported: GLES2 and/or Desktop. 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLBinding fBindingsExported; 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLActiveTextureProc> fActiveTexture; 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLAttachShaderProc> fAttachShader; 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBeginQueryProc> fBeginQuery; 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation; 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindBufferProc> fBindBuffer; 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation; 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindFramebufferProc> fBindFramebuffer; 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer; 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBindTextureProc> fBindTexture; 149096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GLPtr<GrGLBindVertexArrayProc> fBindVertexArray; 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBlendColorProc> fBlendColor; 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBlendFuncProc> fBlendFunc; 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer; 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBufferDataProc> fBufferData; 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLBufferSubDataProc> fBufferSubData; 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus; 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLClearProc> fClear; 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLClearColorProc> fClearColor; 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLClearStencilProc> fClearStencil; 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLColorMaskProc> fColorMask; 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCompileShaderProc> fCompileShader; 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D; 1627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D; 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCreateProgramProc> fCreateProgram; 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCreateShaderProc> fCreateShader; 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCullFaceProc> fCullFace; 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers; 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers; 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteProgramProc> fDeleteProgram; 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteQueriesProc> fDeleteQueries; 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers; 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteShaderProc> fDeleteShader; 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeleteTexturesProc> fDeleteTextures; 173096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays; 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDepthMaskProc> fDepthMask; 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDisableProc> fDisable; 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray; 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDrawArraysProc> fDrawArrays; 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDrawBufferProc> fDrawBuffer; 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDrawBuffersProc> fDrawBuffers; 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDrawElementsProc> fDrawElements; 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLEnableProc> fEnable; 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray; 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLEndQueryProc> fEndQuery; 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLFinishProc> fFinish; 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLFlushProc> fFlush; 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer; 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D; 188096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample; 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLFrontFaceProc> fFrontFace; 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGenBuffersProc> fGenBuffers; 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers; 192e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap; 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGenQueriesProc> fGenQueries; 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers; 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGenTexturesProc> fGenTextures; 196096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays; 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv; 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetErrorProc> fGetError; 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv; 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetIntegervProc> fGetIntegerv; 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v; 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv; 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v; 20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv; 20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetQueryivProc> fGetQueryiv; 20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog; 20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetProgramivProc> fGetProgramiv; 20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv; 20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog; 21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetShaderivProc> fGetShaderiv; 21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetStringProc> fGetString; 212096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GLPtr<GrGLGetStringiProc> fGetStringi; 21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv; 21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation; 21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLLineWidthProc> fLineWidth; 21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLLinkProgramProc> fLinkProgram; 21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLMapBufferProc> fMapBuffer; 21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPixelStoreiProc> fPixelStorei; 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLQueryCounterProc> fQueryCounter; 22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLReadBufferProc> fReadBuffer; 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLReadPixelsProc> fReadPixels; 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage; 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample; 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLRenderbufferStorageMultisampleCoverageProc> fRenderbufferStorageMultisampleCoverage; 22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer; 22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLScissorProc> fScissor; 22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLShaderSourceProc> fShaderSource; 22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilFuncProc> fStencilFunc; 22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate; 23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilMaskProc> fStencilMask; 23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate; 23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilOpProc> fStencilOp; 23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate; 23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLTexImage2DProc> fTexImage2D; 23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLTexParameteriProc> fTexParameteri; 23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLTexParameterivProc> fTexParameteriv; 23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D; 23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLTexStorage2DProc> fTexStorage2D; 2397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer; 24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform1fProc> fUniform1f; 24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform1iProc> fUniform1i; 24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform1fvProc> fUniform1fv; 24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform1ivProc> fUniform1iv; 24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform2fProc> fUniform2f; 24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform2iProc> fUniform2i; 24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform2fvProc> fUniform2fv; 24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform2ivProc> fUniform2iv; 24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform3fProc> fUniform3f; 24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform3iProc> fUniform3i; 25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform3fvProc> fUniform3fv; 25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform3ivProc> fUniform3iv; 25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform4fProc> fUniform4f; 25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform4iProc> fUniform4i; 25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform4fvProc> fUniform4fv; 25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniform4ivProc> fUniform4iv; 25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv; 25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv; 25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv; 25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUnmapBufferProc> fUnmapBuffer; 26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLUseProgramProc> fUseProgram; 26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv; 26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer; 26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLViewportProc> fViewport; 26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Experimental: Functions for GL_NV_path_rendering. These will be 26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // alphabetized with the above functions once this is fully supported 26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // (and functions we are unlikely to use will possibly be omitted). 26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLMatrixModeProc> fMatrixMode; 26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLLoadIdentityProc> fLoadIdentity; 27080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLLoadMatrixfProc> fLoadMatrixf; 27180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathCommandsProc> fPathCommands; 27280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathCoordsProc> fPathCoords; 27380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathSubCommandsProc> fPathSubCommands; 27480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathSubCoordsProc> fPathSubCoords; 27580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathStringProc> fPathString; 27680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathGlyphsProc> fPathGlyphs; 27780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathGlyphRangeProc> fPathGlyphRange; 27880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLWeightPathsProc> fWeightPaths; 27980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCopyPathProc> fCopyPath; 28080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLInterpolatePathsProc> fInterpolatePaths; 28180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLTransformPathProc> fTransformPath; 28280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathParameterivProc> fPathParameteriv; 28380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathParameteriProc> fPathParameteri; 28480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathParameterfvProc> fPathParameterfv; 28580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathParameterfProc> fPathParameterf; 28680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathDashArrayProc> fPathDashArray; 28780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGenPathsProc> fGenPaths; 28880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLDeletePathsProc> fDeletePaths; 28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLIsPathProc> fIsPath; 29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc; 29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathStencilDepthOffsetProc> fPathStencilDepthOffset; 29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilFillPathProc> fStencilFillPath; 29380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath; 29480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced; 29580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced; 29680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathCoverDepthFuncProc> fPathCoverDepthFunc; 29780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathColorGenProc> fPathColorGen; 29880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathTexGenProc> fPathTexGen; 29980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPathFogGenProc> fPathFogGen; 30080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCoverFillPathProc> fCoverFillPath; 30180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath; 30280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced; 30380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced; 30480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathParameterivProc> fGetPathParameteriv; 30580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathParameterfvProc> fGetPathParameterfv; 30680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathCommandsProc> fGetPathCommands; 30780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathCoordsProc> fGetPathCoords; 30880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathDashArrayProc> fGetPathDashArray; 30980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathMetricsProc> fGetPathMetrics; 31080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathMetricRangeProc> fGetPathMetricRange; 31180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathSpacingProc> fGetPathSpacing; 31280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathColorGenivProc> fGetPathColorGeniv; 31380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathColorGenfvProc> fGetPathColorGenfv; 31480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathTexGenivProc> fGetPathTexGeniv; 31580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathTexGenfvProc> fGetPathTexGenfv; 31680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLIsPointInFillPathProc> fIsPointInFillPath; 31780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLIsPointInStrokePathProc> fIsPointInStrokePath; 31880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLGetPathLengthProc> fGetPathLength; 31980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GLPtr<GrGLPointAlongPathProc> fPointAlongPath; 32080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 32180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Per-GL func callback 32280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if GR_GL_PER_GL_FUNC_CALLBACK 32380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLInterfaceCallbackProc fCallback; 32480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLInterfaceCallbackData fCallbackData; 32580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 32680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 32780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 32880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 32980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 330