blob: 17d0a53750660cf16ad63e3d8334ed992f9e907b [file]
/*
** Copyright 2013, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
// This source file is automatically generated
package android.opengl;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.hardware.HardwareBuffer;
import android.hardware.SyncFence;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import com.android.graphics.egl.flags.Flags;
/**
* EGL Extensions
*/
public class EGLExt {
// EGL_KHR_create_context
public static final int EGL_CONTEXT_MAJOR_VERSION_KHR = 0x3098;
public static final int EGL_CONTEXT_MINOR_VERSION_KHR = 0x30FB;
public static final int EGL_CONTEXT_FLAGS_KHR = 0x30FC;
public static final int EGL_OPENGL_ES3_BIT_KHR = 0x0040;
public static final int EGL_RECORDABLE_ANDROID = 0x3142;
// EGL_ANDROID_native_fence_sync
public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 0x3144;
public static final int EGL_SYNC_NATIVE_FENCE_FD_ANDROID = 0x3145;
public static final int EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID = 0x3146;
public static final int EGL_NO_NATIVE_FENCE_FD_ANDROID = -1;
native private static void _nativeClassInit();
static {
_nativeClassInit();
}
/**
* Retrieves the SyncFence for an EGLSync created with EGL_SYNC_NATIVE_FENCE_ANDROID
*
* See <a href="https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt">
* EGL_ANDROID_native_fence_sync</a> extension for more details
* @param display The EGLDisplay connection
* @param sync The EGLSync to fetch the SyncFence from
* @return A SyncFence representing the native fence.
* * If <sync> is not a valid sync object for <display>,
* an {@link SyncFence#isValid() invalid} SyncFence is returned and an EGL_BAD_PARAMETER
* error is generated.
* * If the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute of <sync> is
* EGL_NO_NATIVE_FENCE_FD_ANDROID, an {@link SyncFence#isValid() invalid} SyncFence is
* returned and an EGL_BAD_PARAMETER error is generated.
* * If <display> does not match the display passed to eglCreateSync
* when <sync> was created, the behaviour is undefined.
*/
public static @NonNull SyncFence eglDupNativeFenceFDANDROID(@NonNull EGLDisplay display,
@NonNull EGLSync sync) {
int fd = eglDupNativeFenceFDANDROIDImpl(display, sync);
Log.d("EGL", "eglDupNativeFence returned " + fd);
if (fd >= 0) {
return SyncFence.create(ParcelFileDescriptor.adoptFd(fd));
} else {
return SyncFence.createEmpty();
}
}
private static native int eglDupNativeFenceFDANDROIDImpl(EGLDisplay display, EGLSync sync);
// C function EGLBoolean eglPresentationTimeANDROID ( EGLDisplay dpy, EGLSurface sur, EGLnsecsANDROID time )
public static native boolean eglPresentationTimeANDROID(
EGLDisplay dpy,
EGLSurface sur,
long time
);
/**
* Obtains an {@code EGLClientBuffer} from a {@link HardwareBuffer}.
*
* <p>The returned {@code EGLClientBuffer} is only valid as long as the {@code buffer}
* instance is alive. Closing the {@code buffer} will invalidate the
* {@code EGLClientBuffer}.</p>
*
* <p>No additional cleanup of the {@code EGLClientBuffer} is required beyond
* closing the {@link HardwareBuffer}.</p>
*
* @param buffer A {@link HardwareBuffer} for which to obtain an EGLClientBuffer.
* @return A native pointer to the EGLClientBuffer, or {@code 0} if the operation fails.
* The EGL error {@code EGL_BAD_PARAMETER} is generated if {@code buffer}
* is invalid or has been closed. To determine the error state, use
* {@link android.opengl.EGL14#eglGetError()}.
*
* @see <a href="https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt">
* EGL_ANDROID_get_native_client_buffer</a>
*/
@FlaggedApi(Flags.FLAG_EGL_GET_NATIVE_CLIENT_BUFFER)
public static native long eglGetNativeClientBufferANDROID(@NonNull HardwareBuffer buffer);
}