• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* EGLSurface eglCreatePbufferFromClientBuffer ( EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list ) */
2 static jobject
android_eglCreatePbufferFromClientBuffer(JNIEnv * _env,jobject _this,jobject dpy,jint buftype,jlong buffer,jobject config,jintArray attrib_list_ref,jint offset)3 android_eglCreatePbufferFromClientBuffer
4   (JNIEnv *_env, jobject _this, jobject dpy, jint buftype, jlong buffer, jobject config, jintArray attrib_list_ref, jint offset) {
5     jint _exception = 0;
6     const char * _exceptionType = NULL;
7     const char * _exceptionMessage = NULL;
8     EGLSurface _returnValue = (EGLSurface) 0;
9     EGLDisplay dpy_native = (EGLDisplay) fromEGLHandle(_env, egldisplayGetHandleID, dpy);
10     EGLConfig config_native = (EGLConfig) fromEGLHandle(_env, eglconfigGetHandleID, config);
11     bool attrib_list_sentinel = false;
12     EGLint *attrib_list_base = (EGLint *) 0;
13     jint _remaining;
14     EGLint *attrib_list = (EGLint *) 0;
15 
16     if (attrib_list_ref) {
17         if (offset < 0) {
18             _exception = 1;
19             _exceptionType = "java/lang/IllegalArgumentException";
20             _exceptionMessage = "offset < 0";
21             goto exit;
22         }
23         _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
24         attrib_list_base = (EGLint *)
25             _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
26         attrib_list = attrib_list_base + offset;
27         attrib_list_sentinel = false;
28         for (int i = _remaining - 1; i >= 0; i--)  {
29             if (attrib_list[i] == EGL_NONE){
30                 attrib_list_sentinel = true;
31                 break;
32             }
33         }
34         if (attrib_list_sentinel == false) {
35             _exception = 1;
36             _exceptionType = "java/lang/IllegalArgumentException";
37             _exceptionMessage = "attrib_list must contain EGL_NONE!";
38             goto exit;
39         }
40     }
41 
42     _returnValue = eglCreatePbufferFromClientBuffer(
43         (EGLDisplay)dpy_native,
44         (EGLenum)buftype,
45         reinterpret_cast<EGLClientBuffer>(buffer),
46         (EGLConfig)config_native,
47         (EGLint *)attrib_list
48     );
49 
50 exit:
51     if (attrib_list_base) {
52         _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
53             JNI_ABORT);
54     }
55     if (_exception) {
56         jniThrowException(_env, _exceptionType, _exceptionMessage);
57         return nullptr;
58     }
59     return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue);
60 }
61 
62 static jobject
android_eglCreatePbufferFromClientBufferInt(JNIEnv * _env,jobject _this,jobject dpy,jint buftype,jint buffer,jobject config,jintArray attrib_list_ref,jint offset)63 android_eglCreatePbufferFromClientBufferInt
64   (JNIEnv *_env, jobject _this, jobject dpy, jint buftype, jint buffer, jobject config, jintArray attrib_list_ref, jint offset) {
65     if(sizeof(void*) != sizeof(uint32_t)) {
66         jniThrowException(_env, "java/lang/UnsupportedOperationException", "eglCreatePbufferFromClientBuffer");
67         return 0;
68     }
69     return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset);
70 }
71