| 1 | /* | 
|---|
| 2 | * Copyright 2011 Google Inc. | 
|---|
| 3 | * | 
|---|
| 4 | * Use of this source code is governed by a BSD-style license that can be | 
|---|
| 5 | * found in the LICENSE file. | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef GrGLInterface_DEFINED | 
|---|
| 9 | #define GrGLInterface_DEFINED | 
|---|
| 10 |  | 
|---|
| 11 | #include "include/core/SkRefCnt.h" | 
|---|
| 12 | #include "include/gpu/gl/GrGLExtensions.h" | 
|---|
| 13 | #include "include/gpu/gl/GrGLFunctions.h" | 
|---|
| 14 |  | 
|---|
| 15 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 16 |  | 
|---|
| 17 | typedef void(*GrGLFuncPtr)(); | 
|---|
| 18 | struct GrGLInterface; | 
|---|
| 19 |  | 
|---|
| 20 |  | 
|---|
| 21 | /** | 
|---|
| 22 | * Rather than depend on platform-specific GL headers and libraries, we require | 
|---|
| 23 | * the client to provide a struct of GL function pointers. This struct can be | 
|---|
| 24 | * specified per-GrContext as a parameter to GrContext::MakeGL. If no interface is | 
|---|
| 25 | * passed to MakeGL then a default GL interface is created using GrGLMakeNativeInterface(). | 
|---|
| 26 | * If this returns nullptr then GrContext::MakeGL() will fail. | 
|---|
| 27 | * | 
|---|
| 28 | * The implementation of GrGLMakeNativeInterface is platform-specific. Several | 
|---|
| 29 | * implementations have been provided (for GLX, WGL, EGL, etc), along with an | 
|---|
| 30 | * implementation that simply returns nullptr. Clients should select the most | 
|---|
| 31 | * appropriate one to build. | 
|---|
| 32 | */ | 
|---|
| 33 | SK_API sk_sp<const GrGLInterface> GrGLMakeNativeInterface(); | 
|---|
| 34 | // Deprecated alternative to GrGLMakeNativeInterface(). | 
|---|
| 35 | SK_API const GrGLInterface* GrGLCreateNativeInterface(); | 
|---|
| 36 |  | 
|---|
| 37 | /** | 
|---|
| 38 | * GrContext uses the following interface to make all calls into OpenGL. When a | 
|---|
| 39 | * GrContext is created it is given a GrGLInterface. The interface's function | 
|---|
| 40 | * pointers must be valid for the OpenGL context associated with the GrContext. | 
|---|
| 41 | * On some platforms, such as Windows, function pointers for OpenGL extensions | 
|---|
| 42 | * may vary between OpenGL contexts. So the caller must be careful to use a | 
|---|
| 43 | * GrGLInterface initialized for the correct context. All functions that should | 
|---|
| 44 | * be available based on the OpenGL's version and extension string must be | 
|---|
| 45 | * non-NULL or GrContext creation will fail. This can be tested with the | 
|---|
| 46 | * validate() method when the OpenGL context has been made current. | 
|---|
| 47 | */ | 
|---|
| 48 | struct SK_API GrGLInterface : public SkRefCnt { | 
|---|
| 49 | private: | 
|---|
| 50 | typedef SkRefCnt INHERITED; | 
|---|
| 51 |  | 
|---|
| 52 | #if GR_GL_CHECK_ERROR | 
|---|
| 53 | // This is here to avoid having our debug code that checks for a GL error after most GL calls | 
|---|
| 54 | // accidentally swallow an OOM that should be reported. | 
|---|
| 55 | mutable bool fOOMed = false; | 
|---|
| 56 | bool fSuppressErrorLogging = false; | 
|---|
| 57 | #endif | 
|---|
| 58 |  | 
|---|
| 59 | public: | 
|---|
| 60 | GrGLInterface(); | 
|---|
| 61 |  | 
|---|
| 62 | // Validates that the GrGLInterface supports its advertised standard. This means the necessary | 
|---|
| 63 | // function pointers have been initialized for both the GL version and any advertised | 
|---|
| 64 | // extensions. | 
|---|
| 65 | bool validate() const; | 
|---|
| 66 |  | 
|---|
| 67 | #if GR_GL_CHECK_ERROR | 
|---|
| 68 | GrGLenum checkError(const char* location, const char* call) const; | 
|---|
| 69 | bool checkAndResetOOMed() const; | 
|---|
| 70 | void suppressErrorLogging(); | 
|---|
| 71 | #endif | 
|---|
| 72 |  | 
|---|
| 73 | #if GR_TEST_UTILS | 
|---|
| 74 | GrGLInterface(const GrGLInterface& that) | 
|---|
| 75 | : fStandard(that.fStandard) | 
|---|
| 76 | , fExtensions(that.fExtensions) | 
|---|
| 77 | , fFunctions(that.fFunctions) {} | 
|---|
| 78 | #endif | 
|---|
| 79 |  | 
|---|
| 80 | // Indicates the type of GL implementation | 
|---|
| 81 | union { | 
|---|
| 82 | GrGLStandard fStandard; | 
|---|
| 83 | GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated. | 
|---|
| 84 | }; | 
|---|
| 85 |  | 
|---|
| 86 | GrGLExtensions fExtensions; | 
|---|
| 87 |  | 
|---|
| 88 | bool hasExtension(const char ext[]) const { return fExtensions.has(ext); } | 
|---|
| 89 |  | 
|---|
| 90 | /** | 
|---|
| 91 | * The function pointers are in a struct so that we can have a compiler generated assignment | 
|---|
| 92 | * operator. | 
|---|
| 93 | */ | 
|---|
| 94 | struct Functions { | 
|---|
| 95 | GrGLFunction<GrGLActiveTextureFn> fActiveTexture; | 
|---|
| 96 | GrGLFunction<GrGLAttachShaderFn> fAttachShader; | 
|---|
| 97 | GrGLFunction<GrGLBeginQueryFn> fBeginQuery; | 
|---|
| 98 | GrGLFunction<GrGLBindAttribLocationFn> fBindAttribLocation; | 
|---|
| 99 | GrGLFunction<GrGLBindBufferFn> fBindBuffer; | 
|---|
| 100 | GrGLFunction<GrGLBindFragDataLocationFn> fBindFragDataLocation; | 
|---|
| 101 | GrGLFunction<GrGLBindFragDataLocationIndexedFn> fBindFragDataLocationIndexed; | 
|---|
| 102 | GrGLFunction<GrGLBindFramebufferFn> fBindFramebuffer; | 
|---|
| 103 | GrGLFunction<GrGLBindRenderbufferFn> fBindRenderbuffer; | 
|---|
| 104 | GrGLFunction<GrGLBindSamplerFn> fBindSampler; | 
|---|
| 105 | GrGLFunction<GrGLBindTextureFn> fBindTexture; | 
|---|
| 106 | GrGLFunction<GrGLBindVertexArrayFn> fBindVertexArray; | 
|---|
| 107 | GrGLFunction<GrGLBlendBarrierFn> fBlendBarrier; | 
|---|
| 108 | GrGLFunction<GrGLBlendColorFn> fBlendColor; | 
|---|
| 109 | GrGLFunction<GrGLBlendEquationFn> fBlendEquation; | 
|---|
| 110 | GrGLFunction<GrGLBlendFuncFn> fBlendFunc; | 
|---|
| 111 | GrGLFunction<GrGLBlitFramebufferFn> fBlitFramebuffer; | 
|---|
| 112 | GrGLFunction<GrGLBufferDataFn> fBufferData; | 
|---|
| 113 | GrGLFunction<GrGLBufferSubDataFn> fBufferSubData; | 
|---|
| 114 | GrGLFunction<GrGLCheckFramebufferStatusFn> fCheckFramebufferStatus; | 
|---|
| 115 | GrGLFunction<GrGLClearFn> fClear; | 
|---|
| 116 | GrGLFunction<GrGLClearColorFn> fClearColor; | 
|---|
| 117 | GrGLFunction<GrGLClearStencilFn> fClearStencil; | 
|---|
| 118 | GrGLFunction<GrGLClearTexImageFn> fClearTexImage; | 
|---|
| 119 | GrGLFunction<GrGLClearTexSubImageFn> fClearTexSubImage; | 
|---|
| 120 | GrGLFunction<GrGLColorMaskFn> fColorMask; | 
|---|
| 121 | GrGLFunction<GrGLCompileShaderFn> fCompileShader; | 
|---|
| 122 | GrGLFunction<GrGLCompressedTexImage2DFn> fCompressedTexImage2D; | 
|---|
| 123 | GrGLFunction<GrGLCompressedTexSubImage2DFn> fCompressedTexSubImage2D; | 
|---|
| 124 | GrGLFunction<GrGLCopyTexSubImage2DFn> fCopyTexSubImage2D; | 
|---|
| 125 | GrGLFunction<GrGLCreateProgramFn> fCreateProgram; | 
|---|
| 126 | GrGLFunction<GrGLCreateShaderFn> fCreateShader; | 
|---|
| 127 | GrGLFunction<GrGLCullFaceFn> fCullFace; | 
|---|
| 128 | GrGLFunction<GrGLDeleteBuffersFn> fDeleteBuffers; | 
|---|
| 129 | GrGLFunction<GrGLDeleteFencesFn> fDeleteFences; | 
|---|
| 130 | GrGLFunction<GrGLDeleteFramebuffersFn> fDeleteFramebuffers; | 
|---|
| 131 | GrGLFunction<GrGLDeleteProgramFn> fDeleteProgram; | 
|---|
| 132 | GrGLFunction<GrGLDeleteQueriesFn> fDeleteQueries; | 
|---|
| 133 | GrGLFunction<GrGLDeleteRenderbuffersFn> fDeleteRenderbuffers; | 
|---|
| 134 | GrGLFunction<GrGLDeleteSamplersFn> fDeleteSamplers; | 
|---|
| 135 | GrGLFunction<GrGLDeleteShaderFn> fDeleteShader; | 
|---|
| 136 | GrGLFunction<GrGLDeleteTexturesFn> fDeleteTextures; | 
|---|
| 137 | GrGLFunction<GrGLDeleteVertexArraysFn> fDeleteVertexArrays; | 
|---|
| 138 | GrGLFunction<GrGLDepthMaskFn> fDepthMask; | 
|---|
| 139 | GrGLFunction<GrGLDisableFn> fDisable; | 
|---|
| 140 | GrGLFunction<GrGLDisableVertexAttribArrayFn> fDisableVertexAttribArray; | 
|---|
| 141 | GrGLFunction<GrGLDrawArraysFn> fDrawArrays; | 
|---|
| 142 | GrGLFunction<GrGLDrawArraysIndirectFn> fDrawArraysIndirect; | 
|---|
| 143 | GrGLFunction<GrGLDrawArraysInstancedFn> fDrawArraysInstanced; | 
|---|
| 144 | GrGLFunction<GrGLDrawBufferFn> fDrawBuffer; | 
|---|
| 145 | GrGLFunction<GrGLDrawBuffersFn> fDrawBuffers; | 
|---|
| 146 | GrGLFunction<GrGLDrawElementsFn> fDrawElements; | 
|---|
| 147 | GrGLFunction<GrGLDrawElementsIndirectFn> fDrawElementsIndirect; | 
|---|
| 148 | GrGLFunction<GrGLDrawElementsInstancedFn> fDrawElementsInstanced; | 
|---|
| 149 | GrGLFunction<GrGLDrawRangeElementsFn> fDrawRangeElements; | 
|---|
| 150 | GrGLFunction<GrGLEnableFn> fEnable; | 
|---|
| 151 | GrGLFunction<GrGLEnableVertexAttribArrayFn> fEnableVertexAttribArray; | 
|---|
| 152 | GrGLFunction<GrGLEndQueryFn> fEndQuery; | 
|---|
| 153 | GrGLFunction<GrGLFinishFn> fFinish; | 
|---|
| 154 | GrGLFunction<GrGLFinishFenceFn> fFinishFence; | 
|---|
| 155 | GrGLFunction<GrGLFlushFn> fFlush; | 
|---|
| 156 | GrGLFunction<GrGLFlushMappedBufferRangeFn> fFlushMappedBufferRange; | 
|---|
| 157 | GrGLFunction<GrGLFramebufferRenderbufferFn> fFramebufferRenderbuffer; | 
|---|
| 158 | GrGLFunction<GrGLFramebufferTexture2DFn> fFramebufferTexture2D; | 
|---|
| 159 | GrGLFunction<GrGLFramebufferTexture2DMultisampleFn> fFramebufferTexture2DMultisample; | 
|---|
| 160 | GrGLFunction<GrGLFrontFaceFn> fFrontFace; | 
|---|
| 161 | GrGLFunction<GrGLGenBuffersFn> fGenBuffers; | 
|---|
| 162 | GrGLFunction<GrGLGenFencesFn> fGenFences; | 
|---|
| 163 | GrGLFunction<GrGLGenFramebuffersFn> fGenFramebuffers; | 
|---|
| 164 | GrGLFunction<GrGLGenerateMipmapFn> fGenerateMipmap; | 
|---|
| 165 | GrGLFunction<GrGLGenQueriesFn> fGenQueries; | 
|---|
| 166 | GrGLFunction<GrGLGenRenderbuffersFn> fGenRenderbuffers; | 
|---|
| 167 | GrGLFunction<GrGLGenSamplersFn> fGenSamplers; | 
|---|
| 168 | GrGLFunction<GrGLGenTexturesFn> fGenTextures; | 
|---|
| 169 | GrGLFunction<GrGLGenVertexArraysFn> fGenVertexArrays; | 
|---|
| 170 | GrGLFunction<GrGLGetBufferParameterivFn> fGetBufferParameteriv; | 
|---|
| 171 | GrGLFunction<GrGLGetErrorFn> fGetError; | 
|---|
| 172 | GrGLFunction<GrGLGetFramebufferAttachmentParameterivFn> fGetFramebufferAttachmentParameteriv; | 
|---|
| 173 | GrGLFunction<GrGLGetIntegervFn> fGetIntegerv; | 
|---|
| 174 | GrGLFunction<GrGLGetMultisamplefvFn> fGetMultisamplefv; | 
|---|
| 175 | GrGLFunction<GrGLGetProgramBinaryFn> fGetProgramBinary; | 
|---|
| 176 | GrGLFunction<GrGLGetProgramInfoLogFn> fGetProgramInfoLog; | 
|---|
| 177 | GrGLFunction<GrGLGetProgramivFn> fGetProgramiv; | 
|---|
| 178 | GrGLFunction<GrGLGetQueryObjecti64vFn> fGetQueryObjecti64v; | 
|---|
| 179 | GrGLFunction<GrGLGetQueryObjectivFn> fGetQueryObjectiv; | 
|---|
| 180 | GrGLFunction<GrGLGetQueryObjectui64vFn> fGetQueryObjectui64v; | 
|---|
| 181 | GrGLFunction<GrGLGetQueryObjectuivFn> fGetQueryObjectuiv; | 
|---|
| 182 | GrGLFunction<GrGLGetQueryivFn> fGetQueryiv; | 
|---|
| 183 | GrGLFunction<GrGLGetRenderbufferParameterivFn> fGetRenderbufferParameteriv; | 
|---|
| 184 | GrGLFunction<GrGLGetShaderInfoLogFn> fGetShaderInfoLog; | 
|---|
| 185 | GrGLFunction<GrGLGetShaderivFn> fGetShaderiv; | 
|---|
| 186 | GrGLFunction<GrGLGetShaderPrecisionFormatFn> fGetShaderPrecisionFormat; | 
|---|
| 187 | GrGLFunction<GrGLGetStringFn> fGetString; | 
|---|
| 188 | GrGLFunction<GrGLGetStringiFn> fGetStringi; | 
|---|
| 189 | GrGLFunction<GrGLGetTexLevelParameterivFn> fGetTexLevelParameteriv; | 
|---|
| 190 | GrGLFunction<GrGLGetUniformLocationFn> fGetUniformLocation; | 
|---|
| 191 | GrGLFunction<GrGLInsertEventMarkerFn> fInsertEventMarker; | 
|---|
| 192 | GrGLFunction<GrGLInvalidateBufferDataFn> fInvalidateBufferData; | 
|---|
| 193 | GrGLFunction<GrGLInvalidateBufferSubDataFn> fInvalidateBufferSubData; | 
|---|
| 194 | GrGLFunction<GrGLInvalidateFramebufferFn> fInvalidateFramebuffer; | 
|---|
| 195 | GrGLFunction<GrGLInvalidateSubFramebufferFn> fInvalidateSubFramebuffer; | 
|---|
| 196 | GrGLFunction<GrGLInvalidateTexImageFn> fInvalidateTexImage; | 
|---|
| 197 | GrGLFunction<GrGLInvalidateTexSubImageFn> fInvalidateTexSubImage; | 
|---|
| 198 | GrGLFunction<GrGLIsTextureFn> fIsTexture; | 
|---|
| 199 | GrGLFunction<GrGLLineWidthFn> fLineWidth; | 
|---|
| 200 | GrGLFunction<GrGLLinkProgramFn> fLinkProgram; | 
|---|
| 201 | GrGLFunction<GrGLProgramBinaryFn> fProgramBinary; | 
|---|
| 202 | GrGLFunction<GrGLProgramParameteriFn> fProgramParameteri; | 
|---|
| 203 | GrGLFunction<GrGLMapBufferFn> fMapBuffer; | 
|---|
| 204 | GrGLFunction<GrGLMapBufferRangeFn> fMapBufferRange; | 
|---|
| 205 | GrGLFunction<GrGLMapBufferSubDataFn> fMapBufferSubData; | 
|---|
| 206 | GrGLFunction<GrGLMapTexSubImage2DFn> fMapTexSubImage2D; | 
|---|
| 207 | GrGLFunction<GrGLMemoryBarrierFn> fMemoryBarrier; | 
|---|
| 208 | GrGLFunction<GrGLDrawArraysInstancedBaseInstanceFn> fDrawArraysInstancedBaseInstance; | 
|---|
| 209 | GrGLFunction<GrGLDrawElementsInstancedBaseVertexBaseInstanceFn> fDrawElementsInstancedBaseVertexBaseInstance; | 
|---|
| 210 | GrGLFunction<GrGLMultiDrawArraysIndirectFn> fMultiDrawArraysIndirect; | 
|---|
| 211 | GrGLFunction<GrGLMultiDrawElementsIndirectFn> fMultiDrawElementsIndirect; | 
|---|
| 212 | GrGLFunction<GrGLMultiDrawArraysInstancedBaseInstanceFn> fMultiDrawArraysInstancedBaseInstance; | 
|---|
| 213 | GrGLFunction<GrGLMultiDrawElementsInstancedBaseVertexBaseInstanceFn> fMultiDrawElementsInstancedBaseVertexBaseInstance; | 
|---|
| 214 | GrGLFunction<GrGLPatchParameteriFn> fPatchParameteri; | 
|---|
| 215 | GrGLFunction<GrGLPixelStoreiFn> fPixelStorei; | 
|---|
| 216 | GrGLFunction<GrGLPolygonModeFn> fPolygonMode; | 
|---|
| 217 | GrGLFunction<GrGLPopGroupMarkerFn> fPopGroupMarker; | 
|---|
| 218 | GrGLFunction<GrGLPushGroupMarkerFn> fPushGroupMarker; | 
|---|
| 219 | GrGLFunction<GrGLQueryCounterFn> fQueryCounter; | 
|---|
| 220 | GrGLFunction<GrGLReadBufferFn> fReadBuffer; | 
|---|
| 221 | GrGLFunction<GrGLReadPixelsFn> fReadPixels; | 
|---|
| 222 | GrGLFunction<GrGLRenderbufferStorageFn> fRenderbufferStorage; | 
|---|
| 223 |  | 
|---|
| 224 | //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA | 
|---|
| 225 | //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the | 
|---|
| 226 | //  older extensions for performance reasons or due to ES3 driver bugs. We want the function | 
|---|
| 227 | //  that creates the GrGLInterface to provide all available functions and internally | 
|---|
| 228 | //  we will select among them. They all have a method called glRenderbufferStorageMultisample*. | 
|---|
| 229 | //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture, | 
|---|
| 230 | //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample | 
|---|
| 231 | //  variations. | 
|---|
| 232 | // | 
|---|
| 233 | //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will | 
|---|
| 234 | //  assume the function pointers for the standard (or equivalent GL_ARB) version have | 
|---|
| 235 | //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced | 
|---|
| 236 | //  functionality. | 
|---|
| 237 |  | 
|---|
| 238 | //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture | 
|---|
| 239 | GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisampleES2EXT; | 
|---|
| 240 | //  GL_APPLE_framebuffer_multisample | 
|---|
| 241 | GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisampleES2APPLE; | 
|---|
| 242 |  | 
|---|
| 243 | //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or | 
|---|
| 244 | //  the standard function in ES3+ or GL 3.0+. | 
|---|
| 245 | GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisample; | 
|---|
| 246 |  | 
|---|
| 247 | // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension. | 
|---|
| 248 | GrGLFunction<GrGLBindUniformLocationFn> fBindUniformLocation; | 
|---|
| 249 |  | 
|---|
| 250 | GrGLFunction<GrGLResolveMultisampleFramebufferFn> fResolveMultisampleFramebuffer; | 
|---|
| 251 | GrGLFunction<GrGLSamplerParameteriFn> fSamplerParameteri; | 
|---|
| 252 | GrGLFunction<GrGLSamplerParameterivFn> fSamplerParameteriv; | 
|---|
| 253 | GrGLFunction<GrGLScissorFn> fScissor; | 
|---|
| 254 | GrGLFunction<GrGLSetFenceFn> fSetFence; | 
|---|
| 255 | GrGLFunction<GrGLShaderSourceFn> fShaderSource; | 
|---|
| 256 | GrGLFunction<GrGLStencilFuncFn> fStencilFunc; | 
|---|
| 257 | GrGLFunction<GrGLStencilFuncSeparateFn> fStencilFuncSeparate; | 
|---|
| 258 | GrGLFunction<GrGLStencilMaskFn> fStencilMask; | 
|---|
| 259 | GrGLFunction<GrGLStencilMaskSeparateFn> fStencilMaskSeparate; | 
|---|
| 260 | GrGLFunction<GrGLStencilOpFn> fStencilOp; | 
|---|
| 261 | GrGLFunction<GrGLStencilOpSeparateFn> fStencilOpSeparate; | 
|---|
| 262 | GrGLFunction<GrGLTestFenceFn> fTestFence; | 
|---|
| 263 | GrGLFunction<GrGLTexBufferFn> fTexBuffer; | 
|---|
| 264 | GrGLFunction<GrGLTexBufferRangeFn> fTexBufferRange; | 
|---|
| 265 | GrGLFunction<GrGLTexImage2DFn> fTexImage2D; | 
|---|
| 266 | GrGLFunction<GrGLTexParameterfFn> fTexParameterf; | 
|---|
| 267 | GrGLFunction<GrGLTexParameterfvFn> fTexParameterfv; | 
|---|
| 268 | GrGLFunction<GrGLTexParameteriFn> fTexParameteri; | 
|---|
| 269 | GrGLFunction<GrGLTexParameterivFn> fTexParameteriv; | 
|---|
| 270 | GrGLFunction<GrGLTexSubImage2DFn> fTexSubImage2D; | 
|---|
| 271 | GrGLFunction<GrGLTexStorage2DFn> fTexStorage2D; | 
|---|
| 272 | GrGLFunction<GrGLTextureBarrierFn> fTextureBarrier; | 
|---|
| 273 | GrGLFunction<GrGLDiscardFramebufferFn> fDiscardFramebuffer; | 
|---|
| 274 | GrGLFunction<GrGLUniform1fFn> fUniform1f; | 
|---|
| 275 | GrGLFunction<GrGLUniform1iFn> fUniform1i; | 
|---|
| 276 | GrGLFunction<GrGLUniform1fvFn> fUniform1fv; | 
|---|
| 277 | GrGLFunction<GrGLUniform1ivFn> fUniform1iv; | 
|---|
| 278 | GrGLFunction<GrGLUniform2fFn> fUniform2f; | 
|---|
| 279 | GrGLFunction<GrGLUniform2iFn> fUniform2i; | 
|---|
| 280 | GrGLFunction<GrGLUniform2fvFn> fUniform2fv; | 
|---|
| 281 | GrGLFunction<GrGLUniform2ivFn> fUniform2iv; | 
|---|
| 282 | GrGLFunction<GrGLUniform3fFn> fUniform3f; | 
|---|
| 283 | GrGLFunction<GrGLUniform3iFn> fUniform3i; | 
|---|
| 284 | GrGLFunction<GrGLUniform3fvFn> fUniform3fv; | 
|---|
| 285 | GrGLFunction<GrGLUniform3ivFn> fUniform3iv; | 
|---|
| 286 | GrGLFunction<GrGLUniform4fFn> fUniform4f; | 
|---|
| 287 | GrGLFunction<GrGLUniform4iFn> fUniform4i; | 
|---|
| 288 | GrGLFunction<GrGLUniform4fvFn> fUniform4fv; | 
|---|
| 289 | GrGLFunction<GrGLUniform4ivFn> fUniform4iv; | 
|---|
| 290 | GrGLFunction<GrGLUniformMatrix2fvFn> fUniformMatrix2fv; | 
|---|
| 291 | GrGLFunction<GrGLUniformMatrix3fvFn> fUniformMatrix3fv; | 
|---|
| 292 | GrGLFunction<GrGLUniformMatrix4fvFn> fUniformMatrix4fv; | 
|---|
| 293 | GrGLFunction<GrGLUnmapBufferFn> fUnmapBuffer; | 
|---|
| 294 | GrGLFunction<GrGLUnmapBufferSubDataFn> fUnmapBufferSubData; | 
|---|
| 295 | GrGLFunction<GrGLUnmapTexSubImage2DFn> fUnmapTexSubImage2D; | 
|---|
| 296 | GrGLFunction<GrGLUseProgramFn> fUseProgram; | 
|---|
| 297 | GrGLFunction<GrGLVertexAttrib1fFn> fVertexAttrib1f; | 
|---|
| 298 | GrGLFunction<GrGLVertexAttrib2fvFn> fVertexAttrib2fv; | 
|---|
| 299 | GrGLFunction<GrGLVertexAttrib3fvFn> fVertexAttrib3fv; | 
|---|
| 300 | GrGLFunction<GrGLVertexAttrib4fvFn> fVertexAttrib4fv; | 
|---|
| 301 | GrGLFunction<GrGLVertexAttribDivisorFn> fVertexAttribDivisor; | 
|---|
| 302 | GrGLFunction<GrGLVertexAttribIPointerFn> fVertexAttribIPointer; | 
|---|
| 303 | GrGLFunction<GrGLVertexAttribPointerFn> fVertexAttribPointer; | 
|---|
| 304 | GrGLFunction<GrGLViewportFn> fViewport; | 
|---|
| 305 |  | 
|---|
| 306 | /* GL_NV_path_rendering */ | 
|---|
| 307 | GrGLFunction<GrGLMatrixLoadfFn> fMatrixLoadf; | 
|---|
| 308 | GrGLFunction<GrGLMatrixLoadIdentityFn> fMatrixLoadIdentity; | 
|---|
| 309 | GrGLFunction<GrGLGetProgramResourceLocationFn> fGetProgramResourceLocation; | 
|---|
| 310 | GrGLFunction<GrGLPathCommandsFn> fPathCommands; | 
|---|
| 311 | GrGLFunction<GrGLPathParameteriFn> fPathParameteri; | 
|---|
| 312 | GrGLFunction<GrGLPathParameterfFn> fPathParameterf; | 
|---|
| 313 | GrGLFunction<GrGLGenPathsFn> fGenPaths; | 
|---|
| 314 | GrGLFunction<GrGLDeletePathsFn> fDeletePaths; | 
|---|
| 315 | GrGLFunction<GrGLIsPathFn> fIsPath; | 
|---|
| 316 | GrGLFunction<GrGLPathStencilFuncFn> fPathStencilFunc; | 
|---|
| 317 | GrGLFunction<GrGLStencilFillPathFn> fStencilFillPath; | 
|---|
| 318 | GrGLFunction<GrGLStencilStrokePathFn> fStencilStrokePath; | 
|---|
| 319 | GrGLFunction<GrGLStencilFillPathInstancedFn> fStencilFillPathInstanced; | 
|---|
| 320 | GrGLFunction<GrGLStencilStrokePathInstancedFn> fStencilStrokePathInstanced; | 
|---|
| 321 | GrGLFunction<GrGLCoverFillPathFn> fCoverFillPath; | 
|---|
| 322 | GrGLFunction<GrGLCoverStrokePathFn> fCoverStrokePath; | 
|---|
| 323 | GrGLFunction<GrGLCoverFillPathInstancedFn> fCoverFillPathInstanced; | 
|---|
| 324 | GrGLFunction<GrGLCoverStrokePathInstancedFn> fCoverStrokePathInstanced; | 
|---|
| 325 | // NV_path_rendering v1.2 | 
|---|
| 326 | GrGLFunction<GrGLStencilThenCoverFillPathFn> fStencilThenCoverFillPath; | 
|---|
| 327 | GrGLFunction<GrGLStencilThenCoverStrokePathFn> fStencilThenCoverStrokePath; | 
|---|
| 328 | GrGLFunction<GrGLStencilThenCoverFillPathInstancedFn> fStencilThenCoverFillPathInstanced; | 
|---|
| 329 | GrGLFunction<GrGLStencilThenCoverStrokePathInstancedFn> fStencilThenCoverStrokePathInstanced; | 
|---|
| 330 | // NV_path_rendering v1.3 | 
|---|
| 331 | GrGLFunction<GrGLProgramPathFragmentInputGenFn> fProgramPathFragmentInputGen; | 
|---|
| 332 | // CHROMIUM_path_rendering | 
|---|
| 333 | GrGLFunction<GrGLBindFragmentInputLocationFn> fBindFragmentInputLocation; | 
|---|
| 334 |  | 
|---|
| 335 | /* NV_framebuffer_mixed_samples */ | 
|---|
| 336 | GrGLFunction<GrGLCoverageModulationFn> fCoverageModulation; | 
|---|
| 337 |  | 
|---|
| 338 | /* ARB_sync */ | 
|---|
| 339 | GrGLFunction<GrGLFenceSyncFn> fFenceSync; | 
|---|
| 340 | GrGLFunction<GrGLIsSyncFn> fIsSync; | 
|---|
| 341 | GrGLFunction<GrGLClientWaitSyncFn> fClientWaitSync; | 
|---|
| 342 | GrGLFunction<GrGLWaitSyncFn> fWaitSync; | 
|---|
| 343 | GrGLFunction<GrGLDeleteSyncFn> fDeleteSync; | 
|---|
| 344 |  | 
|---|
| 345 | /* ARB_internalforamt_query */ | 
|---|
| 346 | GrGLFunction<GrGLGetInternalformativFn> fGetInternalformativ; | 
|---|
| 347 |  | 
|---|
| 348 | /* KHR_debug */ | 
|---|
| 349 | GrGLFunction<GrGLDebugMessageControlFn> fDebugMessageControl; | 
|---|
| 350 | GrGLFunction<GrGLDebugMessageInsertFn> fDebugMessageInsert; | 
|---|
| 351 | GrGLFunction<GrGLDebugMessageCallbackFn> fDebugMessageCallback; | 
|---|
| 352 | GrGLFunction<GrGLGetDebugMessageLogFn> fGetDebugMessageLog; | 
|---|
| 353 | GrGLFunction<GrGLPushDebugGroupFn> fPushDebugGroup; | 
|---|
| 354 | GrGLFunction<GrGLPopDebugGroupFn> fPopDebugGroup; | 
|---|
| 355 | GrGLFunction<GrGLObjectLabelFn> fObjectLabel; | 
|---|
| 356 |  | 
|---|
| 357 | /* EXT_window_rectangles */ | 
|---|
| 358 | GrGLFunction<GrGLWindowRectanglesFn> fWindowRectangles; | 
|---|
| 359 |  | 
|---|
| 360 | /* GL_QCOM_tiled_rendering */ | 
|---|
| 361 | GrGLFunction<GrGLStartTilingFn> fStartTiling; | 
|---|
| 362 | GrGLFunction<GrGLEndTilingFn> fEndTiling; | 
|---|
| 363 | } fFunctions; | 
|---|
| 364 |  | 
|---|
| 365 | #if GR_TEST_UTILS | 
|---|
| 366 | // This exists for internal testing. | 
|---|
| 367 | virtual void abandon() const; | 
|---|
| 368 | #endif | 
|---|
| 369 | }; | 
|---|
| 370 |  | 
|---|
| 371 | #endif | 
|---|
| 372 |  | 
|---|