!gles_extensions
namespaces translator,gles2

# 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);
