# The list of EGL extension functions used by libOpenglRender.
# This is only a subset of the full EGL API.

!Render_EGL_extensions

%#include <EGL/egl.h>
%#define EGL_EGLEXT_PROTOTYPES
%#include <EGL/eglext.h>

EGLImageKHR eglCreateImageKHR(EGLDisplay display, EGLContext context, EGLenum target, EGLClientBuffer buffer, const EGLint* attrib_list);
EGLBoolean eglDestroyImageKHR(EGLDisplay display, EGLImageKHR image);
EGLSyncKHR eglCreateSyncKHR(EGLDisplay display, EGLenum type, const EGLint* attribs);
EGLint eglClientWaitSyncKHR(EGLDisplay display, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
EGLint eglWaitSyncKHR(EGLDisplay display, EGLSyncKHR sync, EGLint flags);
EGLBoolean eglDestroySyncKHR(EGLDisplay display, EGLSyncKHR sync);
EGLint eglGetMaxGLESVersion(EGLDisplay display);
void eglBlitFromCurrentReadBufferANDROID(EGLDisplay display, EGLImageKHR image);
void* eglSetImageFenceANDROID(EGLDisplay display, EGLImageKHR image);
void eglWaitImageFenceANDROID(EGLDisplay display, void* fence);
