166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer**
266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** Copyright 2012, The Android Open Source Project
366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer**
466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** Licensed under the Apache License, Version 2.0 (the "License");
566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** you may not use this file except in compliance with the License.
666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** You may obtain a copy of the License at
766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer**
866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer**     http://www.apache.org/licenses/LICENSE-2.0
966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer**
1066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** Unless required by applicable law or agreed to in writing, software
1166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** distributed under the License is distributed on an "AS IS" BASIS,
1266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** See the License for the specific language governing permissions and
1466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer** limitations under the License.
1566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer*/
1666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
1766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer// This source file is automatically generated
1866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
1966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include "jni.h"
2066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include "JNIHelp.h"
2166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <android_runtime/AndroidRuntime.h>
2266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <android_runtime/android_view_Surface.h>
2366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <android_runtime/android_graphics_SurfaceTexture.h>
2466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <utils/misc.h>
2566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
2666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <assert.h>
2766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <EGL/egl.h>
2866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
2966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <gui/Surface.h>
3066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <gui/SurfaceTexture.h>
3166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <gui/SurfaceTextureClient.h>
3266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
3366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer#include <ui/ANativeObjectBase.h>
3466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
3566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic int initialized = 0;
3666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
3766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jclass egldisplayClass;
3866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jclass eglcontextClass;
3966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jclass eglsurfaceClass;
4066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jclass eglconfigClass;
4166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
4266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID egldisplayGetHandleID;
4366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID eglcontextGetHandleID;
4466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID eglsurfaceGetHandleID;
4566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID eglconfigGetHandleID;
4666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
4766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID egldisplayConstructor;
4866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID eglcontextConstructor;
4966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID eglsurfaceConstructor;
5066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jmethodID eglconfigConstructor;
5166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
5266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jobject eglNoContextObject;
5366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jobject eglNoDisplayObject;
5466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jobject eglNoSurfaceObject;
5566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
5666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
5766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
5866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer/* Cache method IDs each time the class is loaded. */
5966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
6066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic void
6166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas TafertshofernativeClassInit(JNIEnv *_env, jclass glImplClass)
6266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer{
6366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jclass egldisplayClassLocal = _env->FindClass("android/opengl/EGLDisplay");
6466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    egldisplayClass = (jclass) _env->NewGlobalRef(egldisplayClassLocal);
6566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jclass eglcontextClassLocal = _env->FindClass("android/opengl/EGLContext");
6666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglcontextClass = (jclass) _env->NewGlobalRef(eglcontextClassLocal);
6766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jclass eglsurfaceClassLocal = _env->FindClass("android/opengl/EGLSurface");
6866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglsurfaceClass = (jclass) _env->NewGlobalRef(eglsurfaceClassLocal);
6966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jclass eglconfigClassLocal = _env->FindClass("android/opengl/EGLConfig");
7066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglconfigClass = (jclass) _env->NewGlobalRef(eglconfigClassLocal);
7166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
7266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    egldisplayGetHandleID = _env->GetMethodID(egldisplayClass, "getHandle", "()I");
7366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglcontextGetHandleID = _env->GetMethodID(eglcontextClass, "getHandle", "()I");
7466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglsurfaceGetHandleID = _env->GetMethodID(eglsurfaceClass, "getHandle", "()I");
7566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglconfigGetHandleID = _env->GetMethodID(eglconfigClass, "getHandle", "()I");
7666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
7766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
7866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    egldisplayConstructor = _env->GetMethodID(egldisplayClass, "<init>", "(I)V");
7966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglcontextConstructor = _env->GetMethodID(eglcontextClass, "<init>", "(I)V");
8066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglsurfaceConstructor = _env->GetMethodID(eglsurfaceClass, "<init>", "(I)V");
8166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglconfigConstructor = _env->GetMethodID(eglconfigClass, "<init>", "(I)V");
8266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
8366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jobject localeglNoContextObject = _env->NewObject(eglcontextClass, eglcontextConstructor, (jint)EGL_NO_CONTEXT);
8466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglNoContextObject = _env->NewGlobalRef(localeglNoContextObject);
8566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jobject localeglNoDisplayObject = _env->NewObject(egldisplayClass, egldisplayConstructor, (jint)EGL_NO_DISPLAY);
8666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglNoDisplayObject = _env->NewGlobalRef(localeglNoDisplayObject);
8766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jobject localeglNoSurfaceObject = _env->NewObject(eglsurfaceClass, eglsurfaceConstructor, (jint)EGL_NO_SURFACE);
8866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    eglNoSurfaceObject = _env->NewGlobalRef(localeglNoSurfaceObject);
8966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
9066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
9166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jclass eglClass = _env->FindClass("android/opengl/EGL14");
9266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jfieldID noContextFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_CONTEXT", "Landroid/opengl/EGLContext;");
9366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    _env->SetStaticObjectField(eglClass, noContextFieldID, eglNoContextObject);
9466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
9566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jfieldID noDisplayFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_DISPLAY", "Landroid/opengl/EGLDisplay;");
9666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    _env->SetStaticObjectField(eglClass, noDisplayFieldID, eglNoDisplayObject);
9766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
9866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    jfieldID noSurfaceFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_SURFACE", "Landroid/opengl/EGLSurface;");
9966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    _env->SetStaticObjectField(eglClass, noSurfaceFieldID, eglNoSurfaceObject);
10066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer}
10166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
10266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic void *
10366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas TafertshoferfromEGLHandle(JNIEnv *_env, jmethodID mid, jobject obj) {
10466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    if (obj == NULL){
10566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer        jniThrowException(_env, "java/lang/IllegalArgumentException",
10666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer                          "Object is set to null.");
10766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    }
10866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
10966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    return (void*) (_env->CallIntMethod(obj, mid));
11066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer}
11166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
11266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshoferstatic jobject
11366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas TafertshofertoEGLHandle(JNIEnv *_env, jclass cls, jmethodID con, void * handle) {
11466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    if (cls == eglcontextClass &&
11566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer       (EGLContext)handle == EGL_NO_CONTEXT) {
11666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer           return eglNoContextObject;
11766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    }
11866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
11966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    if (cls == egldisplayClass &&
12066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer       (EGLDisplay)handle == EGL_NO_DISPLAY) {
12166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer           return eglNoDisplayObject;
12266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    }
12366a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
12466a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    if (cls == eglsurfaceClass &&
12566a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer       (EGLSurface)handle == EGL_NO_SURFACE) {
12666a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer           return eglNoSurfaceObject;
12766a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    }
12866a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
12966a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer    return _env->NewObject(cls, con, (jint)handle);
13066a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer}
13166a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer
13266a42db8cbfba902f72f0ace5ac448ef4bfd3951Thomas Tafertshofer// --------------------------------------------------------------------------
133