155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic void
355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform__III_3II_3II_3II_3BI
455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jintArray length_ref, jint lengthOffset, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset, jbyteArray name_ref, jint nameOffset) {
555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _exception = 0;
655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionType;
755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionMessage;
855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length_base = (GLsizei *) 0;
955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthRemaining;
1055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length = (GLsizei *) 0;
1155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size_base = (GLint *) 0;
1255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
1355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
1455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type_base = (GLenum *) 0;
1555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
1655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
1755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char *name_base = (char *) 0;
1855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _nameRemaining;
1955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char *name = (char *) 0;
2055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
21b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos    if (length_ref) {
22b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos        if (lengthOffset < 0) {
23b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos            _exception = 1;
24b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
25b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos            _exceptionMessage = "lengthOffset < 0";
26b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos            goto exit;
27b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos        }
28b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
29b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos        length_base = (GLsizei *)
30b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
31b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos        length = length_base + lengthOffset;
3255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
3355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
3455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!size_ref) {
3555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
3655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
3755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "size == null";
3855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
3955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
4055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (sizeOffset < 0) {
4155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
4255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
4355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "sizeOffset < 0";
4455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
4555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
4655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
4755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size_base = (GLint *)
484e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
4955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size = size_base + sizeOffset;
5055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
5155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!type_ref) {
5255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
5355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
5455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "type == null";
5555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
5655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
5755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (typeOffset < 0) {
5855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
5955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
6055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "typeOffset < 0";
6155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
6255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
6355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
6455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type_base = (GLenum *)
654e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
6655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type = type_base + typeOffset;
6755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
6855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!name_ref) {
6955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
7055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
7155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "name == null";
7255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
7355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
7455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (nameOffset < 0) {
7555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
7655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
7755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "nameOffset < 0";
7855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
7955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
8055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
8155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    name_base = (char *)
824e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->GetByteArrayElements(name_ref, (jboolean *)0);
8355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    name = name_base + nameOffset;
8455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
8555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveUniform(
8655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
8755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
8855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)bufsize,
8955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei *)length,
9055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
9155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
9255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)name
9355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
9455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
9555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferexit:
9655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (name_base) {
974e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
9855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
9955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
10055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type_base) {
1014e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
10255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
10355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
10455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size_base) {
1054e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
10655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
10755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
10855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (length_base) {
1094e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
11055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
11155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
11255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_exception) {
11355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, _exceptionType, _exceptionMessage);
11455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
11555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
11655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
11755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
11855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic void
11955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
12055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
1214e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
12255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthBufferOffset = (jint) 0;
1234e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
12455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeBufferOffset = (jint) 0;
1254e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
12655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeBufferOffset = (jint) 0;
12755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthRemaining;
12855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length = (GLsizei *) 0;
12955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
13055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
13155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
13255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
13355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
1344e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
1354e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
1364e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
13755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (length == NULL) {
1384e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
13955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
14055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
14155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size == NULL) {
1424e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
14355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        size = (GLint *) (_sizeBase + _sizeBufferOffset);
14455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
14555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type == NULL) {
1464e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
14755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        type = (GLenum *) (_typeBase + _typeBufferOffset);
14855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
14955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveUniform(
15055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
15155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
15255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)bufsize,
15355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei *)length,
15455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
15555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
156d8f096114da14f9793d4cca6022ca41b70ab9daaAshok Bhat        reinterpret_cast<char *>(name)
15755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
15855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_typeArray) {
1594e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
16055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
16155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_sizeArray) {
1624e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
16355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
16455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_lengthArray) {
1654e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
16655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
16755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
16855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
16955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
17055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic jstring
17155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform1
17255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
17355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _exception = 0;
17455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionType;
17555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionMessage;
17655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
17755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size_base = (GLint *) 0;
17855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
17955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
18055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
18155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type_base = (GLenum *) 0;
18255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
18355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
18455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
18555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jstring result = 0;
18655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
18755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint len = 0;
18855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetProgramiv((GLuint)program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
18955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!len) {
19055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return _env->NewStringUTF("");
19155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
19255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char* buf = (char*) malloc(len);
19355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
19455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf == NULL) {
19555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
19655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return NULL;
19755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
19855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
19955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!size_ref) {
20055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
20155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
20255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "size == null";
20355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
20455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
20555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (sizeOffset < 0) {
20655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
20755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
20855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "sizeOffset < 0";
20955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
21055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
21155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
21255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size_base = (GLint *)
2134e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
21455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size = size_base + sizeOffset;
21555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
21655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!type_ref) {
21755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
21855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
21955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "type == null";
22055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
22155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
22255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (typeOffset < 0) {
22355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
22455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
22555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "typeOffset < 0";
22655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
22755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
22855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
22955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type_base = (GLenum *)
2304e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
23155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type = type_base + typeOffset;
23255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
23355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveUniform(
23455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
23555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
23655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)len,
23755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        NULL,
23855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
23955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
24055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)buf
24155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
24255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
24355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferexit:
24455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type_base) {
2454e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
24655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
24755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
24855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size_base) {
2494e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
25055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
25155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
25255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_exception != 1) {
25355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        result = _env->NewStringUTF(buf);
25455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
25555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf) {
25655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        free(buf);
25755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
25855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_exception) {
25955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, _exceptionType, _exceptionMessage);
26055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
26155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (result == 0) {
26255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        result = _env->NewStringUTF("");
26355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
26455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    return result;
26555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
26655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
26755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
26855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic jstring
26955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform2
27055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
2714e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
27255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeBufferOffset = (jint) 0;
2734e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
27455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeBufferOffset = (jint) 0;
27555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
27655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
27755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
27855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
27955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
28055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jstring result = 0;
28155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint len = 0;
28255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetProgramiv((GLuint)program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
28355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!len) {
28455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return _env->NewStringUTF("");
28555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
28655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char* buf = (char*) malloc(len);
28755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
28855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf == NULL) {
28955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
29055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return NULL;
29155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
29255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
2934e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
2944e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
29555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
29655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size == NULL) {
2974e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
29855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        size = (GLint *) (_sizeBase + _sizeBufferOffset);
29955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
30055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type == NULL) {
3014e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
30255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        type = (GLenum *) (_typeBase + _typeBufferOffset);
30355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
30455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveUniform(
30555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
30655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
30755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        len,
30855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        NULL,
30955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
31055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
31155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)buf
31255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
31355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
31455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_typeArray) {
3154e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
31655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
31755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_sizeArray) {
3184e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
31955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
32055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    result = _env->NewStringUTF(buf);
32155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf) {
32255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        free(buf);
32355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
32455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    return result;
32555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
326