blob: 90c3de1caafa0fa85f125833f214f84ab6d1853e [file] [log] [blame]
bsalomon@google.com637d5e92012-05-07 21:33:56 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef GrGLFunctions_DEFINED
10#define GrGLFunctions_DEFINED
11
bsalomon2fc11d32015-10-19 09:03:23 -070012#include "GrGLTypes.h"
bsalomon9f2dc272016-02-08 07:22:17 -080013#include "../private/SkTLogic.h"
cdalton626e1ff2015-06-12 13:56:46 -070014
15extern "C" {
16
bsalomon@google.com637d5e92012-05-07 21:33:56 +000017///////////////////////////////////////////////////////////////////////////////
18
Mike Klein76343302017-06-22 13:15:13 -070019typedef GrGLvoid (* GrGLActiveTextureProc)(GrGLenum texture);
20typedef GrGLvoid (* GrGLAttachShaderProc)(GrGLuint program, GrGLuint shader);
21typedef GrGLvoid (* GrGLBeginQueryProc)(GrGLenum target, GrGLuint id);
22typedef GrGLvoid (* GrGLBindAttribLocationProc)(GrGLuint program, GrGLuint index, const char* name);
23typedef GrGLvoid (* GrGLBindBufferProc)(GrGLenum target, GrGLuint buffer);
24typedef GrGLvoid (* GrGLBindFramebufferProc)(GrGLenum target, GrGLuint framebuffer);
25typedef GrGLvoid (* GrGLBindRenderbufferProc)(GrGLenum target, GrGLuint renderbuffer);
26typedef GrGLvoid (* GrGLBindImageTextureProc)(GrGLuint unit, GrGLuint texture, GrGLint level, GrGLboolean layered, GrGLint layer, GrGLenum access, GrGLenum format);
27typedef GrGLvoid (* GrGLBindTextureProc)(GrGLenum target, GrGLuint texture);
28typedef GrGLvoid (* GrGLBindFragDataLocationProc)(GrGLuint program, GrGLuint colorNumber, const GrGLchar* name);
29typedef GrGLvoid (* GrGLBindFragDataLocationIndexedProc)(GrGLuint program, GrGLuint colorNumber, GrGLuint index, const GrGLchar * name);
30typedef GrGLvoid (* GrGLBindVertexArrayProc)(GrGLuint array);
31typedef GrGLvoid (* GrGLBlendBarrierProc)();
32typedef GrGLvoid (* GrGLBlendColorProc)(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha);
33typedef GrGLvoid (* GrGLBlendEquationProc)(GrGLenum mode);
34typedef GrGLvoid (* GrGLBlendFuncProc)(GrGLenum sfactor, GrGLenum dfactor);
35typedef GrGLvoid (* GrGLBlitFramebufferProc)(GrGLint srcX0, GrGLint srcY0, GrGLint srcX1, GrGLint srcY1, GrGLint dstX0, GrGLint dstY0, GrGLint dstX1, GrGLint dstY1, GrGLbitfield mask, GrGLenum filter);
36typedef GrGLvoid (* GrGLBufferDataProc)(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage);
37typedef GrGLvoid (* GrGLBufferSubDataProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid* data);
38typedef GrGLenum (* GrGLCheckFramebufferStatusProc)(GrGLenum target);
39typedef GrGLvoid (* GrGLClearProc)(GrGLbitfield mask);
40typedef GrGLvoid (* GrGLClearColorProc)(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha);
41typedef GrGLvoid (* GrGLClearStencilProc)(GrGLint s);
42typedef GrGLvoid (* GrGLClearTexImageProc)(GrGLuint texture, GrGLint level, GrGLenum format, GrGLenum type,const GrGLvoid * data);
43typedef GrGLvoid (* GrGLClearTexSubImageProc)(GrGLuint texture, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLenum format, GrGLenum type,const GrGLvoid * data);
44typedef GrGLvoid (* GrGLColorMaskProc)(GrGLboolean red, GrGLboolean green, GrGLboolean blue, GrGLboolean alpha);
45typedef GrGLvoid (* GrGLCompileShaderProc)(GrGLuint shader);
46typedef GrGLvoid (* GrGLCompressedTexImage2DProc)(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data);
47typedef GrGLvoid (* GrGLCompressedTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLsizei imageSize, const GrGLvoid* data);
48typedef GrGLvoid (* GrGLCopyTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
49typedef GrGLuint (* GrGLCreateProgramProc)();
50typedef GrGLuint (* GrGLCreateShaderProc)(GrGLenum type);
51typedef GrGLvoid (* GrGLCullFaceProc)(GrGLenum mode);
52typedef GrGLvoid (* GrGLDeleteBuffersProc)(GrGLsizei n, const GrGLuint* buffers);
53typedef GrGLvoid (* GrGLDeleteFramebuffersProc)(GrGLsizei n, const GrGLuint *framebuffers);
54typedef GrGLvoid (* GrGLDeleteProgramProc)(GrGLuint program);
55typedef GrGLvoid (* GrGLDeleteQueriesProc)(GrGLsizei n, const GrGLuint *ids);
56typedef GrGLvoid (* GrGLDeleteRenderbuffersProc)(GrGLsizei n, const GrGLuint *renderbuffers);
57typedef GrGLvoid (* GrGLDeleteShaderProc)(GrGLuint shader);
58typedef GrGLvoid (* GrGLDeleteTexturesProc)(GrGLsizei n, const GrGLuint* textures);
59typedef GrGLvoid (* GrGLDeleteVertexArraysProc)(GrGLsizei n, const GrGLuint *arrays);
60typedef GrGLvoid (* GrGLDepthMaskProc)(GrGLboolean flag);
61typedef GrGLvoid (* GrGLDisableProc)(GrGLenum cap);
62typedef GrGLvoid (* GrGLDisableVertexAttribArrayProc)(GrGLuint index);
63typedef GrGLvoid (* GrGLDrawArraysProc)(GrGLenum mode, GrGLint first, GrGLsizei count);
64typedef GrGLvoid (* GrGLDrawArraysInstancedProc)(GrGLenum mode, GrGLint first, GrGLsizei count, GrGLsizei primcount);
65typedef GrGLvoid (* GrGLDrawArraysIndirectProc)(GrGLenum mode, const GrGLvoid* indirect);
66typedef GrGLvoid (* GrGLDrawBufferProc)(GrGLenum mode);
67typedef GrGLvoid (* GrGLDrawBuffersProc)(GrGLsizei n, const GrGLenum* bufs);
68typedef GrGLvoid (* GrGLDrawElementsProc)(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices);
69typedef GrGLvoid (* GrGLDrawElementsInstancedProc)(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid *indices, GrGLsizei primcount);
70typedef GrGLvoid (* GrGLDrawElementsIndirectProc)(GrGLenum mode, GrGLenum type, const GrGLvoid* indirect);
71typedef GrGLvoid (* GrGLDrawRangeElementsProc)(GrGLenum mode, GrGLuint start, GrGLuint end, GrGLsizei count, GrGLenum type, const GrGLvoid* indices);
72typedef GrGLvoid (* GrGLEnableProc)(GrGLenum cap);
73typedef GrGLvoid (* GrGLEnableVertexAttribArrayProc)(GrGLuint index);
74typedef GrGLvoid (* GrGLEndQueryProc)(GrGLenum target);
75typedef GrGLvoid (* GrGLFinishProc)();
76typedef GrGLvoid (* GrGLFlushProc)();
77typedef GrGLvoid (* GrGLFlushMappedBufferRangeProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length);
78typedef GrGLvoid (* GrGLFramebufferRenderbufferProc)(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer);
79typedef GrGLvoid (* GrGLFramebufferTexture2DProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level);
80typedef GrGLvoid (* GrGLFramebufferTexture2DMultisampleProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level, GrGLsizei samples);
81typedef GrGLvoid (* GrGLFrontFaceProc)(GrGLenum mode);
82typedef GrGLvoid (* GrGLGenBuffersProc)(GrGLsizei n, GrGLuint* buffers);
83typedef GrGLvoid (* GrGLGenFramebuffersProc)(GrGLsizei n, GrGLuint *framebuffers);
84typedef GrGLvoid (* GrGLGenerateMipmapProc)(GrGLenum target);
85typedef GrGLvoid (* GrGLGenQueriesProc)(GrGLsizei n, GrGLuint *ids);
86typedef GrGLvoid (* GrGLGenRenderbuffersProc)(GrGLsizei n, GrGLuint *renderbuffers);
87typedef GrGLvoid (* GrGLGenTexturesProc)(GrGLsizei n, GrGLuint* textures);
88typedef GrGLvoid (* GrGLGenVertexArraysProc)(GrGLsizei n, GrGLuint *arrays);
89typedef GrGLvoid (* GrGLGetBufferParameterivProc)(GrGLenum target, GrGLenum pname, GrGLint* params);
90typedef GrGLenum (* GrGLGetErrorProc)();
91typedef GrGLvoid (* GrGLGetFramebufferAttachmentParameterivProc)(GrGLenum target, GrGLenum attachment, GrGLenum pname, GrGLint* params);
92typedef GrGLvoid (* GrGLGetIntegervProc)(GrGLenum pname, GrGLint* params);
93typedef GrGLvoid (* GrGLGetMultisamplefvProc)(GrGLenum pname, GrGLuint index, GrGLfloat* val);
94typedef GrGLvoid (* GrGLGetProgramInfoLogProc)(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, char* infolog);
95typedef GrGLvoid (* GrGLGetProgramivProc)(GrGLuint program, GrGLenum pname, GrGLint* params);
96typedef GrGLvoid (* GrGLGetQueryivProc)(GrGLenum GLtarget, GrGLenum pname, GrGLint *params);
97typedef GrGLvoid (* GrGLGetQueryObjecti64vProc)(GrGLuint id, GrGLenum pname, GrGLint64 *params);
98typedef GrGLvoid (* GrGLGetQueryObjectivProc)(GrGLuint id, GrGLenum pname, GrGLint *params);
99typedef GrGLvoid (* GrGLGetQueryObjectui64vProc)(GrGLuint id, GrGLenum pname, GrGLuint64 *params);
100typedef GrGLvoid (* GrGLGetQueryObjectuivProc)(GrGLuint id, GrGLenum pname, GrGLuint *params);
101typedef GrGLvoid (* GrGLGetRenderbufferParameterivProc)(GrGLenum target, GrGLenum pname, GrGLint* params);
102typedef GrGLvoid (* GrGLGetShaderInfoLogProc)(GrGLuint shader, GrGLsizei bufsize, GrGLsizei* length, char* infolog);
103typedef GrGLvoid (* GrGLGetShaderivProc)(GrGLuint shader, GrGLenum pname, GrGLint* params);
104typedef GrGLvoid (* GrGLGetShaderPrecisionFormatProc)(GrGLenum shadertype, GrGLenum precisiontype, GrGLint *range, GrGLint *precision);
105typedef const GrGLubyte* (* GrGLGetStringProc)(GrGLenum name);
106typedef const GrGLubyte* (* GrGLGetStringiProc)(GrGLenum name, GrGLuint index);
107typedef GrGLvoid (* GrGLGetTexLevelParameterivProc)(GrGLenum target, GrGLint level, GrGLenum pname, GrGLint* params);
108typedef GrGLint (* GrGLGetUniformLocationProc)(GrGLuint program, const char* name);
109typedef GrGLvoid (* GrGLInsertEventMarkerProc)(GrGLsizei length, const char* marker);
110typedef GrGLvoid (* GrGLInvalidateBufferDataProc)(GrGLuint buffer);
111typedef GrGLvoid (* GrGLInvalidateBufferSubDataProc)(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr length);
112typedef GrGLvoid (* GrGLInvalidateFramebufferProc)(GrGLenum target, GrGLsizei numAttachments, const GrGLenum *attachments);
113typedef GrGLvoid (* GrGLInvalidateSubFramebufferProc)(GrGLenum target, GrGLsizei numAttachments, const GrGLenum *attachments, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
114typedef GrGLvoid (* GrGLInvalidateTexImageProc)(GrGLuint texture, GrGLint level);
115typedef GrGLvoid (* GrGLInvalidateTexSubImageProc)(GrGLuint texture, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth);
116typedef GrGLboolean (* GrGLIsTextureProc)(GrGLuint texture);
117typedef GrGLvoid (* GrGLLineWidthProc)(GrGLfloat width);
118typedef GrGLvoid (* GrGLLinkProgramProc)(GrGLuint program);
119typedef GrGLvoid* (* GrGLMapBufferProc)(GrGLenum target, GrGLenum access);
120typedef GrGLvoid* (* GrGLMapBufferRangeProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length, GrGLbitfield access);
121typedef GrGLvoid* (* GrGLMapBufferSubDataProc)(GrGLuint target, GrGLintptr offset, GrGLsizeiptr size, GrGLenum access);
122typedef GrGLvoid* (* GrGLMapTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLenum access);
123typedef GrGLvoid* (* GrGLMemoryBarrierProc)(GrGLbitfield barriers);
124typedef GrGLvoid* (* GrGLMemoryBarrierByRegionProc)(GrGLbitfield barriers);
125typedef GrGLvoid (* GrGLPixelStoreiProc)(GrGLenum pname, GrGLint param);
126typedef GrGLvoid (* GrGLPolygonModeProc)(GrGLenum face, GrGLenum mode);
127typedef GrGLvoid (* GrGLPopGroupMarkerProc)();
128typedef GrGLvoid (* GrGLPushGroupMarkerProc)(GrGLsizei length, const char* marker);
129typedef GrGLvoid (* GrGLQueryCounterProc)(GrGLuint id, GrGLenum target);
130typedef GrGLvoid (* GrGLRasterSamplesProc)(GrGLuint samples, GrGLboolean fixedsamplelocations);
131typedef GrGLvoid (* GrGLReadBufferProc)(GrGLenum src);
132typedef GrGLvoid (* GrGLReadPixelsProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels);
133typedef GrGLvoid (* GrGLRenderbufferStorageProc)(GrGLenum target, GrGLenum internalformat, GrGLsizei width, GrGLsizei height);
134typedef GrGLvoid (* GrGLRenderbufferStorageMultisampleProc)(GrGLenum target, GrGLsizei samples, GrGLenum internalformat, GrGLsizei width, GrGLsizei height);
135typedef GrGLvoid (* GrGLResolveMultisampleFramebufferProc)();
136typedef GrGLvoid (* GrGLScissorProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
kkinnunen0adfffb2015-10-13 12:58:37 -0700137// GL_CHROMIUM_bind_uniform_location
Mike Klein76343302017-06-22 13:15:13 -0700138typedef GrGLvoid (* GrGLBindUniformLocationProc)(GrGLuint program, GrGLint location, const char* name);
commit-bot@chromium.orgd3baf202013-11-07 22:06:08 +0000139
bsalomon@google.com26fb61a2013-02-28 19:26:04 +0000140#if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE
Mike Klein76343302017-06-22 13:15:13 -0700141typedef GrGLvoid (* GrGLShaderSourceProc)(GrGLuint shader, GrGLsizei count, const char* const * str, const GrGLint* length);
senorblanco@chromium.orge0d44ff2012-11-19 20:43:10 +0000142#else
Mike Klein76343302017-06-22 13:15:13 -0700143typedef GrGLvoid (* GrGLShaderSourceProc)(GrGLuint shader, GrGLsizei count, const char** str, const GrGLint* length);
senorblanco@chromium.orge0d44ff2012-11-19 20:43:10 +0000144#endif
Mike Klein76343302017-06-22 13:15:13 -0700145typedef GrGLvoid (* GrGLStencilFuncProc)(GrGLenum func, GrGLint ref, GrGLuint mask);
146typedef GrGLvoid (* GrGLStencilFuncSeparateProc)(GrGLenum face, GrGLenum func, GrGLint ref, GrGLuint mask);
147typedef GrGLvoid (* GrGLStencilMaskProc)(GrGLuint mask);
148typedef GrGLvoid (* GrGLStencilMaskSeparateProc)(GrGLenum face, GrGLuint mask);
149typedef GrGLvoid (* GrGLStencilOpProc)(GrGLenum fail, GrGLenum zfail, GrGLenum zpass);
150typedef GrGLvoid (* GrGLStencilOpSeparateProc)(GrGLenum face, GrGLenum fail, GrGLenum zfail, GrGLenum zpass);
151typedef GrGLvoid (* GrGLTexBufferProc)(GrGLenum target, GrGLenum internalformat, GrGLuint buffer);
152typedef GrGLvoid (* GrGLTexBufferRangeProc)(GrGLenum target, GrGLenum internalformat, GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr size);
153typedef GrGLvoid (* GrGLTexImage2DProc)(GrGLenum target, GrGLint level, GrGLint internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid* pixels);
154typedef GrGLvoid (* GrGLTexParameteriProc)(GrGLenum target, GrGLenum pname, GrGLint param);
155typedef GrGLvoid (* GrGLTexParameterivProc)(GrGLenum target, GrGLenum pname, const GrGLint* params);
156typedef GrGLvoid (* GrGLTexStorage2DProc)(GrGLenum target, GrGLsizei levels, GrGLenum internalformat, GrGLsizei width, GrGLsizei height);
157typedef GrGLvoid (* GrGLDiscardFramebufferProc)(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments);
158typedef GrGLvoid (* GrGLTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, const GrGLvoid* pixels);
159typedef GrGLvoid (* GrGLTextureBarrierProc)();
160typedef GrGLvoid (* GrGLUniform1fProc)(GrGLint location, GrGLfloat v0);
161typedef GrGLvoid (* GrGLUniform1iProc)(GrGLint location, GrGLint v0);
162typedef GrGLvoid (* GrGLUniform1fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v);
163typedef GrGLvoid (* GrGLUniform1ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v);
164typedef GrGLvoid (* GrGLUniform2fProc)(GrGLint location, GrGLfloat v0, GrGLfloat v1);
165typedef GrGLvoid (* GrGLUniform2iProc)(GrGLint location, GrGLint v0, GrGLint v1);
166typedef GrGLvoid (* GrGLUniform2fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v);
167typedef GrGLvoid (* GrGLUniform2ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v);
168typedef GrGLvoid (* GrGLUniform3fProc)(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2);
169typedef GrGLvoid (* GrGLUniform3iProc)(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2);
170typedef GrGLvoid (* GrGLUniform3fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v);
171typedef GrGLvoid (* GrGLUniform3ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v);
172typedef GrGLvoid (* GrGLUniform4fProc)(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2, GrGLfloat v3);
173typedef GrGLvoid (* GrGLUniform4iProc)(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2, GrGLint v3);
174typedef GrGLvoid (* GrGLUniform4fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v);
175typedef GrGLvoid (* GrGLUniform4ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v);
176typedef GrGLvoid (* GrGLUniformMatrix2fvProc)(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value);
177typedef GrGLvoid (* GrGLUniformMatrix3fvProc)(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value);
178typedef GrGLvoid (* GrGLUniformMatrix4fvProc)(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value);
179typedef GrGLboolean (* GrGLUnmapBufferProc)(GrGLenum target);
180typedef GrGLvoid (* GrGLUnmapBufferSubDataProc)(const GrGLvoid* mem);
181typedef GrGLvoid (* GrGLUnmapTexSubImage2DProc)(const GrGLvoid* mem);
182typedef GrGLvoid (* GrGLUseProgramProc)(GrGLuint program);
183typedef GrGLvoid (* GrGLVertexAttrib1fProc)(GrGLuint indx, const GrGLfloat value);
184typedef GrGLvoid (* GrGLVertexAttrib2fvProc)(GrGLuint indx, const GrGLfloat* values);
185typedef GrGLvoid (* GrGLVertexAttrib3fvProc)(GrGLuint indx, const GrGLfloat* values);
186typedef GrGLvoid (* GrGLVertexAttrib4fvProc)(GrGLuint indx, const GrGLfloat* values);
187typedef GrGLvoid (* GrGLVertexAttribDivisorProc)(GrGLuint index, GrGLuint divisor);
188typedef GrGLvoid (* GrGLVertexAttribIPointerProc)(GrGLuint indx, GrGLint size, GrGLenum type, GrGLsizei stride, const GrGLvoid* ptr);
189typedef GrGLvoid (* GrGLVertexAttribPointerProc)(GrGLuint indx, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, const GrGLvoid* ptr);
190typedef GrGLvoid (* GrGLViewportProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
bsalomon@google.comfe11cb62012-06-06 15:17:54 +0000191
cdalton626e1ff2015-06-12 13:56:46 -0700192/* GL_NV_path_rendering */
Mike Klein76343302017-06-22 13:15:13 -0700193typedef GrGLvoid (* GrGLMatrixLoadfProc)(GrGLenum matrixMode, const GrGLfloat* m);
194typedef GrGLvoid (* GrGLMatrixLoadIdentityProc)(GrGLenum);
195typedef GrGLvoid (* GrGLPathCommandsProc)(GrGLuint path, GrGLsizei numCommands, const GrGLubyte *commands, GrGLsizei numCoords, GrGLenum coordType, const GrGLvoid *coords);
196typedef GrGLvoid (* GrGLPathParameteriProc)(GrGLuint path, GrGLenum pname, GrGLint value);
197typedef GrGLvoid (* GrGLPathParameterfProc)(GrGLuint path, GrGLenum pname, GrGLfloat value);
198typedef GrGLuint (* GrGLGenPathsProc)(GrGLsizei range);
199typedef GrGLvoid (* GrGLDeletePathsProc)(GrGLuint path, GrGLsizei range);
200typedef GrGLboolean (* GrGLIsPathProc)(GrGLuint path);
201typedef GrGLvoid (* GrGLPathStencilFuncProc)(GrGLenum func, GrGLint ref, GrGLuint mask);
202typedef GrGLvoid (* GrGLStencilFillPathProc)(GrGLuint path, GrGLenum fillMode, GrGLuint mask);
203typedef GrGLvoid (* GrGLStencilStrokePathProc)(GrGLuint path, GrGLint reference, GrGLuint mask);
204typedef GrGLvoid (* GrGLStencilFillPathInstancedProc)(GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, GrGLuint pathBase, GrGLenum fillMode, GrGLuint mask, GrGLenum transformType, const GrGLfloat *transformValues);
205typedef GrGLvoid (* GrGLStencilStrokePathInstancedProc)(GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, GrGLuint pathBase, GrGLint reference, GrGLuint mask, GrGLenum transformType, const GrGLfloat *transformValues);
206typedef GrGLvoid (* GrGLCoverFillPathProc)(GrGLuint path, GrGLenum coverMode);
207typedef GrGLvoid (* GrGLCoverStrokePathProc)(GrGLuint name, GrGLenum coverMode);
208typedef GrGLvoid (* GrGLCoverFillPathInstancedProc)(GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, GrGLuint pathBase, GrGLenum coverMode, GrGLenum transformType, const GrGLfloat *transformValues);
209typedef GrGLvoid (* GrGLCoverStrokePathInstancedProc)(GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, GrGLuint pathBase, GrGLenum coverMode, GrGLenum transformType, const GrGLfloat* transformValues);
cdalton626e1ff2015-06-12 13:56:46 -0700210// NV_path_rendering v1.2
Mike Klein76343302017-06-22 13:15:13 -0700211typedef GrGLvoid (* GrGLStencilThenCoverFillPathProc)(GrGLuint path, GrGLenum fillMode, GrGLuint mask, GrGLenum coverMode);
212typedef GrGLvoid (* GrGLStencilThenCoverStrokePathProc)(GrGLuint path, GrGLint reference, GrGLuint mask, GrGLenum coverMode);
213typedef GrGLvoid (* GrGLStencilThenCoverFillPathInstancedProc)(GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, GrGLuint pathBase, GrGLenum fillMode, GrGLuint mask, GrGLenum coverMode, GrGLenum transformType, const GrGLfloat *transformValues);
214typedef GrGLvoid (* GrGLStencilThenCoverStrokePathInstancedProc)(GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, GrGLuint pathBase, GrGLint reference, GrGLuint mask, GrGLenum coverMode, GrGLenum transformType, const GrGLfloat *transformValues);
cdalton626e1ff2015-06-12 13:56:46 -0700215// NV_path_rendering v1.3
Mike Klein76343302017-06-22 13:15:13 -0700216typedef GrGLvoid (* GrGLProgramPathFragmentInputGenProc)(GrGLuint program, GrGLint location, GrGLenum genMode, GrGLint components,const GrGLfloat *coeffs);
kkinnunen6bb6d402015-07-14 10:59:23 -0700217// CHROMIUM_path_rendering
Mike Klein76343302017-06-22 13:15:13 -0700218typedef GrGLvoid (* GrGLBindFragmentInputLocationProc)(GrGLuint program, GrGLint location, const GrGLchar* name);
cdalton626e1ff2015-06-12 13:56:46 -0700219
220/* ARB_program_interface_query */
Mike Klein76343302017-06-22 13:15:13 -0700221typedef GrGLint (* GrGLGetProgramResourceLocationProc)(GrGLuint program, GrGLenum programInterface, const GrGLchar *name);
cdalton626e1ff2015-06-12 13:56:46 -0700222
223/* GL_NV_framebuffer_mixed_samples */
Mike Klein76343302017-06-22 13:15:13 -0700224typedef GrGLvoid (* GrGLCoverageModulationProc)(GrGLenum components);
cdalton626e1ff2015-06-12 13:56:46 -0700225
cdalton06604b92016-02-05 10:09:51 -0800226/* EXT_multi_draw_indirect */
Mike Klein76343302017-06-22 13:15:13 -0700227typedef GrGLvoid (* GrGLMultiDrawArraysIndirectProc)(GrGLenum mode, const GrGLvoid *indirect, GrGLsizei drawcount, GrGLsizei stride);
228typedef GrGLvoid (* GrGLMultiDrawElementsIndirectProc)(GrGLenum mode, GrGLenum type, const GrGLvoid *indirect, GrGLsizei drawcount, GrGLsizei stride);
cdalton626e1ff2015-06-12 13:56:46 -0700229
230/* NV_bindless_texture */
Mike Klein76343302017-06-22 13:15:13 -0700231typedef GrGLuint64 (* GrGLGetTextureHandleProc)(GrGLuint texture);
232typedef GrGLuint64 (* GrGLGetTextureSamplerHandleProc)(GrGLuint texture, GrGLuint sampler);
233typedef GrGLvoid (* GrGLMakeTextureHandleResidentProc)(GrGLuint64 handle);
234typedef GrGLvoid (* GrGLMakeTextureHandleNonResidentProc)(GrGLuint64 handle);
235typedef GrGLuint64 (* GrGLGetImageHandleProc)(GrGLuint texture, GrGLint level, GrGLboolean layered, GrGLint layer, GrGLint format);
236typedef GrGLvoid (* GrGLMakeImageHandleResidentProc)(GrGLuint64 handle, GrGLenum access);
237typedef GrGLvoid (* GrGLMakeImageHandleNonResidentProc)(GrGLuint64 handle);
238typedef GrGLboolean (* GrGLIsTextureHandleResidentProc)(GrGLuint64 handle);
239typedef GrGLboolean (* GrGLIsImageHandleResidentProc)(GrGLuint64 handle);
240typedef GrGLvoid (* GrGLUniformHandleui64Proc)(GrGLint location, GrGLuint64 v0);
241typedef GrGLvoid (* GrGLUniformHandleui64vProc)(GrGLint location, GrGLsizei count, const GrGLuint64 *value);
242typedef GrGLvoid (* GrGLProgramUniformHandleui64Proc)(GrGLuint program, GrGLint location, GrGLuint64 v0);
243typedef GrGLvoid (* GrGLProgramUniformHandleui64vProc)(GrGLuint program, GrGLint location, GrGLsizei count, const GrGLuint64 *value);
cdalton626e1ff2015-06-12 13:56:46 -0700244
ethannicholas28ef4452016-03-25 09:26:03 -0700245/* ARB_sample_shading */
Mike Klein76343302017-06-22 13:15:13 -0700246typedef GrGLvoid (* GrGLMinSampleShadingProc)(GrGLfloat value);
ethannicholas28ef4452016-03-25 09:26:03 -0700247
cdalton626e1ff2015-06-12 13:56:46 -0700248/* EXT_direct_state_access */
249// (In the future some of these methods may be omitted)
Mike Klein76343302017-06-22 13:15:13 -0700250typedef GrGLvoid (* GrGLTextureParameteriProc)(GrGLuint texture, GrGLenum target, GrGLenum pname, GrGLint param);
251typedef GrGLvoid (* GrGLTextureParameterivProc)(GrGLuint texture, GrGLenum target, GrGLenum pname, const GrGLint *param);
252typedef GrGLvoid (* GrGLTextureParameterfProc)(GrGLuint texture, GrGLenum target, GrGLenum pname, float param);
253typedef GrGLvoid (* GrGLTextureParameterfvProc)(GrGLuint texture, GrGLenum target, GrGLenum pname, const float *param);
254typedef GrGLvoid (* GrGLTextureImage1DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint GrGLinternalformat, GrGLsizei width, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid *pixels);
255typedef GrGLvoid (* GrGLTextureImage2DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint GrGLinternalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid *pixels);
256typedef GrGLvoid (* GrGLTextureSubImage1DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLsizei width, GrGLenum format, GrGLenum type, const GrGLvoid *pixels);
257typedef GrGLvoid (* GrGLTextureSubImage2DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, const GrGLvoid *pixels);
258typedef GrGLvoid (* GrGLCopyTextureImage1DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum GrGLinternalformat, GrGLint x, GrGLint y, GrGLsizei width, GrGLint border);
259typedef GrGLvoid (* GrGLCopyTextureImage2DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum GrGLinternalformat, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLint border);
260typedef GrGLvoid (* GrGLCopyTextureSubImage1DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint x, GrGLint y, GrGLsizei width);
261typedef GrGLvoid (* GrGLCopyTextureSubImage2DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
262typedef GrGLvoid (* GrGLGetTextureImageProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum format, GrGLenum type, GrGLvoid *pixels);
263typedef GrGLvoid (* GrGLGetTextureParameterfvProc)(GrGLuint texture, GrGLenum target, GrGLenum pname, float *params);
264typedef GrGLvoid (* GrGLGetTextureParameterivProc)(GrGLuint texture, GrGLenum target, GrGLenum pname, GrGLint *params);
265typedef GrGLvoid (* GrGLGetTextureLevelParameterfvProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum pname, float *params);
266typedef GrGLvoid (* GrGLGetTextureLevelParameterivProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum pname, GrGLint *params);
cdalton626e1ff2015-06-12 13:56:46 -0700267// OpenGL 1.2
Mike Klein76343302017-06-22 13:15:13 -0700268typedef GrGLvoid (* GrGLTextureImage3DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint GrGLinternalformat, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid *pixels);
269typedef GrGLvoid (* GrGLTextureSubImage3DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLenum format, GrGLenum type, const GrGLvoid *pixels);
270typedef GrGLvoid (* GrGLCopyTextureSubImage3DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
271typedef GrGLvoid (* GrGLCompressedTextureImage3DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum GrGLinternalformat, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLint border, GrGLsizei imageSize, const GrGLvoid *data);
272typedef GrGLvoid (* GrGLCompressedTextureImage2DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum GrGLinternalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid *data);
273typedef GrGLvoid (* GrGLCompressedTextureImage1DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLenum GrGLinternalformat, GrGLsizei width, GrGLint border, GrGLsizei imageSize, const GrGLvoid *data);
274typedef GrGLvoid (* GrGLCompressedTextureSubImage3DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLenum format, GrGLsizei imageSize, const GrGLvoid *data);
275typedef GrGLvoid (* GrGLCompressedTextureSubImage2DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLsizei imageSize, const GrGLvoid *data);
276typedef GrGLvoid (* GrGLCompressedTextureSubImage1DProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLint xoffset, GrGLsizei width, GrGLenum format, GrGLsizei imageSize, const GrGLvoid *data);
277typedef GrGLvoid (* GrGLGetCompressedTextureImageProc)(GrGLuint texture, GrGLenum target, GrGLint level, GrGLvoid *img);
cdalton626e1ff2015-06-12 13:56:46 -0700278// OpenGL 1.5
Mike Klein76343302017-06-22 13:15:13 -0700279typedef GrGLvoid (* GrGLNamedBufferDataProc)(GrGLuint buffer, GrGLsizeiptr size, const GrGLvoid *data, GrGLenum usage);
280typedef GrGLvoid (* GrGLNamedBufferSubDataProc)(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid *data);
281typedef GrGLvoid* (* GrGLMapNamedBufferProc)(GrGLuint buffer, GrGLenum access);
282typedef GrGLboolean (* GrGLUnmapNamedBufferProc)(GrGLuint buffer);
283typedef GrGLvoid (* GrGLGetNamedBufferParameterivProc)(GrGLuint buffer, GrGLenum pname, GrGLint *params);
284typedef GrGLvoid (* GrGLGetNamedBufferPointervProc)(GrGLuint buffer, GrGLenum pname, GrGLvoid* *params);
285typedef GrGLvoid (* GrGLGetNamedBufferSubDataProc)(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr size, GrGLvoid *data);
cdalton626e1ff2015-06-12 13:56:46 -0700286// OpenGL 2.0
Mike Klein76343302017-06-22 13:15:13 -0700287typedef GrGLvoid (* GrGLProgramUniform1fProc)(GrGLuint program, GrGLint location, float v0);
288typedef GrGLvoid (* GrGLProgramUniform2fProc)(GrGLuint program, GrGLint location, float v0, float v1);
289typedef GrGLvoid (* GrGLProgramUniform3fProc)(GrGLuint program, GrGLint location, float v0, float v1, float v2);
290typedef GrGLvoid (* GrGLProgramUniform4fProc)(GrGLuint program, GrGLint location, float v0, float v1, float v2, float v3);
291typedef GrGLvoid (* GrGLProgramUniform1iProc)(GrGLuint program, GrGLint location, GrGLint v0);
292typedef GrGLvoid (* GrGLProgramUniform2iProc)(GrGLuint program, GrGLint location, GrGLint v0, GrGLint v1);
293typedef GrGLvoid (* GrGLProgramUniform3iProc)(GrGLuint program, GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2);
294typedef GrGLvoid (* GrGLProgramUniform4iProc)(GrGLuint program, GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2, GrGLint v3);
295typedef GrGLvoid (* GrGLProgramUniform1fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, const float *value);
296typedef GrGLvoid (* GrGLProgramUniform2fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, const float *value);
297typedef GrGLvoid (* GrGLProgramUniform3fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, const float *value);
298typedef GrGLvoid (* GrGLProgramUniform4fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, const float *value);
299typedef GrGLvoid (* GrGLProgramUniform1ivProc)(GrGLuint program, GrGLint location, GrGLsizei count, const GrGLint *value);
300typedef GrGLvoid (* GrGLProgramUniform2ivProc)(GrGLuint program, GrGLint location, GrGLsizei count, const GrGLint *value);
301typedef GrGLvoid (* GrGLProgramUniform3ivProc)(GrGLuint program, GrGLint location, GrGLsizei count, const GrGLint *value);
302typedef GrGLvoid (* GrGLProgramUniform4ivProc)(GrGLuint program, GrGLint location, GrGLsizei count, const GrGLint *value);
303typedef GrGLvoid (* GrGLProgramUniformMatrix2fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
304typedef GrGLvoid (* GrGLProgramUniformMatrix3fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
305typedef GrGLvoid (* GrGLProgramUniformMatrix4fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
cdalton626e1ff2015-06-12 13:56:46 -0700306// OpenGL 2.1
Mike Klein76343302017-06-22 13:15:13 -0700307typedef GrGLvoid (* GrGLProgramUniformMatrix2x3fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
308typedef GrGLvoid (* GrGLProgramUniformMatrix3x2fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
309typedef GrGLvoid (* GrGLProgramUniformMatrix2x4fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
310typedef GrGLvoid (* GrGLProgramUniformMatrix4x2fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
311typedef GrGLvoid (* GrGLProgramUniformMatrix3x4fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
312typedef GrGLvoid (* GrGLProgramUniformMatrix4x3fvProc)(GrGLuint program, GrGLint location, GrGLsizei count, GrGLboolean transpose, const float *value);
cdalton626e1ff2015-06-12 13:56:46 -0700313// OpenGL 3.0
Mike Klein76343302017-06-22 13:15:13 -0700314typedef GrGLvoid (* GrGLNamedRenderbufferStorageProc)(GrGLuint renderbuffer, GrGLenum GrGLinternalformat, GrGLsizei width, GrGLsizei height);
315typedef GrGLvoid (* GrGLGetNamedRenderbufferParameterivProc)(GrGLuint renderbuffer, GrGLenum pname, GrGLint *params);
316typedef GrGLvoid (* GrGLNamedRenderbufferStorageMultisampleProc)(GrGLuint renderbuffer, GrGLsizei samples, GrGLenum GrGLinternalformat, GrGLsizei width, GrGLsizei height);
317typedef GrGLenum (* GrGLCheckNamedFramebufferStatusProc)(GrGLuint framebuffer, GrGLenum target);
318typedef GrGLvoid (* GrGLNamedFramebufferTexture1DProc)(GrGLuint framebuffer, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level);
319typedef GrGLvoid (* GrGLNamedFramebufferTexture2DProc)(GrGLuint framebuffer, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level);
320typedef GrGLvoid (* GrGLNamedFramebufferTexture3DProc)(GrGLuint framebuffer, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level, GrGLint zoffset);
321typedef GrGLvoid (* GrGLNamedFramebufferRenderbufferProc)(GrGLuint framebuffer, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer);
322typedef GrGLvoid (* GrGLGetNamedFramebufferAttachmentParameterivProc)(GrGLuint framebuffer, GrGLenum attachment, GrGLenum pname, GrGLint *params);
323typedef GrGLvoid (* GrGLGenerateTextureMipmapProc)(GrGLuint texture, GrGLenum target);
324typedef GrGLvoid (* GrGLFramebufferDrawBufferProc)(GrGLuint framebuffer, GrGLenum mode);
325typedef GrGLvoid (* GrGLFramebufferDrawBuffersProc)(GrGLuint framebuffer, GrGLsizei n, const GrGLenum *bufs);
326typedef GrGLvoid (* GrGLFramebufferReadBufferProc)(GrGLuint framebuffer, GrGLenum mode);
327typedef GrGLvoid (* GrGLGetFramebufferParameterivProc)(GrGLuint framebuffer, GrGLenum pname, GrGLint *param);
328typedef GrGLvoid (* GrGLNamedCopyBufferSubDataProc)(GrGLuint readBuffer, GrGLuint writeBuffer, GrGLintptr readOffset, GrGLintptr writeOffset, GrGLsizeiptr size);
329typedef GrGLvoid (* GrGLVertexArrayVertexOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLint size, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
330typedef GrGLvoid (* GrGLVertexArrayColorOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLint size, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
331typedef GrGLvoid (* GrGLVertexArrayEdgeFlagOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLsizei stride, GrGLintptr offset);
332typedef GrGLvoid (* GrGLVertexArrayIndexOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
333typedef GrGLvoid (* GrGLVertexArrayNormalOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
334typedef GrGLvoid (* GrGLVertexArrayTexCoordOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLint size, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
335typedef GrGLvoid (* GrGLVertexArrayMultiTexCoordOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLenum texunit, GrGLint size, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
336typedef GrGLvoid (* GrGLVertexArrayFogCoordOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
337typedef GrGLvoid (* GrGLVertexArraySecondaryColorOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLint size, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
338typedef GrGLvoid (* GrGLVertexArrayVertexAttribOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLuint index, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, GrGLintptr offset);
339typedef GrGLvoid (* GrGLVertexArrayVertexAttribIOffsetProc)(GrGLuint vaobj, GrGLuint buffer, GrGLuint index, GrGLint size, GrGLenum type, GrGLsizei stride, GrGLintptr offset);
340typedef GrGLvoid (* GrGLEnableVertexArrayProc)(GrGLuint vaobj, GrGLenum array);
341typedef GrGLvoid (* GrGLDisableVertexArrayProc)(GrGLuint vaobj, GrGLenum array);
342typedef GrGLvoid (* GrGLEnableVertexArrayAttribProc)(GrGLuint vaobj, GrGLuint index);
343typedef GrGLvoid (* GrGLDisableVertexArrayAttribProc)(GrGLuint vaobj, GrGLuint index);
344typedef GrGLvoid (* GrGLGetVertexArrayIntegervProc)(GrGLuint vaobj, GrGLenum pname, GrGLint *param);
345typedef GrGLvoid (* GrGLGetVertexArrayPointervProc)(GrGLuint vaobj, GrGLenum pname, GrGLvoid **param);
346typedef GrGLvoid (* GrGLGetVertexArrayIntegeri_vProc)(GrGLuint vaobj, GrGLuint index, GrGLenum pname, GrGLint *param);
347typedef GrGLvoid (* GrGLGetVertexArrayPointeri_vProc)(GrGLuint vaobj, GrGLuint index, GrGLenum pname, GrGLvoid **param);
348typedef GrGLvoid* (* GrGLMapNamedBufferRangeProc)(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr length, GrGLbitfield access);
349typedef GrGLvoid (* GrGLFlushMappedNamedBufferRangeProc)(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr length);
cdaltonc04ce672016-03-11 14:07:38 -0800350// OpenGL 3.1
Mike Klein76343302017-06-22 13:15:13 -0700351typedef GrGLvoid (* GrGLTextureBufferProc)(GrGLuint texture, GrGLenum target, GrGLenum internalformat, GrGLuint buffer);
cdalton626e1ff2015-06-12 13:56:46 -0700352
jvanverth84741b32016-09-30 08:39:02 -0700353/* ARB_sync */
Mike Klein76343302017-06-22 13:15:13 -0700354typedef GrGLsync (* GrGLFenceSyncProc)(GrGLenum condition, GrGLbitfield flags);
355typedef GrGLboolean (* GrGLIsSyncProc)(GrGLsync sync);
356typedef GrGLenum (* GrGLClientWaitSyncProc)(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout);
357typedef GrGLvoid (* GrGLWaitSyncProc)(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout);
358typedef GrGLvoid (* GrGLDeleteSyncProc)(GrGLsync sync);
jvanverth84741b32016-09-30 08:39:02 -0700359
Greg Daniel81e7bf82017-07-19 14:47:42 -0400360/* ARB_internalformat_query */
Mike Klein76343302017-06-22 13:15:13 -0700361typedef GrGLvoid (* GrGLGetInternalformativProc)(GrGLenum target, GrGLenum internalformat, GrGLenum pname, GrGLsizei bufSize, GrGLint *params);
Greg Daniel81e7bf82017-07-19 14:47:42 -0400362
cdalton626e1ff2015-06-12 13:56:46 -0700363/* KHR_debug */
Mike Klein76343302017-06-22 13:15:13 -0700364typedef GrGLvoid (* GrGLDebugMessageControlProc)(GrGLenum source, GrGLenum type, GrGLenum severity, GrGLsizei count, const GrGLuint* ids, GrGLboolean enabled);
365typedef GrGLvoid (* GrGLDebugMessageInsertProc)(GrGLenum source, GrGLenum type, GrGLuint id, GrGLenum severity, GrGLsizei length, const GrGLchar* buf);
366typedef GrGLvoid (* GrGLDebugMessageCallbackProc)(GRGLDEBUGPROC callback, const GrGLvoid* userParam);
367typedef GrGLuint (* GrGLGetDebugMessageLogProc)(GrGLuint count, GrGLsizei bufSize, GrGLenum* sources, GrGLenum* types, GrGLuint* ids, GrGLenum* severities, GrGLsizei* lengths, GrGLchar* messageLog);
368typedef GrGLvoid (* GrGLPushDebugGroupProc)(GrGLenum source, GrGLuint id, GrGLsizei length, const GrGLchar * message);
369typedef GrGLvoid (* GrGLPopDebugGroupProc)();
370typedef GrGLvoid (* GrGLObjectLabelProc)(GrGLenum identifier, GrGLuint name, GrGLsizei length, const GrGLchar *label);
cdalton626e1ff2015-06-12 13:56:46 -0700371
csmartdalton9bc11872016-08-09 12:42:47 -0700372/** EXT_window_rectangles */
Mike Klein76343302017-06-22 13:15:13 -0700373typedef GrGLvoid (* GrGLWindowRectanglesProc)(GrGLenum mode, GrGLsizei count, const GrGLint box[]);
csmartdalton9bc11872016-08-09 12:42:47 -0700374
bsalomonb1a32ad2015-11-16 06:48:44 -0800375/** EGL functions */
Mike Klein76343302017-06-22 13:15:13 -0700376typedef const char* (* GrEGLQueryStringProc)(GrEGLDisplay dpy, GrEGLint name);
377typedef GrEGLDisplay (* GrEGLGetCurrentDisplayProc)();
378typedef GrEGLImage (* GrEGLCreateImageProc)(GrEGLDisplay dpy, GrEGLContext ctx, GrEGLenum target, GrEGLClientBuffer buffer, const GrEGLint *attrib_list);
379typedef GrEGLBoolean (* GrEGLDestroyImageProc)(GrEGLDisplay dpy, GrEGLImage image);
bsalomon@google.com637d5e92012-05-07 21:33:56 +0000380} // extern "C"
381
Mike Klein76343302017-06-22 13:15:13 -0700382// This is a lighter-weight std::function, trying to reduce code size and compile time
383// by only supporting the exact use cases we require.
384template <typename T> class GrGLFunction;
385
386template <typename R, typename... Args>
387class GrGLFunction<R(*)(Args...)>{
388public:
389 // Construct empty.
390 GrGLFunction() : fCall(nullptr) {}
391 GrGLFunction(std::nullptr_t) : GrGLFunction() {}
392
393 // Construct from a simple function pointer.
394 GrGLFunction(R (GR_GL_FUNCTION_TYPE* fn_ptr)(Args...)) : GrGLFunction() {
395 if (fn_ptr) {
396 memcpy(fBuf, &fn_ptr, sizeof(fn_ptr));
397 fCall = [](const void* buf, Args... args) {
398 auto fn_ptr = *(R (GR_GL_FUNCTION_TYPE**)(Args...))buf;
399 return fn_ptr(args...);
400 };
401 }
402 }
403
404 // Construct from a small closure.
405 template <typename Closure>
406 GrGLFunction(Closure closure) : GrGLFunction() {
407 static_assert(sizeof(Closure) <= sizeof(fBuf), "fBuf is too small");
408 #if defined(__APPLE__) // I am having serious trouble getting these to work with all STLs...
409 static_assert(std::is_trivially_copyable<Closure>::value, "");
410 static_assert(std::is_trivially_destructible<Closure>::value, "");
411 #endif
412
413 memcpy(fBuf, &closure, sizeof(closure));
414 fCall = [](const void* buf, Args... args) {
415 auto closure = (const Closure*)buf;
416 return (*closure)(args...);
417 };
418 }
419
420 R operator()(Args... args) const {
421 SkASSERT(fCall);
422 return fCall(fBuf, args...);
423 }
424
425 explicit operator bool() const {
426 return fCall != nullptr;
427 }
428
429private:
430 R (*fCall)(const void*, Args...);
431 size_t fBuf[4];
432};
bsalomon9f2dc272016-02-08 07:22:17 -0800433
bsalomon@google.com637d5e92012-05-07 21:33:56 +0000434#endif