Line data Source code
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 "GrGLFunctions.h"
12 : #include "GrGLExtensions.h"
13 : #include "SkRefCnt.h"
14 :
15 : ////////////////////////////////////////////////////////////////////////////////
16 :
17 : /**
18 : * 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
21 : * passed to Create then a "default" GL interface is created. If the default is
22 : * also NULL GrContext creation will fail.
23 : *
24 : * The default interface is returned by GrGLDefaultInterface. This function's
25 : * implementation is platform-specific. Several have been provided, along with
26 : * an implementation that simply returns NULL.
27 : *
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
31 : */
32 :
33 : typedef void(*GrGLFuncPtr)();
34 :
35 : struct GrGLInterface;
36 :
37 : const GrGLInterface* GrGLDefaultInterface();
38 :
39 : /**
40 : * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
41 : * GLX on linux, AGL on Mac). The interface is only valid for the GL context
42 : * that is current when the interface is created.
43 : */
44 : SK_API const GrGLInterface* GrGLCreateNativeInterface();
45 :
46 : #if GR_GL_PER_GL_FUNC_CALLBACK
47 : typedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*);
48 : typedef intptr_t GrGLInterfaceCallbackData;
49 : #endif
50 :
51 : /**
52 : * Creates a null GrGLInterface that doesn't draw anything. Used for measuring
53 : * CPU overhead. TODO: We would like to move this to tools/gpu/gl/null but currently
54 : * Chromium is using it in its unit tests.
55 : */
56 : const SK_API GrGLInterface* GrGLCreateNullInterface(bool enableNVPR = false);
57 :
58 : /** Function that returns a new interface identical to "interface" but with support for
59 : test version of GL_EXT_debug_marker. */
60 : const GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*,
61 : GrGLInsertEventMarkerProc insertEventMarkerFn,
62 : GrGLPushGroupMarkerProc pushGroupMarkerFn,
63 : GrGLPopGroupMarkerProc popGroupMarkerFn);
64 :
65 : /**
66 : * GrContext uses the following interface to make all calls into OpenGL. When a
67 : * GrContext is created it is given a GrGLInterface. The interface's function
68 : * pointers must be valid for the OpenGL context associated with the GrContext.
69 : * On some platforms, such as Windows, function pointers for OpenGL extensions
70 : * may vary between OpenGL contexts. So the caller must be careful to use a
71 : * GrGLInterface initialized for the correct context. All functions that should
72 : * be available based on the OpenGL's version and extension string must be
73 : * non-NULL or GrContext creation will fail. This can be tested with the
74 : * validate() method when the OpenGL context has been made current.
75 : */
76 0 : struct SK_API GrGLInterface : public SkRefCnt {
77 : private:
78 : typedef SkRefCnt INHERITED;
79 :
80 : public:
81 : GrGLInterface();
82 :
83 : static GrGLInterface* NewClone(const GrGLInterface*);
84 :
85 : // Validates that the GrGLInterface supports its advertised standard. This means the necessary
86 : // function pointers have been initialized for both the GL version and any advertised
87 : // extensions.
88 : bool validate() const;
89 :
90 : // Indicates the type of GL implementation
91 : union {
92 : GrGLStandard fStandard;
93 : GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated.
94 : };
95 :
96 : GrGLExtensions fExtensions;
97 :
98 0 : bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
99 :
100 : /**
101 : * The function pointers are in a struct so that we can have a compiler generated assignment
102 : * operator.
103 : */
104 0 : struct Functions {
105 : GrGLFunction<GrGLActiveTextureProc> fActiveTexture;
106 : GrGLFunction<GrGLAttachShaderProc> fAttachShader;
107 : GrGLFunction<GrGLBeginQueryProc> fBeginQuery;
108 : GrGLFunction<GrGLBindAttribLocationProc> fBindAttribLocation;
109 : GrGLFunction<GrGLBindBufferProc> fBindBuffer;
110 : GrGLFunction<GrGLBindFragDataLocationProc> fBindFragDataLocation;
111 : GrGLFunction<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed;
112 : GrGLFunction<GrGLBindFramebufferProc> fBindFramebuffer;
113 : GrGLFunction<GrGLBindRenderbufferProc> fBindRenderbuffer;
114 : GrGLFunction<GrGLBindTextureProc> fBindTexture;
115 : GrGLFunction<GrGLBindImageTextureProc> fBindImageTexture;
116 : GrGLFunction<GrGLBindVertexArrayProc> fBindVertexArray;
117 : GrGLFunction<GrGLBlendBarrierProc> fBlendBarrier;
118 : GrGLFunction<GrGLBlendColorProc> fBlendColor;
119 : GrGLFunction<GrGLBlendEquationProc> fBlendEquation;
120 : GrGLFunction<GrGLBlendFuncProc> fBlendFunc;
121 : GrGLFunction<GrGLBlitFramebufferProc> fBlitFramebuffer;
122 : GrGLFunction<GrGLBufferDataProc> fBufferData;
123 : GrGLFunction<GrGLBufferSubDataProc> fBufferSubData;
124 : GrGLFunction<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus;
125 : GrGLFunction<GrGLClearProc> fClear;
126 : GrGLFunction<GrGLClearColorProc> fClearColor;
127 : GrGLFunction<GrGLClearStencilProc> fClearStencil;
128 : GrGLFunction<GrGLColorMaskProc> fColorMask;
129 : GrGLFunction<GrGLCompileShaderProc> fCompileShader;
130 : GrGLFunction<GrGLCompressedTexImage2DProc> fCompressedTexImage2D;
131 : GrGLFunction<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D;
132 : GrGLFunction<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D;
133 : GrGLFunction<GrGLCreateProgramProc> fCreateProgram;
134 : GrGLFunction<GrGLCreateShaderProc> fCreateShader;
135 : GrGLFunction<GrGLCullFaceProc> fCullFace;
136 : GrGLFunction<GrGLDeleteBuffersProc> fDeleteBuffers;
137 : GrGLFunction<GrGLDeleteFramebuffersProc> fDeleteFramebuffers;
138 : GrGLFunction<GrGLDeleteProgramProc> fDeleteProgram;
139 : GrGLFunction<GrGLDeleteQueriesProc> fDeleteQueries;
140 : GrGLFunction<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers;
141 : GrGLFunction<GrGLDeleteShaderProc> fDeleteShader;
142 : GrGLFunction<GrGLDeleteTexturesProc> fDeleteTextures;
143 : GrGLFunction<GrGLDeleteVertexArraysProc> fDeleteVertexArrays;
144 : GrGLFunction<GrGLDepthMaskProc> fDepthMask;
145 : GrGLFunction<GrGLDisableProc> fDisable;
146 : GrGLFunction<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray;
147 : GrGLFunction<GrGLDrawArraysProc> fDrawArrays;
148 : GrGLFunction<GrGLDrawArraysIndirectProc> fDrawArraysIndirect;
149 : GrGLFunction<GrGLDrawArraysInstancedProc> fDrawArraysInstanced;
150 : GrGLFunction<GrGLDrawBufferProc> fDrawBuffer;
151 : GrGLFunction<GrGLDrawBuffersProc> fDrawBuffers;
152 : GrGLFunction<GrGLDrawElementsProc> fDrawElements;
153 : GrGLFunction<GrGLDrawElementsIndirectProc> fDrawElementsIndirect;
154 : GrGLFunction<GrGLDrawElementsInstancedProc> fDrawElementsInstanced;
155 : GrGLFunction<GrGLDrawRangeElementsProc> fDrawRangeElements;
156 : GrGLFunction<GrGLEnableProc> fEnable;
157 : GrGLFunction<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray;
158 : GrGLFunction<GrGLEndQueryProc> fEndQuery;
159 : GrGLFunction<GrGLFinishProc> fFinish;
160 : GrGLFunction<GrGLFlushProc> fFlush;
161 : GrGLFunction<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
162 : GrGLFunction<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
163 : GrGLFunction<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
164 : GrGLFunction<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
165 : GrGLFunction<GrGLFrontFaceProc> fFrontFace;
166 : GrGLFunction<GrGLGenBuffersProc> fGenBuffers;
167 : GrGLFunction<GrGLGenFramebuffersProc> fGenFramebuffers;
168 : GrGLFunction<GrGLGenerateMipmapProc> fGenerateMipmap;
169 : GrGLFunction<GrGLGenQueriesProc> fGenQueries;
170 : GrGLFunction<GrGLGenRenderbuffersProc> fGenRenderbuffers;
171 : GrGLFunction<GrGLGenTexturesProc> fGenTextures;
172 : GrGLFunction<GrGLGenVertexArraysProc> fGenVertexArrays;
173 : GrGLFunction<GrGLGetBufferParameterivProc> fGetBufferParameteriv;
174 : GrGLFunction<GrGLGetErrorProc> fGetError;
175 : GrGLFunction<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv;
176 : GrGLFunction<GrGLGetIntegervProc> fGetIntegerv;
177 : GrGLFunction<GrGLGetMultisamplefvProc> fGetMultisamplefv;
178 : GrGLFunction<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v;
179 : GrGLFunction<GrGLGetQueryObjectivProc> fGetQueryObjectiv;
180 : GrGLFunction<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v;
181 : GrGLFunction<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv;
182 : GrGLFunction<GrGLGetQueryivProc> fGetQueryiv;
183 : GrGLFunction<GrGLGetProgramInfoLogProc> fGetProgramInfoLog;
184 : GrGLFunction<GrGLGetProgramivProc> fGetProgramiv;
185 : GrGLFunction<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv;
186 : GrGLFunction<GrGLGetShaderInfoLogProc> fGetShaderInfoLog;
187 : GrGLFunction<GrGLGetShaderivProc> fGetShaderiv;
188 : GrGLFunction<GrGLGetShaderPrecisionFormatProc> fGetShaderPrecisionFormat;
189 : GrGLFunction<GrGLGetStringProc> fGetString;
190 : GrGLFunction<GrGLGetStringiProc> fGetStringi;
191 : GrGLFunction<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv;
192 : GrGLFunction<GrGLGetUniformLocationProc> fGetUniformLocation;
193 : GrGLFunction<GrGLInsertEventMarkerProc> fInsertEventMarker;
194 : GrGLFunction<GrGLInvalidateBufferDataProc> fInvalidateBufferData;
195 : GrGLFunction<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData;
196 : GrGLFunction<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer;
197 : GrGLFunction<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer;
198 : GrGLFunction<GrGLInvalidateTexImageProc> fInvalidateTexImage;
199 : GrGLFunction<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage;
200 : GrGLFunction<GrGLIsTextureProc> fIsTexture;
201 : GrGLFunction<GrGLLineWidthProc> fLineWidth;
202 : GrGLFunction<GrGLLinkProgramProc> fLinkProgram;
203 : GrGLFunction<GrGLMapBufferProc> fMapBuffer;
204 : GrGLFunction<GrGLMapBufferRangeProc> fMapBufferRange;
205 : GrGLFunction<GrGLMapBufferSubDataProc> fMapBufferSubData;
206 : GrGLFunction<GrGLMapTexSubImage2DProc> fMapTexSubImage2D;
207 : GrGLFunction<GrGLMemoryBarrierProc> fMemoryBarrier;
208 : GrGLFunction<GrGLMemoryBarrierByRegionProc> fMemoryBarrierByRegion;
209 : GrGLFunction<GrGLMultiDrawArraysIndirectProc> fMultiDrawArraysIndirect;
210 : GrGLFunction<GrGLMultiDrawElementsIndirectProc> fMultiDrawElementsIndirect;
211 : GrGLFunction<GrGLPixelStoreiProc> fPixelStorei;
212 : GrGLFunction<GrGLPolygonModeProc> fPolygonMode;
213 : GrGLFunction<GrGLPopGroupMarkerProc> fPopGroupMarker;
214 : GrGLFunction<GrGLPushGroupMarkerProc> fPushGroupMarker;
215 : GrGLFunction<GrGLQueryCounterProc> fQueryCounter;
216 : GrGLFunction<GrGLRasterSamplesProc> fRasterSamples;
217 : GrGLFunction<GrGLReadBufferProc> fReadBuffer;
218 : GrGLFunction<GrGLReadPixelsProc> fReadPixels;
219 : GrGLFunction<GrGLRenderbufferStorageProc> fRenderbufferStorage;
220 :
221 : // On OpenGL ES there are multiple incompatible extensions that add support for MSAA
222 : // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
223 : // older extensions for performance reasons or due to ES3 driver bugs. We want the function
224 : // that creates the GrGLInterface to provide all available functions and internally
225 : // we will select among them. They all have a method called glRenderbufferStorageMultisample*.
226 : // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
227 : // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
228 : // variations.
229 : //
230 : // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
231 : // assume the function pointers for the standard (or equivalent GL_ARB) version have
232 : // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
233 : // functionality.
234 :
235 : // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
236 : GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT;
237 : // GL_APPLE_framebuffer_multisample
238 : GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE;
239 :
240 : // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
241 : // the standard function in ES3+ or GL 3.0+.
242 : GrGLFunction<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample;
243 :
244 : // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
245 : GrGLFunction<GrGLBindUniformLocationProc> fBindUniformLocation;
246 :
247 : GrGLFunction<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer;
248 : GrGLFunction<GrGLScissorProc> fScissor;
249 : GrGLFunction<GrGLShaderSourceProc> fShaderSource;
250 : GrGLFunction<GrGLStencilFuncProc> fStencilFunc;
251 : GrGLFunction<GrGLStencilFuncSeparateProc> fStencilFuncSeparate;
252 : GrGLFunction<GrGLStencilMaskProc> fStencilMask;
253 : GrGLFunction<GrGLStencilMaskSeparateProc> fStencilMaskSeparate;
254 : GrGLFunction<GrGLStencilOpProc> fStencilOp;
255 : GrGLFunction<GrGLStencilOpSeparateProc> fStencilOpSeparate;
256 : GrGLFunction<GrGLTexBufferProc> fTexBuffer;
257 : GrGLFunction<GrGLTexBufferRangeProc> fTexBufferRange;
258 : GrGLFunction<GrGLTexImage2DProc> fTexImage2D;
259 : GrGLFunction<GrGLTexParameteriProc> fTexParameteri;
260 : GrGLFunction<GrGLTexParameterivProc> fTexParameteriv;
261 : GrGLFunction<GrGLTexSubImage2DProc> fTexSubImage2D;
262 : GrGLFunction<GrGLTexStorage2DProc> fTexStorage2D;
263 : GrGLFunction<GrGLTextureBarrierProc> fTextureBarrier;
264 : GrGLFunction<GrGLDiscardFramebufferProc> fDiscardFramebuffer;
265 : GrGLFunction<GrGLUniform1fProc> fUniform1f;
266 : GrGLFunction<GrGLUniform1iProc> fUniform1i;
267 : GrGLFunction<GrGLUniform1fvProc> fUniform1fv;
268 : GrGLFunction<GrGLUniform1ivProc> fUniform1iv;
269 : GrGLFunction<GrGLUniform2fProc> fUniform2f;
270 : GrGLFunction<GrGLUniform2iProc> fUniform2i;
271 : GrGLFunction<GrGLUniform2fvProc> fUniform2fv;
272 : GrGLFunction<GrGLUniform2ivProc> fUniform2iv;
273 : GrGLFunction<GrGLUniform3fProc> fUniform3f;
274 : GrGLFunction<GrGLUniform3iProc> fUniform3i;
275 : GrGLFunction<GrGLUniform3fvProc> fUniform3fv;
276 : GrGLFunction<GrGLUniform3ivProc> fUniform3iv;
277 : GrGLFunction<GrGLUniform4fProc> fUniform4f;
278 : GrGLFunction<GrGLUniform4iProc> fUniform4i;
279 : GrGLFunction<GrGLUniform4fvProc> fUniform4fv;
280 : GrGLFunction<GrGLUniform4ivProc> fUniform4iv;
281 : GrGLFunction<GrGLUniformMatrix2fvProc> fUniformMatrix2fv;
282 : GrGLFunction<GrGLUniformMatrix3fvProc> fUniformMatrix3fv;
283 : GrGLFunction<GrGLUniformMatrix4fvProc> fUniformMatrix4fv;
284 : GrGLFunction<GrGLUnmapBufferProc> fUnmapBuffer;
285 : GrGLFunction<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData;
286 : GrGLFunction<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D;
287 : GrGLFunction<GrGLUseProgramProc> fUseProgram;
288 : GrGLFunction<GrGLVertexAttrib1fProc> fVertexAttrib1f;
289 : GrGLFunction<GrGLVertexAttrib2fvProc> fVertexAttrib2fv;
290 : GrGLFunction<GrGLVertexAttrib3fvProc> fVertexAttrib3fv;
291 : GrGLFunction<GrGLVertexAttrib4fvProc> fVertexAttrib4fv;
292 : GrGLFunction<GrGLVertexAttribDivisorProc> fVertexAttribDivisor;
293 : GrGLFunction<GrGLVertexAttribIPointerProc> fVertexAttribIPointer;
294 : GrGLFunction<GrGLVertexAttribPointerProc> fVertexAttribPointer;
295 : GrGLFunction<GrGLViewportProc> fViewport;
296 :
297 : /* GL_NV_path_rendering */
298 : GrGLFunction<GrGLMatrixLoadfProc> fMatrixLoadf;
299 : GrGLFunction<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity;
300 : GrGLFunction<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation;
301 : GrGLFunction<GrGLPathCommandsProc> fPathCommands;
302 : GrGLFunction<GrGLPathParameteriProc> fPathParameteri;
303 : GrGLFunction<GrGLPathParameterfProc> fPathParameterf;
304 : GrGLFunction<GrGLGenPathsProc> fGenPaths;
305 : GrGLFunction<GrGLDeletePathsProc> fDeletePaths;
306 : GrGLFunction<GrGLIsPathProc> fIsPath;
307 : GrGLFunction<GrGLPathStencilFuncProc> fPathStencilFunc;
308 : GrGLFunction<GrGLStencilFillPathProc> fStencilFillPath;
309 : GrGLFunction<GrGLStencilStrokePathProc> fStencilStrokePath;
310 : GrGLFunction<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced;
311 : GrGLFunction<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced;
312 : GrGLFunction<GrGLCoverFillPathProc> fCoverFillPath;
313 : GrGLFunction<GrGLCoverStrokePathProc> fCoverStrokePath;
314 : GrGLFunction<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced;
315 : GrGLFunction<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced;
316 : // NV_path_rendering v1.2
317 : GrGLFunction<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath;
318 : GrGLFunction<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath;
319 : GrGLFunction<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced;
320 : GrGLFunction<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced;
321 : // NV_path_rendering v1.3
322 : GrGLFunction<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen;
323 : // CHROMIUM_path_rendering
324 : GrGLFunction<GrGLBindFragmentInputLocationProc> fBindFragmentInputLocation;
325 :
326 : /* NV_framebuffer_mixed_samples */
327 : GrGLFunction<GrGLCoverageModulationProc> fCoverageModulation;
328 :
329 : /* NV_bindless_texture */
330 : // We use the NVIDIA verson for now because it does not require dynamically uniform handles.
331 : // We may switch the the ARB version and/or omit methods in the future.
332 : GrGLFunction<GrGLGetTextureHandleProc> fGetTextureHandle;
333 : GrGLFunction<GrGLGetTextureSamplerHandleProc> fGetTextureSamplerHandle;
334 : GrGLFunction<GrGLMakeTextureHandleResidentProc> fMakeTextureHandleResident;
335 : GrGLFunction<GrGLMakeTextureHandleNonResidentProc> fMakeTextureHandleNonResident;
336 : GrGLFunction<GrGLGetImageHandleProc> fGetImageHandle;
337 : GrGLFunction<GrGLMakeImageHandleResidentProc> fMakeImageHandleResident;
338 : GrGLFunction<GrGLMakeImageHandleNonResidentProc> fMakeImageHandleNonResident;
339 : GrGLFunction<GrGLIsTextureHandleResidentProc> fIsTextureHandleResident;
340 : GrGLFunction<GrGLIsImageHandleResidentProc> fIsImageHandleResident;
341 : GrGLFunction<GrGLUniformHandleui64Proc> fUniformHandleui64;
342 : GrGLFunction<GrGLUniformHandleui64vProc> fUniformHandleui64v;
343 : GrGLFunction<GrGLProgramUniformHandleui64Proc> fProgramUniformHandleui64;
344 : GrGLFunction<GrGLProgramUniformHandleui64vProc> fProgramUniformHandleui64v;
345 :
346 : /* ARB_sample_shading */
347 : GrGLFunction<GrGLMinSampleShadingProc> fMinSampleShading;
348 :
349 : /* EXT_direct_state_access */
350 : // We use the EXT verson because it is more expansive and interacts with more extensions
351 : // than the ARB or core (4.5) versions. We may switch and/or omit methods in the future.
352 : GrGLFunction<GrGLTextureParameteriProc> fTextureParameteri;
353 : GrGLFunction<GrGLTextureParameterivProc> fTextureParameteriv;
354 : GrGLFunction<GrGLTextureParameterfProc> fTextureParameterf;
355 : GrGLFunction<GrGLTextureParameterfvProc> fTextureParameterfv;
356 : GrGLFunction<GrGLTextureImage1DProc> fTextureImage1D;
357 : GrGLFunction<GrGLTextureImage2DProc> fTextureImage2D;
358 : GrGLFunction<GrGLTextureSubImage1DProc> fTextureSubImage1D;
359 : GrGLFunction<GrGLTextureSubImage2DProc> fTextureSubImage2D;
360 : GrGLFunction<GrGLCopyTextureImage1DProc> fCopyTextureImage1D;
361 : GrGLFunction<GrGLCopyTextureImage2DProc> fCopyTextureImage2D;
362 : GrGLFunction<GrGLCopyTextureSubImage1DProc> fCopyTextureSubImage1D;
363 : GrGLFunction<GrGLCopyTextureSubImage2DProc> fCopyTextureSubImage2D;
364 : GrGLFunction<GrGLGetTextureImageProc> fGetTextureImage;
365 : GrGLFunction<GrGLGetTextureParameterfvProc> fGetTextureParameterfv;
366 : GrGLFunction<GrGLGetTextureParameterivProc> fGetTextureParameteriv;
367 : GrGLFunction<GrGLGetTextureLevelParameterfvProc> fGetTextureLevelParameterfv;
368 : GrGLFunction<GrGLGetTextureLevelParameterivProc> fGetTextureLevelParameteriv;
369 : // OpenGL 1.2
370 : GrGLFunction<GrGLTextureImage3DProc> fTextureImage3D;
371 : GrGLFunction<GrGLTextureSubImage3DProc> fTextureSubImage3D;
372 : GrGLFunction<GrGLCopyTextureSubImage3DProc> fCopyTextureSubImage3D;
373 : GrGLFunction<GrGLCompressedTextureImage3DProc> fCompressedTextureImage3D;
374 : GrGLFunction<GrGLCompressedTextureImage2DProc> fCompressedTextureImage2D;
375 : GrGLFunction<GrGLCompressedTextureImage1DProc> fCompressedTextureImage1D;
376 : GrGLFunction<GrGLCompressedTextureSubImage3DProc> fCompressedTextureSubImage3D;
377 : GrGLFunction<GrGLCompressedTextureSubImage2DProc> fCompressedTextureSubImage2D;
378 : GrGLFunction<GrGLCompressedTextureSubImage1DProc> fCompressedTextureSubImage1D;
379 : GrGLFunction<GrGLGetCompressedTextureImageProc> fGetCompressedTextureImage;
380 : // OpenGL 1.5
381 : GrGLFunction<GrGLNamedBufferDataProc> fNamedBufferData;
382 : GrGLFunction<GrGLNamedBufferSubDataProc> fNamedBufferSubData;
383 : GrGLFunction<GrGLMapNamedBufferProc> fMapNamedBuffer;
384 : GrGLFunction<GrGLUnmapNamedBufferProc> fUnmapNamedBuffer;
385 : GrGLFunction<GrGLGetNamedBufferParameterivProc> fGetNamedBufferParameteriv;
386 : GrGLFunction<GrGLGetNamedBufferPointervProc> fGetNamedBufferPointerv;
387 : GrGLFunction<GrGLGetNamedBufferSubDataProc> fGetNamedBufferSubData;
388 : // OpenGL 2.0
389 : GrGLFunction<GrGLProgramUniform1fProc> fProgramUniform1f;
390 : GrGLFunction<GrGLProgramUniform2fProc> fProgramUniform2f;
391 : GrGLFunction<GrGLProgramUniform3fProc> fProgramUniform3f;
392 : GrGLFunction<GrGLProgramUniform4fProc> fProgramUniform4f;
393 : GrGLFunction<GrGLProgramUniform1iProc> fProgramUniform1i;
394 : GrGLFunction<GrGLProgramUniform2iProc> fProgramUniform2i;
395 : GrGLFunction<GrGLProgramUniform3iProc> fProgramUniform3i;
396 : GrGLFunction<GrGLProgramUniform4iProc> fProgramUniform4i;
397 : GrGLFunction<GrGLProgramUniform1fvProc> fProgramUniform1fv;
398 : GrGLFunction<GrGLProgramUniform2fvProc> fProgramUniform2fv;
399 : GrGLFunction<GrGLProgramUniform3fvProc> fProgramUniform3fv;
400 : GrGLFunction<GrGLProgramUniform4fvProc> fProgramUniform4fv;
401 : GrGLFunction<GrGLProgramUniform1ivProc> fProgramUniform1iv;
402 : GrGLFunction<GrGLProgramUniform2ivProc> fProgramUniform2iv;
403 : GrGLFunction<GrGLProgramUniform3ivProc> fProgramUniform3iv;
404 : GrGLFunction<GrGLProgramUniform4ivProc> fProgramUniform4iv;
405 : GrGLFunction<GrGLProgramUniformMatrix2fvProc> fProgramUniformMatrix2fv;
406 : GrGLFunction<GrGLProgramUniformMatrix3fvProc> fProgramUniformMatrix3fv;
407 : GrGLFunction<GrGLProgramUniformMatrix4fvProc> fProgramUniformMatrix4fv;
408 : // OpenGL 2.1
409 : GrGLFunction<GrGLProgramUniformMatrix2x3fvProc> fProgramUniformMatrix2x3fv;
410 : GrGLFunction<GrGLProgramUniformMatrix3x2fvProc> fProgramUniformMatrix3x2fv;
411 : GrGLFunction<GrGLProgramUniformMatrix2x4fvProc> fProgramUniformMatrix2x4fv;
412 : GrGLFunction<GrGLProgramUniformMatrix4x2fvProc> fProgramUniformMatrix4x2fv;
413 : GrGLFunction<GrGLProgramUniformMatrix3x4fvProc> fProgramUniformMatrix3x4fv;
414 : GrGLFunction<GrGLProgramUniformMatrix4x3fvProc> fProgramUniformMatrix4x3fv;
415 : // OpenGL 3.0
416 : GrGLFunction<GrGLNamedRenderbufferStorageProc> fNamedRenderbufferStorage;
417 : GrGLFunction<GrGLGetNamedRenderbufferParameterivProc> fGetNamedRenderbufferParameteriv;
418 : GrGLFunction<GrGLNamedRenderbufferStorageMultisampleProc> fNamedRenderbufferStorageMultisample;
419 : GrGLFunction<GrGLCheckNamedFramebufferStatusProc> fCheckNamedFramebufferStatus;
420 : GrGLFunction<GrGLNamedFramebufferTexture1DProc> fNamedFramebufferTexture1D;
421 : GrGLFunction<GrGLNamedFramebufferTexture2DProc> fNamedFramebufferTexture2D;
422 : GrGLFunction<GrGLNamedFramebufferTexture3DProc> fNamedFramebufferTexture3D;
423 : GrGLFunction<GrGLNamedFramebufferRenderbufferProc> fNamedFramebufferRenderbuffer;
424 : GrGLFunction<GrGLGetNamedFramebufferAttachmentParameterivProc> fGetNamedFramebufferAttachmentParameteriv;
425 : GrGLFunction<GrGLGenerateTextureMipmapProc> fGenerateTextureMipmap;
426 : GrGLFunction<GrGLFramebufferDrawBufferProc> fFramebufferDrawBuffer;
427 : GrGLFunction<GrGLFramebufferDrawBuffersProc> fFramebufferDrawBuffers;
428 : GrGLFunction<GrGLFramebufferReadBufferProc> fFramebufferReadBuffer;
429 : GrGLFunction<GrGLGetFramebufferParameterivProc> fGetFramebufferParameteriv;
430 : GrGLFunction<GrGLNamedCopyBufferSubDataProc> fNamedCopyBufferSubData;
431 : GrGLFunction<GrGLVertexArrayVertexOffsetProc> fVertexArrayVertexOffset;
432 : GrGLFunction<GrGLVertexArrayColorOffsetProc> fVertexArrayColorOffset;
433 : GrGLFunction<GrGLVertexArrayEdgeFlagOffsetProc> fVertexArrayEdgeFlagOffset;
434 : GrGLFunction<GrGLVertexArrayIndexOffsetProc> fVertexArrayIndexOffset;
435 : GrGLFunction<GrGLVertexArrayNormalOffsetProc> fVertexArrayNormalOffset;
436 : GrGLFunction<GrGLVertexArrayTexCoordOffsetProc> fVertexArrayTexCoordOffset;
437 : GrGLFunction<GrGLVertexArrayMultiTexCoordOffsetProc> fVertexArrayMultiTexCoordOffset;
438 : GrGLFunction<GrGLVertexArrayFogCoordOffsetProc> fVertexArrayFogCoordOffset;
439 : GrGLFunction<GrGLVertexArraySecondaryColorOffsetProc> fVertexArraySecondaryColorOffset;
440 : GrGLFunction<GrGLVertexArrayVertexAttribOffsetProc> fVertexArrayVertexAttribOffset;
441 : GrGLFunction<GrGLVertexArrayVertexAttribIOffsetProc> fVertexArrayVertexAttribIOffset;
442 : GrGLFunction<GrGLEnableVertexArrayProc> fEnableVertexArray;
443 : GrGLFunction<GrGLDisableVertexArrayProc> fDisableVertexArray;
444 : GrGLFunction<GrGLEnableVertexArrayAttribProc> fEnableVertexArrayAttrib;
445 : GrGLFunction<GrGLDisableVertexArrayAttribProc> fDisableVertexArrayAttrib;
446 : GrGLFunction<GrGLGetVertexArrayIntegervProc> fGetVertexArrayIntegerv;
447 : GrGLFunction<GrGLGetVertexArrayPointervProc> fGetVertexArrayPointerv;
448 : GrGLFunction<GrGLGetVertexArrayIntegeri_vProc> fGetVertexArrayIntegeri_v;
449 : GrGLFunction<GrGLGetVertexArrayPointeri_vProc> fGetVertexArrayPointeri_v;
450 : GrGLFunction<GrGLMapNamedBufferRangeProc> fMapNamedBufferRange;
451 : GrGLFunction<GrGLFlushMappedNamedBufferRangeProc> fFlushMappedNamedBufferRange;
452 : // OpenGL 3.1
453 : GrGLFunction<GrGLTextureBufferProc> fTextureBuffer;
454 :
455 : /* ARB_sync */
456 : GrGLFunction<GrGLFenceSyncProc> fFenceSync;
457 : GrGLFunction<GrGLClientWaitSyncProc> fClientWaitSync;
458 : GrGLFunction<GrGLWaitSyncProc> fWaitSync;
459 : GrGLFunction<GrGLDeleteSyncProc> fDeleteSync;
460 :
461 : /* KHR_debug */
462 : GrGLFunction<GrGLDebugMessageControlProc> fDebugMessageControl;
463 : GrGLFunction<GrGLDebugMessageInsertProc> fDebugMessageInsert;
464 : GrGLFunction<GrGLDebugMessageCallbackProc> fDebugMessageCallback;
465 : GrGLFunction<GrGLGetDebugMessageLogProc> fGetDebugMessageLog;
466 : GrGLFunction<GrGLPushDebugGroupProc> fPushDebugGroup;
467 : GrGLFunction<GrGLPopDebugGroupProc> fPopDebugGroup;
468 : GrGLFunction<GrGLObjectLabelProc> fObjectLabel;
469 :
470 : /* EXT_window_rectangles */
471 : GrGLFunction<GrGLWindowRectanglesProc> fWindowRectangles;
472 :
473 : /* EGL functions */
474 : GrGLFunction<GrEGLCreateImageProc> fEGLCreateImage;
475 : GrGLFunction<GrEGLDestroyImageProc> fEGLDestroyImage;
476 : } fFunctions;
477 :
478 : // This exists for internal testing.
479 0 : virtual void abandon() const {}
480 : };
481 :
482 : #endif
|