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