GrGLInterface.h revision 69c1b24bcaa7cffd59753a75a7f3d155696fcac4
17aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/* 27aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Copyright 2011 Google Inc. 37aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * 47aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Use of this source code is governed by a BSD-style license that can be 57aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * found in the LICENSE file. 67aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 77aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 85d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey#ifndef GrGLInterface_DEFINED 95d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey#define GrGLInterface_DEFINED 1094bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser 115d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey#include "GrGLFunctions.h" 127aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#include "GrGLExtensions.h" 137aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#include "SkRefCnt.h" 147aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 157aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer//////////////////////////////////////////////////////////////////////////////// 167aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 177aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 187aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Rather than depend on platform-specific GL headers and libraries, we require 197aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * the client to provide a struct of GL function pointers. This struct can be 207aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * specified per-GrContext as a parameter to GrContext::Create. If NULL is 217aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * passed to Create then a "default" GL interface is created. If the default is 227aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * also NULL GrContext creation will fail. 23969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser * 249930061ce28b1fc60d267ae3474c74a41e655cd5Steven M. Gava * The default interface is returned by GrGLDefaultInterface. This function's 257aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * implementation is platform-specific. Several have been provided, along with 267aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * an implementation that simply returns NULL. 275d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey * 285d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a 29969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser * callback function that will be called prior to each GL function call. See 30969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser * comments in GrGLConfig.h 315d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey */ 325d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 335d2af63cc36ca1141e1ec7412fc33866f3908408Chui Teytypedef void(*GrGLFuncPtr)(); 345d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 355d2af63cc36ca1141e1ec7412fc33866f3908408Chui Teystruct GrGLInterface; 365d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 375d2af63cc36ca1141e1ec7412fc33866f3908408Chui Teyconst GrGLInterface* GrGLDefaultInterface(); 385d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 395d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey/** 405d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows, 415d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey * GLX on linux, AGL on Mac). The interface is only valid for the GL context 425d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey * that is current when the interface is created. 437aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 447aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David SchererSK_API const GrGLInterface* GrGLCreateNativeInterface(); 457aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 467aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#if SK_MESA 477aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 487aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Creates a GrGLInterface for an OSMesa context. 497aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 507aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David SchererSK_API const GrGLInterface* GrGLCreateMesaInterface(); 517aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#endif 527aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 537aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#if SK_ANGLE 547aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 557aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Creates a GrGLInterface for an ANGLE context. 567aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 577aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David SchererSK_API const GrGLInterface* GrGLCreateANGLEInterface(); 587aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#endif 597aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 607aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#if SK_COMMAND_BUFFER 617aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 627aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Creates a GrGLInterface for a Command Buffer context. 637aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 647aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David SchererSK_API const GrGLInterface* GrGLCreateCommandBufferInterface(); 657aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#endif 667aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 677aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 687aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Creates a null GrGLInterface that doesn't draw anything. Used for measuring 697aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * CPU overhead. 707aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 717aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererconst SK_API GrGLInterface* GrGLCreateNullInterface(); 727aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 737aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 747aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * Creates a debugging GrGLInterface that doesn't draw anything. Used for 757aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * finding memory leaks and invalid memory accesses. 767aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 777aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererconst GrGLInterface* GrGLCreateDebugInterface(); 787aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 797aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#if GR_GL_PER_GL_FUNC_CALLBACK 807aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherertypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*); 817aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherertypedef intptr_t GrGLInterfaceCallbackData; 827aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#endif 837aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 847aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** Function that returns a new interface identical to "interface" but without support for 857aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GL_NV_path_rendering. */ 867aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererconst GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*); 877aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 887aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** Function that returns a new interface identical to "interface" but with support for 897aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer test version of GL_EXT_debug_marker. */ 907aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererconst GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*, 917aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLInsertEventMarkerProc insertEventMarkerFn, 927aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLPushGroupMarkerProc pushGroupMarkerFn, 937aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLPopGroupMarkerProc popGroupMarkerFn); 947aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 957aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer/** 967aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * GrContext uses the following interface to make all calls into OpenGL. When a 977aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * GrContext is created it is given a GrGLInterface. The interface's function 987aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * pointers must be valid for the OpenGL context associated with the GrContext. 99669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser * On some platforms, such as Windows, function pointers for OpenGL extensions 100669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser * may vary between OpenGL contexts. So the caller must be careful to use a 1017aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * GrGLInterface initialized for the correct context. All functions that should 1027aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * be available based on the OpenGL's version and extension string must be 1037aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * non-NULL or GrContext creation will fail. This can be tested with the 104669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser * validate() method when the OpenGL context has been made current. 105669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser */ 1067aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererstruct SK_API GrGLInterface : public SkRefCnt { 1077aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererprivate: 1087aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer typedef SkRefCnt INHERITED; 1097aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 1107aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Schererpublic: 1117aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLInterface(); 1127aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 1137aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer static GrGLInterface* NewClone(const GrGLInterface*); 114669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser 115669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser // Validates that the GrGLInterface supports its advertised standard. This means the necessary 116669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser // function pointers have been initialized for both the GL version and any advertised 117669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser // extensions. 118669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser bool validate() const; 119669f4c3850eaaf4e00a79032ef960a79e6ca6ad7Kurt B. Kaiser 1207aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // Indicates the type of GL implementation 1217aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer union { 12283118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLStandard fStandard; 1237aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated. 1247aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer }; 1257aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 1267aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLExtensions fExtensions; 1277aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 1287aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer bool hasExtension(const char ext[]) const { return fExtensions.has(ext); } 1297aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 1307aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /** 1317aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * The function pointers are in a struct so that we can have a compiler generated assignment 1327aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer * operator. 1337aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer */ 1347aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer struct Functions { 1357aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLActiveTextureProc> fActiveTexture; 1367aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLAttachShaderProc> fAttachShader; 1377aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBeginQueryProc> fBeginQuery; 13883118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLBindAttribLocationProc> fBindAttribLocation; 139b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBindBufferProc> fBindBuffer; 140b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBindFragDataLocationProc> fBindFragDataLocation; 141b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed; 142b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBindFramebufferProc> fBindFramebuffer; 1437aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBindRenderbufferProc> fBindRenderbuffer; 1447aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBindTextureProc> fBindTexture; 1457aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBindVertexArrayProc> fBindVertexArray; 1467aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBlendBarrierProc> fBlendBarrier; 1477aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBlendColorProc> fBlendColor; 148b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBlendEquationProc> fBlendEquation; 149b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBlendFuncProc> fBlendFunc; 150b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBlitFramebufferProc> fBlitFramebuffer; 151b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBufferDataProc> fBufferData; 152b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLBufferSubDataProc> fBufferSubData; 153b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus; 154b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLClearProc> fClear; 155b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLClearColorProc> fClearColor; 156b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLClearStencilProc> fClearStencil; 157b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLColorMaskProc> fColorMask; 158b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLCompileShaderProc> fCompileShader; 159b77d343bc846c2049a4cffb1dfd65eb49d1728b4Steven M. Gava GrGLFunction<GrGLCompressedTexImage2DProc> fCompressedTexImage2D; 1607aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D; 1617aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D; 16283118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLCreateProgramProc> fCreateProgram; 1637aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCreateShaderProc> fCreateShader; 1647aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCullFaceProc> fCullFace; 1657aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteBuffersProc> fDeleteBuffers; 1667aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteFramebuffersProc> fDeleteFramebuffers; 1677aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteProgramProc> fDeleteProgram; 1687aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteQueriesProc> fDeleteQueries; 1697aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers; 1707aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteShaderProc> fDeleteShader; 1717aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteTexturesProc> fDeleteTextures; 1727aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDeleteVertexArraysProc> fDeleteVertexArrays; 1737aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDepthMaskProc> fDepthMask; 1747aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDisableProc> fDisable; 1757aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray; 1767aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawArraysProc> fDrawArrays; 1777aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawArraysIndirectProc> fDrawArraysIndirect; 1787aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawArraysInstancedProc> fDrawArraysInstanced; 1797aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawBufferProc> fDrawBuffer; 1807aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawBuffersProc> fDrawBuffers; 1817aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawElementsProc> fDrawElements; 1827aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawElementsIndirectProc> fDrawElementsIndirect; 1837aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDrawElementsInstancedProc> fDrawElementsInstanced; 1847aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLEnableProc> fEnable; 1857aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray; 1867aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLEndQueryProc> fEndQuery; 1877aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLFinishProc> fFinish; 18894bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLFlushProc> fFlush; 1897aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange; 1905d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer; 1915d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLFramebufferTexture2DProc> fFramebufferTexture2D; 1925d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample; 1935d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLFrontFaceProc> fFrontFace; 1945d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenBuffersProc> fGenBuffers; 1955d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenFramebuffersProc> fGenFramebuffers; 1965d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenerateMipmapProc> fGenerateMipmap; 1975d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenQueriesProc> fGenQueries; 1985d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenRenderbuffersProc> fGenRenderbuffers; 1995d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenTexturesProc> fGenTextures; 2005d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGenVertexArraysProc> fGenVertexArrays; 2015d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetBufferParameterivProc> fGetBufferParameteriv; 2025d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetErrorProc> fGetError; 2035d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv; 2045d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetIntegervProc> fGetIntegerv; 2055d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetMultisamplefvProc> fGetMultisamplefv; 2065d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v; 2075d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetQueryObjectivProc> fGetQueryObjectiv; 2085d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v; 209969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser GrGLFunction<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv; 2105d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetQueryivProc> fGetQueryiv; 211969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser GrGLFunction<GrGLGetProgramInfoLogProc> fGetProgramInfoLog; 212969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser GrGLFunction<GrGLGetProgramivProc> fGetProgramiv; 2135d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv; 214969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser GrGLFunction<GrGLGetShaderInfoLogProc> fGetShaderInfoLog; 215969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser GrGLFunction<GrGLGetShaderivProc> fGetShaderiv; 216969de458aa12e831942637bbcd9994b29dc86252Kurt B. Kaiser GrGLFunction<GrGLGetShaderPrecisionFormatProc> fGetShaderPrecisionFormat; 2175d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetStringProc> fGetString; 2185d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetStringiProc> fGetStringi; 2195d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv; 2205d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetUniformLocationProc> fGetUniformLocation; 2215d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInsertEventMarkerProc> fInsertEventMarker; 2225d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInvalidateBufferDataProc> fInvalidateBufferData; 2235d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData; 2245d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer; 2255d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer; 2265d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInvalidateTexImageProc> fInvalidateTexImage; 2275d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage; 2285d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLIsTextureProc> fIsTexture; 2295d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLLineWidthProc> fLineWidth; 2305d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLLinkProgramProc> fLinkProgram; 2315d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLMapBufferProc> fMapBuffer; 2325d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLMapBufferRangeProc> fMapBufferRange; 2335d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLMapBufferSubDataProc> fMapBufferSubData; 2345d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLMapTexSubImage2DProc> fMapTexSubImage2D; 2355d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLPixelStoreiProc> fPixelStorei; 2365d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLPopGroupMarkerProc> fPopGroupMarker; 2375d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLPushGroupMarkerProc> fPushGroupMarker; 2385d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLQueryCounterProc> fQueryCounter; 2395d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLRasterSamplesProc> fRasterSamples; 2405d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLReadBufferProc> fReadBuffer; 2415d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLReadPixelsProc> fReadPixels; 2425d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLRenderbufferStorageProc> fRenderbufferStorage; 2435d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 2445d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // On OpenGL ES there are multiple incompatible extensions that add support for MSAA 2455d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the 2465d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // older extensions for performance reasons or due to ES3 driver bugs. We want the function 2475d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // that creates the GrGLInterface to provide all available functions and internally 2485d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // we will select among them. They all have a method called glRenderbufferStorageMultisample*. 2495d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture, 2505d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample 2515d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // variations. 2525d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // 2535d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will 2545d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // assume the function pointers for the standard (or equivalent GL_ARB) version have 2555d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced 2565d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // functionality. 2575d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 2585d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture 2595d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT; 2605d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // GL_APPLE_framebuffer_multisample 2615d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE; 2625d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 2635d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or 2645d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // the standard function in ES3+ or GL 3.0+. 2655d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample; 2665d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 2675d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension. 2685d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLBindUniformLocationProc> fBindUniformLocation; 2695d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 2705d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer; 2715d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLScissorProc> fScissor; 2725d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLShaderSourceProc> fShaderSource; 2735d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLStencilFuncProc> fStencilFunc; 2745d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLStencilFuncSeparateProc> fStencilFuncSeparate; 2755d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLStencilMaskProc> fStencilMask; 2765d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLStencilMaskSeparateProc> fStencilMaskSeparate; 2775d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLStencilOpProc> fStencilOp; 2785d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLStencilOpSeparateProc> fStencilOpSeparate; 2795d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLTexImage2DProc> fTexImage2D; 2807aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTexParameteriProc> fTexParameteri; 2817aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTexParameterivProc> fTexParameteriv; 2827aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTexSubImage2DProc> fTexSubImage2D; 28383118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLTexStorage2DProc> fTexStorage2D; 2847aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureBarrierProc> fTextureBarrier; 2857aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDiscardFramebufferProc> fDiscardFramebuffer; 2867aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform1fProc> fUniform1f; 2877aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform1iProc> fUniform1i; 28883118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLUniform1fvProc> fUniform1fv; 2897aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform1ivProc> fUniform1iv; 2907aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform2fProc> fUniform2f; 2917aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform2iProc> fUniform2i; 2927aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform2fvProc> fUniform2fv; 2937aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform2ivProc> fUniform2iv; 2947aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform3fProc> fUniform3f; 2957aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform3iProc> fUniform3i; 2967aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform3fvProc> fUniform3fv; 2977aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform3ivProc> fUniform3iv; 2987aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform4fProc> fUniform4f; 2997aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform4iProc> fUniform4i; 30083118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLUniform4fvProc> fUniform4fv; 3017aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniform4ivProc> fUniform4iv; 3027aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniformMatrix2fvProc> fUniformMatrix2fv; 30394bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLUniformMatrix3fvProc> fUniformMatrix3fv; 30494bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLUniformMatrix4fvProc> fUniformMatrix4fv; 30594bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLUnmapBufferProc> fUnmapBuffer; 30694bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData; 30794bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D; 30894bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLUseProgramProc> fUseProgram; 30994bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLVertexAttrib1fProc> fVertexAttrib1f; 31094bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLVertexAttrib2fvProc> fVertexAttrib2fv; 3117aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexAttrib3fvProc> fVertexAttrib3fv; 3127aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexAttrib4fvProc> fVertexAttrib4fv; 31383118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLVertexAttribDivisorProc> fVertexAttribDivisor; 3147aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexAttribIPointerProc> fVertexAttribIPointer; 3157aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexAttribPointerProc> fVertexAttribPointer; 3167aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLViewportProc> fViewport; 3177aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 3187aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* GL_NV_path_rendering */ 3197aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMatrixLoadfProc> fMatrixLoadf; 3207aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity; 32183118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation; 32283118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLPathCommandsProc> fPathCommands; 32383118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLPathParameteriProc> fPathParameteri; 32483118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLPathParameterfProc> fPathParameterf; 32583118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLGenPathsProc> fGenPaths; 32683118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLDeletePathsProc> fDeletePaths; 3277aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLIsPathProc> fIsPath; 3287aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLPathStencilFuncProc> fPathStencilFunc; 3297aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilFillPathProc> fStencilFillPath; 3307aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilStrokePathProc> fStencilStrokePath; 3317aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced; 3327aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced; 3337aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCoverFillPathProc> fCoverFillPath; 3347aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCoverStrokePathProc> fCoverStrokePath; 3357aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced; 3367aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced; 3377aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // NV_path_rendering v1.2 3387aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath; 3397aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath; 3407aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced; 3417aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced; 3427aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // NV_path_rendering v1.3 3437aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen; 3447aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // CHROMIUM_path_rendering 3457aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLBindFragmentInputLocationProc> fBindFragmentInputLocation; 3467aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 3477aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* NV_framebuffer_mixed_samples */ 3487aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCoverageModulationProc> fCoverageModulation; 3497aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 3507aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* EXT_multi_draw_indirect */ 3517aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMultiDrawArraysIndirectProc> fMultiDrawArraysIndirect; 3527aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMultiDrawElementsIndirectProc> fMultiDrawElementsIndirect; 3537aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 3547aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* NV_bindless_texture */ 3557aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // We use the NVIDIA verson for now because it does not require dynamically uniform handles. 3567aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // We may switch the the ARB version and/or omit methods in the future. 3577aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetTextureHandleProc> fGetTextureHandle; 3587aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetTextureSamplerHandleProc> fGetTextureSamplerHandle; 3597aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMakeTextureHandleResidentProc> fMakeTextureHandleResident; 3607aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMakeTextureHandleNonResidentProc> fMakeTextureHandleNonResident; 36183118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLGetImageHandleProc> fGetImageHandle; 3627aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMakeImageHandleResidentProc> fMakeImageHandleResident; 3637aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMakeImageHandleNonResidentProc> fMakeImageHandleNonResident; 3647aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLIsTextureHandleResidentProc> fIsTextureHandleResident; 3655d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLIsImageHandleResidentProc> fIsImageHandleResident; 3665d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLUniformHandleui64Proc> fUniformHandleui64; 3677aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLUniformHandleui64vProc> fUniformHandleui64v; 3687aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformHandleui64Proc> fProgramUniformHandleui64; 3697aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformHandleui64vProc> fProgramUniformHandleui64v; 3707aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 3717aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* EXT_direct_state_access */ 3727aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // We use the EXT verson because it is more expansive and interacts with more extensions 3737aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // than the ARB or core (4.5) versions. We may switch and/or omit methods in the future. 3747aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureParameteriProc> fTextureParameteri; 3757aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureParameterivProc> fTextureParameteriv; 3767aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureParameterfProc> fTextureParameterf; 3777aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureParameterfvProc> fTextureParameterfv; 3787aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureImage1DProc> fTextureImage1D; 3797aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureImage2DProc> fTextureImage2D; 3807aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureSubImage1DProc> fTextureSubImage1D; 3817aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLTextureSubImage2DProc> fTextureSubImage2D; 3825d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCopyTextureImage1DProc> fCopyTextureImage1D; 38383118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLCopyTextureImage2DProc> fCopyTextureImage2D; 3845d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCopyTextureSubImage1DProc> fCopyTextureSubImage1D; 3855d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCopyTextureSubImage2DProc> fCopyTextureSubImage2D; 3865d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetTextureImageProc> fGetTextureImage; 3875d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetTextureParameterfvProc> fGetTextureParameterfv; 3885d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetTextureParameterivProc> fGetTextureParameteriv; 3895d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetTextureLevelParameterfvProc> fGetTextureLevelParameterfv; 3905d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetTextureLevelParameterivProc> fGetTextureLevelParameteriv; 3915d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // OpenGL 1.2 3925d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLTextureImage3DProc> fTextureImage3D; 3935d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLTextureSubImage3DProc> fTextureSubImage3D; 3945d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCopyTextureSubImage3DProc> fCopyTextureSubImage3D; 3955d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCompressedTextureImage3DProc> fCompressedTextureImage3D; 3965d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCompressedTextureImage2DProc> fCompressedTextureImage2D; 3975d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCompressedTextureImage1DProc> fCompressedTextureImage1D; 3987aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCompressedTextureSubImage3DProc> fCompressedTextureSubImage3D; 39983118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLCompressedTextureSubImage2DProc> fCompressedTextureSubImage2D; 4005d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLCompressedTextureSubImage1DProc> fCompressedTextureSubImage1D; 4015d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetCompressedTextureImageProc> fGetCompressedTextureImage; 4025d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // OpenGL 1.5 4035d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLNamedBufferDataProc> fNamedBufferData; 4045d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLNamedBufferSubDataProc> fNamedBufferSubData; 4055d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLMapNamedBufferProc> fMapNamedBuffer; 4065d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLUnmapNamedBufferProc> fUnmapNamedBuffer; 40783118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLGetNamedBufferParameterivProc> fGetNamedBufferParameteriv; 4085d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLGetNamedBufferPointervProc> fGetNamedBufferPointerv; 40994bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLGetNamedBufferSubDataProc> fGetNamedBufferSubData; 41094bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser // OpenGL 2.0 41194bd77415fc44ada4ceba856a81fe029c12bf313Kurt B. Kaiser GrGLFunction<GrGLProgramUniform1fProc> fProgramUniform1f; 4127aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform2fProc> fProgramUniform2f; 4135d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLProgramUniform3fProc> fProgramUniform3f; 4145d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLProgramUniform4fProc> fProgramUniform4f; 4155d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLProgramUniform1iProc> fProgramUniform1i; 4165d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLProgramUniform2iProc> fProgramUniform2i; 4175d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLFunction<GrGLProgramUniform3iProc> fProgramUniform3i; 41883118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLProgramUniform4iProc> fProgramUniform4i; 4197aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform1fvProc> fProgramUniform1fv; 4207aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform2fvProc> fProgramUniform2fv; 4217aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform3fvProc> fProgramUniform3fv; 4227aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform4fvProc> fProgramUniform4fv; 4237aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform1ivProc> fProgramUniform1iv; 4247aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform2ivProc> fProgramUniform2iv; 4257aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform3ivProc> fProgramUniform3iv; 4267aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniform4ivProc> fProgramUniform4iv; 4277aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix2fvProc> fProgramUniformMatrix2fv; 4287aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix3fvProc> fProgramUniformMatrix3fv; 4297aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix4fvProc> fProgramUniformMatrix4fv; 4307aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // OpenGL 2.1 4317aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix2x3fvProc> fProgramUniformMatrix2x3fv; 4327aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix3x2fvProc> fProgramUniformMatrix3x2fv; 4337aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix2x4fvProc> fProgramUniformMatrix2x4fv; 4347aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix4x2fvProc> fProgramUniformMatrix4x2fv; 4357aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix3x4fvProc> fProgramUniformMatrix3x4fv; 4367aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLProgramUniformMatrix4x3fvProc> fProgramUniformMatrix4x3fv; 43783118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser // OpenGL 3.0 4387aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLNamedRenderbufferStorageProc> fNamedRenderbufferStorage; 4397aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetNamedRenderbufferParameterivProc> fGetNamedRenderbufferParameteriv; 4407aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLNamedRenderbufferStorageMultisampleProc> fNamedRenderbufferStorageMultisample; 4417aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLCheckNamedFramebufferStatusProc> fCheckNamedFramebufferStatus; 44283118c6cb36cf9a424bec1b9a2ef8c8760bae8f5Kurt B. Kaiser GrGLFunction<GrGLNamedFramebufferTexture1DProc> fNamedFramebufferTexture1D; 4437aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLNamedFramebufferTexture2DProc> fNamedFramebufferTexture2D; 4447aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLNamedFramebufferTexture3DProc> fNamedFramebufferTexture3D; 4457aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLNamedFramebufferRenderbufferProc> fNamedFramebufferRenderbuffer; 4467aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetNamedFramebufferAttachmentParameterivProc> fGetNamedFramebufferAttachmentParameteriv; 4477aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGenerateTextureMipmapProc> fGenerateTextureMipmap; 4487aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLFramebufferDrawBufferProc> fFramebufferDrawBuffer; 4497aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLFramebufferDrawBuffersProc> fFramebufferDrawBuffers; 4507aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLFramebufferReadBufferProc> fFramebufferReadBuffer; 4517aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetFramebufferParameterivProc> fGetFramebufferParameteriv; 4527aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLNamedCopyBufferSubDataProc> fNamedCopyBufferSubData; 4537aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayVertexOffsetProc> fVertexArrayVertexOffset; 4547aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayColorOffsetProc> fVertexArrayColorOffset; 4553b55a891a197212b34b0c077f72cb3af752468ecSteven M. Gava GrGLFunction<GrGLVertexArrayEdgeFlagOffsetProc> fVertexArrayEdgeFlagOffset; 4567aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayIndexOffsetProc> fVertexArrayIndexOffset; 4577aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayNormalOffsetProc> fVertexArrayNormalOffset; 4587aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayTexCoordOffsetProc> fVertexArrayTexCoordOffset; 4597aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayMultiTexCoordOffsetProc> fVertexArrayMultiTexCoordOffset; 4607aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayFogCoordOffsetProc> fVertexArrayFogCoordOffset; 4617aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArraySecondaryColorOffsetProc> fVertexArraySecondaryColorOffset; 4627aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayVertexAttribOffsetProc> fVertexArrayVertexAttribOffset; 4637aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLVertexArrayVertexAttribIOffsetProc> fVertexArrayVertexAttribIOffset; 4647aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLEnableVertexArrayProc> fEnableVertexArray; 4657aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDisableVertexArrayProc> fDisableVertexArray; 4667aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLEnableVertexArrayAttribProc> fEnableVertexArrayAttrib; 4677aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDisableVertexArrayAttribProc> fDisableVertexArrayAttrib; 4687aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetVertexArrayIntegervProc> fGetVertexArrayIntegerv; 4697aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetVertexArrayPointervProc> fGetVertexArrayPointerv; 4707aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetVertexArrayIntegeri_vProc> fGetVertexArrayIntegeri_v; 4717aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetVertexArrayPointeri_vProc> fGetVertexArrayPointeri_v; 4727aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLMapNamedBufferRangeProc> fMapNamedBufferRange; 4737aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLFlushMappedNamedBufferRangeProc> fFlushMappedNamedBufferRange; 4747aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 4757aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* KHR_debug */ 4767aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDebugMessageControlProc> fDebugMessageControl; 4777aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDebugMessageInsertProc> fDebugMessageInsert; 4787aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLDebugMessageCallbackProc> fDebugMessageCallback; 4797aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLGetDebugMessageLogProc> fGetDebugMessageLog; 4807aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLPushDebugGroupProc> fPushDebugGroup; 4817aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLPopDebugGroupProc> fPopDebugGroup; 4827aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrGLObjectLabelProc> fObjectLabel; 4837aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 4847aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer /* EGL functions */ 4857aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrEGLCreateImageProc> fEGLCreateImage; 4867aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer GrGLFunction<GrEGLDestroyImageProc> fEGLDestroyImage; 4877aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer } fFunctions; 4887aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 4897aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer // Per-GL func callback 4907aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#if GR_GL_PER_GL_FUNC_CALLBACK 4915d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLInterfaceCallbackProc fCallback; 4925d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey GrGLInterfaceCallbackData fCallbackData; 4937aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#endif 4945d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey 4955d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey // This exists for internal testing. 4965d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey virtual void abandon() const {} 4975d2af63cc36ca1141e1ec7412fc33866f3908408Chui Tey}; 4987aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer 4997aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer#endif 5007aced17437a6b05bc4b0b5ff93aa6a5d3a374d68David Scherer