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