blob: add7ee256727aa3f9728fbfe8c28547efc027ddc [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
bsalomon@google.com0b77d682011-08-19 13:28:54 +000033struct GrGLInterface;
34
bsalomon@google.com6fb736f2011-09-16 18:51:57 +000035const GrGLInterface* GrGLDefaultInterface();
twiz@google.com59a190b2011-03-14 21:23:01 +000036
bsalomon@google.com57f5d982011-10-24 21:17:53 +000037/**
38 * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
commit-bot@chromium.orga3b15ed2014-01-15 19:32:03 +000039 * GLX on linux, AGL on Mac). The interface is only valid for the GL context
40 * that is current when the interface is created.
bsalomon@google.com57f5d982011-10-24 21:17:53 +000041 */
bsalomon@google.com373a6632011-10-19 20:43:20 +000042const GrGLInterface* GrGLCreateNativeInterface();
43
robertphillips@google.comd3b9fbb2012-03-28 16:19:11 +000044#if SK_MESA
bsalomon@google.com57f5d982011-10-24 21:17:53 +000045/**
46 * Creates a GrGLInterface for an OSMesa context.
47 */
bsalomon@google.com373a6632011-10-19 20:43:20 +000048const GrGLInterface* GrGLCreateMesaInterface();
robertphillips@google.comd3b9fbb2012-03-28 16:19:11 +000049#endif
50
51#if SK_ANGLE
52/**
53 * Creates a GrGLInterface for an ANGLE context.
54 */
55const GrGLInterface* GrGLCreateANGLEInterface();
56#endif
bsalomon@google.com373a6632011-10-19 20:43:20 +000057
bsalomon@google.com74913722011-10-27 20:44:19 +000058/**
59 * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
60 * CPU overhead.
61 */
commit-bot@chromium.orgaae7c2a2013-11-25 20:39:27 +000062const SK_API GrGLInterface* GrGLCreateNullInterface();
bsalomon@google.com74913722011-10-27 20:44:19 +000063
robertphillips@google.com0da37192012-03-19 14:42:13 +000064/**
rmistry@google.comfbfcd562012-08-23 18:09:54 +000065 * Creates a debugging GrGLInterface that doesn't draw anything. Used for
robertphillips@google.com0da37192012-03-19 14:42:13 +000066 * finding memory leaks and invalid memory accesses.
67 */
68const GrGLInterface* GrGLCreateDebugInterface();
69
bsalomon@google.com56bfc5a2011-09-01 13:28:16 +000070#if GR_GL_PER_GL_FUNC_CALLBACK
71typedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
72typedef intptr_t GrGLInterfaceCallbackData;
73#endif
74
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +000075/** Function that returns a new interface identical to "interface" but without support for
76 GL_NV_path_rendering. */
77const GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*);
78
commit-bot@chromium.orga3baf3b2014-02-21 18:45:30 +000079/** Function that returns a new interface identical to "interface" but with support for
80 test version of GL_EXT_debug_marker. */
81const GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*,
82 GrGLInsertEventMarkerProc insertEventMarkerFn,
83 GrGLPushGroupMarkerProc pushGroupMarkerFn,
84 GrGLPopGroupMarkerProc popGroupMarkerFn);
85
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +000086/**
bsalomon@google.comcc61b172012-05-07 21:45:48 +000087 * GrContext uses the following interface to make all calls into OpenGL. When a
88 * GrContext is created it is given a GrGLInterface. The interface's function
89 * pointers must be valid for the OpenGL context associated with the GrContext.
90 * On some platforms, such as Windows, function pointers for OpenGL extensions
91 * may vary between OpenGL contexts. So the caller must be careful to use a
92 * GrGLInterface initialized for the correct context. All functions that should
93 * be available based on the OpenGL's version and extension string must be
94 * non-NULL or GrContext creation will fail. This can be tested with the
95 * validate() method when the OpenGL context has been made current.
bsalomon@google.combf2a4692011-05-04 12:35:39 +000096 */
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +000097struct SK_API GrGLInterface : public SkRefCnt {
bsalomon@google.comba800e22012-03-29 21:04:52 +000098private:
bsalomon@google.com9c1f1ac2012-05-07 17:09:37 +000099 // simple wrapper class that exists only to initialize a pointer to NULL
bsalomon@google.comba800e22012-03-29 21:04:52 +0000100 template <typename FNPTR_TYPE> class GLPtr {
101 public:
102 GLPtr() : fPtr(NULL) {}
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000103 GLPtr operator=(FNPTR_TYPE ptr) { fPtr = ptr; return *this; }
bsalomon@google.comba800e22012-03-29 21:04:52 +0000104 operator FNPTR_TYPE() const { return fPtr; }
105 private:
106 FNPTR_TYPE fPtr;
107 };
bsalomon@google.com0b77d682011-08-19 13:28:54 +0000108
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000109 // This is a temporary workaround to keep Chromium's GrGLInterface factories compiling until
110 // they're updated to use the Functions struct.
111 template <typename FNPTR_TYPE> class GLPtrAlias {
112 public:
113 GLPtrAlias(GLPtr<FNPTR_TYPE>* base) : fBase(base) {}
114 void operator=(FNPTR_TYPE ptr) { *fBase = ptr; }
115 private:
116 GLPtr<FNPTR_TYPE>* fBase;
117 };
118
commit-bot@chromium.orga4de8c22013-09-09 13:38:37 +0000119 typedef SkRefCnt INHERITED;
robertphillips@google.com15e9d3e2012-06-21 20:25:03 +0000120
bsalomon@google.comba800e22012-03-29 21:04:52 +0000121public:
robertphillips@google.com15e9d3e2012-06-21 20:25:03 +0000122 SK_DECLARE_INST_COUNT(GrGLInterface)
123
bsalomon@google.com0b77d682011-08-19 13:28:54 +0000124 GrGLInterface();
125
commit-bot@chromium.orgd8ed8512014-01-24 20:49:44 +0000126 static GrGLInterface* NewClone(const GrGLInterface*);
127
commit-bot@chromium.org9e90aed2014-01-16 16:35:09 +0000128 // Validates that the GrGLInterface supports its advertised standard. This means the necessary
129 // function pointers have been initialized for both the GL version and any advertised
130 // extensions.
131 bool validate() const;
bsalomon@google.com89ec61e2012-02-10 20:05:18 +0000132
commit-bot@chromium.org9e90aed2014-01-16 16:35:09 +0000133 // Indicates the type of GL implementation
134 union {
135 GrGLStandard fStandard;
136 GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
137 };
twiz@google.comb65e0cb2011-03-18 20:41:44 +0000138
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +0000139 GrGLExtensions fExtensions;
140
commit-bot@chromium.orgf5355612014-02-28 20:28:50 +0000141 bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
commit-bot@chromium.org90313cc2014-01-17 15:05:38 +0000142
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000143 /**
144 * The function pointers are in a struct so that we can have a compiler generated assignment
145 * operator.
146 */
147 struct Functions {
148 GLPtr<GrGLActiveTextureProc> fActiveTexture;
149 GLPtr<GrGLAttachShaderProc> fAttachShader;
150 GLPtr<GrGLBeginQueryProc> fBeginQuery;
151 GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation;
152 GLPtr<GrGLBindBufferProc> fBindBuffer;
153 GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation;
154 GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
155 GLPtr<GrGLBindFramebufferProc> fBindFramebuffer;
156 GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer;
157 GLPtr<GrGLBindTextureProc> fBindTexture;
158 GLPtr<GrGLBindVertexArrayProc> fBindVertexArray;
159 GLPtr<GrGLBlendColorProc> fBlendColor;
160 GLPtr<GrGLBlendFuncProc> fBlendFunc;
161 GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer;
162 GLPtr<GrGLBufferDataProc> fBufferData;
163 GLPtr<GrGLBufferSubDataProc> fBufferSubData;
164 GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
165 GLPtr<GrGLClearProc> fClear;
166 GLPtr<GrGLClearColorProc> fClearColor;
167 GLPtr<GrGLClearStencilProc> fClearStencil;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000168 GLPtr<GrGLColorMaskProc> fColorMask;
169 GLPtr<GrGLCompileShaderProc> fCompileShader;
170 GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
krajcevski37d20f72014-06-11 10:38:47 -0700171 GLPtr<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000172 GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
173 GLPtr<GrGLCreateProgramProc> fCreateProgram;
174 GLPtr<GrGLCreateShaderProc> fCreateShader;
175 GLPtr<GrGLCullFaceProc> fCullFace;
176 GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers;
177 GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
178 GLPtr<GrGLDeleteProgramProc> fDeleteProgram;
179 GLPtr<GrGLDeleteQueriesProc> fDeleteQueries;
180 GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
181 GLPtr<GrGLDeleteShaderProc> fDeleteShader;
182 GLPtr<GrGLDeleteTexturesProc> fDeleteTextures;
183 GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
184 GLPtr<GrGLDepthMaskProc> fDepthMask;
185 GLPtr<GrGLDisableProc> fDisable;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000186 GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
187 GLPtr<GrGLDrawArraysProc> fDrawArrays;
188 GLPtr<GrGLDrawBufferProc> fDrawBuffer;
189 GLPtr<GrGLDrawBuffersProc> fDrawBuffers;
190 GLPtr<GrGLDrawElementsProc> fDrawElements;
191 GLPtr<GrGLEnableProc> fEnable;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000192 GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
193 GLPtr<GrGLEndQueryProc> fEndQuery;
194 GLPtr<GrGLFinishProc> fFinish;
195 GLPtr<GrGLFlushProc> fFlush;
commit-bot@chromium.org160b4782014-05-05 12:32:37 +0000196 GLPtr<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000197 GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
198 GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
199 GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
200 GLPtr<GrGLFrontFaceProc> fFrontFace;
201 GLPtr<GrGLGenBuffersProc> fGenBuffers;
202 GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers;
203 GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap;
204 GLPtr<GrGLGenQueriesProc> fGenQueries;
205 GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers;
206 GLPtr<GrGLGenTexturesProc> fGenTextures;
207 GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays;
208 GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
209 GLPtr<GrGLGetErrorProc> fGetError;
210 GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
211 GLPtr<GrGLGetIntegervProc> fGetIntegerv;
212 GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
213 GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
214 GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
215 GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
216 GLPtr<GrGLGetQueryivProc> fGetQueryiv;
217 GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
218 GLPtr<GrGLGetProgramivProc> fGetProgramiv;
219 GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
220 GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
221 GLPtr<GrGLGetShaderivProc> fGetShaderiv;
222 GLPtr<GrGLGetStringProc> fGetString;
223 GLPtr<GrGLGetStringiProc> fGetStringi;
224 GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
225 GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation;
commit-bot@chromium.orga3baf3b2014-02-21 18:45:30 +0000226 GLPtr<GrGLInsertEventMarkerProc> fInsertEventMarker;
bsalomon@google.coma34bb602014-04-01 13:07:29 +0000227 GLPtr<GrGLInvalidateBufferDataProc> fInvalidateBufferData;
228 GLPtr<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData;
229 GLPtr<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer;
230 GLPtr<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer;
231 GLPtr<GrGLInvalidateTexImageProc> fInvalidateTexImage;
232 GLPtr<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000233 GLPtr<GrGLLineWidthProc> fLineWidth;
234 GLPtr<GrGLLinkProgramProc> fLinkProgram;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000235 GLPtr<GrGLMapBufferProc> fMapBuffer;
commit-bot@chromium.org160b4782014-05-05 12:32:37 +0000236 GLPtr<GrGLMapBufferRangeProc> fMapBufferRange;
commit-bot@chromium.orgbeb8b3a2014-04-15 15:37:51 +0000237 GLPtr<GrGLMapBufferSubDataProc> fMapBufferSubData;
238 GLPtr<GrGLMapTexSubImage2DProc> fMapTexSubImage2D;
commit-bot@chromium.orgf6696722014-04-25 06:21:30 +0000239 GLPtr<GrGLMatrixLoadfProc> fMatrixLoadf;
240 GLPtr<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000241 GLPtr<GrGLPixelStoreiProc> fPixelStorei;
commit-bot@chromium.orga3baf3b2014-02-21 18:45:30 +0000242 GLPtr<GrGLPopGroupMarkerProc> fPopGroupMarker;
243 GLPtr<GrGLPushGroupMarkerProc> fPushGroupMarker;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000244 GLPtr<GrGLQueryCounterProc> fQueryCounter;
245 GLPtr<GrGLReadBufferProc> fReadBuffer;
246 GLPtr<GrGLReadPixelsProc> fReadPixels;
247 GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage;
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000248
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000249 // On OpenGL ES there are multiple incompatible extensions that add support for MSAA
250 // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
251 // older extensions for performance reasons or due to ES3 driver bugs. We want the function
252 // that creates the GrGLInterface to provide all available functions and internally
253 // we will select among them. They all have a method called glRenderbufferStorageMultisample*.
254 // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
255 // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
256 // variations.
257 //
258 // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
259 // assume the function pointers for the standard (or equivalent GL_ARB) version have
260 // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
261 // functionality.
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000262
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000263 // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
264 GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
265 // GL_APPLE_framebuffer_multisample
266 GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
commit-bot@chromium.org92b78842014-01-16 20:49:46 +0000267
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000268 // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
269 // the standard function in ES3+ or GL 3.0+.
270 GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
commit-bot@chromium.orga8e5a062013-09-05 23:44:09 +0000271
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000272 // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
273 GLPtr<GrGLBindUniformLocation> fBindUniformLocation;
commit-bot@chromium.orgd3baf202013-11-07 22:06:08 +0000274
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000275 GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
276 GLPtr<GrGLScissorProc> fScissor;
277 GLPtr<GrGLShaderSourceProc> fShaderSource;
278 GLPtr<GrGLStencilFuncProc> fStencilFunc;
279 GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
280 GLPtr<GrGLStencilMaskProc> fStencilMask;
281 GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
282 GLPtr<GrGLStencilOpProc> fStencilOp;
283 GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000284 GLPtr<GrGLTexImage2DProc> fTexImage2D;
285 GLPtr<GrGLTexParameteriProc> fTexParameteri;
286 GLPtr<GrGLTexParameterivProc> fTexParameteriv;
287 GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D;
288 GLPtr<GrGLTexStorage2DProc> fTexStorage2D;
289 GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
290 GLPtr<GrGLUniform1fProc> fUniform1f;
291 GLPtr<GrGLUniform1iProc> fUniform1i;
292 GLPtr<GrGLUniform1fvProc> fUniform1fv;
293 GLPtr<GrGLUniform1ivProc> fUniform1iv;
294 GLPtr<GrGLUniform2fProc> fUniform2f;
295 GLPtr<GrGLUniform2iProc> fUniform2i;
296 GLPtr<GrGLUniform2fvProc> fUniform2fv;
297 GLPtr<GrGLUniform2ivProc> fUniform2iv;
298 GLPtr<GrGLUniform3fProc> fUniform3f;
299 GLPtr<GrGLUniform3iProc> fUniform3i;
300 GLPtr<GrGLUniform3fvProc> fUniform3fv;
301 GLPtr<GrGLUniform3ivProc> fUniform3iv;
302 GLPtr<GrGLUniform4fProc> fUniform4f;
303 GLPtr<GrGLUniform4iProc> fUniform4i;
304 GLPtr<GrGLUniform4fvProc> fUniform4fv;
305 GLPtr<GrGLUniform4ivProc> fUniform4iv;
306 GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
307 GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
308 GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
309 GLPtr<GrGLUnmapBufferProc> fUnmapBuffer;
commit-bot@chromium.orgbeb8b3a2014-04-15 15:37:51 +0000310 GLPtr<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData;
311 GLPtr<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000312 GLPtr<GrGLUseProgramProc> fUseProgram;
313 GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
314 GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000315 GLPtr<GrGLViewportProc> fViewport;
bsalomon@google.com271cffc2011-05-20 14:13:56 +0000316
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000317 // Experimental: Functions for GL_NV_path_rendering. These will be
318 // alphabetized with the above functions once this is fully supported
319 // (and functions we are unlikely to use will possibly be omitted).
kkinnunen32b9a3b2014-07-02 22:56:35 -0700320 GLPtr<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000321 GLPtr<GrGLPathCommandsProc> fPathCommands;
322 GLPtr<GrGLPathCoordsProc> fPathCoords;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000323 GLPtr<GrGLPathParameteriProc> fPathParameteri;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000324 GLPtr<GrGLPathParameterfProc> fPathParameterf;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000325 GLPtr<GrGLGenPathsProc> fGenPaths;
326 GLPtr<GrGLDeletePathsProc> fDeletePaths;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000327 GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000328 GLPtr<GrGLStencilFillPathProc> fStencilFillPath;
329 GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath;
330 GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
331 GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000332 GLPtr<GrGLPathTexGenProc> fPathTexGen;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000333 GLPtr<GrGLCoverFillPathProc> fCoverFillPath;
334 GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath;
335 GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
336 GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
kkinnunen32b9a3b2014-07-02 22:56:35 -0700337 GLPtr<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen;
commit-bot@chromium.orgc72425a2014-01-21 16:09:18 +0000338 } fFunctions;
339
bsalomon@google.com56bfc5a2011-09-01 13:28:16 +0000340 // Per-GL func callback
341#if GR_GL_PER_GL_FUNC_CALLBACK
342 GrGLInterfaceCallbackProc fCallback;
343 GrGLInterfaceCallbackData fCallbackData;
344#endif
bsalomon@google.combf2a4692011-05-04 12:35:39 +0000345};
twiz@google.com59a190b2011-03-14 21:23:01 +0000346
347#endif