diff --git a/opengl/include/EGL/eglext.h b/opengl/include/EGL/eglext.h index 8578874a6..c8d228ce0 100644 --- a/opengl/include/EGL/eglext.h +++ b/opengl/include/EGL/eglext.h @@ -311,6 +311,18 @@ typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCANDROID) (EGLDisplay dpy, EGLSyncKHR #define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 #endif +/* EGL_ANDROID_presentation_time + */ +#ifndef EGL_ANDROID_presentation_time +#define EGL_ANDROID_presentation_time 1 +typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean eglPresentationTimeANDROID(EGLDisplay dpy, EGLSurface sur, EGLnsecsANDROID time); +#else +typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROID) (EGLDisplay dpy, EGLSurface sur, EGLnsecsANDROID time); +#endif +#endif + #ifdef __cplusplus } #endif diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index ed9db9450..978ab046a 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -1307,6 +1307,28 @@ EGLint eglWaitSyncANDROID(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags) return result; } +EGLBoolean eglPresentationTimeANDROID(EGLDisplay dpy, EGLSurface surface, + EGLnsecsANDROID time) +{ + clearError(); + + const egl_display_ptr dp = validate_display(dpy); + if (!dp) { + return EGL_FALSE; + } + + SurfaceRef _s(dp.get(), surface); + if (!_s.get()) { + setError(EGL_BAD_SURFACE, EGL_FALSE); + return EGL_FALSE; + } + + egl_surface_t const * const s = get_surface(surface); + native_window_set_buffers_timestamp(s->win.get(), time); + + return EGL_TRUE; +} + // ---------------------------------------------------------------------------- // NVIDIA extensions // ---------------------------------------------------------------------------- diff --git a/opengl/tools/glgen/specs/egl/EGL14.spec b/opengl/tools/glgen/specs/egl/EGL14.spec index 828e11485..aef0bcb43 100644 --- a/opengl/tools/glgen/specs/egl/EGL14.spec +++ b/opengl/tools/glgen/specs/egl/EGL14.spec @@ -31,3 +31,4 @@ EGLBoolean eglWaitGL ( void ) EGLBoolean eglWaitNative ( EGLint engine ) EGLBoolean eglSwapBuffers ( EGLDisplay dpy, EGLSurface surface ) EGLBoolean eglCopyBuffers ( EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target ) +EGLBoolean eglPresentationTimeANDROID ( EGLDisplay dpy, EGLSurface sur, EGLnsecsANDROID time ) diff --git a/opengl/tools/glgen/src/JType.java b/opengl/tools/glgen/src/JType.java index 3f7cb7392..994e60905 100644 --- a/opengl/tools/glgen/src/JType.java +++ b/opengl/tools/glgen/src/JType.java @@ -56,6 +56,7 @@ public class JType { typeMapping.put(new CType("EGLNativeWindowType"), new JType("int")); typeMapping.put(new CType("EGLNativeDisplayType"), new JType("int")); typeMapping.put(new CType("EGLClientBuffer"), new JType("int")); + typeMapping.put(new CType("EGLnsecsANDROID"), new JType("long")); // EGL nonprimitive types typeMapping.put(new CType("EGLConfig"), new JType("EGLConfig", true, false)); diff --git a/opengl/tools/glgen/src/JniCodeEmitter.java b/opengl/tools/glgen/src/JniCodeEmitter.java index 01c5c48cc..ffe376717 100644 --- a/opengl/tools/glgen/src/JniCodeEmitter.java +++ b/opengl/tools/glgen/src/JniCodeEmitter.java @@ -54,7 +54,7 @@ public class JniCodeEmitter { } else if (baseType.equals("short")) { jniName += "S"; } else if (baseType.equals("long")) { - jniName += "L"; + jniName += "J"; } else if (baseType.equals("byte")) { jniName += "B"; } else if (baseType.equals("String")) {