1/* EGLSurface eglCreatePbufferFromClientBuffer ( EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list ) */
2static jobject
3android_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->GetPrimitiveArrayCritical(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
54exit:
55    if (attrib_list_base) {
56        _env->ReleasePrimitiveArrayCritical(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
65static jobject
66android_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
75