!gles_extensions

# Common GLES 1.x / 2.0 extension functions
GLboolean glIsRenderbufferEXT(GLuint renderbuffer);
void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer);
void glDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers);
void glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers);
void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params);
GLboolean glIsFramebufferEXT(GLuint framebuffer);
void glBindFramebufferEXT(GLenum target, GLuint framebuffer);
void glDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers);
void glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers);
GLenum glCheckFramebufferStatusEXT(GLenum target);
void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params);
void glGenerateMipmapEXT(GLenum target);
GLenum glGetGraphicsResetStatusEXT(void);
void glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
void glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, float *params);
void glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params);

# The following extensions are used by GLESv1Dispatch and GLESv2Dispatch, but not by GLDispatch
void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);

# For benchmarking draw call overhead
void glDrawArraysNullAEMU(GLenum mode, GLint first, GLsizei count);
void glDrawElementsNullAEMU(GLenum mode, GLsizei count, GLenum type, const void *indices);

# Vulkan/GL interop
# https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_external_objects.txt
# Common between GL_EXT_memory_object and GL_EXT_semaphore
void glGetUnsignedBytevEXT(GLenum pname, GLubyte* data);
void glGetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte* data);

# GL_EXT_memory_object
void glImportMemoryFdEXT(GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
void glImportMemoryWin32HandleEXT(GLuint memory, GLuint64 size, GLenum handleType, void* handle);
void glDeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects); 
GLboolean glIsMemoryObjectEXT(GLuint memoryObject);
void glCreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects);
void glMemoryObjectParameterivEXT(GLuint memoryObject, GLenum pname, const GLint *params);
void glGetMemoryObjectParameterivEXT(GLuint memoryObject, GLenum pname, GLint *params);
void glTexStorageMem2DEXT(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
void glTexStorageMem2DMultisampleEXT(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
void glTexStorageMem3DEXT(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
void glTexStorageMem3DMultisampleEXT(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
void glBufferStorageMemEXT(GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
void glTexParameteriHOST(GLenum target, GLenum pname, GLint param);

# Not included: direct-state-access, 1D function pointers

# GL_EXT_semaphore
void glImportSemaphoreFdEXT(GLuint semaphore, GLenum handleType, GLint fd);
void glImportSemaphoreWin32HandleEXT(GLuint semaphore, GLenum handleType, void* handle);
void glGenSemaphoresEXT(GLsizei n, GLuint *semaphores);
void glDeleteSemaphoresEXT(GLsizei n, const GLuint *semaphores);
GLboolean glIsSemaphoreEXT(GLuint semaphore);
void glSemaphoreParameterui64vEXT(GLuint semaphore, GLenum pname, const GLuint64 *params);
void glGetSemaphoreParameterui64vEXT(GLuint semaphore, GLenum pname, GLuint64 *params);
void glWaitSemaphoreEXT(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
void glSignalSemaphoreEXT(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);

# CUDA interop
GLuint glGetGlobalTexName(GLuint localTexName);
