android_opengl_EGL14.cpp revision 84bbeb9e0c9c185a22d4882b79e0bc8a598642ab
1/* 2** Copyright 2012, The Android Open Source Project 3** 4** Licensed under the Apache License, Version 2.0 (the "License"); 5** you may not use this file except in compliance with the License. 6** You may obtain a copy of the License at 7** 8** http://www.apache.org/licenses/LICENSE-2.0 9** 10** Unless required by applicable law or agreed to in writing, software 11** distributed under the License is distributed on an "AS IS" BASIS, 12** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13** See the License for the specific language governing permissions and 14** limitations under the License. 15*/ 16 17// This source file is automatically generated 18 19#include "jni.h" 20#include "JNIHelp.h" 21#include <android_runtime/AndroidRuntime.h> 22#include <android_runtime/android_view_Surface.h> 23#include <android_runtime/android_graphics_SurfaceTexture.h> 24#include <utils/misc.h> 25 26#include <assert.h> 27#include <EGL/egl.h> 28 29#include <gui/Surface.h> 30#include <gui/GLConsumer.h> 31#include <gui/Surface.h> 32 33#include <ui/ANativeObjectBase.h> 34 35static int initialized = 0; 36 37static jclass egldisplayClass; 38static jclass eglcontextClass; 39static jclass eglsurfaceClass; 40static jclass eglconfigClass; 41 42static jmethodID egldisplayGetHandleID; 43static jmethodID eglcontextGetHandleID; 44static jmethodID eglsurfaceGetHandleID; 45static jmethodID eglconfigGetHandleID; 46 47static jmethodID egldisplayConstructor; 48static jmethodID eglcontextConstructor; 49static jmethodID eglsurfaceConstructor; 50static jmethodID eglconfigConstructor; 51 52static jobject eglNoContextObject; 53static jobject eglNoDisplayObject; 54static jobject eglNoSurfaceObject; 55 56 57 58/* Cache method IDs each time the class is loaded. */ 59 60static void 61nativeClassInit(JNIEnv *_env, jclass glImplClass) 62{ 63 jclass egldisplayClassLocal = _env->FindClass("android/opengl/EGLDisplay"); 64 egldisplayClass = (jclass) _env->NewGlobalRef(egldisplayClassLocal); 65 jclass eglcontextClassLocal = _env->FindClass("android/opengl/EGLContext"); 66 eglcontextClass = (jclass) _env->NewGlobalRef(eglcontextClassLocal); 67 jclass eglsurfaceClassLocal = _env->FindClass("android/opengl/EGLSurface"); 68 eglsurfaceClass = (jclass) _env->NewGlobalRef(eglsurfaceClassLocal); 69 jclass eglconfigClassLocal = _env->FindClass("android/opengl/EGLConfig"); 70 eglconfigClass = (jclass) _env->NewGlobalRef(eglconfigClassLocal); 71 72 egldisplayGetHandleID = _env->GetMethodID(egldisplayClass, "getNativeHandle", "()J"); 73 eglcontextGetHandleID = _env->GetMethodID(eglcontextClass, "getNativeHandle", "()J"); 74 eglsurfaceGetHandleID = _env->GetMethodID(eglsurfaceClass, "getNativeHandle", "()J"); 75 eglconfigGetHandleID = _env->GetMethodID(eglconfigClass, "getNativeHandle", "()J"); 76 77 78 egldisplayConstructor = _env->GetMethodID(egldisplayClass, "<init>", "(J)V"); 79 eglcontextConstructor = _env->GetMethodID(eglcontextClass, "<init>", "(J)V"); 80 eglsurfaceConstructor = _env->GetMethodID(eglsurfaceClass, "<init>", "(J)V"); 81 eglconfigConstructor = _env->GetMethodID(eglconfigClass, "<init>", "(J)V"); 82 83 jobject localeglNoContextObject = _env->NewObject(eglcontextClass, eglcontextConstructor, reinterpret_cast<jlong>(EGL_NO_CONTEXT)); 84 eglNoContextObject = _env->NewGlobalRef(localeglNoContextObject); 85 jobject localeglNoDisplayObject = _env->NewObject(egldisplayClass, egldisplayConstructor, reinterpret_cast<jlong>(EGL_NO_DISPLAY)); 86 eglNoDisplayObject = _env->NewGlobalRef(localeglNoDisplayObject); 87 jobject localeglNoSurfaceObject = _env->NewObject(eglsurfaceClass, eglsurfaceConstructor, reinterpret_cast<jlong>(EGL_NO_SURFACE)); 88 eglNoSurfaceObject = _env->NewGlobalRef(localeglNoSurfaceObject); 89 90 91 jclass eglClass = _env->FindClass("android/opengl/EGL14"); 92 jfieldID noContextFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_CONTEXT", "Landroid/opengl/EGLContext;"); 93 _env->SetStaticObjectField(eglClass, noContextFieldID, eglNoContextObject); 94 95 jfieldID noDisplayFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_DISPLAY", "Landroid/opengl/EGLDisplay;"); 96 _env->SetStaticObjectField(eglClass, noDisplayFieldID, eglNoDisplayObject); 97 98 jfieldID noSurfaceFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_SURFACE", "Landroid/opengl/EGLSurface;"); 99 _env->SetStaticObjectField(eglClass, noSurfaceFieldID, eglNoSurfaceObject); 100} 101 102static void * 103fromEGLHandle(JNIEnv *_env, jmethodID mid, jobject obj) { 104 if (obj == NULL){ 105 jniThrowException(_env, "java/lang/IllegalArgumentException", 106 "Object is set to null."); 107 } 108 109 jlong handle = _env->CallLongMethod(obj, mid); 110 return reinterpret_cast<void*>(handle); 111} 112 113static jobject 114toEGLHandle(JNIEnv *_env, jclass cls, jmethodID con, void * handle) { 115 if (cls == eglcontextClass && 116 (EGLContext)handle == EGL_NO_CONTEXT) { 117 return eglNoContextObject; 118 } 119 120 if (cls == egldisplayClass && 121 (EGLDisplay)handle == EGL_NO_DISPLAY) { 122 return eglNoDisplayObject; 123 } 124 125 if (cls == eglsurfaceClass && 126 (EGLSurface)handle == EGL_NO_SURFACE) { 127 return eglNoSurfaceObject; 128 } 129 130 return _env->NewObject(cls, con, reinterpret_cast<jlong>(handle)); 131} 132 133// -------------------------------------------------------------------------- 134/* EGLint eglGetError ( void ) */ 135static jint 136android_eglGetError 137 (JNIEnv *_env, jobject _this) { 138 EGLint _returnValue = (EGLint) 0; 139 _returnValue = eglGetError(); 140 return (jint)_returnValue; 141} 142 143/* EGLDisplay eglGetDisplay ( EGLNativeDisplayType display_id ) */ 144static jobject 145android_eglGetDisplay 146 (JNIEnv *_env, jobject _this, jlong display_id) { 147 EGLDisplay _returnValue = (EGLDisplay) 0; 148 _returnValue = eglGetDisplay( 149 reinterpret_cast<EGLNativeDisplayType>(display_id) 150 ); 151 return toEGLHandle(_env, egldisplayClass, egldisplayConstructor, _returnValue); 152} 153 154/* EGLDisplay eglGetDisplay ( EGLNativeDisplayType display_id ) */ 155static jobject 156android_eglGetDisplayInt 157 (JNIEnv *_env, jobject _this, jint display_id) { 158 159 if (sizeof(void*) != sizeof(uint32_t)) { 160 jniThrowException(_env, "java/lang/UnsupportedOperationException", "eglGetDisplay"); 161 return 0; 162 } 163 return android_eglGetDisplay(_env, _this, display_id); 164} 165 166/* EGLBoolean eglInitialize ( EGLDisplay dpy, EGLint *major, EGLint *minor ) */ 167static jboolean 168android_eglInitialize 169 (JNIEnv *_env, jobject _this, jobject dpy, jintArray major_ref, jint majorOffset, jintArray minor_ref, jint minorOffset) { 170 jint _exception = 0; 171 const char * _exceptionType = NULL; 172 const char * _exceptionMessage = NULL; 173 EGLBoolean _returnValue = (EGLBoolean) 0; 174 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 175 EGLint *major_base = (EGLint *) 0; 176 jint _majorRemaining; 177 EGLint *major = (EGLint *) 0; 178 EGLint *minor_base = (EGLint *) 0; 179 jint _minorRemaining; 180 EGLint *minor = (EGLint *) 0; 181 182 if (!major_ref) { 183 _exception = 1; 184 _exceptionType = "java/lang/IllegalArgumentException"; 185 _exceptionMessage = "major == null"; 186 goto exit; 187 } 188 if (majorOffset < 0) { 189 _exception = 1; 190 _exceptionType = "java/lang/IllegalArgumentException"; 191 _exceptionMessage = "majorOffset < 0"; 192 goto exit; 193 } 194 _majorRemaining = _env->GetArrayLength(major_ref) - majorOffset; 195 if (_majorRemaining < 1) { 196 _exception = 1; 197 _exceptionType = "java/lang/IllegalArgumentException"; 198 _exceptionMessage = "length - majorOffset < 1 < needed"; 199 goto exit; 200 } 201 major_base = (EGLint *) 202 _env->GetPrimitiveArrayCritical(major_ref, (jboolean *)0); 203 major = major_base + majorOffset; 204 205 if (!minor_ref) { 206 _exception = 1; 207 _exceptionType = "java/lang/IllegalArgumentException"; 208 _exceptionMessage = "minor == null"; 209 goto exit; 210 } 211 if (minorOffset < 0) { 212 _exception = 1; 213 _exceptionType = "java/lang/IllegalArgumentException"; 214 _exceptionMessage = "minorOffset < 0"; 215 goto exit; 216 } 217 _minorRemaining = _env->GetArrayLength(minor_ref) - minorOffset; 218 if (_minorRemaining < 1) { 219 _exception = 1; 220 _exceptionType = "java/lang/IllegalArgumentException"; 221 _exceptionMessage = "length - minorOffset < 1 < needed"; 222 goto exit; 223 } 224 minor_base = (EGLint *) 225 _env->GetPrimitiveArrayCritical(minor_ref, (jboolean *)0); 226 minor = minor_base + minorOffset; 227 228 _returnValue = eglInitialize( 229 (EGLDisplay)dpy_native, 230 (EGLint *)major, 231 (EGLint *)minor 232 ); 233 234exit: 235 if (minor_base) { 236 _env->ReleasePrimitiveArrayCritical(minor_ref, minor_base, 237 _exception ? JNI_ABORT: 0); 238 } 239 if (major_base) { 240 _env->ReleasePrimitiveArrayCritical(major_ref, major_base, 241 _exception ? JNI_ABORT: 0); 242 } 243 if (_exception) { 244 jniThrowException(_env, _exceptionType, _exceptionMessage); 245 } 246 return (jboolean)_returnValue; 247} 248 249/* EGLBoolean eglTerminate ( EGLDisplay dpy ) */ 250static jboolean 251android_eglTerminate 252 (JNIEnv *_env, jobject _this, jobject dpy) { 253 EGLBoolean _returnValue = (EGLBoolean) 0; 254 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 255 256 _returnValue = eglTerminate( 257 (EGLDisplay)dpy_native 258 ); 259 return (jboolean)_returnValue; 260} 261 262/* const char * eglQueryString ( EGLDisplay dpy, EGLint name ) */ 263static jstring 264android_eglQueryString__Landroind_opengl_EGLDisplay_2I 265 (JNIEnv *_env, jobject _this, jobject dpy, jint name) { 266 const char* chars = (const char*) eglQueryString( 267 (EGLDisplay)fromEGLHandle(_env, egldisplayGetHandleID, dpy), 268 (EGLint)name 269 ); 270 return _env->NewStringUTF(chars); 271} 272/* EGLBoolean eglGetConfigs ( EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config ) */ 273static jboolean 274android_eglGetConfigs 275 (JNIEnv *_env, jobject _this, jobject dpy, jobjectArray configs_ref, jint configsOffset, jint config_size, jintArray num_config_ref, jint num_configOffset) { 276 jint _exception = 0; 277 const char * _exceptionType = NULL; 278 const char * _exceptionMessage = NULL; 279 EGLBoolean _returnValue = (EGLBoolean) 0; 280 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 281 jint _configsRemaining; 282 EGLConfig *configs = (EGLConfig *) 0; 283 EGLint *num_config_base = (EGLint *) 0; 284 jint _num_configRemaining; 285 EGLint *num_config = (EGLint *) 0; 286 287 if (!configs_ref) { 288 _exception = 1; 289 _exceptionType = "java/lang/IllegalArgumentException"; 290 _exceptionMessage = "configs == null"; 291 goto exit; 292 } 293 if (configsOffset < 0) { 294 _exception = 1; 295 _exceptionType = "java/lang/IllegalArgumentException"; 296 _exceptionMessage = "configsOffset < 0"; 297 goto exit; 298 } 299 _configsRemaining = _env->GetArrayLength(configs_ref) - configsOffset; 300 if (_configsRemaining < config_size) { 301 _exception = 1; 302 _exceptionType = "java/lang/IllegalArgumentException"; 303 _exceptionMessage = "length - configsOffset < config_size < needed"; 304 goto exit; 305 } 306 configs = new EGLConfig[_configsRemaining]; 307 308 if (!num_config_ref) { 309 _exception = 1; 310 _exceptionType = "java/lang/IllegalArgumentException"; 311 _exceptionMessage = "num_config == null"; 312 goto exit; 313 } 314 if (num_configOffset < 0) { 315 _exception = 1; 316 _exceptionType = "java/lang/IllegalArgumentException"; 317 _exceptionMessage = "num_configOffset < 0"; 318 goto exit; 319 } 320 _num_configRemaining = _env->GetArrayLength(num_config_ref) - num_configOffset; 321 num_config_base = (EGLint *) 322 _env->GetPrimitiveArrayCritical(num_config_ref, (jboolean *)0); 323 num_config = num_config_base + num_configOffset; 324 325 _returnValue = eglGetConfigs( 326 (EGLDisplay)dpy_native, 327 (EGLConfig *)configs, 328 (EGLint)config_size, 329 (EGLint *)num_config 330 ); 331 332exit: 333 if (num_config_base) { 334 _env->ReleasePrimitiveArrayCritical(num_config_ref, num_config_base, 335 _exception ? JNI_ABORT: 0); 336 } 337 if (configs) { 338 for (int i = 0; i < _configsRemaining; i++) { 339 jobject configs_new = toEGLHandle(_env, eglconfigClass, eglconfigConstructor, configs[i]); 340 _env->SetObjectArrayElement(configs_ref, i + configsOffset, configs_new); 341 } 342 delete[] configs; 343 } 344 if (_exception) { 345 jniThrowException(_env, _exceptionType, _exceptionMessage); 346 } 347 return (jboolean)_returnValue; 348} 349 350/* EGLBoolean eglChooseConfig ( EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config ) */ 351static jboolean 352android_eglChooseConfig 353 (JNIEnv *_env, jobject _this, jobject dpy, jintArray attrib_list_ref, jint attrib_listOffset, jobjectArray configs_ref, jint configsOffset, jint config_size, jintArray num_config_ref, jint num_configOffset) { 354 jint _exception = 0; 355 const char * _exceptionType = NULL; 356 const char * _exceptionMessage = NULL; 357 EGLBoolean _returnValue = (EGLBoolean) 0; 358 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 359 bool attrib_list_sentinel = false; 360 EGLint *attrib_list_base = (EGLint *) 0; 361 jint _attrib_listRemaining; 362 EGLint *attrib_list = (EGLint *) 0; 363 jint _configsRemaining; 364 EGLConfig *configs = (EGLConfig *) 0; 365 EGLint *num_config_base = (EGLint *) 0; 366 jint _num_configRemaining; 367 EGLint *num_config = (EGLint *) 0; 368 369 if (!attrib_list_ref) { 370 _exception = 1; 371 _exceptionType = "java/lang/IllegalArgumentException"; 372 _exceptionMessage = "attrib_list == null"; 373 goto exit; 374 } 375 if (attrib_listOffset < 0) { 376 _exception = 1; 377 _exceptionType = "java/lang/IllegalArgumentException"; 378 _exceptionMessage = "attrib_listOffset < 0"; 379 goto exit; 380 } 381 _attrib_listRemaining = _env->GetArrayLength(attrib_list_ref) - attrib_listOffset; 382 attrib_list_base = (EGLint *) 383 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 384 attrib_list = attrib_list_base + attrib_listOffset; 385 attrib_list_sentinel = false; 386 for (int i = _attrib_listRemaining - 1; i >= 0; i--) { 387 if (attrib_list[i] == EGL_NONE){ 388 attrib_list_sentinel = true; 389 break; 390 } 391 } 392 if (attrib_list_sentinel == false) { 393 _exception = 1; 394 _exceptionType = "java/lang/IllegalArgumentException"; 395 _exceptionMessage = "attrib_list must contain EGL_NONE!"; 396 goto exit; 397 } 398 399 if (!configs_ref) { 400 _exception = 1; 401 _exceptionType = "java/lang/IllegalArgumentException"; 402 _exceptionMessage = "configs == null"; 403 goto exit; 404 } 405 if (configsOffset < 0) { 406 _exception = 1; 407 _exceptionType = "java/lang/IllegalArgumentException"; 408 _exceptionMessage = "configsOffset < 0"; 409 goto exit; 410 } 411 _configsRemaining = _env->GetArrayLength(configs_ref) - configsOffset; 412 if (_configsRemaining < config_size) { 413 _exception = 1; 414 _exceptionType = "java/lang/IllegalArgumentException"; 415 _exceptionMessage = "length - configsOffset < config_size < needed"; 416 goto exit; 417 } 418 configs = new EGLConfig[_configsRemaining]; 419 420 if (!num_config_ref) { 421 _exception = 1; 422 _exceptionType = "java/lang/IllegalArgumentException"; 423 _exceptionMessage = "num_config == null"; 424 goto exit; 425 } 426 if (num_configOffset < 0) { 427 _exception = 1; 428 _exceptionType = "java/lang/IllegalArgumentException"; 429 _exceptionMessage = "num_configOffset < 0"; 430 goto exit; 431 } 432 _num_configRemaining = _env->GetArrayLength(num_config_ref) - num_configOffset; 433 if (_num_configRemaining < 1) { 434 _exception = 1; 435 _exceptionType = "java/lang/IllegalArgumentException"; 436 _exceptionMessage = "length - num_configOffset < 1 < needed"; 437 goto exit; 438 } 439 num_config_base = (EGLint *) 440 _env->GetPrimitiveArrayCritical(num_config_ref, (jboolean *)0); 441 num_config = num_config_base + num_configOffset; 442 443 _returnValue = eglChooseConfig( 444 (EGLDisplay)dpy_native, 445 (EGLint *)attrib_list, 446 (EGLConfig *)configs, 447 (EGLint)config_size, 448 (EGLint *)num_config 449 ); 450 451exit: 452 if (num_config_base) { 453 _env->ReleasePrimitiveArrayCritical(num_config_ref, num_config_base, 454 _exception ? JNI_ABORT: 0); 455 } 456 if (attrib_list_base) { 457 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 458 JNI_ABORT); 459 } 460 if (configs) { 461 for (int i = 0; i < _configsRemaining; i++) { 462 jobject configs_new = toEGLHandle(_env, eglconfigClass, eglconfigConstructor, configs[i]); 463 _env->SetObjectArrayElement(configs_ref, i + configsOffset, configs_new); 464 } 465 delete[] configs; 466 } 467 if (_exception) { 468 jniThrowException(_env, _exceptionType, _exceptionMessage); 469 } 470 return (jboolean)_returnValue; 471} 472 473/* EGLBoolean eglGetConfigAttrib ( EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value ) */ 474static jboolean 475android_eglGetConfigAttrib 476 (JNIEnv *_env, jobject _this, jobject dpy, jobject config, jint attribute, jintArray value_ref, jint offset) { 477 jint _exception = 0; 478 const char * _exceptionType = NULL; 479 const char * _exceptionMessage = NULL; 480 EGLBoolean _returnValue = (EGLBoolean) 0; 481 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 482 EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config); 483 EGLint *value_base = (EGLint *) 0; 484 jint _remaining; 485 EGLint *value = (EGLint *) 0; 486 487 if (!value_ref) { 488 _exception = 1; 489 _exceptionType = "java/lang/IllegalArgumentException"; 490 _exceptionMessage = "value == null"; 491 goto exit; 492 } 493 if (offset < 0) { 494 _exception = 1; 495 _exceptionType = "java/lang/IllegalArgumentException"; 496 _exceptionMessage = "offset < 0"; 497 goto exit; 498 } 499 _remaining = _env->GetArrayLength(value_ref) - offset; 500 if (_remaining < 1) { 501 _exception = 1; 502 _exceptionType = "java/lang/IllegalArgumentException"; 503 _exceptionMessage = "length - offset < 1 < needed"; 504 goto exit; 505 } 506 value_base = (EGLint *) 507 _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0); 508 value = value_base + offset; 509 510 _returnValue = eglGetConfigAttrib( 511 (EGLDisplay)dpy_native, 512 (EGLConfig)config_native, 513 (EGLint)attribute, 514 (EGLint *)value 515 ); 516 517exit: 518 if (value_base) { 519 _env->ReleasePrimitiveArrayCritical(value_ref, value_base, 520 _exception ? JNI_ABORT: 0); 521 } 522 if (_exception) { 523 jniThrowException(_env, _exceptionType, _exceptionMessage); 524 } 525 return (jboolean)_returnValue; 526} 527 528/* EGLSurface eglCreateWindowSurface ( EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list ) */ 529static jobject 530android_eglCreateWindowSurface 531 (JNIEnv *_env, jobject _this, jobject dpy, jobject config, jobject win, jintArray attrib_list_ref, jint offset) { 532 jint _exception = 0; 533 const char * _exceptionType = ""; 534 const char * _exceptionMessage = ""; 535 EGLSurface _returnValue = (EGLSurface) 0; 536 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 537 EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config); 538 int attrib_list_sentinel = 0; 539 EGLint *attrib_list_base = (EGLint *) 0; 540 jint _remaining; 541 EGLint *attrib_list = (EGLint *) 0; 542 android::sp<ANativeWindow> window; 543 544 if (!attrib_list_ref) { 545 _exception = 1; 546 _exceptionType = "java/lang/IllegalArgumentException"; 547 _exceptionMessage = "attrib_list == null"; 548 goto exit; 549 } 550 if (offset < 0) { 551 _exception = 1; 552 _exceptionType = "java/lang/IllegalArgumentException"; 553 _exceptionMessage = "offset < 0"; 554 goto exit; 555 } 556 if (win == NULL) { 557not_valid_surface: 558 _exception = 1; 559 _exceptionType = "java/lang/IllegalArgumentException"; 560 _exceptionMessage = "Make sure the SurfaceView or associated SurfaceHolder has a valid Surface"; 561 goto exit; 562 } 563 564 window = android::android_view_Surface_getNativeWindow(_env, win); 565 566 if (window == NULL) 567 goto not_valid_surface; 568 569 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 570 attrib_list_base = (EGLint *) 571 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 572 attrib_list = attrib_list_base + offset; 573 attrib_list_sentinel = 0; 574 for (int i = _remaining - 1; i >= 0; i--) { 575 if (*((EGLint*)(attrib_list + i)) == EGL_NONE){ 576 attrib_list_sentinel = 1; 577 break; 578 } 579 } 580 if (attrib_list_sentinel == 0) { 581 _exception = 1; 582 _exceptionType = "java/lang/IllegalArgumentException"; 583 _exceptionMessage = "attrib_list must contain EGL_NONE!"; 584 goto exit; 585 } 586 587 _returnValue = eglCreateWindowSurface( 588 (EGLDisplay)dpy_native, 589 (EGLConfig)config_native, 590 (EGLNativeWindowType)window.get(), 591 (EGLint *)attrib_list 592 ); 593 594exit: 595 if (attrib_list_base) { 596 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 597 JNI_ABORT); 598 } 599 if (_exception) { 600 jniThrowException(_env, _exceptionType, _exceptionMessage); 601 } 602 return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue); 603} 604 605/* EGLSurface eglCreateWindowSurface ( EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list ) */ 606static jobject 607android_eglCreateWindowSurfaceTexture 608 (JNIEnv *_env, jobject _this, jobject dpy, jobject config, jobject win, jintArray attrib_list_ref, jint offset) { 609 jint _exception = 0; 610 const char * _exceptionType = ""; 611 const char * _exceptionMessage = ""; 612 EGLSurface _returnValue = (EGLSurface) 0; 613 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 614 EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config); 615 int attrib_list_sentinel = 0; 616 EGLint *attrib_list_base = (EGLint *) 0; 617 jint _remaining; 618 EGLint *attrib_list = (EGLint *) 0; 619 android::sp<ANativeWindow> window; 620 android::sp<android::IGraphicBufferProducer> producer; 621 622 if (!attrib_list_ref) { 623 _exception = 1; 624 _exceptionType = "java/lang/IllegalArgumentException"; 625 _exceptionMessage = "attrib_list == null"; 626 goto exit; 627 } 628 if (offset < 0) { 629 _exception = 1; 630 _exceptionType = "java/lang/IllegalArgumentException"; 631 _exceptionMessage = "offset < 0"; 632 goto exit; 633 } 634 if (win == NULL) { 635not_valid_surface: 636 _exception = 1; 637 _exceptionType = "java/lang/IllegalArgumentException"; 638 _exceptionMessage = "Make sure the SurfaceView or associated SurfaceHolder has a valid Surface"; 639 goto exit; 640 } 641 producer = android::SurfaceTexture_getProducer(_env, win); 642 643 if (producer == NULL) 644 goto not_valid_surface; 645 646 window = new android::Surface(producer, true); 647 648 if (window == NULL) 649 goto not_valid_surface; 650 651 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 652 attrib_list_base = (EGLint *) 653 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 654 attrib_list = attrib_list_base + offset; 655 attrib_list_sentinel = 0; 656 for (int i = _remaining - 1; i >= 0; i--) { 657 if (*((EGLint*)(attrib_list + i)) == EGL_NONE){ 658 attrib_list_sentinel = 1; 659 break; 660 } 661 } 662 if (attrib_list_sentinel == 0) { 663 _exception = 1; 664 _exceptionType = "java/lang/IllegalArgumentException"; 665 _exceptionMessage = "attrib_list must contain EGL_NONE!"; 666 goto exit; 667 } 668 669 _returnValue = eglCreateWindowSurface( 670 (EGLDisplay)dpy_native, 671 (EGLConfig)config_native, 672 (EGLNativeWindowType)window.get(), 673 (EGLint *)attrib_list 674 ); 675 676exit: 677 if (attrib_list_base) { 678 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 679 JNI_ABORT); 680 } 681 if (_exception) { 682 jniThrowException(_env, _exceptionType, _exceptionMessage); 683 } 684 return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue); 685} 686/* EGLSurface eglCreatePbufferSurface ( EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list ) */ 687static jobject 688android_eglCreatePbufferSurface 689 (JNIEnv *_env, jobject _this, jobject dpy, jobject config, jintArray attrib_list_ref, jint offset) { 690 jint _exception = 0; 691 const char * _exceptionType = NULL; 692 const char * _exceptionMessage = NULL; 693 EGLSurface _returnValue = (EGLSurface) 0; 694 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 695 EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config); 696 bool attrib_list_sentinel = false; 697 EGLint *attrib_list_base = (EGLint *) 0; 698 jint _remaining; 699 EGLint *attrib_list = (EGLint *) 0; 700 701 if (!attrib_list_ref) { 702 _exception = 1; 703 _exceptionType = "java/lang/IllegalArgumentException"; 704 _exceptionMessage = "attrib_list == null"; 705 goto exit; 706 } 707 if (offset < 0) { 708 _exception = 1; 709 _exceptionType = "java/lang/IllegalArgumentException"; 710 _exceptionMessage = "offset < 0"; 711 goto exit; 712 } 713 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 714 attrib_list_base = (EGLint *) 715 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 716 attrib_list = attrib_list_base + offset; 717 attrib_list_sentinel = false; 718 for (int i = _remaining - 1; i >= 0; i--) { 719 if (attrib_list[i] == EGL_NONE){ 720 attrib_list_sentinel = true; 721 break; 722 } 723 } 724 if (attrib_list_sentinel == false) { 725 _exception = 1; 726 _exceptionType = "java/lang/IllegalArgumentException"; 727 _exceptionMessage = "attrib_list must contain EGL_NONE!"; 728 goto exit; 729 } 730 731 _returnValue = eglCreatePbufferSurface( 732 (EGLDisplay)dpy_native, 733 (EGLConfig)config_native, 734 (EGLint *)attrib_list 735 ); 736 737exit: 738 if (attrib_list_base) { 739 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 740 JNI_ABORT); 741 } 742 if (_exception) { 743 jniThrowException(_env, _exceptionType, _exceptionMessage); 744 } 745 return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue); 746} 747 748/* EGLSurface eglCreatePixmapSurface ( EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list ) */ 749static jobject 750android_eglCreatePixmapSurface 751 (JNIEnv *_env, jobject _this, jobject dpy, jobject config, jint pixmap, jintArray attrib_list_ref, jint offset) { 752 jniThrowException(_env, "java/lang/UnsupportedOperationException", 753 "eglCreatePixmapSurface"); 754 return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, (EGLSurface) 0); 755} 756 757/* EGLBoolean eglDestroySurface ( EGLDisplay dpy, EGLSurface surface ) */ 758static jboolean 759android_eglDestroySurface 760 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface) { 761 EGLBoolean _returnValue = (EGLBoolean) 0; 762 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 763 EGLSurface surface_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, surface); 764 765 _returnValue = eglDestroySurface( 766 (EGLDisplay)dpy_native, 767 (EGLSurface)surface_native 768 ); 769 return (jboolean)_returnValue; 770} 771 772/* EGLBoolean eglQuerySurface ( EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value ) */ 773static jboolean 774android_eglQuerySurface 775 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface, jint attribute, jintArray value_ref, jint offset) { 776 jint _exception = 0; 777 const char * _exceptionType = NULL; 778 const char * _exceptionMessage = NULL; 779 EGLBoolean _returnValue = (EGLBoolean) 0; 780 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 781 EGLSurface surface_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, surface); 782 EGLint *value_base = (EGLint *) 0; 783 jint _remaining; 784 EGLint *value = (EGLint *) 0; 785 786 if (!value_ref) { 787 _exception = 1; 788 _exceptionType = "java/lang/IllegalArgumentException"; 789 _exceptionMessage = "value == null"; 790 goto exit; 791 } 792 if (offset < 0) { 793 _exception = 1; 794 _exceptionType = "java/lang/IllegalArgumentException"; 795 _exceptionMessage = "offset < 0"; 796 goto exit; 797 } 798 _remaining = _env->GetArrayLength(value_ref) - offset; 799 if (_remaining < 1) { 800 _exception = 1; 801 _exceptionType = "java/lang/IllegalArgumentException"; 802 _exceptionMessage = "length - offset < 1 < needed"; 803 goto exit; 804 } 805 value_base = (EGLint *) 806 _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0); 807 value = value_base + offset; 808 809 _returnValue = eglQuerySurface( 810 (EGLDisplay)dpy_native, 811 (EGLSurface)surface_native, 812 (EGLint)attribute, 813 (EGLint *)value 814 ); 815 816exit: 817 if (value_base) { 818 _env->ReleasePrimitiveArrayCritical(value_ref, value_base, 819 _exception ? JNI_ABORT: 0); 820 } 821 if (_exception) { 822 jniThrowException(_env, _exceptionType, _exceptionMessage); 823 } 824 return (jboolean)_returnValue; 825} 826 827/* EGLBoolean eglBindAPI ( EGLenum api ) */ 828static jboolean 829android_eglBindAPI 830 (JNIEnv *_env, jobject _this, jint api) { 831 EGLBoolean _returnValue = (EGLBoolean) 0; 832 _returnValue = eglBindAPI( 833 (EGLenum)api 834 ); 835 return (jboolean)_returnValue; 836} 837 838/* EGLenum eglQueryAPI ( void ) */ 839static jint 840android_eglQueryAPI 841 (JNIEnv *_env, jobject _this) { 842 EGLenum _returnValue = (EGLenum) 0; 843 _returnValue = eglQueryAPI(); 844 return (jint)_returnValue; 845} 846 847/* EGLBoolean eglWaitClient ( void ) */ 848static jboolean 849android_eglWaitClient 850 (JNIEnv *_env, jobject _this) { 851 EGLBoolean _returnValue = (EGLBoolean) 0; 852 _returnValue = eglWaitClient(); 853 return (jboolean)_returnValue; 854} 855 856/* EGLBoolean eglReleaseThread ( void ) */ 857static jboolean 858android_eglReleaseThread 859 (JNIEnv *_env, jobject _this) { 860 EGLBoolean _returnValue = (EGLBoolean) 0; 861 _returnValue = eglReleaseThread(); 862 return (jboolean)_returnValue; 863} 864 865/* EGLSurface eglCreatePbufferFromClientBuffer ( EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list ) */ 866static jobject 867android_eglCreatePbufferFromClientBuffer 868 (JNIEnv *_env, jobject _this, jobject dpy, jint buftype, jlong buffer, jobject config, jintArray attrib_list_ref, jint offset) { 869 jint _exception = 0; 870 const char * _exceptionType = NULL; 871 const char * _exceptionMessage = NULL; 872 EGLSurface _returnValue = (EGLSurface) 0; 873 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 874 EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config); 875 bool attrib_list_sentinel = false; 876 EGLint *attrib_list_base = (EGLint *) 0; 877 jint _remaining; 878 EGLint *attrib_list = (EGLint *) 0; 879 880 if (!attrib_list_ref) { 881 _exception = 1; 882 _exceptionType = "java/lang/IllegalArgumentException"; 883 _exceptionMessage = "attrib_list == null"; 884 goto exit; 885 } 886 if (offset < 0) { 887 _exception = 1; 888 _exceptionType = "java/lang/IllegalArgumentException"; 889 _exceptionMessage = "offset < 0"; 890 goto exit; 891 } 892 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 893 attrib_list_base = (EGLint *) 894 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 895 attrib_list = attrib_list_base + offset; 896 attrib_list_sentinel = false; 897 for (int i = _remaining - 1; i >= 0; i--) { 898 if (attrib_list[i] == EGL_NONE){ 899 attrib_list_sentinel = true; 900 break; 901 } 902 } 903 if (attrib_list_sentinel == false) { 904 _exception = 1; 905 _exceptionType = "java/lang/IllegalArgumentException"; 906 _exceptionMessage = "attrib_list must contain EGL_NONE!"; 907 goto exit; 908 } 909 910 _returnValue = eglCreatePbufferFromClientBuffer( 911 (EGLDisplay)dpy_native, 912 (EGLenum)buftype, 913 reinterpret_cast<EGLClientBuffer>(buffer), 914 (EGLConfig)config_native, 915 (EGLint *)attrib_list 916 ); 917 918exit: 919 if (attrib_list_base) { 920 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 921 JNI_ABORT); 922 } 923 if (_exception) { 924 jniThrowException(_env, _exceptionType, _exceptionMessage); 925 } 926 return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue); 927} 928 929static jobject 930android_eglCreatePbufferFromClientBufferInt 931 (JNIEnv *_env, jobject _this, jobject dpy, jint buftype, jint buffer, jobject config, jintArray attrib_list_ref, jint offset) { 932 if(sizeof(void*) != sizeof(uint32_t)) { 933 jniThrowException(_env, "java/lang/UnsupportedOperationException", "eglCreatePbufferFromClientBuffer"); 934 return 0; 935 } 936 return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset); 937} 938 939/* EGLBoolean eglSurfaceAttrib ( EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value ) */ 940static jboolean 941android_eglSurfaceAttrib 942 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface, jint attribute, jint value) { 943 EGLBoolean _returnValue = (EGLBoolean) 0; 944 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 945 EGLSurface surface_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, surface); 946 947 _returnValue = eglSurfaceAttrib( 948 (EGLDisplay)dpy_native, 949 (EGLSurface)surface_native, 950 (EGLint)attribute, 951 (EGLint)value 952 ); 953 return (jboolean)_returnValue; 954} 955 956/* EGLBoolean eglBindTexImage ( EGLDisplay dpy, EGLSurface surface, EGLint buffer ) */ 957static jboolean 958android_eglBindTexImage 959 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface, jint buffer) { 960 EGLBoolean _returnValue = (EGLBoolean) 0; 961 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 962 EGLSurface surface_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, surface); 963 964 _returnValue = eglBindTexImage( 965 (EGLDisplay)dpy_native, 966 (EGLSurface)surface_native, 967 (EGLint)buffer 968 ); 969 return (jboolean)_returnValue; 970} 971 972/* EGLBoolean eglReleaseTexImage ( EGLDisplay dpy, EGLSurface surface, EGLint buffer ) */ 973static jboolean 974android_eglReleaseTexImage 975 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface, jint buffer) { 976 EGLBoolean _returnValue = (EGLBoolean) 0; 977 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 978 EGLSurface surface_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, surface); 979 980 _returnValue = eglReleaseTexImage( 981 (EGLDisplay)dpy_native, 982 (EGLSurface)surface_native, 983 (EGLint)buffer 984 ); 985 return (jboolean)_returnValue; 986} 987 988/* EGLBoolean eglSwapInterval ( EGLDisplay dpy, EGLint interval ) */ 989static jboolean 990android_eglSwapInterval 991 (JNIEnv *_env, jobject _this, jobject dpy, jint interval) { 992 EGLBoolean _returnValue = (EGLBoolean) 0; 993 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 994 995 _returnValue = eglSwapInterval( 996 (EGLDisplay)dpy_native, 997 (EGLint)interval 998 ); 999 return (jboolean)_returnValue; 1000} 1001 1002/* EGLContext eglCreateContext ( EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list ) */ 1003static jobject 1004android_eglCreateContext 1005 (JNIEnv *_env, jobject _this, jobject dpy, jobject config, jobject share_context, jintArray attrib_list_ref, jint offset) { 1006 jint _exception = 0; 1007 const char * _exceptionType = NULL; 1008 const char * _exceptionMessage = NULL; 1009 EGLContext _returnValue = (EGLContext) 0; 1010 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 1011 EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config); 1012 EGLContext share_context_native = (EGLContext) fromEGLHandle(_env, eglcontextGetHandleID, share_context); 1013 bool attrib_list_sentinel = false; 1014 EGLint *attrib_list_base = (EGLint *) 0; 1015 jint _remaining; 1016 EGLint *attrib_list = (EGLint *) 0; 1017 1018 if (!attrib_list_ref) { 1019 _exception = 1; 1020 _exceptionType = "java/lang/IllegalArgumentException"; 1021 _exceptionMessage = "attrib_list == null"; 1022 goto exit; 1023 } 1024 if (offset < 0) { 1025 _exception = 1; 1026 _exceptionType = "java/lang/IllegalArgumentException"; 1027 _exceptionMessage = "offset < 0"; 1028 goto exit; 1029 } 1030 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 1031 attrib_list_base = (EGLint *) 1032 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 1033 attrib_list = attrib_list_base + offset; 1034 attrib_list_sentinel = false; 1035 for (int i = _remaining - 1; i >= 0; i--) { 1036 if (attrib_list[i] == EGL_NONE){ 1037 attrib_list_sentinel = true; 1038 break; 1039 } 1040 } 1041 if (attrib_list_sentinel == false) { 1042 _exception = 1; 1043 _exceptionType = "java/lang/IllegalArgumentException"; 1044 _exceptionMessage = "attrib_list must contain EGL_NONE!"; 1045 goto exit; 1046 } 1047 1048 _returnValue = eglCreateContext( 1049 (EGLDisplay)dpy_native, 1050 (EGLConfig)config_native, 1051 (EGLContext)share_context_native, 1052 (EGLint *)attrib_list 1053 ); 1054 1055exit: 1056 if (attrib_list_base) { 1057 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 1058 JNI_ABORT); 1059 } 1060 if (_exception) { 1061 jniThrowException(_env, _exceptionType, _exceptionMessage); 1062 } 1063 return toEGLHandle(_env, eglcontextClass, eglcontextConstructor, _returnValue); 1064} 1065 1066/* EGLBoolean eglDestroyContext ( EGLDisplay dpy, EGLContext ctx ) */ 1067static jboolean 1068android_eglDestroyContext 1069 (JNIEnv *_env, jobject _this, jobject dpy, jobject ctx) { 1070 EGLBoolean _returnValue = (EGLBoolean) 0; 1071 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 1072 EGLContext ctx_native = (EGLContext) fromEGLHandle(_env, eglcontextGetHandleID, ctx); 1073 1074 _returnValue = eglDestroyContext( 1075 (EGLDisplay)dpy_native, 1076 (EGLContext)ctx_native 1077 ); 1078 return (jboolean)_returnValue; 1079} 1080 1081/* EGLBoolean eglMakeCurrent ( EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx ) */ 1082static jboolean 1083android_eglMakeCurrent 1084 (JNIEnv *_env, jobject _this, jobject dpy, jobject draw, jobject read, jobject ctx) { 1085 EGLBoolean _returnValue = (EGLBoolean) 0; 1086 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 1087 EGLSurface draw_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, draw); 1088 EGLSurface read_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, read); 1089 EGLContext ctx_native = (EGLContext) fromEGLHandle(_env, eglcontextGetHandleID, ctx); 1090 1091 _returnValue = eglMakeCurrent( 1092 (EGLDisplay)dpy_native, 1093 (EGLSurface)draw_native, 1094 (EGLSurface)read_native, 1095 (EGLContext)ctx_native 1096 ); 1097 return (jboolean)_returnValue; 1098} 1099 1100/* EGLContext eglGetCurrentContext ( void ) */ 1101static jobject 1102android_eglGetCurrentContext 1103 (JNIEnv *_env, jobject _this) { 1104 EGLContext _returnValue = (EGLContext) 0; 1105 _returnValue = eglGetCurrentContext(); 1106 return toEGLHandle(_env, eglcontextClass, eglcontextConstructor, _returnValue); 1107} 1108 1109/* EGLSurface eglGetCurrentSurface ( EGLint readdraw ) */ 1110static jobject 1111android_eglGetCurrentSurface 1112 (JNIEnv *_env, jobject _this, jint readdraw) { 1113 EGLSurface _returnValue = (EGLSurface) 0; 1114 _returnValue = eglGetCurrentSurface( 1115 (EGLint)readdraw 1116 ); 1117 return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue); 1118} 1119 1120/* EGLDisplay eglGetCurrentDisplay ( void ) */ 1121static jobject 1122android_eglGetCurrentDisplay 1123 (JNIEnv *_env, jobject _this) { 1124 EGLDisplay _returnValue = (EGLDisplay) 0; 1125 _returnValue = eglGetCurrentDisplay(); 1126 return toEGLHandle(_env, egldisplayClass, egldisplayConstructor, _returnValue); 1127} 1128 1129/* EGLBoolean eglQueryContext ( EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value ) */ 1130static jboolean 1131android_eglQueryContext 1132 (JNIEnv *_env, jobject _this, jobject dpy, jobject ctx, jint attribute, jintArray value_ref, jint offset) { 1133 jint _exception = 0; 1134 const char * _exceptionType = NULL; 1135 const char * _exceptionMessage = NULL; 1136 EGLBoolean _returnValue = (EGLBoolean) 0; 1137 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 1138 EGLContext ctx_native = (EGLContext) fromEGLHandle(_env, eglcontextGetHandleID, ctx); 1139 EGLint *value_base = (EGLint *) 0; 1140 jint _remaining; 1141 EGLint *value = (EGLint *) 0; 1142 1143 if (!value_ref) { 1144 _exception = 1; 1145 _exceptionType = "java/lang/IllegalArgumentException"; 1146 _exceptionMessage = "value == null"; 1147 goto exit; 1148 } 1149 if (offset < 0) { 1150 _exception = 1; 1151 _exceptionType = "java/lang/IllegalArgumentException"; 1152 _exceptionMessage = "offset < 0"; 1153 goto exit; 1154 } 1155 _remaining = _env->GetArrayLength(value_ref) - offset; 1156 if (_remaining < 1) { 1157 _exception = 1; 1158 _exceptionType = "java/lang/IllegalArgumentException"; 1159 _exceptionMessage = "length - offset < 1 < needed"; 1160 goto exit; 1161 } 1162 value_base = (EGLint *) 1163 _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0); 1164 value = value_base + offset; 1165 1166 _returnValue = eglQueryContext( 1167 (EGLDisplay)dpy_native, 1168 (EGLContext)ctx_native, 1169 (EGLint)attribute, 1170 (EGLint *)value 1171 ); 1172 1173exit: 1174 if (value_base) { 1175 _env->ReleasePrimitiveArrayCritical(value_ref, value_base, 1176 _exception ? JNI_ABORT: 0); 1177 } 1178 if (_exception) { 1179 jniThrowException(_env, _exceptionType, _exceptionMessage); 1180 } 1181 return (jboolean)_returnValue; 1182} 1183 1184/* EGLBoolean eglWaitGL ( void ) */ 1185static jboolean 1186android_eglWaitGL 1187 (JNIEnv *_env, jobject _this) { 1188 EGLBoolean _returnValue = (EGLBoolean) 0; 1189 _returnValue = eglWaitGL(); 1190 return (jboolean)_returnValue; 1191} 1192 1193/* EGLBoolean eglWaitNative ( EGLint engine ) */ 1194static jboolean 1195android_eglWaitNative 1196 (JNIEnv *_env, jobject _this, jint engine) { 1197 EGLBoolean _returnValue = (EGLBoolean) 0; 1198 _returnValue = eglWaitNative( 1199 (EGLint)engine 1200 ); 1201 return (jboolean)_returnValue; 1202} 1203 1204/* EGLBoolean eglSwapBuffers ( EGLDisplay dpy, EGLSurface surface ) */ 1205static jboolean 1206android_eglSwapBuffers 1207 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface) { 1208 EGLBoolean _returnValue = (EGLBoolean) 0; 1209 EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy); 1210 EGLSurface surface_native = (EGLSurface) fromEGLHandle(_env, eglsurfaceGetHandleID, surface); 1211 1212 _returnValue = eglSwapBuffers( 1213 (EGLDisplay)dpy_native, 1214 (EGLSurface)surface_native 1215 ); 1216 return (jboolean)_returnValue; 1217} 1218 1219/* EGLBoolean eglCopyBuffers ( EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target ) */ 1220static jboolean 1221android_eglCopyBuffers 1222 (JNIEnv *_env, jobject _this, jobject dpy, jobject surface, jint target) { 1223 jniThrowException(_env, "java/lang/UnsupportedOperationException", 1224 "eglCopyBuffers"); 1225 return (EGLBoolean) 0; 1226} 1227 1228static const char *classPathName = "android/opengl/EGL14"; 1229 1230static JNINativeMethod methods[] = { 1231{"_nativeClassInit", "()V", (void*)nativeClassInit }, 1232{"eglGetError", "()I", (void *) android_eglGetError }, 1233{"eglGetDisplay", "(I)Landroid/opengl/EGLDisplay;", (void *) android_eglGetDisplayInt }, 1234{"eglGetDisplay", "(J)Landroid/opengl/EGLDisplay;", (void *) android_eglGetDisplay }, 1235{"eglInitialize", "(Landroid/opengl/EGLDisplay;[II[II)Z", (void *) android_eglInitialize }, 1236{"eglTerminate", "(Landroid/opengl/EGLDisplay;)Z", (void *) android_eglTerminate }, 1237{"eglQueryString", "(Landroid/opengl/EGLDisplay;I)Ljava/lang/String;", (void *) android_eglQueryString__Landroind_opengl_EGLDisplay_2I }, 1238{"eglGetConfigs", "(Landroid/opengl/EGLDisplay;[Landroid/opengl/EGLConfig;II[II)Z", (void *) android_eglGetConfigs }, 1239{"eglChooseConfig", "(Landroid/opengl/EGLDisplay;[II[Landroid/opengl/EGLConfig;II[II)Z", (void *) android_eglChooseConfig }, 1240{"eglGetConfigAttrib", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Z", (void *) android_eglGetConfigAttrib }, 1241{"_eglCreateWindowSurface", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/lang/Object;[II)Landroid/opengl/EGLSurface;", (void *) android_eglCreateWindowSurface }, 1242{"_eglCreateWindowSurfaceTexture", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/lang/Object;[II)Landroid/opengl/EGLSurface;", (void *) android_eglCreateWindowSurfaceTexture }, 1243{"eglCreatePbufferSurface", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;", (void *) android_eglCreatePbufferSurface }, 1244{"eglCreatePixmapSurface", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Landroid/opengl/EGLSurface;", (void *) android_eglCreatePixmapSurface }, 1245{"eglDestroySurface", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z", (void *) android_eglDestroySurface }, 1246{"eglQuerySurface", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I[II)Z", (void *) android_eglQuerySurface }, 1247{"eglBindAPI", "(I)Z", (void *) android_eglBindAPI }, 1248{"eglQueryAPI", "()I", (void *) android_eglQueryAPI }, 1249{"eglWaitClient", "()Z", (void *) android_eglWaitClient }, 1250{"eglReleaseThread", "()Z", (void *) android_eglReleaseThread }, 1251{"eglCreatePbufferFromClientBuffer", "(Landroid/opengl/EGLDisplay;IILandroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;", (void *) android_eglCreatePbufferFromClientBufferInt }, 1252{"eglCreatePbufferFromClientBuffer", "(Landroid/opengl/EGLDisplay;IJLandroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;", (void *) android_eglCreatePbufferFromClientBuffer }, 1253{"eglSurfaceAttrib", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;II)Z", (void *) android_eglSurfaceAttrib }, 1254{"eglBindTexImage", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z", (void *) android_eglBindTexImage }, 1255{"eglReleaseTexImage", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z", (void *) android_eglReleaseTexImage }, 1256{"eglSwapInterval", "(Landroid/opengl/EGLDisplay;I)Z", (void *) android_eglSwapInterval }, 1257{"eglCreateContext", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Landroid/opengl/EGLContext;[II)Landroid/opengl/EGLContext;", (void *) android_eglCreateContext }, 1258{"eglDestroyContext", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;)Z", (void *) android_eglDestroyContext }, 1259{"eglMakeCurrent", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;Landroid/opengl/EGLSurface;Landroid/opengl/EGLContext;)Z", (void *) android_eglMakeCurrent }, 1260{"eglGetCurrentContext", "()Landroid/opengl/EGLContext;", (void *) android_eglGetCurrentContext }, 1261{"eglGetCurrentSurface", "(I)Landroid/opengl/EGLSurface;", (void *) android_eglGetCurrentSurface }, 1262{"eglGetCurrentDisplay", "()Landroid/opengl/EGLDisplay;", (void *) android_eglGetCurrentDisplay }, 1263{"eglQueryContext", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;I[II)Z", (void *) android_eglQueryContext }, 1264{"eglWaitGL", "()Z", (void *) android_eglWaitGL }, 1265{"eglWaitNative", "(I)Z", (void *) android_eglWaitNative }, 1266{"eglSwapBuffers", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z", (void *) android_eglSwapBuffers }, 1267{"eglCopyBuffers", "(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z", (void *) android_eglCopyBuffers }, 1268}; 1269 1270int register_android_opengl_jni_EGL14(JNIEnv *_env) 1271{ 1272 int err; 1273 err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods)); 1274 return err; 1275} 1276