• 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         _exception = 1;
18         _exceptionType = "java/lang/IllegalArgumentException";
19         _exceptionMessage = "attrib_list == null";
20         goto exit;
21     }
22     if (offset < 0) {
23         _exception = 1;
24         _exceptionType = "java/lang/IllegalArgumentException";
25         _exceptionMessage = "offset < 0";
26         goto exit;
27     }
28     _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
29     attrib_list_base = (EGLint *)
30         _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
31     attrib_list = attrib_list_base + offset;
32     attrib_list_sentinel = false;
33     for (int i = _remaining - 1; i >= 0; i--)  {
34         if (attrib_list[i] == EGL_NONE){
35             attrib_list_sentinel = true;
36             break;
37         }
38     }
39     if (attrib_list_sentinel == false) {
40         _exception = 1;
41         _exceptionType = "java/lang/IllegalArgumentException";
42         _exceptionMessage = "attrib_list must contain EGL_NONE!";
43         goto exit;
44     }
45 
46     _returnValue = eglCreatePbufferFromClientBuffer(
47         (EGLDisplay)dpy_native,
48         (EGLenum)buftype,
49         reinterpret_cast<EGLClientBuffer>(buffer),
50         (EGLConfig)config_native,
51         (EGLint *)attrib_list
52     );
53 
54 exit:
55     if (attrib_list_base) {
56         _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
57             JNI_ABORT);
58     }
59     if (_exception) {
60         jniThrowException(_env, _exceptionType, _exceptionMessage);
61     }
62     return toEGLHandle(_env, eglsurfaceClass, eglsurfaceConstructor, _returnValue);
63 }
64 
65 static jobject
android_eglCreatePbufferFromClientBufferInt(JNIEnv * _env,jobject _this,jobject dpy,jint buftype,jint buffer,jobject config,jintArray attrib_list_ref,jint offset)66 android_eglCreatePbufferFromClientBufferInt
67   (JNIEnv *_env, jobject _this, jobject dpy, jint buftype, jint buffer, jobject config, jintArray attrib_list_ref, jint offset) {
68     if(sizeof(void*) != sizeof(uint32_t)) {
69         jniThrowException(_env, "java/lang/UnsupportedOperationException", "eglCreatePbufferFromClientBuffer");
70         return 0;
71     }
72     return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset);
73 }
74