blob: 1a91afb7f0a16eef9bab7cb540905246356c7e15 [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
17/**
bsalomon@google.com0b77d682011-08-19 13:28:54 +000018 * Rather than depend on platform-specific GL headers and libraries, we require
19 * the client to provide a struct of GL function pointers. This struct can be
20 * specified per-GrContext as a parameter to GrContext::Create. If NULL is
commit-bot@chromium.orga3b15ed2014-01-15 19:32:03 +000021 * passed to Create then a "default" GL interface is created. If the default is
bsalomon@google.com0b77d682011-08-19 13:28:54 +000022 * also NULL GrContext creation will fail.
23 *
bsalomon@google.com6fb736f2011-09-16 18:51:57 +000024 * The default interface is returned by GrGLDefaultInterface. This function's
robertphillips@google.com0da37192012-03-19 14:42:13 +000025 * implementation is platform-specific. Several have been provided, along with
commit-bot@chromium.orga3b15ed2014-01-15 19:32:03 +000026 * an implementation that simply returns NULL.
bsalomon@google.com56bfc5a2011-09-01 13:28:16 +000027 *
28 * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a
29 * callback function that will be called prior to each GL function call. See
30 * comments in GrGLConfig.h
twiz@google.com59a190b2011-03-14 21:23:01 +000031 */
twiz@google.com59a190b2011-03-14 21:23:01 +000032
cdaltond416a5b2015-06-23 13:23:44 -070033typedef void(*GrGLFuncPtr)();
34
bsalomon@google.com0b77d682011-08-19 13:28:54 +000035struct GrGLInterface;
36
bsalomon@google.com6fb736f2011-09-16 18:51:57 +000037const GrGLInterface* GrGLDefaultInterface();
twiz@google.com59a190b2011-03-14 21:23:01 +000038
bsalomon@google.com57f5d982011-10-24 21:17:53 +000039/**
40 * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
commit-bot@chromium.orga3b15ed2014-01-15 19:32:03 +000041 * GLX on linux, AGL on Mac). The interface is only valid for the GL context
42 * that is current when the interface is created.
bsalomon@google.com57f5d982011-10-24 21:17:53 +000043 */
halcanary0fc1dbe2015-09-21 08:22:19 -070044SK_API const GrGLInterface* GrGLCreateNativeInterface();
bsalomon@google.com373a6632011-10-19 20:43:20 +000045
robertphillips@google.comd3b9fbb2012-03-28 16:19:11 +000046#if SK_MESA
bsalomon@google.com57f5d982011-10-24 21:17:53 +000047/**
48 * Creates a GrGLInterface for an OSMesa context.
49 */
halcanary0fc1dbe2015-09-21 08:22:19 -070050SK_API const GrGLInterface* GrGLCreateMesaInterface();
robertphillips@google.comd3b9fbb2012-03-28 16:19:11 +000051#endif
52
53#if SK_ANGLE
54/**
55 * Creates a GrGLInterface for an ANGLE context.
56 */
halcanary0fc1dbe2015-09-21 08:22:19 -070057SK_API const GrGLInterface* GrGLCreateANGLEInterface();
robertphillips@google.comd3b9fbb2012-03-28 16:19:11 +000058#endif
bsalomon@google.com373a6632011-10-19 20:43:20 +000059
hendrikw885bf092015-08-27 10:38:39 -070060#if SK_COMMAND_BUFFER
61/**
62 * Creates a GrGLInterface for a Command Buffer context.
63 */
halcanary0fc1dbe2015-09-21 08:22:19 -070064SK_API const GrGLInterface* GrGLCreateCommandBufferInterface();
hendrikw885bf092015-08-27 10:38:39 -070065#endif
66
bsalomon@google.com74913722011-10-27 20:44:19 +000067/**
68 * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
69 * CPU overhead.
70 */
commit-bot@chromium.orgaae7c2a2013-11-25 20:39:27 +000071const SK_API GrGLInterface* GrGLCreateNullInterface();
bsalomon@google.com74913722011-10-27 20:44:19 +000072
robertphillips@google.com0da37192012-03-19 14:42:13 +000073/**
rmistry@google.comfbfcd562012-08-23 18:09:54 +000074 * Creates a debugging GrGLInterface that doesn't draw anything. Used for
robertphillips@google.com0da37192012-03-19 14:42:13 +000075 * finding memory leaks and invalid memory accesses.
76 */
77const GrGLInterface* GrGLCreateDebugInterface();
78
bsalomon@google.com56bfc5a2011-09-01 13:28:16 +000079#if GR_GL_PER_GL_FUNC_CALLBACK
80typedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
81typedef intptr_t GrGLInterfaceCallbackData;
82#endif
83
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +000084/** Function that returns a new interface identical to "interface" but without support for
85 GL_NV_path_rendering. */
86const GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*);
87
commit-bot@chromium.orga3baf3b2014-02-21 18:45:30 +000088/** Function that returns a new interface identical to "interface" but with support for
89 test version of GL_EXT_debug_marker. */
90const GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*,
91 GrGLInsertEventMarkerProc insertEventMarkerFn,
92 GrGLPushGroupMarkerProc pushGroupMarkerFn,
93 GrGLPopGroupMarkerProc popGroupMarkerFn);
94
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +000095/**
bsalomon@google.comcc61b172012-05-07 21:45:48 +000096 * GrContext uses the following interface to make all calls into OpenGL. When a
97 * GrContext is created it is given a GrGLInterface. The interface's function
98 * pointers must be valid for the OpenGL context associated with the GrContext.
99 * On some platforms, such as Windows, function pointers for OpenGL extensions
100 * may vary between OpenGL contexts. So the caller must be careful to use a
101 * GrGLInterface initialized for the correct context. All functions that should
102 * be available based on the OpenGL's version and extension string must be
103 * non-NULL or GrContext creation will fail. This can be tested with the
104 * validate() method when the OpenGL context has been made current.
bsalomon@google.combf2a4692011-05-04 12:35:39 +0000105 */
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +0000106struct SK_API GrGLInterface : public SkRefCnt {
bsalomon@google.comba800e22012-03-29 21:04:52 +0000107private:
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +0000108 typedef SkRefCnt INHERITED;
robertphillips@google.com15e9d3e2012-06-21 20:25:03 +0000109
bsalomon@google.comba800e22012-03-29 21:04:52 +0000110public:
bsalomon@google.com0b77d682011-08-19 13:28:54 +0000111 GrGLInterface();
112
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +0000113 static GrGLInterface* NewClone(const GrGLInterface*);
114
commit-bot@chromium.org9e90aed2014-01-16 16:35:09 +0000115 // Validates that the GrGLInterface supports its advertised standard. This means the necessary
116 // function pointers have been initialized for both the GL version and any advertised
117 // extensions.
118 bool validate() const;
bsalomon@google.com89ec61e2012-02-10 20:05:18 +0000119
commit-bot@chromium.org9e90aed2014-01-16 16:35:09 +0000120 // Indicates the type of GL implementation
121 union {
122 GrGLStandard fStandard;
123 GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
124 };
twiz@google.comb65e0cb2011-03-18 20:41:44 +0000125
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +0000126 GrGLExtensions fExtensions;
127
commit-bot@chromium.orgf5355612014-02-28 20:28:50 +0000128 bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +0000129
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000130 /**
131 * The function pointers are in a struct so that we can have a compiler generated assignment
132 * operator.
133 */
134 struct Functions {
bsalomon9f2dc272016-02-08 07:22:17 -0800135 GrGLFunction<GrGLActiveTextureProc> fActiveTexture;
136 GrGLFunction<GrGLAttachShaderProc> fAttachShader;
137 GrGLFunction<GrGLBeginQueryProc> fBeginQuery;
138 GrGLFunction<GrGLBindAttribLocationProc> fBindAttribLocation;
139 GrGLFunction<GrGLBindBufferProc> fBindBuffer;
140 GrGLFunction<GrGLBindFragDataLocationProc> fBindFragDataLocation;
141 GrGLFunction<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
142 GrGLFunction<GrGLBindFramebufferProc> fBindFramebuffer;
143 GrGLFunction<GrGLBindRenderbufferProc> fBindRenderbuffer;
144 GrGLFunction<GrGLBindTextureProc> fBindTexture;
145 GrGLFunction<GrGLBindVertexArrayProc> fBindVertexArray;
146 GrGLFunction<GrGLBlendBarrierProc> fBlendBarrier;
147 GrGLFunction<GrGLBlendColorProc> fBlendColor;
148 GrGLFunction<GrGLBlendEquationProc> fBlendEquation;
149 GrGLFunction<GrGLBlendFuncProc> fBlendFunc;
150 GrGLFunction<GrGLBlitFramebufferProc> fBlitFramebuffer;
151 GrGLFunction<GrGLBufferDataProc> fBufferData;
152 GrGLFunction<GrGLBufferSubDataProc> fBufferSubData;
153 GrGLFunction<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
154 GrGLFunction<GrGLClearProc> fClear;
155 GrGLFunction<GrGLClearColorProc> fClearColor;
156 GrGLFunction<GrGLClearStencilProc> fClearStencil;
157 GrGLFunction<GrGLColorMaskProc> fColorMask;
158 GrGLFunction<GrGLCompileShaderProc> fCompileShader;
159 GrGLFunction<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
160 GrGLFunction<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D;
161 GrGLFunction<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
162 GrGLFunction<GrGLCreateProgramProc> fCreateProgram;
163 GrGLFunction<GrGLCreateShaderProc> fCreateShader;
164 GrGLFunction<GrGLCullFaceProc> fCullFace;
165 GrGLFunction<GrGLDeleteBuffersProc> fDeleteBuffers;
166 GrGLFunction<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
167 GrGLFunction<GrGLDeleteProgramProc> fDeleteProgram;
168 GrGLFunction<GrGLDeleteQueriesProc> fDeleteQueries;
169 GrGLFunction<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
170 GrGLFunction<GrGLDeleteShaderProc> fDeleteShader;
171 GrGLFunction<GrGLDeleteTexturesProc> fDeleteTextures;
172 GrGLFunction<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
173 GrGLFunction<GrGLDepthMaskProc> fDepthMask;
174 GrGLFunction<GrGLDisableProc> fDisable;
175 GrGLFunction<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
176 GrGLFunction<GrGLDrawArraysProc> fDrawArrays;
177 GrGLFunction<GrGLDrawArraysIndirectProc> fDrawArraysIndirect;
178 GrGLFunction<GrGLDrawArraysInstancedProc> fDrawArraysInstanced;
179 GrGLFunction<GrGLDrawBufferProc> fDrawBuffer;
180 GrGLFunction<GrGLDrawBuffersProc> fDrawBuffers;
181 GrGLFunction<GrGLDrawElementsProc> fDrawElements;
182 GrGLFunction<GrGLDrawElementsIndirectProc> fDrawElementsIndirect;
183 GrGLFunction<GrGLDrawElementsInstancedProc> fDrawElementsInstanced;
184 GrGLFunction<GrGLEnableProc> fEnable;
185 GrGLFunction<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
186 GrGLFunction<GrGLEndQueryProc> fEndQuery;
187 GrGLFunction<GrGLFinishProc> fFinish;
188 GrGLFunction<GrGLFlushProc> fFlush;
189 GrGLFunction<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
190 GrGLFunction<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
191 GrGLFunction<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
192 GrGLFunction<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
193 GrGLFunction<GrGLFrontFaceProc> fFrontFace;
194 GrGLFunction<GrGLGenBuffersProc> fGenBuffers;
195 GrGLFunction<GrGLGenFramebuffersProc> fGenFramebuffers;
196 GrGLFunction<GrGLGenerateMipmapProc> fGenerateMipmap;
197 GrGLFunction<GrGLGenQueriesProc> fGenQueries;
198 GrGLFunction<GrGLGenRenderbuffersProc> fGenRenderbuffers;
199 GrGLFunction<GrGLGenTexturesProc> fGenTextures;
200 GrGLFunction<GrGLGenVertexArraysProc> fGenVertexArrays;
201 GrGLFunction<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
202 GrGLFunction<GrGLGetErrorProc> fGetError;
203 GrGLFunction<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
204 GrGLFunction<GrGLGetIntegervProc> fGetIntegerv;
205 GrGLFunction<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
206 GrGLFunction<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
207 GrGLFunction<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
208 GrGLFunction<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
209 GrGLFunction<GrGLGetQueryivProc> fGetQueryiv;
210 GrGLFunction<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
211 GrGLFunction<GrGLGetProgramivProc> fGetProgramiv;
212 GrGLFunction<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
213 GrGLFunction<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
214 GrGLFunction<GrGLGetShaderivProc> fGetShaderiv;
215 GrGLFunction<GrGLGetShaderPrecisionFormatProc> fGetShaderPrecisionFormat;
216 GrGLFunction<GrGLGetStringProc> fGetString;
217 GrGLFunction<GrGLGetStringiProc> fGetStringi;
218 GrGLFunction<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
219 GrGLFunction<GrGLGetUniformLocationProc> fGetUniformLocation;
220 GrGLFunction<GrGLInsertEventMarkerProc> fInsertEventMarker;
221 GrGLFunction<GrGLInvalidateBufferDataProc> fInvalidateBufferData;
222 GrGLFunction<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData;
223 GrGLFunction<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer;
224 GrGLFunction<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer;
225 GrGLFunction<GrGLInvalidateTexImageProc> fInvalidateTexImage;
226 GrGLFunction<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage;
227 GrGLFunction<GrGLIsTextureProc> fIsTexture;
228 GrGLFunction<GrGLLineWidthProc> fLineWidth;
229 GrGLFunction<GrGLLinkProgramProc> fLinkProgram;
230 GrGLFunction<GrGLMapBufferProc> fMapBuffer;
231 GrGLFunction<GrGLMapBufferRangeProc> fMapBufferRange;
232 GrGLFunction<GrGLMapBufferSubDataProc> fMapBufferSubData;
233 GrGLFunction<GrGLMapTexSubImage2DProc> fMapTexSubImage2D;
234 GrGLFunction<GrGLPixelStoreiProc> fPixelStorei;
235 GrGLFunction<GrGLPopGroupMarkerProc> fPopGroupMarker;
236 GrGLFunction<GrGLPushGroupMarkerProc> fPushGroupMarker;
237 GrGLFunction<GrGLQueryCounterProc> fQueryCounter;
238 GrGLFunction<GrGLRasterSamplesProc> fRasterSamples;
239 GrGLFunction<GrGLReadBufferProc> fReadBuffer;
240 GrGLFunction<GrGLReadPixelsProc> fReadPixels;
241 GrGLFunction<GrGLRenderbufferStorageProc> fRenderbufferStorage;
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000242
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000243 // On OpenGL ES there are multiple incompatible extensions that add support for MSAA
244 // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
245 // older extensions for performance reasons or due to ES3 driver bugs. We want the function
246 // that creates the GrGLInterface to provide all available functions and internally
247 // we will select among them. They all have a method called glRenderbufferStorageMultisample*.
248 // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
249 // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
250 // variations.
251 //
252 // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
253 // assume the function pointers for the standard (or equivalent GL_ARB) version have
254 // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
255 // functionality.
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000256
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000257 // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
bsalomon9f2dc272016-02-08 07:22:17 -0800258 GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000259 // GL_APPLE_framebuffer_multisample
bsalomon9f2dc272016-02-08 07:22:17 -0800260 GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
commit-bot@chromium.org92b78842014-01-16 20:49:46 +0000261
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000262 // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
263 // the standard function in ES3+ or GL 3.0+.
bsalomon9f2dc272016-02-08 07:22:17 -0800264 GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000265
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000266 // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
bsalomon9f2dc272016-02-08 07:22:17 -0800267 GrGLFunction<GrGLBindUniformLocationProc> fBindUniformLocation;
commit-bot@chromium.orgd3baf202013-11-07 22:06:08 +0000268
bsalomon9f2dc272016-02-08 07:22:17 -0800269 GrGLFunction<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
270 GrGLFunction<GrGLScissorProc> fScissor;
271 GrGLFunction<GrGLShaderSourceProc> fShaderSource;
272 GrGLFunction<GrGLStencilFuncProc> fStencilFunc;
273 GrGLFunction<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
274 GrGLFunction<GrGLStencilMaskProc> fStencilMask;
275 GrGLFunction<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
276 GrGLFunction<GrGLStencilOpProc> fStencilOp;
277 GrGLFunction<GrGLStencilOpSeparateProc> fStencilOpSeparate;
278 GrGLFunction<GrGLTexImage2DProc> fTexImage2D;
279 GrGLFunction<GrGLTexParameteriProc> fTexParameteri;
280 GrGLFunction<GrGLTexParameterivProc> fTexParameteriv;
281 GrGLFunction<GrGLTexSubImage2DProc> fTexSubImage2D;
282 GrGLFunction<GrGLTexStorage2DProc> fTexStorage2D;
283 GrGLFunction<GrGLTextureBarrierProc> fTextureBarrier;
284 GrGLFunction<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
285 GrGLFunction<GrGLUniform1fProc> fUniform1f;
286 GrGLFunction<GrGLUniform1iProc> fUniform1i;
287 GrGLFunction<GrGLUniform1fvProc> fUniform1fv;
288 GrGLFunction<GrGLUniform1ivProc> fUniform1iv;
289 GrGLFunction<GrGLUniform2fProc> fUniform2f;
290 GrGLFunction<GrGLUniform2iProc> fUniform2i;
291 GrGLFunction<GrGLUniform2fvProc> fUniform2fv;
292 GrGLFunction<GrGLUniform2ivProc> fUniform2iv;
293 GrGLFunction<GrGLUniform3fProc> fUniform3f;
294 GrGLFunction<GrGLUniform3iProc> fUniform3i;
295 GrGLFunction<GrGLUniform3fvProc> fUniform3fv;
296 GrGLFunction<GrGLUniform3ivProc> fUniform3iv;
297 GrGLFunction<GrGLUniform4fProc> fUniform4f;
298 GrGLFunction<GrGLUniform4iProc> fUniform4i;
299 GrGLFunction<GrGLUniform4fvProc> fUniform4fv;
300 GrGLFunction<GrGLUniform4ivProc> fUniform4iv;
301 GrGLFunction<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
302 GrGLFunction<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
303 GrGLFunction<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
304 GrGLFunction<GrGLUnmapBufferProc> fUnmapBuffer;
305 GrGLFunction<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData;
306 GrGLFunction<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D;
307 GrGLFunction<GrGLUseProgramProc> fUseProgram;
308 GrGLFunction<GrGLVertexAttrib1fProc> fVertexAttrib1f;
309 GrGLFunction<GrGLVertexAttrib2fvProc> fVertexAttrib2fv;
310 GrGLFunction<GrGLVertexAttrib3fvProc> fVertexAttrib3fv;
311 GrGLFunction<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
312 GrGLFunction<GrGLVertexAttribDivisorProc> fVertexAttribDivisor;
cdalton793dc262016-02-08 10:11:47 -0800313 GrGLFunction<GrGLVertexAttribIPointerProc> fVertexAttribIPointer;
bsalomon9f2dc272016-02-08 07:22:17 -0800314 GrGLFunction<GrGLVertexAttribPointerProc> fVertexAttribPointer;
315 GrGLFunction<GrGLViewportProc> fViewport;
bsalomon@google.com271cffc2011-05-20 14:13:56 +0000316
cdalton626e1ff2015-06-12 13:56:46 -0700317 /* GL_NV_path_rendering */
bsalomon9f2dc272016-02-08 07:22:17 -0800318 GrGLFunction<GrGLMatrixLoadfProc> fMatrixLoadf;
319 GrGLFunction<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity;
320 GrGLFunction<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation;
321 GrGLFunction<GrGLPathCommandsProc> fPathCommands;
322 GrGLFunction<GrGLPathParameteriProc> fPathParameteri;
323 GrGLFunction<GrGLPathParameterfProc> fPathParameterf;
324 GrGLFunction<GrGLGenPathsProc> fGenPaths;
325 GrGLFunction<GrGLDeletePathsProc> fDeletePaths;
326 GrGLFunction<GrGLIsPathProc> fIsPath;
327 GrGLFunction<GrGLPathStencilFuncProc> fPathStencilFunc;
328 GrGLFunction<GrGLStencilFillPathProc> fStencilFillPath;
329 GrGLFunction<GrGLStencilStrokePathProc> fStencilStrokePath;
330 GrGLFunction<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
331 GrGLFunction<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
332 GrGLFunction<GrGLCoverFillPathProc> fCoverFillPath;
333 GrGLFunction<GrGLCoverStrokePathProc> fCoverStrokePath;
334 GrGLFunction<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
335 GrGLFunction<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
cdaltonc7103a12014-08-11 14:05:05 -0700336 // NV_path_rendering v1.2
bsalomon9f2dc272016-02-08 07:22:17 -0800337 GrGLFunction<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath;
338 GrGLFunction<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath;
339 GrGLFunction<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced;
340 GrGLFunction<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced;
cdaltonc7103a12014-08-11 14:05:05 -0700341 // NV_path_rendering v1.3
bsalomon9f2dc272016-02-08 07:22:17 -0800342 GrGLFunction<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen;
kkinnunen6bb6d402015-07-14 10:59:23 -0700343 // CHROMIUM_path_rendering
bsalomon9f2dc272016-02-08 07:22:17 -0800344 GrGLFunction<GrGLBindFragmentInputLocationProc> fBindFragmentInputLocation;
cdalton626e1ff2015-06-12 13:56:46 -0700345
346 /* NV_framebuffer_mixed_samples */
bsalomon9f2dc272016-02-08 07:22:17 -0800347 GrGLFunction<GrGLCoverageModulationProc> fCoverageModulation;
cdalton626e1ff2015-06-12 13:56:46 -0700348
cdalton06604b92016-02-05 10:09:51 -0800349 /* EXT_multi_draw_indirect */
bsalomon9f2dc272016-02-08 07:22:17 -0800350 GrGLFunction<GrGLMultiDrawArraysIndirectProc> fMultiDrawArraysIndirect;
351 GrGLFunction<GrGLMultiDrawElementsIndirectProc> fMultiDrawElementsIndirect;
cdalton626e1ff2015-06-12 13:56:46 -0700352
353 /* NV_bindless_texture */
354 // We use the NVIDIA verson for now because it does not require dynamically uniform handles.
355 // We may switch the the ARB version and/or omit methods in the future.
bsalomon9f2dc272016-02-08 07:22:17 -0800356 GrGLFunction<GrGLGetTextureHandleProc> fGetTextureHandle;
357 GrGLFunction<GrGLGetTextureSamplerHandleProc> fGetTextureSamplerHandle;
358 GrGLFunction<GrGLMakeTextureHandleResidentProc> fMakeTextureHandleResident;
359 GrGLFunction<GrGLMakeTextureHandleNonResidentProc> fMakeTextureHandleNonResident;
360 GrGLFunction<GrGLGetImageHandleProc> fGetImageHandle;
361 GrGLFunction<GrGLMakeImageHandleResidentProc> fMakeImageHandleResident;
362 GrGLFunction<GrGLMakeImageHandleNonResidentProc> fMakeImageHandleNonResident;
363 GrGLFunction<GrGLIsTextureHandleResidentProc> fIsTextureHandleResident;
364 GrGLFunction<GrGLIsImageHandleResidentProc> fIsImageHandleResident;
365 GrGLFunction<GrGLUniformHandleui64Proc> fUniformHandleui64;
366 GrGLFunction<GrGLUniformHandleui64vProc> fUniformHandleui64v;
367 GrGLFunction<GrGLProgramUniformHandleui64Proc> fProgramUniformHandleui64;
368 GrGLFunction<GrGLProgramUniformHandleui64vProc> fProgramUniformHandleui64v;
cdalton626e1ff2015-06-12 13:56:46 -0700369
370 /* EXT_direct_state_access */
371 // We use the EXT verson because it is more expansive and interacts with more extensions
372 // than the ARB or core (4.5) versions. We may switch and/or omit methods in the future.
bsalomon9f2dc272016-02-08 07:22:17 -0800373 GrGLFunction<GrGLTextureParameteriProc> fTextureParameteri;
374 GrGLFunction<GrGLTextureParameterivProc> fTextureParameteriv;
375 GrGLFunction<GrGLTextureParameterfProc> fTextureParameterf;
376 GrGLFunction<GrGLTextureParameterfvProc> fTextureParameterfv;
377 GrGLFunction<GrGLTextureImage1DProc> fTextureImage1D;
378 GrGLFunction<GrGLTextureImage2DProc> fTextureImage2D;
379 GrGLFunction<GrGLTextureSubImage1DProc> fTextureSubImage1D;
380 GrGLFunction<GrGLTextureSubImage2DProc> fTextureSubImage2D;
381 GrGLFunction<GrGLCopyTextureImage1DProc> fCopyTextureImage1D;
382 GrGLFunction<GrGLCopyTextureImage2DProc> fCopyTextureImage2D;
383 GrGLFunction<GrGLCopyTextureSubImage1DProc> fCopyTextureSubImage1D;
384 GrGLFunction<GrGLCopyTextureSubImage2DProc> fCopyTextureSubImage2D;
385 GrGLFunction<GrGLGetTextureImageProc> fGetTextureImage;
386 GrGLFunction<GrGLGetTextureParameterfvProc> fGetTextureParameterfv;
387 GrGLFunction<GrGLGetTextureParameterivProc> fGetTextureParameteriv;
388 GrGLFunction<GrGLGetTextureLevelParameterfvProc> fGetTextureLevelParameterfv;
389 GrGLFunction<GrGLGetTextureLevelParameterivProc> fGetTextureLevelParameteriv;
cdalton626e1ff2015-06-12 13:56:46 -0700390 // OpenGL 1.2
bsalomon9f2dc272016-02-08 07:22:17 -0800391 GrGLFunction<GrGLTextureImage3DProc> fTextureImage3D;
392 GrGLFunction<GrGLTextureSubImage3DProc> fTextureSubImage3D;
393 GrGLFunction<GrGLCopyTextureSubImage3DProc> fCopyTextureSubImage3D;
394 GrGLFunction<GrGLCompressedTextureImage3DProc> fCompressedTextureImage3D;
395 GrGLFunction<GrGLCompressedTextureImage2DProc> fCompressedTextureImage2D;
396 GrGLFunction<GrGLCompressedTextureImage1DProc> fCompressedTextureImage1D;
397 GrGLFunction<GrGLCompressedTextureSubImage3DProc> fCompressedTextureSubImage3D;
398 GrGLFunction<GrGLCompressedTextureSubImage2DProc> fCompressedTextureSubImage2D;
399 GrGLFunction<GrGLCompressedTextureSubImage1DProc> fCompressedTextureSubImage1D;
400 GrGLFunction<GrGLGetCompressedTextureImageProc> fGetCompressedTextureImage;
cdalton626e1ff2015-06-12 13:56:46 -0700401 // OpenGL 1.5
bsalomon9f2dc272016-02-08 07:22:17 -0800402 GrGLFunction<GrGLNamedBufferDataProc> fNamedBufferData;
403 GrGLFunction<GrGLNamedBufferSubDataProc> fNamedBufferSubData;
404 GrGLFunction<GrGLMapNamedBufferProc> fMapNamedBuffer;
405 GrGLFunction<GrGLUnmapNamedBufferProc> fUnmapNamedBuffer;
406 GrGLFunction<GrGLGetNamedBufferParameterivProc> fGetNamedBufferParameteriv;
407 GrGLFunction<GrGLGetNamedBufferPointervProc> fGetNamedBufferPointerv;
408 GrGLFunction<GrGLGetNamedBufferSubDataProc> fGetNamedBufferSubData;
cdalton626e1ff2015-06-12 13:56:46 -0700409 // OpenGL 2.0
bsalomon9f2dc272016-02-08 07:22:17 -0800410 GrGLFunction<GrGLProgramUniform1fProc> fProgramUniform1f;
411 GrGLFunction<GrGLProgramUniform2fProc> fProgramUniform2f;
412 GrGLFunction<GrGLProgramUniform3fProc> fProgramUniform3f;
413 GrGLFunction<GrGLProgramUniform4fProc> fProgramUniform4f;
414 GrGLFunction<GrGLProgramUniform1iProc> fProgramUniform1i;
415 GrGLFunction<GrGLProgramUniform2iProc> fProgramUniform2i;
416 GrGLFunction<GrGLProgramUniform3iProc> fProgramUniform3i;
417 GrGLFunction<GrGLProgramUniform4iProc> fProgramUniform4i;
418 GrGLFunction<GrGLProgramUniform1fvProc> fProgramUniform1fv;
419 GrGLFunction<GrGLProgramUniform2fvProc> fProgramUniform2fv;
420 GrGLFunction<GrGLProgramUniform3fvProc> fProgramUniform3fv;
421 GrGLFunction<GrGLProgramUniform4fvProc> fProgramUniform4fv;
422 GrGLFunction<GrGLProgramUniform1ivProc> fProgramUniform1iv;
423 GrGLFunction<GrGLProgramUniform2ivProc> fProgramUniform2iv;
424 GrGLFunction<GrGLProgramUniform3ivProc> fProgramUniform3iv;
425 GrGLFunction<GrGLProgramUniform4ivProc> fProgramUniform4iv;
426 GrGLFunction<GrGLProgramUniformMatrix2fvProc> fProgramUniformMatrix2fv;
427 GrGLFunction<GrGLProgramUniformMatrix3fvProc> fProgramUniformMatrix3fv;
428 GrGLFunction<GrGLProgramUniformMatrix4fvProc> fProgramUniformMatrix4fv;
cdalton626e1ff2015-06-12 13:56:46 -0700429 // OpenGL 2.1
bsalomon9f2dc272016-02-08 07:22:17 -0800430 GrGLFunction<GrGLProgramUniformMatrix2x3fvProc> fProgramUniformMatrix2x3fv;
431 GrGLFunction<GrGLProgramUniformMatrix3x2fvProc> fProgramUniformMatrix3x2fv;
432 GrGLFunction<GrGLProgramUniformMatrix2x4fvProc> fProgramUniformMatrix2x4fv;
433 GrGLFunction<GrGLProgramUniformMatrix4x2fvProc> fProgramUniformMatrix4x2fv;
434 GrGLFunction<GrGLProgramUniformMatrix3x4fvProc> fProgramUniformMatrix3x4fv;
435 GrGLFunction<GrGLProgramUniformMatrix4x3fvProc> fProgramUniformMatrix4x3fv;
cdalton626e1ff2015-06-12 13:56:46 -0700436 // OpenGL 3.0
bsalomon9f2dc272016-02-08 07:22:17 -0800437 GrGLFunction<GrGLNamedRenderbufferStorageProc> fNamedRenderbufferStorage;
438 GrGLFunction<GrGLGetNamedRenderbufferParameterivProc> fGetNamedRenderbufferParameteriv;
439 GrGLFunction<GrGLNamedRenderbufferStorageMultisampleProc> fNamedRenderbufferStorageMultisample;
440 GrGLFunction<GrGLCheckNamedFramebufferStatusProc> fCheckNamedFramebufferStatus;
441 GrGLFunction<GrGLNamedFramebufferTexture1DProc> fNamedFramebufferTexture1D;
442 GrGLFunction<GrGLNamedFramebufferTexture2DProc> fNamedFramebufferTexture2D;
443 GrGLFunction<GrGLNamedFramebufferTexture3DProc> fNamedFramebufferTexture3D;
444 GrGLFunction<GrGLNamedFramebufferRenderbufferProc> fNamedFramebufferRenderbuffer;
445 GrGLFunction<GrGLGetNamedFramebufferAttachmentParameterivProc> fGetNamedFramebufferAttachmentParameteriv;
446 GrGLFunction<GrGLGenerateTextureMipmapProc> fGenerateTextureMipmap;
447 GrGLFunction<GrGLFramebufferDrawBufferProc> fFramebufferDrawBuffer;
448 GrGLFunction<GrGLFramebufferDrawBuffersProc> fFramebufferDrawBuffers;
449 GrGLFunction<GrGLFramebufferReadBufferProc> fFramebufferReadBuffer;
450 GrGLFunction<GrGLGetFramebufferParameterivProc> fGetFramebufferParameteriv;
451 GrGLFunction<GrGLNamedCopyBufferSubDataProc> fNamedCopyBufferSubData;
452 GrGLFunction<GrGLVertexArrayVertexOffsetProc> fVertexArrayVertexOffset;
453 GrGLFunction<GrGLVertexArrayColorOffsetProc> fVertexArrayColorOffset;
454 GrGLFunction<GrGLVertexArrayEdgeFlagOffsetProc> fVertexArrayEdgeFlagOffset;
455 GrGLFunction<GrGLVertexArrayIndexOffsetProc> fVertexArrayIndexOffset;
456 GrGLFunction<GrGLVertexArrayNormalOffsetProc> fVertexArrayNormalOffset;
457 GrGLFunction<GrGLVertexArrayTexCoordOffsetProc> fVertexArrayTexCoordOffset;
458 GrGLFunction<GrGLVertexArrayMultiTexCoordOffsetProc> fVertexArrayMultiTexCoordOffset;
459 GrGLFunction<GrGLVertexArrayFogCoordOffsetProc> fVertexArrayFogCoordOffset;
460 GrGLFunction<GrGLVertexArraySecondaryColorOffsetProc> fVertexArraySecondaryColorOffset;
461 GrGLFunction<GrGLVertexArrayVertexAttribOffsetProc> fVertexArrayVertexAttribOffset;
462 GrGLFunction<GrGLVertexArrayVertexAttribIOffsetProc> fVertexArrayVertexAttribIOffset;
463 GrGLFunction<GrGLEnableVertexArrayProc> fEnableVertexArray;
464 GrGLFunction<GrGLDisableVertexArrayProc> fDisableVertexArray;
465 GrGLFunction<GrGLEnableVertexArrayAttribProc> fEnableVertexArrayAttrib;
466 GrGLFunction<GrGLDisableVertexArrayAttribProc> fDisableVertexArrayAttrib;
467 GrGLFunction<GrGLGetVertexArrayIntegervProc> fGetVertexArrayIntegerv;
468 GrGLFunction<GrGLGetVertexArrayPointervProc> fGetVertexArrayPointerv;
469 GrGLFunction<GrGLGetVertexArrayIntegeri_vProc> fGetVertexArrayIntegeri_v;
470 GrGLFunction<GrGLGetVertexArrayPointeri_vProc> fGetVertexArrayPointeri_v;
471 GrGLFunction<GrGLMapNamedBufferRangeProc> fMapNamedBufferRange;
472 GrGLFunction<GrGLFlushMappedNamedBufferRangeProc> fFlushMappedNamedBufferRange;
cdalton626e1ff2015-06-12 13:56:46 -0700473
474 /* KHR_debug */
bsalomon9f2dc272016-02-08 07:22:17 -0800475 GrGLFunction<GrGLDebugMessageControlProc> fDebugMessageControl;
476 GrGLFunction<GrGLDebugMessageInsertProc> fDebugMessageInsert;
477 GrGLFunction<GrGLDebugMessageCallbackProc> fDebugMessageCallback;
478 GrGLFunction<GrGLGetDebugMessageLogProc> fGetDebugMessageLog;
479 GrGLFunction<GrGLPushDebugGroupProc> fPushDebugGroup;
480 GrGLFunction<GrGLPopDebugGroupProc> fPopDebugGroup;
481 GrGLFunction<GrGLObjectLabelProc> fObjectLabel;
bsalomonb1a32ad2015-11-16 06:48:44 -0800482
483 /* EGL functions */
bsalomon9f2dc272016-02-08 07:22:17 -0800484 GrGLFunction<GrEGLCreateImageProc> fEGLCreateImage;
485 GrGLFunction<GrEGLDestroyImageProc> fEGLDestroyImage;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000486 } fFunctions;
487
bsalomon@google.com56bfc5a2011-09-01 13:28:16 +0000488 // Per-GL func callback
489#if GR_GL_PER_GL_FUNC_CALLBACK
490 GrGLInterfaceCallbackProc fCallback;
491 GrGLInterfaceCallbackData fCallbackData;
492#endif
bsalomon944bcf02014-07-29 08:01:52 -0700493
494 // This exists for internal testing.
495 virtual void abandon() const {}
bsalomon@google.combf2a4692011-05-04 12:35:39 +0000496};
twiz@google.com59a190b2011-03-14 21:23:01 +0000497
498#endif