1c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall/*
2c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** Copyright 2013, The Android Open Source Project
3c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall**
4c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** Licensed under the Apache License, Version 2.0 (the "License");
5c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** you may not use this file except in compliance with the License.
6c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** You may obtain a copy of the License at
7c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall**
8c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall**     http://www.apache.org/licenses/LICENSE-2.0
9c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall**
10c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** Unless required by applicable law or agreed to in writing, software
11c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** distributed under the License is distributed on an "AS IS" BASIS,
12c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** See the License for the specific language governing permissions and
14c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall** limitations under the License.
15c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall*/
16c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
17c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall// This source file is automatically generated
18c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
19b5da0d78d2fde6abbfd387db4a3b218a5c301c20Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-variable"
20b5da0d78d2fde6abbfd387db4a3b218a5c301c20Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-function"
21b5da0d78d2fde6abbfd387db4a3b218a5c301c20Andreas Gampe
22c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include "jni.h"
2388bd1e09b433bf3c962177347da8d98dd48d80f4Steven Moreland#include <nativehelper/JNIHelp.h>
24c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <android_runtime/AndroidRuntime.h>
25c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <android_runtime/android_view_Surface.h>
26c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <android_runtime/android_graphics_SurfaceTexture.h>
27c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <utils/misc.h>
28c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
29c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <assert.h>
30c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <EGL/egl.h>
31c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <EGL/eglext.h>
32c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
33c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <gui/Surface.h>
34c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <gui/GLConsumer.h>
35c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <gui/Surface.h>
36c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
37c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall#include <ui/ANativeObjectBase.h>
38c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
39c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic int initialized = 0;
40c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
41c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jclass egldisplayClass;
42c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jclass eglcontextClass;
43c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jclass eglsurfaceClass;
44c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jclass eglconfigClass;
45c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
46c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID egldisplayGetHandleID;
47c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID eglcontextGetHandleID;
48c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID eglsurfaceGetHandleID;
49c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID eglconfigGetHandleID;
50c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
51c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID egldisplayConstructor;
52c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID eglcontextConstructor;
53c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID eglsurfaceConstructor;
54c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jmethodID eglconfigConstructor;
55c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
56c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jobject eglNoContextObject;
57c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jobject eglNoDisplayObject;
58c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jobject eglNoSurfaceObject;
59c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
60c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
61c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
62c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall/* Cache method IDs each time the class is loaded. */
63c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
64c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic void
65c86393510c8747519fe34e5aa38ce5218593c19cJesse HallnativeClassInit(JNIEnv *_env, jclass glImplClass)
66c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall{
67c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jclass egldisplayClassLocal = _env->FindClass("android/opengl/EGLDisplay");
68c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    egldisplayClass = (jclass) _env->NewGlobalRef(egldisplayClassLocal);
69c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jclass eglcontextClassLocal = _env->FindClass("android/opengl/EGLContext");
70c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    eglcontextClass = (jclass) _env->NewGlobalRef(eglcontextClassLocal);
71c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jclass eglsurfaceClassLocal = _env->FindClass("android/opengl/EGLSurface");
72c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    eglsurfaceClass = (jclass) _env->NewGlobalRef(eglsurfaceClassLocal);
73c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jclass eglconfigClassLocal = _env->FindClass("android/opengl/EGLConfig");
74c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    eglconfigClass = (jclass) _env->NewGlobalRef(eglconfigClassLocal);
75c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
76ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    egldisplayGetHandleID = _env->GetMethodID(egldisplayClass, "getNativeHandle", "()J");
77ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    eglcontextGetHandleID = _env->GetMethodID(eglcontextClass, "getNativeHandle", "()J");
78ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    eglsurfaceGetHandleID = _env->GetMethodID(eglsurfaceClass, "getNativeHandle", "()J");
79ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    eglconfigGetHandleID = _env->GetMethodID(eglconfigClass, "getNativeHandle", "()J");
80c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
81c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
82ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    egldisplayConstructor = _env->GetMethodID(egldisplayClass, "<init>", "(J)V");
83ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    eglcontextConstructor = _env->GetMethodID(eglcontextClass, "<init>", "(J)V");
84ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    eglsurfaceConstructor = _env->GetMethodID(eglsurfaceClass, "<init>", "(J)V");
85ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    eglconfigConstructor = _env->GetMethodID(eglconfigClass, "<init>", "(J)V");
86c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
87c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
88c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jclass eglClass = _env->FindClass("android/opengl/EGL14");
89c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jfieldID noContextFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_CONTEXT", "Landroid/opengl/EGLContext;");
907290c24354ccf7efd7afa8fa6ba06689a852fae6Sangkyu Lee    jobject localeglNoContextObject = _env->GetStaticObjectField(eglClass, noContextFieldID);
917290c24354ccf7efd7afa8fa6ba06689a852fae6Sangkyu Lee    eglNoContextObject = _env->NewGlobalRef(localeglNoContextObject);
92c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
93c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jfieldID noDisplayFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_DISPLAY", "Landroid/opengl/EGLDisplay;");
947290c24354ccf7efd7afa8fa6ba06689a852fae6Sangkyu Lee    jobject localeglNoDisplayObject = _env->GetStaticObjectField(eglClass, noDisplayFieldID);
957290c24354ccf7efd7afa8fa6ba06689a852fae6Sangkyu Lee    eglNoDisplayObject = _env->NewGlobalRef(localeglNoDisplayObject);
96c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
97c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    jfieldID noSurfaceFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_SURFACE", "Landroid/opengl/EGLSurface;");
987290c24354ccf7efd7afa8fa6ba06689a852fae6Sangkyu Lee    jobject localeglNoSurfaceObject = _env->GetStaticObjectField(eglClass, noSurfaceFieldID);
997290c24354ccf7efd7afa8fa6ba06689a852fae6Sangkyu Lee    eglNoSurfaceObject = _env->NewGlobalRef(localeglNoSurfaceObject);
100c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall}
101c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
102c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic void *
103c86393510c8747519fe34e5aa38ce5218593c19cJesse HallfromEGLHandle(JNIEnv *_env, jmethodID mid, jobject obj) {
104c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    if (obj == NULL){
105c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException",
106c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall                          "Object is set to null.");
107c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    }
108c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
109ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    return reinterpret_cast<void*>(_env->CallLongMethod(obj, mid));
110c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall}
111c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
112c86393510c8747519fe34e5aa38ce5218593c19cJesse Hallstatic jobject
113c86393510c8747519fe34e5aa38ce5218593c19cJesse HalltoEGLHandle(JNIEnv *_env, jclass cls, jmethodID con, void * handle) {
114c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    if (cls == eglcontextClass &&
115c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall       (EGLContext)handle == EGL_NO_CONTEXT) {
116c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall           return eglNoContextObject;
117c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    }
118c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
119c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    if (cls == egldisplayClass &&
120c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall       (EGLDisplay)handle == EGL_NO_DISPLAY) {
121c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall           return eglNoDisplayObject;
122c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    }
123c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
124c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    if (cls == eglsurfaceClass &&
125c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall       (EGLSurface)handle == EGL_NO_SURFACE) {
126c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall           return eglNoSurfaceObject;
127c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall    }
128c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
129ab6fc2a86f34be455c144a2d691e94909998c959Ashok Bhat    return _env->NewObject(cls, con, reinterpret_cast<jlong>(handle));
130c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall}
131c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall
132c86393510c8747519fe34e5aa38ce5218593c19cJesse Hall// --------------------------------------------------------------------------
133