blob: 0b7bd9681406963997cf3bd201ef41e50f0f25a0 [file] [log] [blame]
twiz@google.com59a190b2011-03-14 21:23:01 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * 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.
twiz@google.com59a190b2011-03-14 21:23:01 +00006 */
7
twiz@google.com59a190b2011-03-14 21:23:01 +00008#ifndef GrGLInterface_DEFINED
9#define GrGLInterface_DEFINED
10
bsalomon@google.com637d5e92012-05-07 21:33:56 +000011#include "GrGLFunctions.h"
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +000012#include "GrGLExtensions.h"
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +000013#include "SkRefCnt.h"
twiz@google.com59a190b2011-03-14 21:23:01 +000014
twiz@google.com59a190b2011-03-14 21:23:01 +000015////////////////////////////////////////////////////////////////////////////////
16
Brian Salomon3d6801e2017-12-11 10:06:31 -050017typedef void(*GrGLFuncPtr)();
18struct GrGLInterface;
19
20
twiz@google.com59a190b2011-03-14 21:23:01 +000021/**
bsalomon@google.com0b77d682011-08-19 13:28:54 +000022 * 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
Brian Salomonc1b9c102018-04-06 09:18:00 -040024 * 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.
bsalomon@google.com0b77d682011-08-19 13:28:54 +000027 *
Brian Salomonc1b9c102018-04-06 09:18:00 -040028 * 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.
twiz@google.com59a190b2011-03-14 21:23:01 +000032 */
Brian Salomon3d6801e2017-12-11 10:06:31 -050033SK_API sk_sp<const GrGLInterface> GrGLMakeNativeInterface();
34// Deprecated alternative to GrGLMakeNativeInterface().
halcanary0fc1dbe2015-09-21 08:22:19 -070035SK_API const GrGLInterface* GrGLCreateNativeInterface();
bsalomon@google.com373a6632011-10-19 20:43:20 +000036
bsalomon@google.com74913722011-10-27 20:44:19 +000037/**
38 * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
bsalomon3724e572016-03-30 18:56:19 -070039 * CPU overhead. TODO: We would like to move this to tools/gpu/gl/null but currently
40 * Chromium is using it in its unit tests.
bsalomon@google.com74913722011-10-27 20:44:19 +000041 */
svaisanenb988ecf2016-04-20 00:36:53 -070042const SK_API GrGLInterface* GrGLCreateNullInterface(bool enableNVPR = false);
bsalomon@google.com74913722011-10-27 20:44:19 +000043
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +000044/**
bsalomon@google.comcc61b172012-05-07 21:45:48 +000045 * GrContext uses the following interface to make all calls into OpenGL. When a
46 * GrContext is created it is given a GrGLInterface. The interface's function
47 * pointers must be valid for the OpenGL context associated with the GrContext.
48 * On some platforms, such as Windows, function pointers for OpenGL extensions
49 * may vary between OpenGL contexts. So the caller must be careful to use a
50 * GrGLInterface initialized for the correct context. All functions that should
51 * be available based on the OpenGL's version and extension string must be
52 * non-NULL or GrContext creation will fail. This can be tested with the
53 * validate() method when the OpenGL context has been made current.
bsalomon@google.combf2a4692011-05-04 12:35:39 +000054 */
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +000055struct SK_API GrGLInterface : public SkRefCnt {
bsalomon@google.comba800e22012-03-29 21:04:52 +000056private:
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +000057 typedef SkRefCnt INHERITED;
robertphillips@google.com15e9d3e2012-06-21 20:25:03 +000058
bsalomon@google.comba800e22012-03-29 21:04:52 +000059public:
bsalomon@google.com0b77d682011-08-19 13:28:54 +000060 GrGLInterface();
61
commit-bot@chromium.org9e90aed2014-01-16 16:35:09 +000062 // 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;
bsalomon@google.com89ec61e2012-02-10 20:05:18 +000066
commit-bot@chromium.org9e90aed2014-01-16 16:35:09 +000067 // Indicates the type of GL implementation
68 union {
69 GrGLStandard fStandard;
70 GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
71 };
twiz@google.comb65e0cb2011-03-18 20:41:44 +000072
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +000073 GrGLExtensions fExtensions;
74
commit-bot@chromium.orgf5355612014-02-28 20:28:50 +000075 bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +000076
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +000077 /**
78 * The function pointers are in a struct so that we can have a compiler generated assignment
79 * operator.
Robert Phillips752e08b2018-06-22 09:48:38 -040080 * If one were to add a new function to this struct, one should also clear it in abandon.
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +000081 */
82 struct Functions {
bsalomon9f2dc272016-02-08 07:22:17 -080083 GrGLFunction<GrGLActiveTextureProc> fActiveTexture;
84 GrGLFunction<GrGLAttachShaderProc> fAttachShader;
85 GrGLFunction<GrGLBeginQueryProc> fBeginQuery;
86 GrGLFunction<GrGLBindAttribLocationProc> fBindAttribLocation;
87 GrGLFunction<GrGLBindBufferProc> fBindBuffer;
88 GrGLFunction<GrGLBindFragDataLocationProc> fBindFragDataLocation;
89 GrGLFunction<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
90 GrGLFunction<GrGLBindFramebufferProc> fBindFramebuffer;
91 GrGLFunction<GrGLBindRenderbufferProc> fBindRenderbuffer;
92 GrGLFunction<GrGLBindTextureProc> fBindTexture;
93 GrGLFunction<GrGLBindVertexArrayProc> fBindVertexArray;
94 GrGLFunction<GrGLBlendBarrierProc> fBlendBarrier;
95 GrGLFunction<GrGLBlendColorProc> fBlendColor;
96 GrGLFunction<GrGLBlendEquationProc> fBlendEquation;
97 GrGLFunction<GrGLBlendFuncProc> fBlendFunc;
98 GrGLFunction<GrGLBlitFramebufferProc> fBlitFramebuffer;
99 GrGLFunction<GrGLBufferDataProc> fBufferData;
100 GrGLFunction<GrGLBufferSubDataProc> fBufferSubData;
101 GrGLFunction<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
102 GrGLFunction<GrGLClearProc> fClear;
103 GrGLFunction<GrGLClearColorProc> fClearColor;
104 GrGLFunction<GrGLClearStencilProc> fClearStencil;
Brian Salomond17b4a62017-05-23 16:53:47 -0400105 GrGLFunction<GrGLClearTexImageProc> fClearTexImage;
106 GrGLFunction<GrGLClearTexSubImageProc> fClearTexSubImage;
bsalomon9f2dc272016-02-08 07:22:17 -0800107 GrGLFunction<GrGLColorMaskProc> fColorMask;
108 GrGLFunction<GrGLCompileShaderProc> fCompileShader;
109 GrGLFunction<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
110 GrGLFunction<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D;
111 GrGLFunction<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
112 GrGLFunction<GrGLCreateProgramProc> fCreateProgram;
113 GrGLFunction<GrGLCreateShaderProc> fCreateShader;
114 GrGLFunction<GrGLCullFaceProc> fCullFace;
115 GrGLFunction<GrGLDeleteBuffersProc> fDeleteBuffers;
116 GrGLFunction<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
117 GrGLFunction<GrGLDeleteProgramProc> fDeleteProgram;
118 GrGLFunction<GrGLDeleteQueriesProc> fDeleteQueries;
119 GrGLFunction<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
120 GrGLFunction<GrGLDeleteShaderProc> fDeleteShader;
121 GrGLFunction<GrGLDeleteTexturesProc> fDeleteTextures;
122 GrGLFunction<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
123 GrGLFunction<GrGLDepthMaskProc> fDepthMask;
124 GrGLFunction<GrGLDisableProc> fDisable;
125 GrGLFunction<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
126 GrGLFunction<GrGLDrawArraysProc> fDrawArrays;
127 GrGLFunction<GrGLDrawArraysIndirectProc> fDrawArraysIndirect;
128 GrGLFunction<GrGLDrawArraysInstancedProc> fDrawArraysInstanced;
129 GrGLFunction<GrGLDrawBufferProc> fDrawBuffer;
130 GrGLFunction<GrGLDrawBuffersProc> fDrawBuffers;
131 GrGLFunction<GrGLDrawElementsProc> fDrawElements;
132 GrGLFunction<GrGLDrawElementsIndirectProc> fDrawElementsIndirect;
133 GrGLFunction<GrGLDrawElementsInstancedProc> fDrawElementsInstanced;
bsalomonfc9527a2016-08-29 09:18:39 -0700134 GrGLFunction<GrGLDrawRangeElementsProc> fDrawRangeElements;
bsalomon9f2dc272016-02-08 07:22:17 -0800135 GrGLFunction<GrGLEnableProc> fEnable;
136 GrGLFunction<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
137 GrGLFunction<GrGLEndQueryProc> fEndQuery;
138 GrGLFunction<GrGLFinishProc> fFinish;
139 GrGLFunction<GrGLFlushProc> fFlush;
140 GrGLFunction<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
141 GrGLFunction<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
142 GrGLFunction<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
143 GrGLFunction<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
144 GrGLFunction<GrGLFrontFaceProc> fFrontFace;
145 GrGLFunction<GrGLGenBuffersProc> fGenBuffers;
146 GrGLFunction<GrGLGenFramebuffersProc> fGenFramebuffers;
147 GrGLFunction<GrGLGenerateMipmapProc> fGenerateMipmap;
148 GrGLFunction<GrGLGenQueriesProc> fGenQueries;
149 GrGLFunction<GrGLGenRenderbuffersProc> fGenRenderbuffers;
150 GrGLFunction<GrGLGenTexturesProc> fGenTextures;
151 GrGLFunction<GrGLGenVertexArraysProc> fGenVertexArrays;
152 GrGLFunction<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
153 GrGLFunction<GrGLGetErrorProc> fGetError;
154 GrGLFunction<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
155 GrGLFunction<GrGLGetIntegervProc> fGetIntegerv;
cdaltoneb79eea2016-02-26 10:39:34 -0800156 GrGLFunction<GrGLGetMultisamplefvProc> fGetMultisamplefv;
Ethan Nicholasd1b2eec2017-11-01 15:45:43 -0400157 GrGLFunction<GrGLGetProgramBinaryProc> fGetProgramBinary;
158 GrGLFunction<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
159 GrGLFunction<GrGLGetProgramivProc> fGetProgramiv;
bsalomon9f2dc272016-02-08 07:22:17 -0800160 GrGLFunction<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
161 GrGLFunction<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
162 GrGLFunction<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
163 GrGLFunction<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
164 GrGLFunction<GrGLGetQueryivProc> fGetQueryiv;
bsalomon9f2dc272016-02-08 07:22:17 -0800165 GrGLFunction<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
166 GrGLFunction<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
167 GrGLFunction<GrGLGetShaderivProc> fGetShaderiv;
168 GrGLFunction<GrGLGetShaderPrecisionFormatProc> fGetShaderPrecisionFormat;
169 GrGLFunction<GrGLGetStringProc> fGetString;
170 GrGLFunction<GrGLGetStringiProc> fGetStringi;
171 GrGLFunction<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
172 GrGLFunction<GrGLGetUniformLocationProc> fGetUniformLocation;
173 GrGLFunction<GrGLInsertEventMarkerProc> fInsertEventMarker;
174 GrGLFunction<GrGLInvalidateBufferDataProc> fInvalidateBufferData;
175 GrGLFunction<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData;
176 GrGLFunction<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer;
177 GrGLFunction<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer;
178 GrGLFunction<GrGLInvalidateTexImageProc> fInvalidateTexImage;
179 GrGLFunction<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage;
180 GrGLFunction<GrGLIsTextureProc> fIsTexture;
181 GrGLFunction<GrGLLineWidthProc> fLineWidth;
182 GrGLFunction<GrGLLinkProgramProc> fLinkProgram;
Ethan Nicholasd1b2eec2017-11-01 15:45:43 -0400183 GrGLFunction<GrGLProgramBinaryProc> fProgramBinary;
184 GrGLFunction<GrGLProgramParameteriProc> fProgramParameteri;
bsalomon9f2dc272016-02-08 07:22:17 -0800185 GrGLFunction<GrGLMapBufferProc> fMapBuffer;
186 GrGLFunction<GrGLMapBufferRangeProc> fMapBufferRange;
187 GrGLFunction<GrGLMapBufferSubDataProc> fMapBufferSubData;
188 GrGLFunction<GrGLMapTexSubImage2DProc> fMapTexSubImage2D;
csmartdalton5cebf8c2016-06-03 08:28:47 -0700189 GrGLFunction<GrGLMultiDrawArraysIndirectProc> fMultiDrawArraysIndirect;
190 GrGLFunction<GrGLMultiDrawElementsIndirectProc> fMultiDrawElementsIndirect;
bsalomon9f2dc272016-02-08 07:22:17 -0800191 GrGLFunction<GrGLPixelStoreiProc> fPixelStorei;
Jim Van Verth609e7cc2017-03-30 14:28:08 -0400192 GrGLFunction<GrGLPolygonModeProc> fPolygonMode;
bsalomon9f2dc272016-02-08 07:22:17 -0800193 GrGLFunction<GrGLPopGroupMarkerProc> fPopGroupMarker;
194 GrGLFunction<GrGLPushGroupMarkerProc> fPushGroupMarker;
195 GrGLFunction<GrGLQueryCounterProc> fQueryCounter;
196 GrGLFunction<GrGLRasterSamplesProc> fRasterSamples;
197 GrGLFunction<GrGLReadBufferProc> fReadBuffer;
198 GrGLFunction<GrGLReadPixelsProc> fReadPixels;
199 GrGLFunction<GrGLRenderbufferStorageProc> fRenderbufferStorage;
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000200
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000201 // On OpenGL ES there are multiple incompatible extensions that add support for MSAA
202 // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
203 // older extensions for performance reasons or due to ES3 driver bugs. We want the function
204 // that creates the GrGLInterface to provide all available functions and internally
205 // we will select among them. They all have a method called glRenderbufferStorageMultisample*.
206 // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
207 // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
208 // variations.
209 //
210 // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
211 // assume the function pointers for the standard (or equivalent GL_ARB) version have
212 // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
213 // functionality.
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000214
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000215 // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
bsalomon9f2dc272016-02-08 07:22:17 -0800216 GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000217 // GL_APPLE_framebuffer_multisample
bsalomon9f2dc272016-02-08 07:22:17 -0800218 GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
commit-bot@chromium.org92b78842014-01-16 20:49:46 +0000219
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000220 // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
221 // the standard function in ES3+ or GL 3.0+.
bsalomon9f2dc272016-02-08 07:22:17 -0800222 GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000223
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000224 // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
bsalomon9f2dc272016-02-08 07:22:17 -0800225 GrGLFunction<GrGLBindUniformLocationProc> fBindUniformLocation;
commit-bot@chromium.orgd3baf202013-11-07 22:06:08 +0000226
bsalomon9f2dc272016-02-08 07:22:17 -0800227 GrGLFunction<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
228 GrGLFunction<GrGLScissorProc> fScissor;
229 GrGLFunction<GrGLShaderSourceProc> fShaderSource;
230 GrGLFunction<GrGLStencilFuncProc> fStencilFunc;
231 GrGLFunction<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
232 GrGLFunction<GrGLStencilMaskProc> fStencilMask;
233 GrGLFunction<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
234 GrGLFunction<GrGLStencilOpProc> fStencilOp;
235 GrGLFunction<GrGLStencilOpSeparateProc> fStencilOpSeparate;
cdaltonc04ce672016-03-11 14:07:38 -0800236 GrGLFunction<GrGLTexBufferProc> fTexBuffer;
cdaltonf8a6ce82016-04-11 13:02:05 -0700237 GrGLFunction<GrGLTexBufferRangeProc> fTexBufferRange;
bsalomon9f2dc272016-02-08 07:22:17 -0800238 GrGLFunction<GrGLTexImage2DProc> fTexImage2D;
239 GrGLFunction<GrGLTexParameteriProc> fTexParameteri;
240 GrGLFunction<GrGLTexParameterivProc> fTexParameteriv;
241 GrGLFunction<GrGLTexSubImage2DProc> fTexSubImage2D;
242 GrGLFunction<GrGLTexStorage2DProc> fTexStorage2D;
243 GrGLFunction<GrGLTextureBarrierProc> fTextureBarrier;
244 GrGLFunction<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
245 GrGLFunction<GrGLUniform1fProc> fUniform1f;
246 GrGLFunction<GrGLUniform1iProc> fUniform1i;
247 GrGLFunction<GrGLUniform1fvProc> fUniform1fv;
248 GrGLFunction<GrGLUniform1ivProc> fUniform1iv;
249 GrGLFunction<GrGLUniform2fProc> fUniform2f;
250 GrGLFunction<GrGLUniform2iProc> fUniform2i;
251 GrGLFunction<GrGLUniform2fvProc> fUniform2fv;
252 GrGLFunction<GrGLUniform2ivProc> fUniform2iv;
253 GrGLFunction<GrGLUniform3fProc> fUniform3f;
254 GrGLFunction<GrGLUniform3iProc> fUniform3i;
255 GrGLFunction<GrGLUniform3fvProc> fUniform3fv;
256 GrGLFunction<GrGLUniform3ivProc> fUniform3iv;
257 GrGLFunction<GrGLUniform4fProc> fUniform4f;
258 GrGLFunction<GrGLUniform4iProc> fUniform4i;
259 GrGLFunction<GrGLUniform4fvProc> fUniform4fv;
260 GrGLFunction<GrGLUniform4ivProc> fUniform4iv;
261 GrGLFunction<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
262 GrGLFunction<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
263 GrGLFunction<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
264 GrGLFunction<GrGLUnmapBufferProc> fUnmapBuffer;
265 GrGLFunction<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData;
266 GrGLFunction<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D;
267 GrGLFunction<GrGLUseProgramProc> fUseProgram;
268 GrGLFunction<GrGLVertexAttrib1fProc> fVertexAttrib1f;
269 GrGLFunction<GrGLVertexAttrib2fvProc> fVertexAttrib2fv;
270 GrGLFunction<GrGLVertexAttrib3fvProc> fVertexAttrib3fv;
271 GrGLFunction<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
272 GrGLFunction<GrGLVertexAttribDivisorProc> fVertexAttribDivisor;
cdalton793dc262016-02-08 10:11:47 -0800273 GrGLFunction<GrGLVertexAttribIPointerProc> fVertexAttribIPointer;
bsalomon9f2dc272016-02-08 07:22:17 -0800274 GrGLFunction<GrGLVertexAttribPointerProc> fVertexAttribPointer;
275 GrGLFunction<GrGLViewportProc> fViewport;
bsalomon@google.com271cffc2011-05-20 14:13:56 +0000276
cdalton626e1ff2015-06-12 13:56:46 -0700277 /* GL_NV_path_rendering */
bsalomon9f2dc272016-02-08 07:22:17 -0800278 GrGLFunction<GrGLMatrixLoadfProc> fMatrixLoadf;
279 GrGLFunction<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity;
280 GrGLFunction<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation;
281 GrGLFunction<GrGLPathCommandsProc> fPathCommands;
282 GrGLFunction<GrGLPathParameteriProc> fPathParameteri;
283 GrGLFunction<GrGLPathParameterfProc> fPathParameterf;
284 GrGLFunction<GrGLGenPathsProc> fGenPaths;
285 GrGLFunction<GrGLDeletePathsProc> fDeletePaths;
286 GrGLFunction<GrGLIsPathProc> fIsPath;
287 GrGLFunction<GrGLPathStencilFuncProc> fPathStencilFunc;
288 GrGLFunction<GrGLStencilFillPathProc> fStencilFillPath;
289 GrGLFunction<GrGLStencilStrokePathProc> fStencilStrokePath;
290 GrGLFunction<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
291 GrGLFunction<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
292 GrGLFunction<GrGLCoverFillPathProc> fCoverFillPath;
293 GrGLFunction<GrGLCoverStrokePathProc> fCoverStrokePath;
294 GrGLFunction<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
295 GrGLFunction<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
cdaltonc7103a12014-08-11 14:05:05 -0700296 // NV_path_rendering v1.2
bsalomon9f2dc272016-02-08 07:22:17 -0800297 GrGLFunction<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath;
298 GrGLFunction<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath;
299 GrGLFunction<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced;
300 GrGLFunction<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced;
cdaltonc7103a12014-08-11 14:05:05 -0700301 // NV_path_rendering v1.3
bsalomon9f2dc272016-02-08 07:22:17 -0800302 GrGLFunction<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen;
kkinnunen6bb6d402015-07-14 10:59:23 -0700303 // CHROMIUM_path_rendering
bsalomon9f2dc272016-02-08 07:22:17 -0800304 GrGLFunction<GrGLBindFragmentInputLocationProc> fBindFragmentInputLocation;
cdalton626e1ff2015-06-12 13:56:46 -0700305
306 /* NV_framebuffer_mixed_samples */
bsalomon9f2dc272016-02-08 07:22:17 -0800307 GrGLFunction<GrGLCoverageModulationProc> fCoverageModulation;
cdalton626e1ff2015-06-12 13:56:46 -0700308
ethannicholas28ef4452016-03-25 09:26:03 -0700309 /* ARB_sample_shading */
310 GrGLFunction<GrGLMinSampleShadingProc> fMinSampleShading;
311
jvanverth84741b32016-09-30 08:39:02 -0700312 /* ARB_sync */
313 GrGLFunction<GrGLFenceSyncProc> fFenceSync;
Greg Danieldba7e7c2017-07-20 15:47:30 -0400314 GrGLFunction<GrGLIsSyncProc> fIsSync;
jvanverth84741b32016-09-30 08:39:02 -0700315 GrGLFunction<GrGLClientWaitSyncProc> fClientWaitSync;
Greg Daniel6be35232017-03-01 17:01:09 -0500316 GrGLFunction<GrGLWaitSyncProc> fWaitSync;
jvanverth84741b32016-09-30 08:39:02 -0700317 GrGLFunction<GrGLDeleteSyncProc> fDeleteSync;
318
Greg Daniel81e7bf82017-07-19 14:47:42 -0400319 /* ARB_internalforamt_query */
320 GrGLFunction<GrGLGetInternalformativProc> fGetInternalformativ;
321
cdalton626e1ff2015-06-12 13:56:46 -0700322 /* KHR_debug */
bsalomon9f2dc272016-02-08 07:22:17 -0800323 GrGLFunction<GrGLDebugMessageControlProc> fDebugMessageControl;
324 GrGLFunction<GrGLDebugMessageInsertProc> fDebugMessageInsert;
325 GrGLFunction<GrGLDebugMessageCallbackProc> fDebugMessageCallback;
326 GrGLFunction<GrGLGetDebugMessageLogProc> fGetDebugMessageLog;
327 GrGLFunction<GrGLPushDebugGroupProc> fPushDebugGroup;
328 GrGLFunction<GrGLPopDebugGroupProc> fPopDebugGroup;
329 GrGLFunction<GrGLObjectLabelProc> fObjectLabel;
bsalomonb1a32ad2015-11-16 06:48:44 -0800330
csmartdalton9bc11872016-08-09 12:42:47 -0700331 /* EXT_window_rectangles */
332 GrGLFunction<GrGLWindowRectanglesProc> fWindowRectangles;
333
bsalomonb1a32ad2015-11-16 06:48:44 -0800334 /* EGL functions */
bsalomon9f2dc272016-02-08 07:22:17 -0800335 GrGLFunction<GrEGLCreateImageProc> fEGLCreateImage;
336 GrGLFunction<GrEGLDestroyImageProc> fEGLDestroyImage;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000337 } fFunctions;
338
Robert Phillips752e08b2018-06-22 09:48:38 -0400339#if GR_TEST_UTILS
bsalomon944bcf02014-07-29 08:01:52 -0700340 // This exists for internal testing.
Robert Phillips752e08b2018-06-22 09:48:38 -0400341 virtual void abandon() const;
342#endif
bsalomon@google.combf2a4692011-05-04 12:35:39 +0000343};
twiz@google.com59a190b2011-03-14 21:23:01 +0000344
345#endif