1 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 12#include "GrGLTypes.h" 13#include "../private/SkTLogic.h" 14 15extern "C" { 16 17/////////////////////////////////////////////////////////////////////////////// 18 19typedef 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 (* GrGLBindTextureProc)(GrGLenum target, GrGLuint texture); 27typedef GrGLvoid (* GrGLBindFragDataLocationProc)(GrGLuint program, GrGLuint colorNumber, const GrGLchar* name); 28typedef GrGLvoid (* GrGLBindFragDataLocationIndexedProc)(GrGLuint program, GrGLuint colorNumber, GrGLuint index, const GrGLchar * name); 29typedef GrGLvoid (* GrGLBindVertexArrayProc)(GrGLuint array); 30typedef GrGLvoid (* GrGLBlendBarrierProc)(); 31typedef GrGLvoid (* GrGLBlendColorProc)(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha); 32typedef GrGLvoid (* GrGLBlendEquationProc)(GrGLenum mode); 33typedef GrGLvoid (* GrGLBlendFuncProc)(GrGLenum sfactor, GrGLenum dfactor); 34typedef GrGLvoid (* GrGLBlitFramebufferProc)(GrGLint srcX0, GrGLint srcY0, GrGLint srcX1, GrGLint srcY1, GrGLint dstX0, GrGLint dstY0, GrGLint dstX1, GrGLint dstY1, GrGLbitfield mask, GrGLenum filter); 35typedef GrGLvoid (* GrGLBufferDataProc)(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage); 36typedef GrGLvoid (* GrGLBufferSubDataProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid* data); 37typedef GrGLenum (* GrGLCheckFramebufferStatusProc)(GrGLenum target); 38typedef GrGLvoid (* GrGLClearProc)(GrGLbitfield mask); 39typedef GrGLvoid (* GrGLClearColorProc)(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha); 40typedef GrGLvoid (* GrGLClearStencilProc)(GrGLint s); 41typedef GrGLvoid (* GrGLClearTexImageProc)(GrGLuint texture, GrGLint level, GrGLenum format, GrGLenum type,const GrGLvoid * data); 42typedef 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); 43typedef GrGLvoid (* GrGLColorMaskProc)(GrGLboolean red, GrGLboolean green, GrGLboolean blue, GrGLboolean alpha); 44typedef GrGLvoid (* GrGLCompileShaderProc)(GrGLuint shader); 45typedef GrGLvoid (* GrGLCompressedTexImage2DProc)(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data); 46typedef GrGLvoid (* GrGLCompressedTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLsizei imageSize, const GrGLvoid* data); 47typedef GrGLvoid (* GrGLCopyTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 48typedef GrGLuint (* GrGLCreateProgramProc)(); 49typedef GrGLuint (* GrGLCreateShaderProc)(GrGLenum type); 50typedef GrGLvoid (* GrGLCullFaceProc)(GrGLenum mode); 51typedef GrGLvoid (* GrGLDeleteBuffersProc)(GrGLsizei n, const GrGLuint* buffers); 52typedef GrGLvoid (* GrGLDeleteFramebuffersProc)(GrGLsizei n, const GrGLuint *framebuffers); 53typedef GrGLvoid (* GrGLDeleteProgramProc)(GrGLuint program); 54typedef GrGLvoid (* GrGLDeleteQueriesProc)(GrGLsizei n, const GrGLuint *ids); 55typedef GrGLvoid (* GrGLDeleteRenderbuffersProc)(GrGLsizei n, const GrGLuint *renderbuffers); 56typedef GrGLvoid (* GrGLDeleteShaderProc)(GrGLuint shader); 57typedef GrGLvoid (* GrGLDeleteTexturesProc)(GrGLsizei n, const GrGLuint* textures); 58typedef GrGLvoid (* GrGLDeleteVertexArraysProc)(GrGLsizei n, const GrGLuint *arrays); 59typedef GrGLvoid (* GrGLDepthMaskProc)(GrGLboolean flag); 60typedef GrGLvoid (* GrGLDisableProc)(GrGLenum cap); 61typedef GrGLvoid (* GrGLDisableVertexAttribArrayProc)(GrGLuint index); 62typedef GrGLvoid (* GrGLDrawArraysProc)(GrGLenum mode, GrGLint first, GrGLsizei count); 63typedef GrGLvoid (* GrGLDrawArraysInstancedProc)(GrGLenum mode, GrGLint first, GrGLsizei count, GrGLsizei primcount); 64typedef GrGLvoid (* GrGLDrawArraysIndirectProc)(GrGLenum mode, const GrGLvoid* indirect); 65typedef GrGLvoid (* GrGLDrawBufferProc)(GrGLenum mode); 66typedef GrGLvoid (* GrGLDrawBuffersProc)(GrGLsizei n, const GrGLenum* bufs); 67typedef GrGLvoid (* GrGLDrawElementsProc)(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices); 68typedef GrGLvoid (* GrGLDrawElementsInstancedProc)(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid *indices, GrGLsizei primcount); 69typedef GrGLvoid (* GrGLDrawElementsIndirectProc)(GrGLenum mode, GrGLenum type, const GrGLvoid* indirect); 70typedef GrGLvoid (* GrGLDrawRangeElementsProc)(GrGLenum mode, GrGLuint start, GrGLuint end, GrGLsizei count, GrGLenum type, const GrGLvoid* indices); 71typedef GrGLvoid (* GrGLEnableProc)(GrGLenum cap); 72typedef GrGLvoid (* GrGLEnableVertexAttribArrayProc)(GrGLuint index); 73typedef GrGLvoid (* GrGLEndQueryProc)(GrGLenum target); 74typedef GrGLvoid (* GrGLFinishProc)(); 75typedef GrGLvoid (* GrGLFlushProc)(); 76typedef GrGLvoid (* GrGLFlushMappedBufferRangeProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length); 77typedef GrGLvoid (* GrGLFramebufferRenderbufferProc)(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer); 78typedef GrGLvoid (* GrGLFramebufferTexture2DProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level); 79typedef GrGLvoid (* GrGLFramebufferTexture2DMultisampleProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level, GrGLsizei samples); 80typedef GrGLvoid (* GrGLFrontFaceProc)(GrGLenum mode); 81typedef GrGLvoid (* GrGLGenBuffersProc)(GrGLsizei n, GrGLuint* buffers); 82typedef GrGLvoid (* GrGLGenFramebuffersProc)(GrGLsizei n, GrGLuint *framebuffers); 83typedef GrGLvoid (* GrGLGenerateMipmapProc)(GrGLenum target); 84typedef GrGLvoid (* GrGLGenQueriesProc)(GrGLsizei n, GrGLuint *ids); 85typedef GrGLvoid (* GrGLGenRenderbuffersProc)(GrGLsizei n, GrGLuint *renderbuffers); 86typedef GrGLvoid (* GrGLGenTexturesProc)(GrGLsizei n, GrGLuint* textures); 87typedef GrGLvoid (* GrGLGenVertexArraysProc)(GrGLsizei n, GrGLuint *arrays); 88typedef GrGLvoid (* GrGLGetBufferParameterivProc)(GrGLenum target, GrGLenum pname, GrGLint* params); 89typedef GrGLenum (* GrGLGetErrorProc)(); 90typedef GrGLvoid (* GrGLGetFramebufferAttachmentParameterivProc)(GrGLenum target, GrGLenum attachment, GrGLenum pname, GrGLint* params); 91typedef GrGLvoid (* GrGLGetIntegervProc)(GrGLenum pname, GrGLint* params); 92typedef GrGLvoid (* GrGLGetMultisamplefvProc)(GrGLenum pname, GrGLuint index, GrGLfloat* val); 93typedef GrGLvoid (* GrGLGetProgramBinaryProc)(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, GrGLenum *binaryFormat, void *binary); 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 (* GrGLPixelStoreiProc)(GrGLenum pname, GrGLint param); 124typedef GrGLvoid (* GrGLPolygonModeProc)(GrGLenum face, GrGLenum mode); 125typedef GrGLvoid (* GrGLPopGroupMarkerProc)(); 126typedef GrGLvoid (* GrGLProgramBinaryProc)(GrGLuint program, GrGLenum binaryFormat, void *binary, GrGLsizei length); 127typedef GrGLvoid (* GrGLProgramParameteriProc)(GrGLuint program, GrGLenum pname, GrGLint value); 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); 137// GL_CHROMIUM_bind_uniform_location 138typedef GrGLvoid (* GrGLBindUniformLocationProc)(GrGLuint program, GrGLint location, const char* name); 139 140#if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE 141typedef GrGLvoid (* GrGLShaderSourceProc)(GrGLuint shader, GrGLsizei count, const char* const * str, const GrGLint* length); 142#else 143typedef GrGLvoid (* GrGLShaderSourceProc)(GrGLuint shader, GrGLsizei count, const char** str, const GrGLint* length); 144#endif 145typedef 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); 191 192/* GL_NV_path_rendering */ 193typedef 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); 210// NV_path_rendering v1.2 211typedef 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); 215// NV_path_rendering v1.3 216typedef GrGLvoid (* GrGLProgramPathFragmentInputGenProc)(GrGLuint program, GrGLint location, GrGLenum genMode, GrGLint components,const GrGLfloat *coeffs); 217// CHROMIUM_path_rendering 218typedef GrGLvoid (* GrGLBindFragmentInputLocationProc)(GrGLuint program, GrGLint location, const GrGLchar* name); 219 220/* ARB_program_interface_query */ 221typedef GrGLint (* GrGLGetProgramResourceLocationProc)(GrGLuint program, GrGLenum programInterface, const GrGLchar *name); 222 223/* GL_NV_framebuffer_mixed_samples */ 224typedef GrGLvoid (* GrGLCoverageModulationProc)(GrGLenum components); 225 226/* EXT_multi_draw_indirect */ 227typedef 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); 229 230/* ARB_sample_shading */ 231typedef GrGLvoid (* GrGLMinSampleShadingProc)(GrGLfloat value); 232 233/* ARB_sync */ 234typedef GrGLsync (* GrGLFenceSyncProc)(GrGLenum condition, GrGLbitfield flags); 235typedef GrGLboolean (* GrGLIsSyncProc)(GrGLsync sync); 236typedef GrGLenum (* GrGLClientWaitSyncProc)(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout); 237typedef GrGLvoid (* GrGLWaitSyncProc)(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout); 238typedef GrGLvoid (* GrGLDeleteSyncProc)(GrGLsync sync); 239 240/* ARB_internalformat_query */ 241typedef GrGLvoid (* GrGLGetInternalformativProc)(GrGLenum target, GrGLenum internalformat, GrGLenum pname, GrGLsizei bufSize, GrGLint *params); 242 243/* KHR_debug */ 244typedef GrGLvoid (* GrGLDebugMessageControlProc)(GrGLenum source, GrGLenum type, GrGLenum severity, GrGLsizei count, const GrGLuint* ids, GrGLboolean enabled); 245typedef GrGLvoid (* GrGLDebugMessageInsertProc)(GrGLenum source, GrGLenum type, GrGLuint id, GrGLenum severity, GrGLsizei length, const GrGLchar* buf); 246typedef GrGLvoid (* GrGLDebugMessageCallbackProc)(GRGLDEBUGPROC callback, const GrGLvoid* userParam); 247typedef GrGLuint (* GrGLGetDebugMessageLogProc)(GrGLuint count, GrGLsizei bufSize, GrGLenum* sources, GrGLenum* types, GrGLuint* ids, GrGLenum* severities, GrGLsizei* lengths, GrGLchar* messageLog); 248typedef GrGLvoid (* GrGLPushDebugGroupProc)(GrGLenum source, GrGLuint id, GrGLsizei length, const GrGLchar * message); 249typedef GrGLvoid (* GrGLPopDebugGroupProc)(); 250typedef GrGLvoid (* GrGLObjectLabelProc)(GrGLenum identifier, GrGLuint name, GrGLsizei length, const GrGLchar *label); 251 252/** EXT_window_rectangles */ 253typedef GrGLvoid (* GrGLWindowRectanglesProc)(GrGLenum mode, GrGLsizei count, const GrGLint box[]); 254 255/** EGL functions */ 256typedef const char* (* GrEGLQueryStringProc)(GrEGLDisplay dpy, GrEGLint name); 257typedef GrEGLDisplay (* GrEGLGetCurrentDisplayProc)(); 258typedef GrEGLImage (* GrEGLCreateImageProc)(GrEGLDisplay dpy, GrEGLContext ctx, GrEGLenum target, GrEGLClientBuffer buffer, const GrEGLint *attrib_list); 259typedef GrEGLBoolean (* GrEGLDestroyImageProc)(GrEGLDisplay dpy, GrEGLImage image); 260} // extern "C" 261 262// This is a lighter-weight std::function, trying to reduce code size and compile time 263// by only supporting the exact use cases we require. 264template <typename T> class GrGLFunction; 265 266template <typename R, typename... Args> 267class GrGLFunction<R(*)(Args...)>{ 268public: 269 // Construct empty. 270 GrGLFunction() : fCall(nullptr) {} 271 GrGLFunction(std::nullptr_t) : GrGLFunction() {} 272 273 // Construct from a simple function pointer. 274 GrGLFunction(R (GR_GL_FUNCTION_TYPE* fn_ptr)(Args...)) : GrGLFunction() { 275 if (fn_ptr) { 276 memcpy(fBuf, &fn_ptr, sizeof(fn_ptr)); 277 fCall = [](const void* buf, Args... args) { 278 auto fn_ptr = *(R (GR_GL_FUNCTION_TYPE**)(Args...))buf; 279 return fn_ptr(args...); 280 }; 281 } 282 } 283 284 // Construct from a small closure. 285 template <typename Closure> 286 GrGLFunction(Closure closure) : GrGLFunction() { 287 static_assert(sizeof(Closure) <= sizeof(fBuf), "fBuf is too small"); 288 #if defined(__APPLE__) // I am having serious trouble getting these to work with all STLs... 289 static_assert(std::is_trivially_copyable<Closure>::value, ""); 290 static_assert(std::is_trivially_destructible<Closure>::value, ""); 291 #endif 292 293 memcpy(fBuf, &closure, sizeof(closure)); 294 fCall = [](const void* buf, Args... args) { 295 auto closure = (const Closure*)buf; 296 return (*closure)(args...); 297 }; 298 } 299 300 R operator()(Args... args) const { 301 SkASSERT(fCall); 302 return fCall(fBuf, args...); 303 } 304 305 explicit operator bool() const { 306 return fCall != nullptr; 307 } 308 309private: 310 R (*fCall)(const void*, Args...); 311 size_t fBuf[4]; 312}; 313 314#endif 315