1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2012 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrGLFunctions_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrGLFunctions_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include <cstring> 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTLogic.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker extern "C" { 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////// 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker using GrGLActiveTextureFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum texture); 21*c8dee2aaSAndroid Build Coastguard Worker using GrGLAttachShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint shader); 22*c8dee2aaSAndroid Build Coastguard Worker using GrGLBeginQueryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint id); 23*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindAttribLocationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint index, const char* name); 24*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint buffer); 25*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint framebuffer); 26*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindRenderbufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint renderbuffer); 27*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindTextureFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint texture); 28*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindFragDataLocationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint colorNumber, const GrGLchar* name); 29*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindFragDataLocationIndexedFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint colorNumber, GrGLuint index, const GrGLchar* name); 30*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindSamplerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint unit, GrGLuint sampler); 31*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindVertexArrayFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint array); 32*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendBarrierFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 33*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendColorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha); 34*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendEquationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode); 35*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendFuncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum sfactor, GrGLenum dfactor); 36*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlitFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint srcX0, GrGLint srcY0, GrGLint srcX1, GrGLint srcY1, GrGLint dstX0, GrGLint dstY0, GrGLint dstX1, GrGLint dstY1, GrGLbitfield mask, GrGLenum filter); 37*c8dee2aaSAndroid Build Coastguard Worker using GrGLBufferDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage); 38*c8dee2aaSAndroid Build Coastguard Worker using GrGLBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid* data); 39*c8dee2aaSAndroid Build Coastguard Worker using GrGLCheckFramebufferStatusFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLenum target); 40*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLbitfield mask); 41*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearColorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha); 42*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearStencilFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint s); 43*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearTexImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level, GrGLenum format, GrGLenum type, const GrGLvoid* data); 44*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearTexSubImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLenum format, GrGLenum type, const GrGLvoid* data); 45*c8dee2aaSAndroid Build Coastguard Worker using GrGLColorMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLboolean red, GrGLboolean green, GrGLboolean blue, GrGLboolean alpha); 46*c8dee2aaSAndroid Build Coastguard Worker using GrGLCompileShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader); 47*c8dee2aaSAndroid Build Coastguard Worker using GrGLCompressedTexImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data); 48*c8dee2aaSAndroid Build Coastguard Worker using GrGLCompressedTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLsizei imageSize, const GrGLvoid* data); 49*c8dee2aaSAndroid Build Coastguard Worker using GrGLCopyBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum readTargt, GrGLenum writeTarget, GrGLintptr readOffset, GrGLintptr writeOffset, GrGLsizeiptr size); 50*c8dee2aaSAndroid Build Coastguard Worker using GrGLCopyTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 51*c8dee2aaSAndroid Build Coastguard Worker using GrGLCreateProgramFn = GrGLuint GR_GL_FUNCTION_TYPE(); 52*c8dee2aaSAndroid Build Coastguard Worker using GrGLCreateShaderFn = GrGLuint GR_GL_FUNCTION_TYPE(GrGLenum type); 53*c8dee2aaSAndroid Build Coastguard Worker using GrGLCullFaceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode); 54*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteBuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* buffers); 55*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteFencesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* fences); 56*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteFramebuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* framebuffers); 57*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteProgramFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program); 58*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteQueriesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* ids); 59*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteRenderbuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* renderbuffers); 60*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteSamplersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei count, const GrGLuint* samplers); 61*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader); 62*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteTexturesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* textures); 63*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteVertexArraysFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* arrays); 64*c8dee2aaSAndroid Build Coastguard Worker using GrGLDepthMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLboolean flag); 65*c8dee2aaSAndroid Build Coastguard Worker using GrGLDisableFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum cap); 66*c8dee2aaSAndroid Build Coastguard Worker using GrGLDisableVertexAttribArrayFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint index); 67*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLint first, GrGLsizei count); 68*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysInstancedFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLint first, GrGLsizei count, GrGLsizei primcount); 69*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLvoid* indirect); 70*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode); 71*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawBuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLenum* bufs); 72*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices); 73*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsInstancedFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices, GrGLsizei primcount); 74*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLenum type, const GrGLvoid* indirect); 75*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawRangeElementsFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLuint start, GrGLuint end, GrGLsizei count, GrGLenum type, const GrGLvoid* indices); 76*c8dee2aaSAndroid Build Coastguard Worker using GrGLEnableFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum cap); 77*c8dee2aaSAndroid Build Coastguard Worker using GrGLEnableVertexAttribArrayFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint index); 78*c8dee2aaSAndroid Build Coastguard Worker using GrGLEndQueryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target); 79*c8dee2aaSAndroid Build Coastguard Worker using GrGLFinishFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 80*c8dee2aaSAndroid Build Coastguard Worker using GrGLFinishFenceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint fence); 81*c8dee2aaSAndroid Build Coastguard Worker using GrGLFlushFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 82*c8dee2aaSAndroid Build Coastguard Worker using GrGLFlushMappedBufferRangeFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length); 83*c8dee2aaSAndroid Build Coastguard Worker using GrGLFramebufferRenderbufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer); 84*c8dee2aaSAndroid Build Coastguard Worker using GrGLFramebufferTexture2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level); 85*c8dee2aaSAndroid Build Coastguard Worker using GrGLFramebufferTexture2DMultisampleFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level, GrGLsizei samples); 86*c8dee2aaSAndroid Build Coastguard Worker using GrGLFrontFaceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode); 87*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenBuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* buffers); 88*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenFencesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* fences); 89*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenFramebuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* framebuffers); 90*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenerateMipmapFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target); 91*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenQueriesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* ids); 92*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenRenderbuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* renderbuffers); 93*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenSamplersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei count, GrGLuint* samplers); 94*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenTexturesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* textures); 95*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenVertexArraysFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* arrays); 96*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetBufferParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint* params); 97*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetErrorFn = GrGLenum GR_GL_FUNCTION_TYPE(); 98*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetFramebufferAttachmentParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum pname, GrGLint* params); 99*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetFloatvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLfloat* params); 100*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetIntegervFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLint* params); 101*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetMultisamplefvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLuint index, GrGLfloat* val); 102*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetProgramBinaryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, GrGLenum* binaryFormat, void* binary); 103*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetProgramInfoLogFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, char* infolog); 104*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetProgramivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum pname, GrGLint* params); 105*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum GLtarget, GrGLenum pname, GrGLint* params); 106*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryObjecti64vFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLint64* params); 107*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryObjectui64vFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLuint64* params); 108*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryObjectuivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLuint* params); 109*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetRenderbufferParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint* params); 110*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetShaderInfoLogFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader, GrGLsizei bufsize, GrGLsizei* length, char* infolog); 111*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetShaderivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader, GrGLenum pname, GrGLint* params); 112*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetShaderPrecisionFormatFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum shadertype, GrGLenum precisiontype, GrGLint* range, GrGLint* precision); 113*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetStringFn = const GrGLubyte* GR_GL_FUNCTION_TYPE(GrGLenum name); 114*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetStringiFn = const GrGLubyte* GR_GL_FUNCTION_TYPE(GrGLenum name, GrGLuint index); 115*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetTexLevelParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLenum pname, GrGLint* params); 116*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetUniformLocationFn = GrGLint GR_GL_FUNCTION_TYPE(GrGLuint program, const char* name); 117*c8dee2aaSAndroid Build Coastguard Worker using GrGLInsertEventMarkerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei length, const char* marker); 118*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateBufferDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint buffer); 119*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr length); 120*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments); 121*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateSubFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 122*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateTexImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level); 123*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateTexSubImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth); 124*c8dee2aaSAndroid Build Coastguard Worker using GrGLIsTextureFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLuint texture); 125*c8dee2aaSAndroid Build Coastguard Worker using GrGLLineWidthFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLfloat width); 126*c8dee2aaSAndroid Build Coastguard Worker using GrGLLinkProgramFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program); 127*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapBufferFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum access); 128*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapBufferRangeFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length, GrGLbitfield access); 129*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapBufferSubDataFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLuint target, GrGLintptr offset, GrGLsizeiptr size, GrGLenum access); 130*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapTexSubImage2DFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLenum access); 131*c8dee2aaSAndroid Build Coastguard Worker using GrGLMemoryBarrierFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLbitfield barriers); 132*c8dee2aaSAndroid Build Coastguard Worker using GrGLPatchParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLint value); 133*c8dee2aaSAndroid Build Coastguard Worker using GrGLPixelStoreiFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLint param); 134*c8dee2aaSAndroid Build Coastguard Worker using GrGLPolygonModeFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLenum mode); 135*c8dee2aaSAndroid Build Coastguard Worker using GrGLPopGroupMarkerFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 136*c8dee2aaSAndroid Build Coastguard Worker using GrGLProgramBinaryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum binaryFormat, void* binary, GrGLsizei length); 137*c8dee2aaSAndroid Build Coastguard Worker using GrGLProgramParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum pname, GrGLint value); 138*c8dee2aaSAndroid Build Coastguard Worker using GrGLPushGroupMarkerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei length, const char* marker); 139*c8dee2aaSAndroid Build Coastguard Worker using GrGLQueryCounterFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum target); 140*c8dee2aaSAndroid Build Coastguard Worker using GrGLReadBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum src); 141*c8dee2aaSAndroid Build Coastguard Worker using GrGLReadPixelsFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels); 142*c8dee2aaSAndroid Build Coastguard Worker using GrGLRenderbufferStorageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLsizei width, GrGLsizei height); 143*c8dee2aaSAndroid Build Coastguard Worker using GrGLRenderbufferStorageMultisampleFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei samples, GrGLenum internalformat, GrGLsizei width, GrGLsizei height); 144*c8dee2aaSAndroid Build Coastguard Worker using GrGLResolveMultisampleFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 145*c8dee2aaSAndroid Build Coastguard Worker using GrGLSamplerParameterfFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint sampler, GrGLenum pname, GrGLfloat param); 146*c8dee2aaSAndroid Build Coastguard Worker using GrGLSamplerParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint sampler, GrGLenum pname, GrGLint param); 147*c8dee2aaSAndroid Build Coastguard Worker using GrGLSamplerParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint sampler, GrGLenum pname, const GrGLint* params); 148*c8dee2aaSAndroid Build Coastguard Worker using GrGLScissorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 149*c8dee2aaSAndroid Build Coastguard Worker // GL_CHROMIUM_bind_uniform_location 150*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindUniformLocationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLint location, const char* name); 151*c8dee2aaSAndroid Build Coastguard Worker using GrGLSetFenceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint fence, GrGLenum condition); 152*c8dee2aaSAndroid Build Coastguard Worker using GrGLShaderSourceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader, GrGLsizei count, const char* const* str, const GrGLint* length); 153*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilFuncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum func, GrGLint ref, GrGLuint mask); 154*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilFuncSeparateFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLenum func, GrGLint ref, GrGLuint mask); 155*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint mask); 156*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilMaskSeparateFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLuint mask); 157*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilOpFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum fail, GrGLenum zfail, GrGLenum zpass); 158*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilOpSeparateFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLenum fail, GrGLenum zfail, GrGLenum zpass); 159*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLuint buffer); 160*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexBufferRangeFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr size); 161*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid* pixels); 162*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameterfFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLfloat param); 163*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameterfvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, const GrGLfloat* params); 164*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint param); 165*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, const GrGLint* params); 166*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexStorage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei levels, GrGLenum internalformat, GrGLsizei width, GrGLsizei height); 167*c8dee2aaSAndroid Build Coastguard Worker using GrGLDiscardFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments); 168*c8dee2aaSAndroid Build Coastguard Worker using GrGLTestFenceFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLuint fence); 169*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, const GrGLvoid* pixels); 170*c8dee2aaSAndroid Build Coastguard Worker using GrGLTextureBarrierFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 171*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0); 172*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0); 173*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v); 174*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v); 175*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0, GrGLfloat v1); 176*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0, GrGLint v1); 177*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v); 178*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v); 179*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2); 180*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2); 181*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v); 182*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v); 183*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2, GrGLfloat v3); 184*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2, GrGLint v3); 185*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v); 186*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v); 187*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniformMatrix2fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value); 188*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniformMatrix3fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value); 189*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniformMatrix4fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value); 190*c8dee2aaSAndroid Build Coastguard Worker using GrGLUnmapBufferFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLenum target); 191*c8dee2aaSAndroid Build Coastguard Worker using GrGLUnmapBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(const GrGLvoid* mem); 192*c8dee2aaSAndroid Build Coastguard Worker using GrGLUnmapTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(const GrGLvoid* mem); 193*c8dee2aaSAndroid Build Coastguard Worker using GrGLUseProgramFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program); 194*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib1fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat value); 195*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib2fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat* values); 196*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib3fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat* values); 197*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib4fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat* values); 198*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttribDivisorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint index, GrGLuint divisor); 199*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttribIPointerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, GrGLint size, GrGLenum type, GrGLsizei stride, const GrGLvoid* ptr); 200*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttribPointerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, const GrGLvoid* ptr); 201*c8dee2aaSAndroid Build Coastguard Worker using GrGLViewportFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 202*c8dee2aaSAndroid Build Coastguard Worker 203*c8dee2aaSAndroid Build Coastguard Worker /* GL_NV_framebuffer_mixed_samples */ 204*c8dee2aaSAndroid Build Coastguard Worker using GrGLCoverageModulationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum components); 205*c8dee2aaSAndroid Build Coastguard Worker 206*c8dee2aaSAndroid Build Coastguard Worker /* EXT_base_instance */ 207*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysInstancedBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLint first, GrGLsizei count, GrGLsizei instancecount, GrGLuint baseinstance); 208*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsInstancedBaseVertexBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, GrGLenum type, const void *indices, GrGLsizei instancecount, GrGLint basevertex, GrGLuint baseinstance); 209*c8dee2aaSAndroid Build Coastguard Worker 210*c8dee2aaSAndroid Build Coastguard Worker /* EXT_multi_draw_indirect */ 211*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawArraysIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLvoid* indirect, GrGLsizei drawcount, GrGLsizei stride); 212*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawElementsIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLenum type, const GrGLvoid* indirect, GrGLsizei drawcount, GrGLsizei stride); 213*c8dee2aaSAndroid Build Coastguard Worker 214*c8dee2aaSAndroid Build Coastguard Worker /* ANGLE_base_vertex_base_instance */ 215*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawArraysInstancedBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLint* firsts, const GrGLsizei* counts, const GrGLsizei* instanceCounts, const GrGLuint* baseInstances, const GrGLsizei drawcount); 216*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawElementsInstancedBaseVertexBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLint* counts, GrGLenum type, const GrGLvoid* const* indices, const GrGLsizei* instanceCounts, const GrGLint* baseVertices, const GrGLuint* baseInstances, const GrGLsizei drawcount); 217*c8dee2aaSAndroid Build Coastguard Worker 218*c8dee2aaSAndroid Build Coastguard Worker /* ARB_sync */ 219*c8dee2aaSAndroid Build Coastguard Worker using GrGLFenceSyncFn = GrGLsync GR_GL_FUNCTION_TYPE(GrGLenum condition, GrGLbitfield flags); 220*c8dee2aaSAndroid Build Coastguard Worker using GrGLIsSyncFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLsync sync); 221*c8dee2aaSAndroid Build Coastguard Worker #if defined(__EMSCRIPTEN__) 222*c8dee2aaSAndroid Build Coastguard Worker using GrGLClientWaitSyncFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLint timeoutLo, GrGLint timeoutHi); 223*c8dee2aaSAndroid Build Coastguard Worker using GrGLWaitSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint timeoutLo, GrGLuint timeoutHi); 224*c8dee2aaSAndroid Build Coastguard Worker #else 225*c8dee2aaSAndroid Build Coastguard Worker using GrGLClientWaitSyncFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout); 226*c8dee2aaSAndroid Build Coastguard Worker using GrGLWaitSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout); 227*c8dee2aaSAndroid Build Coastguard Worker #endif 228*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync); 229*c8dee2aaSAndroid Build Coastguard Worker 230*c8dee2aaSAndroid Build Coastguard Worker /* ARB_internalformat_query */ 231*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetInternalformativFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLenum pname, GrGLsizei bufSize, GrGLint* params); 232*c8dee2aaSAndroid Build Coastguard Worker 233*c8dee2aaSAndroid Build Coastguard Worker /* KHR_debug */ 234*c8dee2aaSAndroid Build Coastguard Worker using GrGLDebugMessageControlFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum source, GrGLenum type, GrGLenum severity, GrGLsizei count, const GrGLuint* ids, GrGLboolean enabled); 235*c8dee2aaSAndroid Build Coastguard Worker using GrGLDebugMessageInsertFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum source, GrGLenum type, GrGLuint id, GrGLenum severity, GrGLsizei length, const GrGLchar* buf); 236*c8dee2aaSAndroid Build Coastguard Worker using GrGLDebugMessageCallbackFn = GrGLvoid GR_GL_FUNCTION_TYPE(GRGLDEBUGPROC callback, const GrGLvoid* userParam); 237*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetDebugMessageLogFn = GrGLuint GR_GL_FUNCTION_TYPE(GrGLuint count, GrGLsizei bufSize, GrGLenum* sources, GrGLenum* types, GrGLuint* ids, GrGLenum* severities, GrGLsizei* lengths, GrGLchar* messageLog); 238*c8dee2aaSAndroid Build Coastguard Worker using GrGLPushDebugGroupFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum source, GrGLuint id, GrGLsizei length, const GrGLchar* message); 239*c8dee2aaSAndroid Build Coastguard Worker using GrGLPopDebugGroupFn = GrGLvoid GR_GL_FUNCTION_TYPE(); 240*c8dee2aaSAndroid Build Coastguard Worker using GrGLObjectLabelFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum identifier, GrGLuint name, GrGLsizei length, const GrGLchar* label); 241*c8dee2aaSAndroid Build Coastguard Worker 242*c8dee2aaSAndroid Build Coastguard Worker /** EXT_window_rectangles */ 243*c8dee2aaSAndroid Build Coastguard Worker using GrGLWindowRectanglesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, const GrGLint box[]); 244*c8dee2aaSAndroid Build Coastguard Worker 245*c8dee2aaSAndroid Build Coastguard Worker /** GL_QCOM_tiled_rendering */ 246*c8dee2aaSAndroid Build Coastguard Worker using GrGLStartTilingFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint x, GrGLuint y, GrGLuint width, GrGLuint height, GrGLbitfield preserveMask); 247*c8dee2aaSAndroid Build Coastguard Worker using GrGLEndTilingFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLbitfield preserveMask); 248*c8dee2aaSAndroid Build Coastguard Worker 249*c8dee2aaSAndroid Build Coastguard Worker /** EGL functions */ 250*c8dee2aaSAndroid Build Coastguard Worker using GrEGLQueryStringFn = const char* GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLint name); 251*c8dee2aaSAndroid Build Coastguard Worker using GrEGLGetCurrentDisplayFn = GrEGLDisplay GR_GL_FUNCTION_TYPE(); 252*c8dee2aaSAndroid Build Coastguard Worker using GrEGLCreateImageFn = GrEGLImage GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLContext ctx, GrEGLenum target, GrEGLClientBuffer buffer, const GrEGLint* attrib_list); 253*c8dee2aaSAndroid Build Coastguard Worker using GrEGLDestroyImageFn = GrEGLBoolean GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLImage image); 254*c8dee2aaSAndroid Build Coastguard Worker } // extern "C" 255*c8dee2aaSAndroid Build Coastguard Worker 256*c8dee2aaSAndroid Build Coastguard Worker // This is a lighter-weight std::function, trying to reduce code size and compile time 257*c8dee2aaSAndroid Build Coastguard Worker // by only supporting the exact use cases we require. 258*c8dee2aaSAndroid Build Coastguard Worker template <typename T> class GrGLFunction; 259*c8dee2aaSAndroid Build Coastguard Worker 260*c8dee2aaSAndroid Build Coastguard Worker template <typename R, typename... Args> 261*c8dee2aaSAndroid Build Coastguard Worker class GrGLFunction<R GR_GL_FUNCTION_TYPE(Args...)> { 262*c8dee2aaSAndroid Build Coastguard Worker public: 263*c8dee2aaSAndroid Build Coastguard Worker using Fn = R GR_GL_FUNCTION_TYPE(Args...); 264*c8dee2aaSAndroid Build Coastguard Worker // Construct empty. 265*c8dee2aaSAndroid Build Coastguard Worker GrGLFunction() = default; GrGLFunction(std::nullptr_t)266*c8dee2aaSAndroid Build Coastguard Worker GrGLFunction(std::nullptr_t) {} 267*c8dee2aaSAndroid Build Coastguard Worker 268*c8dee2aaSAndroid Build Coastguard Worker // Construct from a simple function pointer. GrGLFunction(Fn * fn_ptr)269*c8dee2aaSAndroid Build Coastguard Worker GrGLFunction(Fn* fn_ptr) { 270*c8dee2aaSAndroid Build Coastguard Worker static_assert(sizeof(fn_ptr) <= sizeof(fBuf), "fBuf is too small"); 271*c8dee2aaSAndroid Build Coastguard Worker if (fn_ptr) { 272*c8dee2aaSAndroid Build Coastguard Worker memcpy(fBuf, &fn_ptr, sizeof(fn_ptr)); 273*c8dee2aaSAndroid Build Coastguard Worker fCall = [](const void* buf, Args... args) { 274*c8dee2aaSAndroid Build Coastguard Worker return (*(Fn* const *)buf)(std::forward<Args>(args)...); 275*c8dee2aaSAndroid Build Coastguard Worker }; 276*c8dee2aaSAndroid Build Coastguard Worker } 277*c8dee2aaSAndroid Build Coastguard Worker } 278*c8dee2aaSAndroid Build Coastguard Worker 279*c8dee2aaSAndroid Build Coastguard Worker // Construct from a small closure. 280*c8dee2aaSAndroid Build Coastguard Worker template <typename Closure> GrGLFunction(Closure closure)281*c8dee2aaSAndroid Build Coastguard Worker GrGLFunction(Closure closure) : GrGLFunction() { 282*c8dee2aaSAndroid Build Coastguard Worker static_assert(sizeof(Closure) <= sizeof(fBuf), "fBuf is too small"); 283*c8dee2aaSAndroid Build Coastguard Worker #if defined(__APPLE__) // I am having serious trouble getting these to work with all STLs... 284*c8dee2aaSAndroid Build Coastguard Worker static_assert(std::is_trivially_copyable<Closure>::value, ""); 285*c8dee2aaSAndroid Build Coastguard Worker static_assert(std::is_trivially_destructible<Closure>::value, ""); 286*c8dee2aaSAndroid Build Coastguard Worker #endif 287*c8dee2aaSAndroid Build Coastguard Worker 288*c8dee2aaSAndroid Build Coastguard Worker memcpy(fBuf, &closure, sizeof(closure)); 289*c8dee2aaSAndroid Build Coastguard Worker fCall = [](const void* buf, Args... args) { 290*c8dee2aaSAndroid Build Coastguard Worker auto closure = (const Closure*)buf; 291*c8dee2aaSAndroid Build Coastguard Worker return (*closure)(args...); 292*c8dee2aaSAndroid Build Coastguard Worker }; 293*c8dee2aaSAndroid Build Coastguard Worker } 294*c8dee2aaSAndroid Build Coastguard Worker operator()295*c8dee2aaSAndroid Build Coastguard Worker R operator()(Args... args) const { 296*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fCall); 297*c8dee2aaSAndroid Build Coastguard Worker return fCall(fBuf, std::forward<Args>(args)...); 298*c8dee2aaSAndroid Build Coastguard Worker } 299*c8dee2aaSAndroid Build Coastguard Worker 300*c8dee2aaSAndroid Build Coastguard Worker explicit operator bool() const { return fCall != nullptr; } 301*c8dee2aaSAndroid Build Coastguard Worker reset()302*c8dee2aaSAndroid Build Coastguard Worker void reset() { fCall = nullptr; } 303*c8dee2aaSAndroid Build Coastguard Worker 304*c8dee2aaSAndroid Build Coastguard Worker private: 305*c8dee2aaSAndroid Build Coastguard Worker using Call = R(const void* buf, Args...); 306*c8dee2aaSAndroid Build Coastguard Worker Call* fCall = nullptr; 307*c8dee2aaSAndroid Build Coastguard Worker size_t fBuf[4]; 308*c8dee2aaSAndroid Build Coastguard Worker }; 309*c8dee2aaSAndroid Build Coastguard Worker 310*c8dee2aaSAndroid Build Coastguard Worker #endif 311